import rangeMap from '@lib/range-map' import { Layout } from '@components/common' import ProductCard from '@components/product/ProductCard/FUTURE_ProductCard' import { Grid, Marquee, Hero } from '@components/ui' import HomeAllProductsGrid from '@components/common/HomeAllProductsGrid' import type { GetStaticPropsContext, InferGetStaticPropsType } from 'next' import { getConfig } from '@framework/api' import getAllProducts from '@framework/api/operations/get-all-products' import getSiteInfo from '@framework/api/operations/get-site-info' import getAllPages from '@framework/api/operations/get-all-pages' // Outputs from providers should already be normalized // TODO (bc) move this to the provider function productsNormalizer(arr: any[]) { // Normalizes products arr response and flattens node edges return arr.map( ({ node: { entityId: id, images, variants, productOptions, prices, path, ...rest }, }) => ({ id, path, slug: path.slice(1, -1), images: images.edges.map( ({ node: { urlOriginal, altText, ...rest } }: any) => ({ url: urlOriginal, alt: altText, ...rest, }) ), variants: variants.edges.map(({ node }: any) => node), productOptions: productOptions.edges.map(({ node }: any) => node), prices: [ { value: prices.price.value, currencyCode: prices.price.currencyCode, }, ], ...rest, }) ) } export async function getStaticProps({ preview, locale, }: GetStaticPropsContext) { const config = getConfig({ locale }) const { products: rawProducts } = await getAllProducts({ variables: { first: 12 }, config, preview, }) // Remove normalizer and send to framework provider. const products = productsNormalizer(rawProducts) const { categories, brands } = await getSiteInfo({ config, preview }) const { pages } = await getAllPages({ config, preview }) return { props: { products, categories, brands, pages, }, revalidate: 14400, } } export default function Home({ products, brands, categories, }: InferGetStaticPropsType) { return (
{products.slice(0, 3).map((product, i) => ( ))} {products.slice(0, 3).map((product, i) => ( ))} {products.slice(0, 3).map((product, i) => ( ))} {products.slice(0, 3).map((product, i) => ( ))} {/* */}
) } Home.Layout = Layout