diff --git a/apps/server/AliasVault.Client/Main/Pages/Items/AddEdit.razor b/apps/server/AliasVault.Client/Main/Pages/Items/AddEdit.razor index 443627fc2..b0805d1dc 100644 --- a/apps/server/AliasVault.Client/Main/Pages/Items/AddEdit.razor +++ b/apps/server/AliasVault.Client/Main/Pages/Items/AddEdit.razor @@ -469,11 +469,8 @@ else await base.OnInitializedAsync(); // In edit mode, we'll build breadcrumbs after loading the item in LoadExistingCredential - // so we can include folder breadcrumbs - if (!EditMode) - { - BreadcrumbItems.Add(new BreadcrumbItem { DisplayName = Localizer["AddNewItemBreadcrumb"] }); - } + // In create mode, we'll build breadcrumbs after applying QuickCreateState + // Both are done in OnAfterRenderAsync } /// @@ -537,6 +534,9 @@ else ManuallyAddedFields = []; InitiallyVisibleFields = []; + // Clear existing breadcrumbs (keep only Home) + BreadcrumbItems.RemoveAll(b => !b.ShowHomeIcon); + // Use the state service to pre-fill form data if (!string.IsNullOrEmpty(QuickCreateStateService.ServiceName)) { @@ -560,6 +560,14 @@ else // Clear the state after using it QuickCreateStateService.ClearState(); + + // Build breadcrumbs with folder hierarchy if creating in a folder + if (Obj.FolderId.HasValue) + { + await BuildFolderBreadcrumbsAsync(Obj.FolderId.Value); + } + + BreadcrumbItems.Add(new BreadcrumbItem { DisplayName = Localizer["AddNewItemBreadcrumb"] }); } /// diff --git a/apps/server/AliasVault.Client/Main/Pages/Items/Home.razor b/apps/server/AliasVault.Client/Main/Pages/Items/Home.razor index 92c9f0993..4c05b3032 100644 --- a/apps/server/AliasVault.Client/Main/Pages/Items/Home.razor +++ b/apps/server/AliasVault.Client/Main/Pages/Items/Home.razor @@ -945,8 +945,9 @@ else CurrentFolderName = folder?.Name ?? string.Empty; // Build breadcrumbs for folder hierarchy using shared helper + // Make last folder non-clickable since we're on that folder page BreadcrumbItems.RemoveAll(b => !b.ShowHomeIcon); - AddFolderBreadcrumbs(FolderId, AllFolders, Localizer["Items"], includeCurrentFolder: true); + await BuildFolderBreadcrumbsAsync(FolderId.Value, makeLastClickable: false); } else { diff --git a/apps/server/AliasVault.Client/Main/Pages/MainBase.cs b/apps/server/AliasVault.Client/Main/Pages/MainBase.cs index 8f28c101d..b2157158e 100644 --- a/apps/server/AliasVault.Client/Main/Pages/MainBase.cs +++ b/apps/server/AliasVault.Client/Main/Pages/MainBase.cs @@ -209,8 +209,9 @@ public abstract class MainBase : OwningComponentBase /// This helper method recursively builds folder breadcrumbs from the given folder up to the root. /// /// The folder ID to build breadcrumbs for. + /// Whether the last folder (current page) should be clickable. Default is true for navigation to items within folders, false when on the folder page itself. /// A representing the asynchronous operation. - protected async Task BuildFolderBreadcrumbsAsync(Guid folderId) + protected async Task BuildFolderBreadcrumbsAsync(Guid folderId, bool makeLastClickable = true) { // Load all folders to build the path var foldersWithCounts = await FolderService.GetAllWithCountsAsync(); @@ -232,19 +233,20 @@ public abstract class MainBase : OwningComponentBase return; } - // Get localized "Folder" text - var folderLabel = SharedLocalizer["Folder"]; - // Add breadcrumb for each folder in the path (from root to current) - foreach (var currentFolderId in folderIdPath) + for (int i = 0; i < folderIdPath.Count; i++) { + var currentFolderId = folderIdPath[i]; var folder = allFolders.FirstOrDefault(f => f.Id == currentFolderId); if (folder != null) { + bool isLastFolder = i == folderIdPath.Count - 1; + bool shouldBeClickable = !isLastFolder || makeLastClickable; + BreadcrumbItems.Add(new BreadcrumbItem { - DisplayName = $"{folderLabel}: {folder.Name}", - Url = $"/items/folder/{folder.Id}", + DisplayName = folder.Name, + Url = shouldBeClickable ? $"/items/folder/{folder.Id}" : null, }); } }