UNPKG

@scayle/storefront-core

Version:

Collection of essential utilities to work with the Storefront API

45 lines (44 loc) 1.69 kB
import { stripShopLocaleFromPath } from "./sanitizationHelpers.mjs"; export const getBreadcrumbsFromProductCategories = (categories) => { return categories?.map((category) => ({ value: "categoryName" in category ? category.categoryName : category.name, to: "categoryName" in category ? category.categoryUrl : category.slug })) || []; }; export const getBreadcrumbsFromCategory = (category, activeNode) => { if (!category) { return []; } const breadcrumbItems = []; const generateBreadcrumbs = (category2) => { if (category2.children?.length || activeNode?.id === category2.id) { breadcrumbItems.push({ value: category2.name, to: category2.path }); category2?.children?.forEach((child) => generateBreadcrumbs(child)); } }; generateBreadcrumbs(category); return breadcrumbItems; }; export const getBreadcrumbsFromPath = (path = "", shopLocale = "") => { if (shopLocale) { path = stripShopLocaleFromPath(shopLocale, path); } const breadcrumbItems = []; path.split("/").forEach((segment, index) => { if (!segment) { breadcrumbItems.push({ to: "/", value: "Home" }); } else { breadcrumbItems.push({ to: breadcrumbItems[index - 1].to === "/" ? `/${segment}` : `${breadcrumbItems[index - 1].to}/${segment}`, value: segment }); } }); return breadcrumbItems; }; export const getBreadcrumbs = (categories, activeNode) => { return Array.isArray(categories) ? getBreadcrumbsFromProductCategories(categories) : getBreadcrumbsFromCategory(categories, activeNode); }; export const getBackURLFromBreadcrumbs = (breadcrumbs) => { return breadcrumbs?.[breadcrumbs?.length - 1].to ?? "/"; };