51 lines
1.9 KiB
TypeScript
51 lines
1.9 KiB
TypeScript
/**
|
|
* TechShop homepage structure
|
|
* Reference: https://demo.templatemonster.com/demo/501755.html
|
|
*
|
|
* Order matches the demo: chrome → sidebar+hero → promo tiles → categories →
|
|
* new arrivals → dual banners → deals → recently launched → brands →
|
|
* gadgets → articles → trust strip.
|
|
*/
|
|
|
|
export const TECHSHOP_HOME_ORDER: {
|
|
key: string;
|
|
defaultOrder: number;
|
|
/** Catalog-backed: show products/categories even if CMS arrays are empty */
|
|
catalogDriven?: boolean;
|
|
}[] = [
|
|
{ key: 'hero_slider', defaultOrder: 1 },
|
|
{ key: 'promo_cards', defaultOrder: 2 },
|
|
{ key: 'featured_categories', defaultOrder: 3, catalogDriven: true },
|
|
{ key: 'editorial_story', defaultOrder: 4, catalogDriven: true },
|
|
{ key: 'promo_banners', defaultOrder: 5 },
|
|
{ key: 'deal_of_the_day', defaultOrder: 6, catalogDriven: true },
|
|
{ key: 'recently_launched', defaultOrder: 7, catalogDriven: true },
|
|
{ key: 'official_brands', defaultOrder: 8, catalogDriven: true },
|
|
{ key: 'ultimate_tech', defaultOrder: 9, catalogDriven: true },
|
|
{ key: 'tech_blog', defaultOrder: 10 },
|
|
{ key: 'trust_badges', defaultOrder: 11 },
|
|
];
|
|
|
|
/** Core blocks that make the homepage look like TechShop when layout API is down */
|
|
export const TECHSHOP_CORE_KEYS = new Set(
|
|
TECHSHOP_HOME_ORDER.filter(
|
|
(s) =>
|
|
s.catalogDriven ||
|
|
s.key === 'hero_slider' ||
|
|
s.key === 'promo_cards' ||
|
|
s.key === 'promo_banners' ||
|
|
s.key === 'trust_badges'
|
|
).map((s) => s.key)
|
|
);
|
|
|
|
export function sortHomeSectionsByOrder(
|
|
sectionsData: Record<string, { display_order?: number } | undefined>
|
|
): typeof TECHSHOP_HOME_ORDER {
|
|
return [...TECHSHOP_HOME_ORDER].sort((a, b) => {
|
|
const orderA =
|
|
sectionsData[a.key]?.display_order ?? a.defaultOrder;
|
|
const orderB =
|
|
sectionsData[b.key]?.display_order ?? b.defaultOrder;
|
|
return Number(orderA) - Number(orderB);
|
|
});
|
|
}
|