mirror of
https://github.com/vercel/commerce.git
synced 2025-04-29 22:37:51 +00:00
commit 408d6eb7583470eb84fd0e85895f97dad864b981 Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 21:28:45 2024 -0500 added content commit af62089872de543c8f741c3092f431a8b790feec Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 20:43:02 2024 -0500 fixed product recommendations commit 5c921be7b1eab4ea3b4acc922d2bde842bb0c5c8 Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 20:33:28 2024 -0500 fixed cart total commit 63e150e822ab0b4f7690221ee5d1eafaaf5f930a Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 20:14:47 2024 -0500 fixed update cart commit 85bd6bee403e19c7b3f66c0d6e938a8432cee62b Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 19:00:42 2024 -0500 remove unnecessary cookie usage from sfcc calls commit 2401bed81143508993fdd403d9d5a419ac8904e5 Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 18:55:39 2024 -0500 fixed issue with broken getCart commit f8cc8c3c3c1c64d7cf4b69a60ed87497ad626e65 Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 18:23:03 2024 -0500 updated lib/sfcc for guest tokens commit bd6129e3ca15125c87c8186e9ff27d835fb2f683 Author: Alex <alex.hawley@vercel.com> Date: Wed Sep 4 15:19:40 2024 -0500 added now required channel_id commit eeb805fd11219d8512c1cadefe047019d63d4b60 Author: Alex <alex.hawley@vercel.com> Date: Tue Sep 3 17:43:27 2024 -0500 split out scapi commit e4f3bb1c827137245367152c1ff0401db76e7082 Author: Alex <alex.hawley@vercel.com> Date: Tue Sep 3 16:55:11 2024 -0500 carried over sfcc work commit 2616869f56f330f44ad3dfff9ad488eaaf1dbe51 Author: Alex <alex.hawley@vercel.com> Date: Thu Aug 22 15:03:30 2024 -0400 initial sfcc work
206 lines
12 KiB
TypeScript
206 lines
12 KiB
TypeScript
import { Menu, Page } from './types';
|
|
|
|
/**
|
|
* NOTE: This function returns a hardcoded menu structure for demonstration purposes.
|
|
* In a production application, the engineering team should update to retrieve menu content from
|
|
* a CMS or other data source that is appropriate for the project.
|
|
*/
|
|
export function getMenu(handle: string): Menu[] {
|
|
return getMenus().filter((menu) => menu.handle === handle)[0]?.links || [];
|
|
}
|
|
|
|
/**
|
|
* NOTE: This function currently returns a hardcoded menu structure for demonstration purposes.
|
|
* This should be replaced in a fetch to a CMS or other data source that is appropriate for the project.
|
|
*/
|
|
export function getMenus() {
|
|
return [
|
|
{
|
|
handle: 'next-js-frontend-footer-menu',
|
|
links: [
|
|
{
|
|
title: 'Home',
|
|
path: '/'
|
|
},
|
|
{
|
|
title: 'About',
|
|
path: '/about'
|
|
},
|
|
{
|
|
title: 'Terms & Conditions',
|
|
path: '/terms-conditions'
|
|
},
|
|
{
|
|
title: 'Shipping & Return Policy',
|
|
path: '/shipping-return-policy'
|
|
},
|
|
{
|
|
title: 'Privacy Policy',
|
|
path: '/privacy-policy'
|
|
},
|
|
{
|
|
title: 'FAQ',
|
|
path: '/freqently-asked-questions'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
handle: 'next-js-frontend-header-menu',
|
|
links: [
|
|
{
|
|
title: 'New Arrivals',
|
|
path: '/search/newarrivals'
|
|
},
|
|
{
|
|
title: 'Women',
|
|
path: '/search/womens'
|
|
},
|
|
{
|
|
title: 'Men',
|
|
path: '/search/mens'
|
|
}
|
|
]
|
|
}
|
|
];
|
|
}
|
|
|
|
/**
|
|
* NOTE: This function currently returns a hardcoded page for demonstration purposes.
|
|
* This should be replaced in a fetch to a CMS or other data source that is appropriate for the project.
|
|
*/
|
|
export function getPage(handle: string): Page | undefined {
|
|
return getPages().find((page) => page.handle === handle);
|
|
}
|
|
|
|
/**
|
|
* NOTE: This function currently returns hardcoded pages for demonstration purposes.
|
|
* This should be replaced in a fetch to a CMS or other data source that is appropriate for the project.
|
|
*/
|
|
export function getPages(): Page[] {
|
|
return [homePage, aboutPage, termsPage, shippingPage, privacyPage, faqPage];
|
|
}
|
|
|
|
/*
|
|
* For demonstration purposes, we've opted to hardcode the content for several pages in this project.
|
|
* In a real-world scenario, this content would typically be managed through a CMS to allow for
|
|
* easier updates and content management by non-developers. This hardcoding approach simplifies
|
|
* the setup for now but would be replaced with a CMS in a production environment.
|
|
*/
|
|
const homePage = {
|
|
id: 'home',
|
|
title: 'Acme Store',
|
|
handle: '',
|
|
body: ``,
|
|
bodySummary:
|
|
'High-performance ecommerce store built with Next.js, Vercel, and Salesforce Commerce Cloud.',
|
|
seo: {
|
|
title: 'Acme Store',
|
|
description:
|
|
'High-performance ecommerce store built with Next.js, Vercel, and Salesforce Commerce Cloud.'
|
|
},
|
|
createdAt: '2024-09-20T20:15:06Z',
|
|
updatedAt: '2024-09-20T20:15:06Z'
|
|
};
|
|
|
|
const aboutPage = {
|
|
id: 'about',
|
|
title: 'About',
|
|
handle: 'about',
|
|
body: `<div className="prose mx-auto max-w-6xl text-base leading-7 text-black prose-headings:mt-8 prose-headings:font-semibold prose-headings:tracking-wide prose-headings:text-black prose-h1:text-5xl prose-h2:text-4xl prose-h3:text-3xl prose-h4:text-2xl prose-h5:text-xl prose-h6:text-lg prose-a:text-black prose-a:underline hover:prose-a:text-neutral-300 prose-strong:text-black prose-ol:mt-8 prose-ol:list-decimal prose-ol:pl-6 prose-ul:mt-8 prose-ul:list-disc prose-ul:pl-6 dark:text-white dark:prose-headings:text-white dark:prose-a:text-white dark:prose-strong:text-white mb-8"><p>This website is built with <a href="https://nextjs.org/commerce" title="Next.js Commerce">Next.js Commerce</a>, which is a ecommerce template for creating a headless Salesforce Commerce Cloud storefront.</p>
|
|
<p>Support for real-world commerce features including:</p>
|
|
<ul>
|
|
<li>Out of stocks</li>
|
|
<li>Order history</li>
|
|
<li>Order status</li>
|
|
<li>Cross variant / option availability (aka. Amazon style)</li>
|
|
<li><a href="https://demo.vercel.store/product/acme-webcam-cover" title="Example of a hidden product in Next.js Commerce">Hidden products</a></li>
|
|
<li>Dynamically driven features via Salesforce Commerce Cloud (ie. collections, products, recommendations, etc.)</li>
|
|
</li>
|
|
<li>And more!</li>
|
|
</ul>
|
|
<p>This template also allows us to highlight newer Next.js features including:</p>
|
|
<ul>
|
|
<li>Next.js App Router</li>
|
|
<li>Optimized for SEO using Next.js's Metadata</li>
|
|
<li>React Server Components (RSCs) and Suspense</li>
|
|
<li>Server Actions for mutations</li>
|
|
<li>Edge runtime</li>
|
|
<li>New Next.js 13 fetching and caching paradigms</li>
|
|
<li>Dynamic OG images</li>
|
|
<li>Styling with Tailwind CSS</li>
|
|
<li>Automatic light/dark mode based on system settings</li>
|
|
<li>And more!</li>
|
|
</ul></div>`,
|
|
bodySummary: 'This website is built with Next.js, Vercel, and Salesforce Commerce Cloud.',
|
|
seo: {
|
|
title: 'About',
|
|
description: 'This website is built with Next.js, Vercel, and Salesforce Commerce Cloud.'
|
|
},
|
|
createdAt: '2024-09-20T20:15:06Z',
|
|
updatedAt: '2024-09-20T20:15:06Z'
|
|
};
|
|
|
|
const termsPage = {
|
|
id: 'terms',
|
|
title: 'Terms & Conditions',
|
|
handle: 'terms-conditions',
|
|
body: `<div className="prose mx-auto max-w-6xl text-base leading-7 text-black prose-headings:mt-8 prose-headings:font-semibold prose-headings:tracking-wide prose-headings:text-black prose-h1:text-5xl prose-h2:text-4xl prose-h3:text-3xl prose-h4:text-2xl prose-h5:text-xl prose-h6:text-lg prose-a:text-black prose-a:underline hover:prose-a:text-neutral-300 prose-strong:text-black prose-ol:mt-8 prose-ol:list-decimal prose-ol:pl-6 prose-ul:mt-8 prose-ul:list-disc prose-ul:pl-6 dark:text-white dark:prose-headings:text-white dark:prose-a:text-white dark:prose-strong:text-white mb-8">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nam libero justo laoreet sit amet cursus sit. Dictumst quisque sagittis purus sit amet volutpat consequat. Egestas diam in arcu cursus euismod. Sed faucibus turpis in eu mi bibendum. Consectetur libero id faucibus nisl. Quisque id diam vel quam elementum. Eros donec ac odio tempor orci dapibus ultrices. Turpis tincidunt id aliquet risus. Pellentesque eu tincidunt tortor aliquam nulla facilisi cras fermentum odio.</div>`,
|
|
bodySummary:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
seo: {
|
|
title: 'Terms & Conditions',
|
|
description:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. '
|
|
},
|
|
createdAt: '2024-09-20T20:15:06Z',
|
|
updatedAt: '2024-09-20T20:15:06Z'
|
|
};
|
|
|
|
const shippingPage = {
|
|
id: 'shipping',
|
|
title: 'Shipping & Return Policy',
|
|
handle: 'shipping-return-policy',
|
|
body: `<div className="prose mx-auto max-w-6xl text-base leading-7 text-black prose-headings:mt-8 prose-headings:font-semibold prose-headings:tracking-wide prose-headings:text-black prose-h1:text-5xl prose-h2:text-4xl prose-h3:text-3xl prose-h4:text-2xl prose-h5:text-xl prose-h6:text-lg prose-a:text-black prose-a:underline hover:prose-a:text-neutral-300 prose-strong:text-black prose-ol:mt-8 prose-ol:list-decimal prose-ol:pl-6 prose-ul:mt-8 prose-ul:list-disc prose-ul:pl-6 dark:text-white dark:prose-headings:text-white dark:prose-a:text-white dark:prose-strong:text-white mb-8">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nam libero justo laoreet sit amet cursus sit. Dictumst quisque sagittis purus sit amet volutpat consequat. Egestas diam in arcu cursus euismod. Sed faucibus turpis in eu mi bibendum. Consectetur libero id faucibus nisl. Quisque id diam vel quam elementum. Eros donec ac odio tempor orci dapibus ultrices. Turpis tincidunt id aliquet risus. Pellentesque eu tincidunt tortor aliquam nulla facilisi cras fermentum odio.</div>`,
|
|
bodySummary:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
seo: {
|
|
title: 'Shipping & Return Policy',
|
|
description:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. '
|
|
},
|
|
createdAt: '2024-09-20T20:15:06Z',
|
|
updatedAt: '2024-09-20T20:15:06Z'
|
|
};
|
|
|
|
const privacyPage = {
|
|
id: 'privacy',
|
|
title: 'Privacy Policy',
|
|
handle: 'privacy-policy',
|
|
body: `<div className="prose mx-auto max-w-6xl text-base leading-7 text-black prose-headings:mt-8 prose-headings:font-semibold prose-headings:tracking-wide prose-headings:text-black prose-h1:text-5xl prose-h2:text-4xl prose-h3:text-3xl prose-h4:text-2xl prose-h5:text-xl prose-h6:text-lg prose-a:text-black prose-a:underline hover:prose-a:text-neutral-300 prose-strong:text-black prose-ol:mt-8 prose-ol:list-decimal prose-ol:pl-6 prose-ul:mt-8 prose-ul:list-disc prose-ul:pl-6 dark:text-white dark:prose-headings:text-white dark:prose-a:text-white dark:prose-strong:text-white mb-8">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nam libero justo laoreet sit amet cursus sit. Dictumst quisque sagittis purus sit amet volutpat consequat. Egestas diam in arcu cursus euismod. Sed faucibus turpis in eu mi bibendum. Consectetur libero id faucibus nisl. Quisque id diam vel quam elementum. Eros donec ac odio tempor orci dapibus ultrices. Turpis tincidunt id aliquet risus. Pellentesque eu tincidunt tortor aliquam nulla facilisi cras fermentum odio.</div>`,
|
|
bodySummary:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
seo: {
|
|
title: 'Privacy Policy',
|
|
description:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. '
|
|
},
|
|
createdAt: '2024-09-20T20:15:06Z',
|
|
updatedAt: '2024-09-20T20:15:06Z'
|
|
};
|
|
|
|
const faqPage = {
|
|
id: 'faq',
|
|
title: 'Frequently Asked Questions',
|
|
handle: 'freqently-asked-questions',
|
|
body: `<div className="prose mx-auto max-w-6xl text-base leading-7 text-black prose-headings:mt-8 prose-headings:font-semibold prose-headings:tracking-wide prose-headings:text-black prose-h1:text-5xl prose-h2:text-4xl prose-h3:text-3xl prose-h4:text-2xl prose-h5:text-xl prose-h6:text-lg prose-a:text-black prose-a:underline hover:prose-a:text-neutral-300 prose-strong:text-black prose-ol:mt-8 prose-ol:list-decimal prose-ol:pl-6 prose-ul:mt-8 prose-ul:list-disc prose-ul:pl-6 dark:text-white dark:prose-headings:text-white dark:prose-a:text-white dark:prose-strong:text-white mb-8">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nam libero justo laoreet sit amet cursus sit. Dictumst quisque sagittis purus sit amet volutpat consequat. Egestas diam in arcu cursus euismod. Sed faucibus turpis in eu mi bibendum. Consectetur libero id faucibus nisl. Quisque id diam vel quam elementum. Eros donec ac odio tempor orci dapibus ultrices. Turpis tincidunt id aliquet risus. Pellentesque eu tincidunt tortor aliquam nulla facilisi cras fermentum odio.</div>`,
|
|
bodySummary:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
seo: {
|
|
title: 'Frequently Asked Questions',
|
|
description:
|
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. '
|
|
},
|
|
createdAt: '2024-09-20T20:15:06Z',
|
|
updatedAt: '2024-09-20T20:15:06Z'
|
|
};
|