import odooApi from '@/core/api/odooApi'; import { createSlug } from '@/core/utils/slug'; import { Breadcrumb as ChakraBreadcrumb, BreadcrumbItem, BreadcrumbLink, Skeleton, } from '@chakra-ui/react'; import Link from 'next/link'; import React from 'react'; import { useQuery } from 'react-query'; import useDevice from '@/core/hooks/useDevice'; const Breadcrumb = ({ categoryId }) => { const breadcrumbs = useQuery( ['category-breadcrumbs', categoryId], async () => await odooApi('GET', `/api/v1/category/${categoryId}/category-breadcrumb`) ); const { isDesktop, isMobile } = useDevice(); const items = breadcrumbs.data ?? []; const lastIdx = items.length - 1; if (isDesktop) { return (
{/* Home */} Home {/* Categories */} {items.map((category, index) => { const isLast = index === lastIdx; return ( {isLast ? ( {category.name} ) : ( {category.name} )} ); })}
); } if (isMobile) { const items = breadcrumbs.data ?? []; const n = items.length; const lastCat = n >= 1 ? items[n - 1] : null; // terakhir (current) const secondLast = n >= 2 ? items[n - 2] : null; // sebelum current const beforeSecond = n >= 3 ? items[n - 3] : null; // sebelum secondLast const hiddenText = n >= 3 ? items .slice(0, n - 2) .map((c) => c.name) .join(' / ') : ''; return (
/} // lebih rapat spacing='4px' sx={{ '& ol': { display: 'flex', alignItems: 'center', overflow: 'hidden', // untuk ellipsis whiteSpace: 'nowrap', // untuk ellipsis gap: '0', // no extra gap }, '& li': { display: 'inline-flex', alignItems: 'center' }, '& li:not(:last-of-type)': { flex: '0 0 auto', whiteSpace: 'nowrap', }, '& li:last-of-type': { flex: '0 1 auto', // jangan ambil full space biar gak keliatan “space kosong” minWidth: 0, }, }} className='text-caption-2 p-0' > {/* Home */} Home {/* Jika ada kategori sebelum secondLast, tampilkan '..' (link ke beforeSecond) */} {beforeSecond && ( .. )} {/* secondLast sebagai link (kalau ada) */} {secondLast && ( {secondLast.name} )} {/* lastCat (current) dengan truncate & lebar dibatasi */} {lastCat && ( {lastCat.name} )}
); } }; export default Breadcrumb;