From 2d816e89ad819f7f9ddefe9476ab1e439763ed22 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Wed, 17 Sep 2025 17:23:42 -0400 Subject: [PATCH] refactor(web): prefer modal manager (#22152) --- web/src/lib/modals/AlbumShareModal.svelte | 214 +++++++++++----------- 1 file changed, 106 insertions(+), 108 deletions(-) diff --git a/web/src/lib/modals/AlbumShareModal.svelte b/web/src/lib/modals/AlbumShareModal.svelte index 6bde18000b..7aa59cbd22 100644 --- a/web/src/lib/modals/AlbumShareModal.svelte +++ b/web/src/lib/modals/AlbumShareModal.svelte @@ -13,7 +13,7 @@ type SharedLinkResponseDto, type UserResponseDto, } from '@immich/sdk'; - import { Button, Icon, Link, Modal, ModalBody, Stack, Text } from '@immich/ui'; + import { Button, Icon, Link, Modal, ModalBody, modalManager, Stack, Text } from '@immich/ui'; import { mdiCheck, mdiEye, mdiLink, mdiPencil } from '@mdi/js'; import { onMount } from 'svelte'; import { t } from 'svelte-i18n'; @@ -29,9 +29,11 @@ let users: UserResponseDto[] = $state([]); let selectedUsers: Record = $state({}); - let sharedLinkUrl = $state(''); - const handleViewQrCode = (sharedLink: SharedLinkResponseDto) => { - sharedLinkUrl = makeSharedLinkUrl(sharedLink); + const handleViewQrCode = async (sharedLink: SharedLinkResponseDto) => { + await modalManager.show(QrCodeModal, { + title: $t('view_link'), + value: makeSharedLinkUrl(sharedLink), + }); }; const roleOptions: Array<{ title: string; value: AlbumUserRole | 'none'; icon?: string }> = [ @@ -71,25 +73,64 @@ }; -{#if sharedLinkUrl} - (sharedLinkUrl = '')} value={sharedLinkUrl} /> -{:else} - - - {#if Object.keys(selectedUsers).length > 0} -
-

{$t('selected')}

-
- {#each Object.values(selectedUsers) as { user } (user.id)} - {#key user.id} -
-
- -
+ + + {#if Object.keys(selectedUsers).length > 0} +
+

{$t('selected')}

+
+ {#each Object.values(selectedUsers) as { user } (user.id)} + {#key user.id} +
+
+ +
- + +
+

+ {user.name} +

+

+ {user.email} +

+
+ + ({ title, icon })} + onSelect={({ value }) => handleChangeRole(user, value)} + /> +
+ {/key} + {/each} +
+
+ {/if} + + {#if users.length + Object.keys(selectedUsers).length === 0} +

+ {$t('album_share_no_users')} +

+ {/if} + +
+ {#if users.length > 0 && users.length !== Object.keys(selectedUsers).length} + {$t('users')} + +
+ {#each users as user (user.id)} + {#if !Object.keys(selectedUsers).includes(user.id)} +
+
- {/key} - {/each} -
+ +
+ {/if} + {/each}
{/if} +
- {#if users.length + Object.keys(selectedUsers).length === 0} -

- {$t('album_share_no_users')} -

- {/if} - -
- {#if users.length > 0 && users.length !== Object.keys(selectedUsers).length} - {$t('users')} - -
- {#each users as user (user.id)} - {#if !Object.keys(selectedUsers).includes(user.id)} -
- -
- {/if} - {/each} -
- {/if} -
- - {#if users.length > 0} -
- -
- {/if} - -
- - - {#if sharedLinks.length > 0} -
- {$t('shared_links')} - onClose()} class="text-sm">{$t('view_all')} -
- - - {#each sharedLinks as sharedLink (sharedLink.id)} - handleViewQrCode(sharedLink)} /> - {/each} - - {/if} - + {#if users.length > 0} +
+ onClose({ + action: 'sharedUsers', + data: Object.values(selectedUsers).map(({ user, ...rest }) => ({ userId: user.id, ...rest })), + })}>{$t('add')} - - - -{/if} +
+ {/if} + +
+ + + {#if sharedLinks.length > 0} +
+ {$t('shared_links')} + onClose()} class="text-sm">{$t('view_all')} +
+ + + {#each sharedLinks as sharedLink (sharedLink.id)} + handleViewQrCode(sharedLink)} /> + {/each} + + {/if} + + +
+ +