From c01e8f4eb4b5269e3a332cac12af562f55ac1713 Mon Sep 17 00:00:00 2001 From: Nopparuj-an <47713359+Nopparuj-an@users.noreply.github.com> Date: Sat, 30 May 2026 13:27:19 +0700 Subject: [PATCH] feat: add bulk asset selection support to large files utility page --- .../large-assets/large-asset-data.svelte | 28 ++- .../[[assetId=id]]/+page.svelte | 164 +++++++++++++++++- 2 files changed, 183 insertions(+), 9 deletions(-) diff --git a/web/src/lib/components/utilities-page/large-assets/large-asset-data.svelte b/web/src/lib/components/utilities-page/large-assets/large-asset-data.svelte index db1fe4615b..7094f412b3 100644 --- a/web/src/lib/components/utilities-page/large-assets/large-asset-data.svelte +++ b/web/src/lib/components/utilities-page/large-assets/large-asset-data.svelte @@ -6,10 +6,23 @@ interface Props { asset: AssetResponseDto; - onViewAsset: (asset: AssetResponseDto) => void; + selected: boolean; + selectionCandidate: boolean; + onSelect: (asset: AssetResponseDto) => void; + onClick: (asset: AssetResponseDto) => void; + onPreview?: (asset: AssetResponseDto) => void; + onMouseEvent?: (asset: AssetResponseDto | null) => void; } - let { asset, onViewAsset }: Props = $props(); + let { + asset, + selected, + selectionCandidate, + onSelect, + onClick, + onPreview = undefined, + onMouseEvent = undefined, + }: Props = $props(); let assetData = $derived(JSON.stringify(asset, null, 2)); @@ -22,7 +35,16 @@ title={assetData} >
- onViewAsset(asset)} thumbnailSize={boxWidth} /> + onClick(asset)} + onSelect={() => onSelect(asset)} + onPreview={onPreview ? () => onPreview?.(asset) : undefined} + onMouseEvent={({ isMouseOver }) => onMouseEvent?.(isMouseOver ? asset : null)} + {selected} + {selectionCandidate} + /> {#if !!asset.libraryId}
External
diff --git a/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte index 9d87eee922..d0be3939fd 100644 --- a/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/utilities/large-files/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,13 +1,21 @@ - + + + + +
- {#if assets && data.assets.length > 0} + {#if assets && assets.length > 0} {#each assets as asset (asset.id)} - + {/each} {:else}

@@ -68,6 +203,23 @@

+{#if assetMultiSelectManager.selectionActive} + + {@const Actions = getAssetBulkActions($t)} + + + + + +{/if} + {#if assetViewerManager.isViewing} {#await import('$lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }}