From 61df0f3d3140174a444e571446679b9ee369eda9 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Dec 2025 13:16:14 +0200 Subject: [PATCH] feat(breadcrumb): trim path when hoisted --- apps/client/src/widgets/layout/Breadcrumb.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/layout/Breadcrumb.tsx b/apps/client/src/widgets/layout/Breadcrumb.tsx index 5f0397c7e..085b92ef7 100644 --- a/apps/client/src/widgets/layout/Breadcrumb.tsx +++ b/apps/client/src/widgets/layout/Breadcrumb.tsx @@ -20,7 +20,7 @@ const INITIAL_ITEMS = 2; const FINAL_ITEMS = 2; export default function Breadcrumb({ note, noteContext }: { note: FNote, noteContext: NoteContext }) { - const notePath = buildNotePaths(noteContext?.notePathArray); + const notePath = buildNotePaths(noteContext); return (
@@ -187,14 +187,27 @@ function BreadcrumbCollapsed({ items, noteContext }: { items: string[], noteCont ); } -function buildNotePaths(notePathArray: string[] | undefined) { +function buildNotePaths(noteContext: NoteContext) { + const notePathArray = noteContext.notePathArray; if (!notePathArray) return []; let prefix = ""; - const output: string[] = []; + let output: string[] = []; + let pos = 0; + let hoistedNotePos = -1; for (const notePath of notePathArray) { + if (noteContext.hoistedNoteId !== "root" && notePath === noteContext.hoistedNoteId) { + hoistedNotePos = pos; + } output.push(`${prefix}${notePath}`); prefix += `${notePath}/`; + pos++; } + + // When hoisted, display only the path starting with the hoisted note. + if (noteContext.hoistedNoteId !== "root") { + output = output.slice(hoistedNotePos); + } + return output; }