ifixkart-storefront/lib/techshopHome.ts

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);
});
}