"use client" import { useSearchParams } from "next/navigation"; import { useAppSelector } from "@/core/utils/hooks/useRedux"; import { useCallback, useEffect, useRef } from "react"; import usePageParams from "@/app/(visualization)/project/@modals/(.)customization/_utils/hooks/usePageParams"; import useSelectedSurface from "@/app/(visualization)/project/@modals/(.)customization/_utils/hooks/useSelectedSurface"; import useGroutView from "@/app/(visualization)/project/@modals/(.)customization/_utils/hooks/useGroutView"; import usePattern from "@/app/(visualization)/project/@modals/(.)customization/_utils/hooks/usePattern"; import capitalize, { splitByCapitals } from "@/core/utils/helpers/capitalize"; import Link from "next/link"; import Image from "next/image"; import Back from "@/app/(visualization)/project/@modals/(.)customization/_components/_navigation/Back"; /** * Breadcrumbs are crucial point in navigation UX. In our case it will be collect **user's history stack**. * The history stack meaning **ordered** list of visited by user pages. * Current component has relation only to the **Customization** modal window, which implemented within parallel slot `modals`. */ export default function Breadcrumb(): JSX.Element { const container = useRef(null); const params = usePageParams(); const sp = useSearchParams(); const surface = useSelectedSurface(); const patternSettings = usePattern(); const grout = useGroutView(); const detailedProduct = useAppSelector(state => state.customization.detailedObject); const narrower = grout || patternSettings; const isDetailsSegment = useCallback((segment: string, idx: number): boolean => idx === 2 && !segment.toLowerCase().includes("own") && detailedProduct !== null, [detailedProduct]); const getBreadcrumbRoute = (segment: string, index: number): string => { const basePath = "/project/customization"; const remainingSegments = params.segments?.slice(0, index + 1); const endPath = remainingSegments?.join("/"); const newSearchParams = new URLSearchParams(sp); const newModalPath = basePath + "/" + endPath; newSearchParams.set("modal", newModalPath); newSearchParams.set("origin", sp.get("origin") as string); return newModalPath + "?" + newSearchParams.toString(); } useEffect(() => { /** It's just to display always latest active element */ if (container.current) { container.current.scroll({ left: 999999, behavior: "instant" }); } }, [params.segments]); return (
{surface && (
{splitByCapitals(surface)}
{"expand_more_right"}
)} {params.segments?.map((s, index, array) => ( {isDetailsSegment(s, index) ? detailedProduct!.name : splitByCapitals(capitalize(decodeURIComponent(s).replace("_", " ")))} {index !== (array.length - 1) && (
{"expand_more_right"}
)} ))}
); }