From 54088135709ce495e4bc8f548c989b710333eb41 Mon Sep 17 00:00:00 2001 From: Jin Xuan <87897838+jinxuan-owyong@users.noreply.github.com> Date: Fri, 10 Jan 2025 23:27:35 +0800 Subject: [PATCH] fix(web): escape key to clear selection and go to previous page (#15142) (#15219) --- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 5 ++++- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 15 ++++++++++++++- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 15 ++++++++++++++- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 9 ++++++++- .../[[photos=photos]]/[[assetId=id]]/+page.svelte | 9 ++++++++- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 0f6c62a5fafaf..4a29f5d8694b3 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -215,7 +215,10 @@ viewMode = AlbumPageViewMode.VIEW; return; } - + if (viewMode === AlbumPageViewMode.SELECT_THUMBNAIL) { + viewMode = AlbumPageViewMode.VIEW; + return; + } if (viewMode === AlbumPageViewMode.SELECT_ASSETS) { await handleCloseSelectAssets(); return; diff --git a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte index 5301364ccb116..0e13fbdeb503e 100644 --- a/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/archive/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -28,6 +28,13 @@ const assetStore = new AssetStore({ isArchived: true }); const assetInteraction = new AssetInteraction(); + const handleEscape = () => { + if (assetInteraction.selectionActive) { + assetInteraction.clearMultiselect(); + return; + } + }; + onDestroy(() => { assetStore.destroy(); }); @@ -54,7 +61,13 @@ {/if} <UserPageLayout hideNavbar={assetInteraction.selectionActive} title={data.meta.title} scrollbar={false}> - <AssetGrid enableRouting={true} {assetStore} {assetInteraction} removeAction={AssetAction.UNARCHIVE}> + <AssetGrid + enableRouting={true} + {assetStore} + {assetInteraction} + removeAction={AssetAction.UNARCHIVE} + onEscape={handleEscape} + > {#snippet empty()} <EmptyPlaceholder text={$t('no_archived_assets_message')} /> {/snippet} diff --git a/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte index 33a03292cd9bf..94436a3dc969f 100644 --- a/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/favorites/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -32,6 +32,13 @@ const assetStore = new AssetStore({ isFavorite: true }); const assetInteraction = new AssetInteraction(); + const handleEscape = () => { + if (assetInteraction.selectionActive) { + assetInteraction.clearMultiselect(); + return; + } + }; + onDestroy(() => { assetStore.destroy(); }); @@ -68,7 +75,13 @@ {/if} <UserPageLayout hideNavbar={assetInteraction.selectionActive} title={data.meta.title} scrollbar={false}> - <AssetGrid enableRouting={true} {assetStore} {assetInteraction} removeAction={AssetAction.UNFAVORITE}> + <AssetGrid + enableRouting={true} + {assetStore} + {assetInteraction} + removeAction={AssetAction.UNFAVORITE} + onEscape={handleEscape} + > {#snippet empty()} <EmptyPlaceholder text={$t('no_favorites_message')} /> {/snippet} diff --git a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 92699f916c3b6..648928d1bdee7 100644 --- a/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/partners/[userId]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -24,6 +24,13 @@ const assetStore = new AssetStore({ userId: data.partner.id, isArchived: false, withStacked: true }); const assetInteraction = new AssetInteraction(); + const handleEscape = () => { + if (assetInteraction.selectionActive) { + assetInteraction.clearMultiselect(); + return; + } + }; + onDestroy(() => { assetStore.destroy(); }); @@ -51,5 +58,5 @@ {/snippet} </ControlAppBar> {/if} - <AssetGrid enableRouting={true} {assetStore} {assetInteraction} /> + <AssetGrid enableRouting={true} {assetStore} {assetInteraction} onEscape={handleEscape} /> </main> diff --git a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte index 7f97d3772b973..686d82b1251d0 100644 --- a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -87,6 +87,13 @@ } }; + const handleEscape = () => { + if (assetInteraction.selectionActive) { + assetInteraction.clearMultiselect(); + return; + } + }; + onDestroy(() => { assetStore.destroy(); }); @@ -122,7 +129,7 @@ </div> {/snippet} - <AssetGrid enableRouting={true} {assetStore} {assetInteraction}> + <AssetGrid enableRouting={true} {assetStore} {assetInteraction} onEscape={handleEscape}> <p class="font-medium text-gray-500/60 dark:text-gray-300/60 p-4"> {$t('trashed_items_will_be_permanently_deleted_after', { values: { days: $serverConfig.trashDays } })} </p>