@scayle/storefront-core
Version:
Collection of essential utilities to work with the Storefront API
45 lines (44 loc) • 1.69 kB
JavaScript
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 ?? "/";
};