mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-04-03 22:44:49 -04:00
Tweak breadcrumb UX to include full folder paths for more usecases (#1695)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -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"] });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -209,8 +209,9 @@ public abstract class MainBase : OwningComponentBase
|
||||
/// This helper method recursively builds folder breadcrumbs from the given folder up to the root.
|
||||
/// </summary>
|
||||
/// <param name="folderId">The folder ID to build breadcrumbs for.</param>
|
||||
/// <param name="makeLastClickable">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.</param>
|
||||
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
|
||||
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,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user