update inlinking blocks

Signed-off-by: Chloe <pinkcloudvnn@gmail.com>
This commit is contained in:
Chloe 2024-07-05 15:19:40 +07:00
parent 7e9a84aaae
commit 0a2e3d8e38
No known key found for this signature in database
GPG Key ID: CFD53CE570D42DF5
5 changed files with 23 additions and 58 deletions

View File

@ -22,7 +22,6 @@ import ProductsGridPlaceholder from 'components/layout/search/placeholder';
import SortingMenu from 'components/layout/search/sorting-menu'; import SortingMenu from 'components/layout/search/sorting-menu';
import Models from 'components/models'; import Models from 'components/models';
import TransmissionCode from 'components/transmission-codes'; import TransmissionCode from 'components/transmission-codes';
import { MAKE_FILTER_ID } from 'lib/constants';
import { Suspense } from 'react'; import { Suspense } from 'react';
export async function generateMetadata({ export async function generateMetadata({
@ -125,26 +124,20 @@ export default async function CategorySearchPage(props: {
<FAQ handle="plp-faqs" /> <FAQ handle="plp-faqs" />
{collectionHandle.startsWith('transmissions') && ( {collectionHandle.startsWith('transmissions') && (
<Suspense> <Suspense>
<TransmissionCode <TransmissionCode collectionHandle={collectionHandle} />
collectionHandle={collectionHandle}
make={props.searchParams?.[MAKE_FILTER_ID]}
/>
</Suspense> </Suspense>
)} )}
{['transmissions', 'engines', 'remanufactured-engines'].some((url) => {['transmissions', 'engines', 'remanufactured-engines'].some((url) =>
collectionHandle.startsWith(url) collectionHandle.startsWith(url)
) && ( ) && (
<Suspense> <Suspense>
<Models collectionHandle={collectionHandle} make={props.searchParams?.[MAKE_FILTER_ID]} /> <Models collectionHandle={collectionHandle} />
</Suspense> </Suspense>
)} )}
{['engines', 'remanufactured-engines'].some((url) => collectionHandle.startsWith(url)) && ( {['engines', 'remanufactured-engines'].some((url) => collectionHandle.startsWith(url)) && (
<Suspense> <Suspense>
<EngineSizes <EngineSizes collectionHandle={collectionHandle} />
collectionHandle={collectionHandle}
make={props.searchParams?.[MAKE_FILTER_ID]}
/>
</Suspense> </Suspense>
)} )}

View File

@ -1,23 +1,17 @@
import { ENGINE_SIZE_FILTER_ID, MAKE_FILTER_ID } from 'lib/constants'; import { ENGINE_SIZE_FILTER_ID } from 'lib/constants';
import { getProductFilters } from 'lib/shopify'; import { getProductFilters } from 'lib/shopify';
import { getCollectionUrl } from 'lib/utils'; import { getCollectionUrl } from 'lib/utils';
import Link from 'next/link'; import Link from 'next/link';
const EngineSizes = async ({ const EngineSizes = async ({ collectionHandle }: { collectionHandle: string }) => {
collectionHandle, // eg: collectionHandle = transmission_bmw_x5
make const makeFromCollectionHandle = collectionHandle.split('_')[1];
}: {
collectionHandle: string;
make?: string | string[];
}) => {
// eg: collectionHandle = transmission-bmw-x5
const makeFromCollectionHandle = collectionHandle.split('-')[1];
if (!makeFromCollectionHandle && !make) { if (!makeFromCollectionHandle) {
return null; return null;
} }
const engineSizes = await getProductFilters( const engineSizes = await getProductFilters(
{ collection: collectionHandle, make }, { collection: collectionHandle },
ENGINE_SIZE_FILTER_ID ENGINE_SIZE_FILTER_ID
); );
@ -33,7 +27,7 @@ const EngineSizes = async ({
<div className="mt-6 grid grid-cols-2 gap-x-12 gap-y-5 md:grid-cols-3 md:gap-y-8 lg:grid-cols-4 xl:grid-cols-5"> <div className="mt-6 grid grid-cols-2 gap-x-12 gap-y-5 md:grid-cols-3 md:gap-y-8 lg:grid-cols-4 xl:grid-cols-5">
{engineSizes.values.map((engineSize) => ( {engineSizes.values.map((engineSize) => (
<Link <Link
href={`${getCollectionUrl(collectionHandle)}?${ENGINE_SIZE_FILTER_ID}=${engineSize.value}${make ? `&${MAKE_FILTER_ID}=${make}` : ''}`} href={`${getCollectionUrl(collectionHandle)}?${ENGINE_SIZE_FILTER_ID}=${engineSize.value}`}
key={engineSize.id} key={engineSize.id}
> >
<div className="rounded border border-primary px-2 py-1 text-sm"> <div className="rounded border border-primary px-2 py-1 text-sm">

View File

@ -1,24 +1,18 @@
import { GlobeAltIcon } from '@heroicons/react/24/outline'; import { GlobeAltIcon } from '@heroicons/react/24/outline';
import { MAKE_FILTER_ID, MODEL_FILTER_ID } from 'lib/constants'; import { MODEL_FILTER_ID } from 'lib/constants';
import { getProductFilters } from 'lib/shopify'; import { getProductFilters } from 'lib/shopify';
import { getCollectionUrl } from 'lib/utils'; import { getCollectionUrl } from 'lib/utils';
import Link from 'next/link'; import Link from 'next/link';
const Models = async ({ const Models = async ({ collectionHandle }: { collectionHandle: string }) => {
collectionHandle, // eg: collectionHandle = transmission_bmw_x5
make const makeFromCollectionHandle = collectionHandle.split('_')[1];
}: {
collectionHandle: string;
make?: string | string[];
}) => {
// eg: collectionHandle = transmission-bmw-x5
const makeFromCollectionHandle = collectionHandle.split('-')[1];
if (!makeFromCollectionHandle && !make) { if (!makeFromCollectionHandle) {
return null; return null;
} }
const transmissionModels = await getProductFilters( const transmissionModels = await getProductFilters(
{ collection: collectionHandle, make }, { collection: collectionHandle },
MODEL_FILTER_ID MODEL_FILTER_ID
); );
@ -40,7 +34,7 @@ const Models = async ({
<div className="mt-6 grid grid-cols-2 gap-x-12 gap-y-5 md:grid-cols-3 md:gap-y-8 lg:grid-cols-4 xl:grid-cols-5"> <div className="mt-6 grid grid-cols-2 gap-x-12 gap-y-5 md:grid-cols-3 md:gap-y-8 lg:grid-cols-4 xl:grid-cols-5">
{transmissionModels.values.map((model) => ( {transmissionModels.values.map((model) => (
<Link <Link
href={`${getCollectionUrl(collectionHandle)}?${MODEL_FILTER_ID}=${model.value}${make ? `&${MAKE_FILTER_ID}=${make}` : ''}`} href={`${getCollectionUrl(collectionHandle)}?${MODEL_FILTER_ID}=${model.value}`}
key={model.id} key={model.id}
> >
<div className="rounded border border-primary px-2 py-1 text-sm">{model.label}</div> <div className="rounded border border-primary px-2 py-1 text-sm">{model.label}</div>

View File

@ -1,19 +1,13 @@
import { StarIcon } from '@heroicons/react/24/outline'; import { StarIcon } from '@heroicons/react/24/outline';
import Tag from 'components/tag'; import Tag from 'components/tag';
import { MAKE_FILTER_ID, TRANSMISSION_CODE_FILTER_ID } from 'lib/constants'; import { TRANSMISSION_CODE_FILTER_ID } from 'lib/constants';
import { getProductFilters } from 'lib/shopify'; import { getProductFilters } from 'lib/shopify';
import { getCollectionUrl } from 'lib/utils'; import { getCollectionUrl } from 'lib/utils';
import Link from 'next/link'; import Link from 'next/link';
const TransmissionCode = async ({ const TransmissionCode = async ({ collectionHandle }: { collectionHandle: string }) => {
collectionHandle,
make
}: {
collectionHandle: string;
make?: string | string[];
}) => {
const transmissionCodes = await getProductFilters( const transmissionCodes = await getProductFilters(
{ collection: collectionHandle, make }, { collection: collectionHandle },
TRANSMISSION_CODE_FILTER_ID TRANSMISSION_CODE_FILTER_ID
); );
@ -34,7 +28,7 @@ const TransmissionCode = async ({
<div className="mt-6 grid grid-cols-2 gap-x-12 gap-y-5 md:grid-cols-3 md:gap-y-8 lg:grid-cols-4 xl:grid-cols-5"> <div className="mt-6 grid grid-cols-2 gap-x-12 gap-y-5 md:grid-cols-3 md:gap-y-8 lg:grid-cols-4 xl:grid-cols-5">
{transmissionCodes.values.map((transmissionCode) => ( {transmissionCodes.values.map((transmissionCode) => (
<Link <Link
href={`${getCollectionUrl(collectionHandle)}?${TRANSMISSION_CODE_FILTER_ID}=${transmissionCode.value}${make ? `&${MAKE_FILTER_ID}=${make}` : ''}`} href={`${getCollectionUrl(collectionHandle)}?${TRANSMISSION_CODE_FILTER_ID}=${transmissionCode.value}`}
key={transmissionCode.id} key={transmissionCode.id}
> >
<div className="rounded border border-primary px-2 py-1 text-sm"> <div className="rounded border border-primary px-2 py-1 text-sm">

View File

@ -1181,24 +1181,14 @@ export const getFile = async (id: string) => {
}; };
export async function getProductFilters( export async function getProductFilters(
{ collection, make }: { collection: string; make?: string | string[] }, { collection }: { collection: string },
filterId: string filterId: string
): Promise<Filter | null | undefined> { ): Promise<Filter | null | undefined> {
const [namespace, metafieldKey] = MAKE_FILTER_ID.split('.').slice(-2);
const _make = Array.isArray(make) ? make : make ? [make] : undefined;
const res = await shopifyFetch<ShopifyCollectionProductsOperation>({ const res = await shopifyFetch<ShopifyCollectionProductsOperation>({
query: getProductFiltersQuery, query: getProductFiltersQuery,
tags: [TAGS.collections, TAGS.products], tags: [TAGS.collections, TAGS.products],
variables: { variables: {
handle: collection, handle: collection
...(_make
? {
filters: _make.map((make) => ({
productMetafield: { namespace, key: metafieldKey, value: make }
}))
}
: {})
} }
}); });