From 672743f5439fc453dcf746b547e7335845a6c43a Mon Sep 17 00:00:00 2001 From: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> Date: Sat, 21 Feb 2026 14:42:31 +0100 Subject: [PATCH] fix(web): escape handling on album page (#26419) --- web/src/lib/modals/AlbumOptionsModal.svelte | 3 +-- web/src/lib/services/album.service.ts | 16 +++------------- .../[[assetId=id]]/+page.svelte | 17 +++++++++++------ 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/web/src/lib/modals/AlbumOptionsModal.svelte b/web/src/lib/modals/AlbumOptionsModal.svelte index 392389fe92..4553f022df 100644 --- a/web/src/lib/modals/AlbumOptionsModal.svelte +++ b/web/src/lib/modals/AlbumOptionsModal.svelte @@ -3,7 +3,6 @@ import HeaderActionButton from '$lib/components/HeaderActionButton.svelte'; import OnEvents from '$lib/components/OnEvents.svelte'; import UserAvatar from '$lib/components/shared-components/user-avatar.svelte'; - import { AlbumPageViewMode } from '$lib/constants'; import { getAlbumActions, handleRemoveUserFromAlbum, @@ -56,7 +55,7 @@ sharedLinks = sharedLinks.filter(({ id }) => sharedLink.id !== id); }; - const { AddUsers, CreateSharedLink } = $derived(getAlbumActions($t, album, AlbumPageViewMode.OPTIONS)); + const { AddUsers, CreateSharedLink } = $derived(getAlbumActions($t, album)); let sharedLinks: SharedLinkResponseDto[] = $state([]); diff --git a/web/src/lib/services/album.service.ts b/web/src/lib/services/album.service.ts index 05e0fdb78d..0f155df0e9 100644 --- a/web/src/lib/services/album.service.ts +++ b/web/src/lib/services/album.service.ts @@ -1,6 +1,5 @@ import { goto } from '$app/navigation'; import ToastAction from '$lib/components/ToastAction.svelte'; -import { AlbumPageViewMode } from '$lib/constants'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; @@ -32,7 +31,7 @@ import { type UserResponseDto, } from '@immich/sdk'; import { modalManager, toastManager, type ActionItem } from '@immich/ui'; -import { mdiArrowLeft, mdiLink, mdiPlus, mdiPlusBoxOutline, mdiShareVariantOutline, mdiUpload } from '@mdi/js'; +import { mdiLink, mdiPlus, mdiPlusBoxOutline, mdiShareVariantOutline, mdiUpload } from '@mdi/js'; import { type MessageFormatter } from 'svelte-i18n'; import { get } from 'svelte/store'; @@ -46,7 +45,7 @@ export const getAlbumsActions = ($t: MessageFormatter) => { return { Create }; }; -export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto, viewMode: AlbumPageViewMode) => { +export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto) => { const isOwned = get(user).id === album.ownerId; const Share: ActionItem = { @@ -73,16 +72,7 @@ export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto, v onAction: () => modalManager.show(SharedLinkCreateModal, { albumId: album.id }), }; - const Close: ActionItem = { - title: $t('go_back'), - type: $t('command'), - icon: mdiArrowLeft, - onAction: () => goto(Route.albums()), - $if: () => viewMode === AlbumPageViewMode.VIEW, - shortcuts: { key: 'Escape' }, - }; - - return { Share, AddUsers, CreateSharedLink, Close }; + return { Share, AddUsers, CreateSharedLink }; }; export const getAlbumAssetsActions = ($t: MessageFormatter, album: AlbumResponseDto, assets: TimelineAsset[]) => { 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 97e101f728..f05380257a 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 @@ -127,10 +127,6 @@ await handleCloseSelectAssets(); return; } - if (viewMode === AlbumPageViewMode.OPTIONS) { - viewMode = AlbumPageViewMode.VIEW; - return; - } if ($showAssetViewer) { return; } @@ -138,7 +134,7 @@ cancelMultiselect(assetInteraction); return; } - return; + await goto(Route.albums()); }; const refreshAlbum = async () => { @@ -311,8 +307,17 @@ }; const { Cast } = $derived(getGlobalActions($t)); - const { Share, Close } = $derived(getAlbumActions($t, album, viewMode)); + const { Share } = $derived(getAlbumActions($t, album)); const { AddAssets, Upload } = $derived(getAlbumAssetsActions($t, album, timelineInteraction.selectedAssets)); + + const Close = $derived({ + title: $t('go_back'), + type: $t('command'), + icon: mdiArrowLeft, + onAction: handleEscape, + $if: () => !$showAssetViewer, + shortcuts: { key: 'Escape' }, + });