From 5cb37ff80dbbf964e3d7d7c6e0ad1256310a9e79 Mon Sep 17 00:00:00 2001 From: SirBlobby Date: Sat, 18 Jul 2026 19:40:42 -0400 Subject: [PATCH] Add cloud breadcrumbs and even out cloud cards --- src/lib/components/FileViewer.svelte | 49 ++++++++++++++++++++++++---- src/lib/ts/state.svelte.ts | 19 +++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/lib/components/FileViewer.svelte b/src/lib/components/FileViewer.svelte index 07b2b9f..ef3edfd 100644 --- a/src/lib/components/FileViewer.svelte +++ b/src/lib/components/FileViewer.svelte @@ -6,6 +6,7 @@ app, breadcrumbs, browseTo, + cloudBreadcrumbs, linkedDocument, linkedSpace, openCloudFolder, @@ -53,6 +54,7 @@ let menuAt = $state({ x: 0, y: 0 }); const trail = $derived(breadcrumbs()); + const cloudTrail = $derived(cloudBreadcrumbs()); $effect(() => { if (app.scope === "cloud" && app.account) { @@ -200,10 +202,10 @@
- {#if link && cloudThumbs[link.path]} -
+
+ {#if link && cloudThumbs[link.path]} {#if cloudThumbs[link.path].kind === "svg"} {/if} -
- {/if} + {:else} + + {/if} +
-

{title}

{meta}

@@ -676,6 +684,33 @@ {/if}
+ {#if cloudTrail.length > 0} +
+ + + {#each cloudTrail as folder, index} + + + {/each} +
+ {/if} + {#if app.cloudFolders.length > 0}
({ spaces: [], cloudFolder: null, cloudFolders: [], + cloudFolderTree: [], cloudDocuments: [], cloudFiles: [], cloudLoading: false, @@ -188,6 +190,7 @@ export async function refreshCloud() { api.cloudListSpaces(), api.cloudListFiles(app.cloudFolder), ]); + app.cloudFolderTree = folders; app.cloudFolders = folders.filter( (folder) => (folder.parent_id ?? null) === app.cloudFolder, ); @@ -202,6 +205,22 @@ export async function refreshCloud() { } } +/** Trail from the drive root down to the folder being viewed. */ +export function cloudBreadcrumbs(): CloudFolder[] { + if (app.cloudFolder === "shared" || app.cloudFolder === null) return []; + + const byId = new Map(app.cloudFolderTree.map((folder) => [folder.id, folder])); + const trail: CloudFolder[] = []; + + let current = byId.get(app.cloudFolder); + while (current) { + trail.unshift(current); + current = current.parent_id ? byId.get(current.parent_id) : undefined; + } + + return trail; +} + export async function openCloudFolder(id: string | null | "shared") { app.cloudFolder = id; await refreshCloud();