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,
});
}
}