diff --git a/web/src/lib/components/album-page/album-description.svelte b/web/src/lib/components/album-page/album-description.svelte index 00744832a7..481e110fb0 100644 --- a/web/src/lib/components/album-page/album-description.svelte +++ b/web/src/lib/components/album-page/album-description.svelte @@ -1,5 +1,6 @@ diff --git a/web/src/lib/components/asset-viewer/actions/set-album-cover-action.svelte b/web/src/lib/components/asset-viewer/actions/set-album-cover-action.svelte index 22ca22b0d9..98d01ff9d3 100644 --- a/web/src/lib/components/asset-viewer/actions/set-album-cover-action.svelte +++ b/web/src/lib/components/asset-viewer/actions/set-album-cover-action.svelte @@ -1,5 +1,6 @@ diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts index 2095a001bd..25e1b3c45b 100644 --- a/web/src/lib/managers/event-manager.svelte.ts +++ b/web/src/lib/managers/event-manager.svelte.ts @@ -39,6 +39,7 @@ export type Events = { AssetsTag: [string[]]; AlbumAddAssets: [{ assetIds: string[]; albumIds: string[] }]; + AlbumCreate: [AlbumResponseDto]; AlbumUpdate: [AlbumResponseDto]; AlbumDelete: [AlbumResponseDto]; AlbumShare: []; diff --git a/web/src/lib/modals/AlbumPickerModal.svelte b/web/src/lib/modals/AlbumPickerModal.svelte index b2420215bc..081c7f49d7 100644 --- a/web/src/lib/modals/AlbumPickerModal.svelte +++ b/web/src/lib/modals/AlbumPickerModal.svelte @@ -5,6 +5,7 @@ AlbumModalRowType, isSelectableRowType, } from '$lib/components/shared-components/album-selection/album-selection-utils'; + import { eventManager } from '$lib/managers/event-manager.svelte'; import { albumViewSettings } from '$lib/stores/preferences.store'; import { createAlbum, getAllAlbums, type AlbumResponseDto } from '@immich/sdk'; import { Button, Icon, Modal, ModalBody, ModalFooter, Text } from '@immich/ui'; @@ -43,6 +44,7 @@ const onNewAlbum = async (name: string) => { const album = await createAlbum({ createAlbumDto: { albumName: name } }); + eventManager.emit('AlbumCreate', album); onClose([album]); }; diff --git a/web/src/lib/stores/user.svelte.ts b/web/src/lib/stores/user.svelte.ts index 508fd156b8..2605feebba 100644 --- a/web/src/lib/stores/user.svelte.ts +++ b/web/src/lib/stores/user.svelte.ts @@ -22,10 +22,17 @@ const defaultUserInteraction: UserInteractions = { export const userInteraction = $state(defaultUserInteraction); +const resetRecentAlbums = () => { + userInteraction.recentAlbums = undefined; +}; + const reset = () => { Object.assign(userInteraction, defaultUserInteraction); }; eventManager.on({ + AlbumCreate: () => resetRecentAlbums(), + AlbumUpdate: () => resetRecentAlbums(), + AlbumDelete: () => resetRecentAlbums(), AuthLogout: () => reset(), }); diff --git a/web/src/lib/utils/album-utils.ts b/web/src/lib/utils/album-utils.ts index 1689d43585..497642847d 100644 --- a/web/src/lib/utils/album-utils.ts +++ b/web/src/lib/utils/album-utils.ts @@ -1,4 +1,5 @@ import { goto } from '$app/navigation'; +import { eventManager } from '$lib/managers/event-manager.svelte'; import { Route } from '$lib/route'; import { AlbumFilter, @@ -29,6 +30,7 @@ export const createAlbum = async (name?: string, assetIds?: string[]) => { assetIds, }, }); + eventManager.emit('AlbumCreate', newAlbum); return newAlbum; } catch (error) { const $t = get(t); 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 44a0c5e678..e354d2c1fc 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 @@ -30,6 +30,7 @@ import { AlbumPageViewMode } from '$lib/constants'; import { activityManager } from '$lib/managers/activity-manager.svelte'; import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; + import { eventManager } from '$lib/managers/event-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; @@ -192,12 +193,13 @@ const updateThumbnail = async (assetId: string) => { try { - await updateAlbumInfo({ + const response = await updateAlbumInfo({ id: album.id, updateAlbumDto: { albumThumbnailAssetId: assetId, }, }); + eventManager.emit('AlbumUpdate', response); toastManager.success($t('album_cover_updated')); } catch (error) { handleError(error, $t('errors.unable_to_update_album_cover'));