From 56dfdfd033f4f7ec8de092fd407517f5014cce44 Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:18:02 -0600 Subject: [PATCH] refactor: album share and options modals (#25212) * refactor: album share modals * chore: clean up --------- Co-authored-by: Jason Rasmussen --- .../album-page/album-shared-link.svelte | 3 +- .../components/album-page/albums-list.svelte | 4 +- web/src/lib/managers/event-manager.svelte.ts | 3 + web/src/lib/modals/AlbumAddUsersModal.svelte | 56 ++++ web/src/lib/modals/AlbumOptionsModal.svelte | 265 ++++++++---------- web/src/lib/modals/AlbumShareModal.svelte | 192 ------------- web/src/lib/modals/AlbumUsersModal.svelte | 148 ---------- web/src/lib/services/album.service.ts | 73 ++++- .../[[assetId=id]]/+page.svelte | 78 ++---- 9 files changed, 280 insertions(+), 542 deletions(-) create mode 100644 web/src/lib/modals/AlbumAddUsersModal.svelte delete mode 100644 web/src/lib/modals/AlbumShareModal.svelte delete mode 100644 web/src/lib/modals/AlbumUsersModal.svelte diff --git a/web/src/lib/components/album-page/album-shared-link.svelte b/web/src/lib/components/album-page/album-shared-link.svelte index a9e3471241..c99a5f6407 100644 --- a/web/src/lib/components/album-page/album-shared-link.svelte +++ b/web/src/lib/components/album-page/album-shared-link.svelte @@ -32,7 +32,7 @@ .filter(Boolean) .join(' • '); - const { ViewQrCode, Copy } = $derived(getSharedLinkActions($t, sharedLink)); + const { ViewQrCode, Copy, Delete } = $derived(getSharedLinkActions($t, sharedLink));
@@ -43,5 +43,6 @@
+
diff --git a/web/src/lib/components/album-page/albums-list.svelte b/web/src/lib/components/album-page/albums-list.svelte index c2f6dad85c..5fba526521 100644 --- a/web/src/lib/components/album-page/albums-list.svelte +++ b/web/src/lib/components/album-page/albums-list.svelte @@ -5,7 +5,7 @@ import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte'; import RightClickContextMenu from '$lib/components/shared-components/context-menu/right-click-context-menu.svelte'; import AlbumEditModal from '$lib/modals/AlbumEditModal.svelte'; - import AlbumShareModal from '$lib/modals/AlbumShareModal.svelte'; + import AlbumOptionsModal from '$lib/modals/AlbumOptionsModal.svelte'; import { handleDeleteAlbum, handleDownloadAlbum } from '$lib/services/album.service'; import { AlbumFilter, @@ -202,7 +202,7 @@ } case 'share': { - await modalManager.show(AlbumShareModal, { album: selectedAlbum }); + await modalManager.show(AlbumOptionsModal, { album: selectedAlbum }); break; } diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts index 7124fc4524..d612d4fe8c 100644 --- a/web/src/lib/managers/event-manager.svelte.ts +++ b/web/src/lib/managers/event-manager.svelte.ts @@ -3,6 +3,7 @@ import type { ReleaseEvent } from '$lib/types'; import type { TreeNode } from '$lib/utils/tree-utils'; import type { AlbumResponseDto, + AlbumUserRole, ApiKeyResponseDto, AssetResponseDto, LibraryResponseDto, @@ -39,6 +40,8 @@ export type Events = { AlbumUpdate: [AlbumResponseDto]; AlbumDelete: [AlbumResponseDto]; AlbumShare: []; + AlbumUserUpdate: [{ albumId: string; userId: string; role: AlbumUserRole }]; + AlbumUserDelete: [{ albumId: string; userId: string }]; PersonUpdate: [PersonResponseDto]; diff --git a/web/src/lib/modals/AlbumAddUsersModal.svelte b/web/src/lib/modals/AlbumAddUsersModal.svelte new file mode 100644 index 0000000000..a7e976278b --- /dev/null +++ b/web/src/lib/modals/AlbumAddUsersModal.svelte @@ -0,0 +1,56 @@ + + + + + {#each filteredUsers as user (user.id)} + handleToggle(user)}> + +
+ {user.name} + {user.email} +
+
+ {:else} + {$t('album_share_no_users')} + {/each} +
+
diff --git a/web/src/lib/modals/AlbumOptionsModal.svelte b/web/src/lib/modals/AlbumOptionsModal.svelte index 1234fd8b76..cb294227f4 100644 --- a/web/src/lib/modals/AlbumOptionsModal.svelte +++ b/web/src/lib/modals/AlbumOptionsModal.svelte @@ -1,184 +1,163 @@ - onClose({ action: 'refreshAlbum' })} size="small"> + (album = newAlbum)} +/> + + -
-
-

{$t('settings')}

-
- {#if order} - + +
+ {$t('settings')} +
+ {#if album.order} + + +
{#each album.albumUsers as { user, role } (user.id)} -
-
- +
+
+
+ +
+ {user.name}
-
{user.name}
- {#if role === AlbumUserRole.Viewer} - {$t('role_viewer')} - {:else} - {$t('role_editor')} - {/if} - {#if user.id !== album.ownerId} - - {#if role === AlbumUserRole.Viewer} - handleUpdateSharedUserRole(user, AlbumUserRole.Editor)} - text={$t('allow_edits')} - /> - {:else} - handleUpdateSharedUserRole(user, AlbumUserRole.Viewer)} - text={$t('disallow_edits')} - /> - {/if} - - handleRemoveUser(user)} text={$t('remove')} /> - - {/if} + +