From 523fe5bef718140735a7d2847aef74620026b63f Mon Sep 17 00:00:00 2001 From: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:10:33 +0200 Subject: [PATCH] refactor: album options modal (#19177) --- .../album-page/album-options.svelte | 202 ------------------ web/src/lib/modals/AlbumOptionsModal.svelte | 193 +++++++++++++++++ .../[[assetId=id]]/+page.svelte | 85 +++----- 3 files changed, 218 insertions(+), 262 deletions(-) delete mode 100644 web/src/lib/components/album-page/album-options.svelte create mode 100644 web/src/lib/modals/AlbumOptionsModal.svelte diff --git a/web/src/lib/components/album-page/album-options.svelte b/web/src/lib/components/album-page/album-options.svelte deleted file mode 100644 index 3a20e10602..0000000000 --- a/web/src/lib/components/album-page/album-options.svelte +++ /dev/null @@ -1,202 +0,0 @@ - - -{#if !selectedRemoveUser} - - -
-
-

{$t('settings').toUpperCase()}

-
- {#if order} - - {/if} - -
-
-
-
{$t('people').toUpperCase()}
-
- - -
-
- -
-
{user.name}
-
{$t('owner')}
-
- - {#each album.albumUsers as { user, role } (user.id)} -
-
- -
-
{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} - - handleMenuRemove(user)} text={$t('remove')} /> - - {/if} -
- {/each} -
-
-
-
-
-{/if} - -{#if selectedRemoveUser} - (confirmed ? handleRemoveUser() : (selectedRemoveUser = null))} - /> -{/if} diff --git a/web/src/lib/modals/AlbumOptionsModal.svelte b/web/src/lib/modals/AlbumOptionsModal.svelte new file mode 100644 index 0000000000..f9c9cab204 --- /dev/null +++ b/web/src/lib/modals/AlbumOptionsModal.svelte @@ -0,0 +1,193 @@ + + + onClose({ action: 'refreshAlbum' })} size="small"> + +
+
+

{$t('settings').toUpperCase()}

+
+ {#if order} + + {/if} + +
+
+
+
{$t('people').toUpperCase()}
+
+ + +
+
+ +
+
{user.name}
+
{$t('owner')}
+
+ + {#each album.albumUsers as { user, role } (user.id)} +
+
+ +
+
{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} +
+ {/each} +
+
+
+
+
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 faaa7f6ff6..f21230a316 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 @@ -4,7 +4,6 @@ import CastButton from '$lib/cast/cast-button.svelte'; import AlbumDescription from '$lib/components/album-page/album-description.svelte'; import AlbumMap from '$lib/components/album-page/album-map.svelte'; - import AlbumOptions from '$lib/components/album-page/album-options.svelte'; import AlbumSummary from '$lib/components/album-page/album-summary.svelte'; import AlbumTitle from '$lib/components/album-page/album-title.svelte'; import ActivityStatus from '$lib/components/asset-viewer/activity-status.svelte'; @@ -38,6 +37,7 @@ import { modalManager } from '$lib/managers/modal-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; + import AlbumOptionsModal from '$lib/modals/AlbumOptionsModal.svelte'; import AlbumShareModal from '$lib/modals/AlbumShareModal.svelte'; import AlbumUsersModal from '$lib/modals/AlbumUsersModal.svelte'; import QrCodeModal from '$lib/modals/QrCodeModal.svelte'; @@ -130,27 +130,6 @@ } }); - const handleToggleEnableActivity = async () => { - try { - const updateAlbum = await updateAlbumInfo({ - id: album.id, - updateAlbumDto: { - isActivityEnabled: !album.isActivityEnabled, - }, - }); - - album = { ...album, isActivityEnabled: updateAlbum.isActivityEnabled }; - - await refreshAlbum(); - notificationController.show({ - type: NotificationType.Info, - message: $t('activity_changed', { values: { enabled: album.isActivityEnabled } }), - }); - } catch (error) { - handleError(error, $t('errors.cant_change_activity', { values: { enabled: album.isActivityEnabled } })); - } - }; - const handleFavorite = async () => { try { await activityManager.toggleLike(); @@ -262,22 +241,6 @@ } }; - const handleRemoveUser = async (userId: string, nextViewMode: AlbumPageViewMode) => { - if (userId == 'me' || userId === $user.id) { - await goto(backUrl); - return; - } - - try { - await refreshAlbum(); - - // Dynamically set the view mode based on the passed argument - viewMode = album.albumUsers.length > 0 ? nextViewMode : AlbumPageViewMode.VIEW; - } catch (error) { - handleError(error, $t('errors.error_deleting_shared_user')); - } - }; - const handleDownloadAlbum = async () => { await downloadAlbum(album); }; @@ -453,6 +416,29 @@ album = await getAlbumInfo({ id: album.id, withoutAssets: true }); } }; + + const handleOptions = async () => { + const result = await modalManager.show(AlbumOptionsModal, { album, order: albumOrder, user: $user }); + + if (!result) { + return; + } + + switch (result.action) { + case 'changeOrder': { + albumOrder = result.order; + break; + } + case 'shareUser': { + await handleShare(); + break; + } + case 'refreshAlbum': { + await refreshAlbum(); + break; + } + } + };
@@ -697,11 +683,7 @@ text={$t('select_album_cover')} onClick={() => (viewMode = AlbumPageViewMode.SELECT_THUMBNAIL)} /> - (viewMode = AlbumPageViewMode.OPTIONS)} - /> + {/if} handleRemoveAlbum()} /> @@ -773,23 +755,6 @@ {/if}
-{#if viewMode === AlbumPageViewMode.OPTIONS && $user} - { - albumOrder = order; - await setModeToView(); - }} - onRemove={(userId) => handleRemoveUser(userId, AlbumPageViewMode.OPTIONS)} - onRefreshAlbum={refreshAlbum} - onClose={() => (viewMode = AlbumPageViewMode.VIEW)} - onToggleEnabledActivity={handleToggleEnableActivity} - onShowSelectSharedUser={handleShare} - /> -{/if} -