forked from crowetic/commerce
* feat(design): Show carousel above the fold on desktop Before this commit, we would not see the carousel without scrolling. The top images are so big that take most of the space. This made the website looked a bit weird, thus I am proposing this change. * uneeded
62 lines
1.9 KiB
TypeScript
62 lines
1.9 KiB
TypeScript
import { GridTileImage } from 'components/grid/tile';
|
|
import { getCollectionProducts } from 'lib/shopify';
|
|
import type { Product } from 'lib/shopify/types';
|
|
import Link from 'next/link';
|
|
|
|
function ThreeItemGridItem({
|
|
item,
|
|
size,
|
|
priority
|
|
}: {
|
|
item: Product;
|
|
size: 'full' | 'half';
|
|
priority?: boolean;
|
|
}) {
|
|
return (
|
|
<div
|
|
className={size === 'full' ? 'md:col-span-4 md:row-span-2' : 'md:col-span-2 md:row-span-1'}
|
|
>
|
|
<Link
|
|
className="relative block aspect-square h-full w-full"
|
|
href={`/product/${item.handle}`}
|
|
prefetch={true}
|
|
>
|
|
<GridTileImage
|
|
src={item.featuredImage.url}
|
|
fill
|
|
sizes={
|
|
size === 'full' ? '(min-width: 768px) 66vw, 100vw' : '(min-width: 768px) 33vw, 100vw'
|
|
}
|
|
priority={priority}
|
|
alt={item.title}
|
|
label={{
|
|
position: size === 'full' ? 'center' : 'bottom',
|
|
title: item.title as string,
|
|
amount: item.priceRange.maxVariantPrice.amount,
|
|
currencyCode: item.priceRange.maxVariantPrice.currencyCode
|
|
}}
|
|
/>
|
|
</Link>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export async function ThreeItemGrid() {
|
|
// Collections that start with `hidden-*` are hidden from the search page.
|
|
const homepageItems = await getCollectionProducts({
|
|
collection: 'hidden-homepage-featured-items'
|
|
});
|
|
|
|
if (!homepageItems[0] || !homepageItems[1] || !homepageItems[2]) return null;
|
|
|
|
const [firstProduct, secondProduct, thirdProduct] = homepageItems;
|
|
|
|
return (
|
|
<section className="mx-auto grid max-w-screen-2xl gap-4 px-4 pb-4 md:grid-cols-6 md:grid-rows-2 lg:max-h-[calc(100vh-200px)]">
|
|
<ThreeItemGridItem size="full" item={firstProduct} priority={true} />
|
|
<ThreeItemGridItem size="half" item={secondProduct} priority={true} />
|
|
<ThreeItemGridItem size="half" item={thirdProduct} />
|
|
</section>
|
|
);
|
|
}
|