ai_api / src /shared /utils /sidebarRouteMatch.ts
Yogesh
initial deploy
cd8bd0a
Raw
History Blame Contribute Delete
986 Bytes
type SidebarLikeItem = {
href: string;
exact?: boolean;
external?: boolean;
};
export function matchesSidebarHref(
pathname: string | null | undefined,
href: string,
exact = false
): boolean {
if (!pathname) return false;
if (exact) return pathname === href;
return pathname === href || pathname.startsWith(`${href}/`);
}
export function getActiveSidebarHref(
pathname: string | null | undefined,
items: SidebarLikeItem[]
): string | null {
let bestMatch: SidebarLikeItem | null = null;
for (const item of items) {
if (item.external) continue;
if (!matchesSidebarHref(pathname, item.href, item.exact === true)) continue;
if (!bestMatch) {
bestMatch = item;
continue;
}
if (item.href.length > bestMatch.href.length) {
bestMatch = item;
continue;
}
if (item.href.length === bestMatch.href.length && item.exact && !bestMatch.exact) {
bestMatch = item;
}
}
return bestMatch?.href || null;
}