50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { cache } from 'react';
|
|
|
|
import { getProductCategories } from '@lib/data';
|
|
|
|
import { ServiceCategory } from '../../_components/service-categories';
|
|
|
|
async function ttoServicesLoader() {
|
|
const response = await getProductCategories({
|
|
fields: '*products, is_active, metadata',
|
|
});
|
|
|
|
const heroCategories = response.product_categories?.filter(
|
|
({ parent_category, is_active, metadata }) =>
|
|
parent_category?.handle === 'tto-categories' &&
|
|
is_active &&
|
|
metadata?.isHero,
|
|
);
|
|
|
|
const ttoCategories = response.product_categories?.filter(
|
|
({ parent_category, is_active, metadata }) =>
|
|
parent_category?.handle === 'tto-categories' &&
|
|
is_active &&
|
|
!metadata?.isHero,
|
|
);
|
|
|
|
return {
|
|
heroCategories:
|
|
heroCategories.map<ServiceCategory>(
|
|
({ name, handle, metadata, description }) => ({
|
|
name,
|
|
handle,
|
|
color:
|
|
typeof metadata?.color === 'string' ? metadata.color : 'primary',
|
|
description,
|
|
}),
|
|
) ?? [],
|
|
ttoCategories:
|
|
ttoCategories.map<ServiceCategory>(
|
|
({ name, handle, metadata, description }) => ({
|
|
name,
|
|
handle,
|
|
color:
|
|
typeof metadata?.color === 'string' ? metadata.color : 'primary',
|
|
description,
|
|
}),
|
|
) ?? [],
|
|
};
|
|
}
|
|
export const loadTtoServices = cache(ttoServicesLoader);
|