diff --git a/web/src/lib/components/album-page/albums-list.svelte b/web/src/lib/components/album-page/albums-list.svelte
index e4b588af8f..d3e0665de3 100644
--- a/web/src/lib/components/album-page/albums-list.svelte
+++ b/web/src/lib/components/album-page/albums-list.svelte
@@ -1,13 +1,9 @@
-
+
{#if albums.length > 0}
{#if userSettings.view === AlbumViewMode.Cover}
diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts
index 6bc26220a7..6038c3c3f0 100644
--- a/web/src/lib/managers/event-manager.svelte.ts
+++ b/web/src/lib/managers/event-manager.svelte.ts
@@ -26,6 +26,7 @@ export type Events = {
AssetReplace: [{ oldAssetId: string; newAssetId: string }];
+ AlbumUpdate: [AlbumResponseDto];
AlbumDelete: [AlbumResponseDto];
QueueUpdate: [QueueResponseDto];
diff --git a/web/src/lib/modals/AlbumEditModal.svelte b/web/src/lib/modals/AlbumEditModal.svelte
index 84a44c8395..668beacc21 100644
--- a/web/src/lib/modals/AlbumEditModal.svelte
+++ b/web/src/lib/modals/AlbumEditModal.svelte
@@ -1,63 +1,41 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/web/src/lib/services/album.service.ts b/web/src/lib/services/album.service.ts
index 702f84d6f9..7f0abc424e 100644
--- a/web/src/lib/services/album.service.ts
+++ b/web/src/lib/services/album.service.ts
@@ -1,10 +1,41 @@
+import { goto } from '$app/navigation';
+import ToastAction from '$lib/components/ToastAction.svelte';
+import { AppRoute } from '$lib/constants';
import { eventManager } from '$lib/managers/event-manager.svelte';
import { downloadArchive } from '$lib/utils/asset-utils';
import { handleError } from '$lib/utils/handle-error';
import { getFormatter } from '$lib/utils/i18n';
-import { deleteAlbum, type AlbumResponseDto } from '@immich/sdk';
+import { deleteAlbum, updateAlbumInfo, type AlbumResponseDto, type UpdateAlbumDto } from '@immich/sdk';
import { modalManager, toastManager } from '@immich/ui';
+export const handleUpdateAlbum = async ({ id }: { id: string }, dto: UpdateAlbumDto) => {
+ const $t = await getFormatter();
+
+ try {
+ const response = await updateAlbumInfo({ id, updateAlbumDto: dto });
+ eventManager.emit('AlbumUpdate', response);
+ toastManager.custom({
+ component: ToastAction,
+ props: {
+ color: 'primary',
+ title: $t('success'),
+ description: $t('album_info_updated'),
+ button: {
+ text: $t('view_album'),
+ color: 'primary',
+ onClick() {
+ return goto(`${AppRoute.ALBUMS}/${id}`);
+ },
+ },
+ },
+ });
+
+ return true;
+ } catch (error) {
+ handleError(error, $t('errors.unable_to_update_album_info'));
+ }
+};
+
export const handleDeleteAlbum = async (album: AlbumResponseDto, options?: { prompt?: boolean; notify?: boolean }) => {
const $t = await getFormatter();
const { prompt = true, notify = true } = options ?? {};