leverage cache for fetch YMM options

Signed-off-by: Chloe <pinkcloudvnn@gmail.com>
This commit is contained in:
Chloe 2024-07-08 16:24:30 +07:00
parent 735657f606
commit d983064d69
No known key found for this signature in database
GPG Key ID: CFD53CE570D42DF5
5 changed files with 78 additions and 38 deletions

View File

@ -1,43 +1,47 @@
'use server';
import { getAllMetaobjects } from 'lib/shopify';
import { Metaobject } from 'lib/shopify/types';
import get from 'lodash.get';
import { cache } from 'react';
export const fetMetaobjects = async (
type: string,
// eslint-disable-next-line no-unused-vars
sortFn?: (a: Metaobject, b: Metaobject) => number
) => {
export const fetchModels = cache(async () => {
try {
const data = await getAllMetaobjects(type);
const data = await getAllMetaobjects('make_model_composite');
return sortFn ? data.toSorted(sortFn) : data;
} catch (error) {
console.log('fetMetaobjects action', error);
}
};
const sortModelsFn = (a: Metaobject, b: Metaobject) => {
return data.toSorted((a, b) => {
const modelA = get(a, 'name').toLowerCase();
const modelB = get(b, 'name').toLowerCase();
return modelA.localeCompare(modelB);
};
});
} catch (error) {
console.log('fetchModels action', error);
}
});
const sortYearsFn = (a: Metaobject, b: Metaobject) => {
export const fetchYears = cache(async () => {
try {
const data = await getAllMetaobjects('make_model_year_composite');
return data.toSorted((a, b) => {
const yearA = parseInt(get(a, 'name'), 10);
const yearB = parseInt(get(b, 'name'), 10);
return yearB - yearA; // Descending order for years
};
});
} catch (error) {
console.log('fetchYears action', error);
}
});
const sortMakesFn = (a: Metaobject, b: Metaobject) => {
export const fetchMakes = cache(async () => {
try {
const data = await getAllMetaobjects('make');
return data.toSorted((a, b) => {
const makeA = get(a, 'display_name').toLowerCase();
const makeB = get(b, 'display_name').toLowerCase();
return makeA.localeCompare(makeB);
};
export const fetchModels = cache(() => fetMetaobjects('make_model_composite', sortModelsFn));
export const fetchYears = cache(() => fetMetaobjects('make_model_year_composite', sortYearsFn));
export const fetchMakes = cache(() => fetMetaobjects('make', sortMakesFn));
});
} catch (error) {
console.log('fetchMakes action', error);
}
});

View File

@ -1,16 +1,14 @@
export { default as Badge } from './badge';
export * from './badge';
export { default as Badge } from './badge';
export { default as Button } from './button';
export * from './button';
export { default as Card } from './card';
export * from './card';
export { default as Heading } from './heading';
export { default as Card } from './card';
export * from './heading';
export { default as Heading } from './heading';
export { default as Input } from './input';
export * from './input';
export { default as Label } from './label';
export * from './label';
export { default as Skeleton } from './skeleton';
export { default as Label } from './label';
export * from './skeleton';
export { default as Text } from './text';
export { default as Skeleton } from './skeleton';
export * from './text';
export { default as Text } from './text';

View File

@ -359,6 +359,10 @@ const reshapeCollection = (collection: ShopifyCollection): Collection | undefine
helpfulLinks: parseMetaFieldValue<string[]>(collection.helpfulLinks),
helpfulLinksTop: parseMetaFieldValue<string[]>(collection.helpfulLinksTop),
dynamicContent: collection.dynamicContent?.value || null,
plpType: collection.plpType?.value || null,
lhnLinks: parseMetaFieldValue<string[]>(collection.lhnLinks),
engineSizeLinks: parseMetaFieldValue<string[]>(collection.engineSizeLinks),
transmissionCodeLinks: parseMetaFieldValue<string[]>(collection.transmissionCodeLinks),
path: getCollectionUrl(collection.handle)
};
};

View File

@ -18,6 +18,18 @@ const collectionFragment = /* GraphQL */ `
dynamicContent: metafield(namespace: "custom", key: "plp_content") {
value
}
plpType: metafield(namespace: "custom", key: "plp_type") {
value
}
lhnLinks: metafield(namespace: "custom", key: "lhn_links") {
value
}
engineSizeLinks: metafield(namespace: "custom", key: "engine_size_links") {
value
}
transmissionCodeLinks: metafield(namespace: "custom", key: "transmission_code_links") {
value
}
updatedAt
}
${seoFragment}

View File

@ -44,12 +44,22 @@ export type CartItem = {
export type Collection = Omit<
ShopifyCollection,
'helpfulLinks' | 'helpfulLinksTop' | 'dynamicContent'
| 'helpfulLinks'
| 'helpfulLinksTop'
| 'dynamicContent'
| 'plpType'
| 'lhnLinks'
| 'engineSizeLinks'
| 'transmissionCodeLinks'
> & {
path: string;
helpfulLinks: string[] | null;
helpfulLinksTop: string[] | null;
dynamicContent: string | null;
plpType: PLPType | null;
lhnLinks: string[] | null;
engineSizeLinks: string[] | null;
transmissionCodeLinks: string[] | null;
};
export type Customer = {
@ -509,6 +519,14 @@ export type ShopifyCart = {
totalQuantity: number;
};
export type PLPType =
| 'Product Type'
| 'Make'
| 'Model'
| 'Year'
| 'Transmission Code'
| 'Engine Size';
export type ShopifyCollection = {
handle: string;
title: string;
@ -518,6 +536,10 @@ export type ShopifyCollection = {
helpfulLinks: { value: string } | null;
helpfulLinksTop: { value: string } | null;
dynamicContent: { value: string } | null;
plpType: { value: PLPType } | null;
lhnLinks: { value: string } | null;
engineSizeLinks: { value: string } | null;
transmissionCodeLinks: { value: string } | null;
};
export type ShopifyProduct = {