diff --git a/frontend/src/routes/favorites/+page.svelte b/frontend/src/routes/favorites/+page.svelte index f000a467..158db8c4 100644 --- a/frontend/src/routes/favorites/+page.svelte +++ b/frontend/src/routes/favorites/+page.svelte @@ -19,8 +19,6 @@ import { renameFolder, deleteFolder } from '$lib/api/endpoints/folders'; import type { FileItem } from '$lib/api/types'; import { lazyComponent } from '$lib/composables/lazyComponent.svelte'; - import MoveDialog from '$lib/components/MoveDialog.svelte'; - import ShareDialog from '$lib/components/ShareDialog.svelte'; import ResourceList, { type ContextAction, type GroupByDef, @@ -127,8 +125,12 @@ // The file preview is loaded the first time a file is opened, keeping its // module out of this route's initial chunk. const fileViewer = lazyComponent(() => import('$lib/components/FileViewer.svelte')); + const moveDialog = lazyComponent(() => import('$lib/components/MoveDialog.svelte')); + const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte')); $effect(() => { if (viewerOpen) void fileViewer.load(); + if (moveOpen) void moveDialog.load(); + if (shareOpen) void shareDialog.load(); }); function open(entry: ResourceEntry) { @@ -317,13 +319,19 @@ {@const FileViewer = fileViewer.component} {/if} - { - selectedIds = new Set(); - load(true, orderByForGroup()); - }} -/> - +{#if moveDialog.component} + {@const MoveDialog = moveDialog.component} + { + selectedIds = new Set(); + load(true, orderByForGroup()); + }} + /> +{/if} +{#if shareDialog.component} + {@const ShareDialog = shareDialog.component} + +{/if} diff --git a/frontend/src/routes/files/[...path]/+page.svelte b/frontend/src/routes/files/[...path]/+page.svelte index 7294eb9c..9768caed 100644 --- a/frontend/src/routes/files/[...path]/+page.svelte +++ b/frontend/src/routes/files/[...path]/+page.svelte @@ -44,8 +44,6 @@ import type { FileItem, FolderItem, ItemType } from '$lib/api/types'; import ListToolbar from '$lib/components/ListToolbar.svelte'; import VirtualList from '$lib/components/VirtualList.svelte'; - import MoveDialog from '$lib/components/MoveDialog.svelte'; - import ShareDialog from '$lib/components/ShareDialog.svelte'; import { lazyComponent } from '$lib/composables/lazyComponent.svelte'; import { t } from '$lib/i18n/index.svelte'; import { confirmDialog, promptDialog } from '$lib/stores/dialogs.svelte'; @@ -69,6 +67,8 @@ // call `.load()` when `viewerOpen` / `wopiOpen` flip true). const fileViewer = lazyComponent(() => import('$lib/components/FileViewer.svelte')); const wopiEditor = lazyComponent(() => import('$lib/components/WopiEditor.svelte')); + const moveDialog = lazyComponent(() => import('$lib/components/MoveDialog.svelte')); + const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte')); // The URL rest param is the trail of folder ids from home's children down. // /files → home root; /files/a/b → folder b inside a inside home. @@ -1083,6 +1083,8 @@ $effect(() => { if (viewerOpen) void fileViewer.load(); if (wopiOpen) void wopiEditor.load(); + if (moveOpen) void moveDialog.load(); + if (shareOpen) void shareDialog.load(); }); // Editability of the current context-menu target file, resolved async. let ctxCanEditWopi = $state(false); @@ -1936,21 +1938,27 @@ {/snippet} - { - clearSelection(); - void reload(); - }} -/> - (sharedIds = new SvelteSet(sharedIds).add(id))} -/> +{#if moveDialog.component} + {@const MoveDialog = moveDialog.component} + { + clearSelection(); + void reload(); + }} + /> +{/if} +{#if shareDialog.component} + {@const ShareDialog = shareDialog.component} + (sharedIds = new SvelteSet(sharedIds).add(id))} + /> +{/if} {#if fileViewer.component} {@const FileViewer = fileViewer.component} diff --git a/frontend/src/routes/recent/+page.svelte b/frontend/src/routes/recent/+page.svelte index 7094e0e0..71f1abb7 100644 --- a/frontend/src/routes/recent/+page.svelte +++ b/frontend/src/routes/recent/+page.svelte @@ -20,8 +20,6 @@ import { renameFolder, deleteFolder } from '$lib/api/endpoints/folders'; import type { FileItem, ItemType } from '$lib/api/types'; import { lazyComponent } from '$lib/composables/lazyComponent.svelte'; - import MoveDialog from '$lib/components/MoveDialog.svelte'; - import ShareDialog from '$lib/components/ShareDialog.svelte'; import ResourceList, { type ContextAction, type GroupByDef, @@ -139,8 +137,12 @@ // The file preview is loaded the first time a file is opened, keeping its // module out of this route's initial chunk. const fileViewer = lazyComponent(() => import('$lib/components/FileViewer.svelte')); + const moveDialog = lazyComponent(() => import('$lib/components/MoveDialog.svelte')); + const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte')); $effect(() => { if (viewerOpen) void fileViewer.load(); + if (moveOpen) void moveDialog.load(); + if (shareOpen) void shareDialog.load(); }); function open(entry: ResourceEntry) { @@ -362,13 +364,19 @@ {@const FileViewer = fileViewer.component} {/if} - { - selectedIds = new Set(); - load(true, orderByForGroup()); - }} -/> - +{#if moveDialog.component} + {@const MoveDialog = moveDialog.component} + { + selectedIds = new Set(); + load(true, orderByForGroup()); + }} + /> +{/if} +{#if shareDialog.component} + {@const ShareDialog = shareDialog.component} + +{/if} diff --git a/frontend/src/routes/shared/+page.svelte b/frontend/src/routes/shared/+page.svelte index 3c6fdd6b..eb5641ea 100644 --- a/frontend/src/routes/shared/+page.svelte +++ b/frontend/src/routes/shared/+page.svelte @@ -22,7 +22,7 @@ import type { FileItem, FolderItem, ItemType } from '$lib/api/types'; import Icon from '$lib/icons/Icon.svelte'; import ListToolbar from '$lib/components/ListToolbar.svelte'; - import ShareDialog from '$lib/components/ShareDialog.svelte'; + import { lazyComponent } from '$lib/composables/lazyComponent.svelte'; import UserVignette from '$lib/components/UserVignette.svelte'; import { t } from '$lib/i18n/index.svelte'; import { ui } from '$lib/stores/ui.svelte'; @@ -55,6 +55,13 @@ let dialogOpen = $state(false); let dialogItem = $state<{ id: string; name: string; kind: ItemType } | null>(null); + // ShareDialog is heavy and only opens on demand — keep it out of this route's + // initial chunk and load it the first time the dialog is opened. + const shareDialog = lazyComponent(() => import('$lib/components/ShareDialog.svelte')); + $effect(() => { + if (dialogOpen) void shareDialog.load(); + }); + // Open kebab menu, keyed by grant id. let menuFor = $state(null); @@ -580,7 +587,10 @@ {/if} - +{#if shareDialog.component} + {@const ShareDialog = shareDialog.component} + +{/if}