From 97a594556bd1498107c3e113f7dd471a511ba926 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Mon, 19 Jan 2026 12:16:16 -0500 Subject: [PATCH] refactor: sharing page actions (#25368) --- web/src/lib/services/album.service.ts | 11 ++++++++ web/src/lib/services/shared-link.service.ts | 12 +++++++- web/src/routes/(user)/sharing/+page.svelte | 31 ++++++--------------- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/web/src/lib/services/album.service.ts b/web/src/lib/services/album.service.ts index 6a463ade73..240867be54 100644 --- a/web/src/lib/services/album.service.ts +++ b/web/src/lib/services/album.service.ts @@ -7,6 +7,7 @@ import AlbumOptionsModal from '$lib/modals/AlbumOptionsModal.svelte'; import SharedLinkCreateModal from '$lib/modals/SharedLinkCreateModal.svelte'; import { Route } from '$lib/route'; import { user } from '$lib/stores/user.store'; +import { createAlbumAndRedirect } from '$lib/utils/album-utils'; import { downloadArchive } from '$lib/utils/asset-utils'; import { openFileUploadDialog } from '$lib/utils/file-uploader'; import { handleError } from '$lib/utils/handle-error'; @@ -28,6 +29,16 @@ import { mdiLink, mdiPlus, mdiPlusBoxOutline, mdiShareVariantOutline, mdiUpload import { type MessageFormatter } from 'svelte-i18n'; import { get } from 'svelte/store'; +export const getAlbumsActions = ($t: MessageFormatter) => { + const Create: ActionItem = { + title: $t('create_album'), + icon: mdiPlusBoxOutline, + onAction: () => createAlbumAndRedirect(), + }; + + return { Create }; +}; + export const getAlbumActions = ($t: MessageFormatter, album: AlbumResponseDto) => { const isOwned = get(user).id === album.ownerId; diff --git a/web/src/lib/services/shared-link.service.ts b/web/src/lib/services/shared-link.service.ts index 869a93a381..9afaf5ce1b 100644 --- a/web/src/lib/services/shared-link.service.ts +++ b/web/src/lib/services/shared-link.service.ts @@ -18,9 +18,19 @@ import { type SharedLinkResponseDto, } from '@immich/sdk'; import { modalManager, toastManager, type ActionItem } from '@immich/ui'; -import { mdiContentCopy, mdiPencilOutline, mdiQrcode, mdiTrashCanOutline } from '@mdi/js'; +import { mdiContentCopy, mdiLink, mdiPencilOutline, mdiQrcode, mdiTrashCanOutline } from '@mdi/js'; import type { MessageFormatter } from 'svelte-i18n'; +export const getSharedLinksActions = ($t: MessageFormatter) => { + const ViewAll: ActionItem = { + title: $t('shared_links'), + icon: mdiLink, + onAction: () => goto(Route.sharedLinks()), + }; + + return { ViewAll }; +}; + export const getSharedLinkActions = ($t: MessageFormatter, sharedLink: SharedLinkResponseDto) => { const Edit: ActionItem = { title: $t('edit_link'), diff --git a/web/src/routes/(user)/sharing/+page.svelte b/web/src/routes/(user)/sharing/+page.svelte index 8da3ba5455..93f2246fe4 100644 --- a/web/src/routes/(user)/sharing/+page.svelte +++ b/web/src/routes/(user)/sharing/+page.svelte @@ -5,6 +5,8 @@ import EmptyPlaceholder from '$lib/components/shared-components/empty-placeholder.svelte'; import UserAvatar from '$lib/components/shared-components/user-avatar.svelte'; import { Route } from '$lib/route'; + import { getAlbumsActions } from '$lib/services/album.service'; + import { getSharedLinksActions } from '$lib/services/shared-link.service'; import { AlbumFilter, AlbumGroupBy, @@ -13,15 +15,12 @@ SortOrder, type AlbumViewSettings, } from '$lib/stores/preferences.store'; - import { createAlbumAndRedirect } from '$lib/utils/album-utils'; - import { Button, HStack, Text } from '@immich/ui'; - import { mdiLink, mdiPlusBoxOutline } from '@mdi/js'; import { t } from 'svelte-i18n'; import type { PageData } from './$types'; - interface Props { + type Props = { data: PageData; - } + }; let { data }: Props = $props(); @@ -34,26 +33,12 @@ sortOrder: SortOrder.Desc, collapsedGroups: {}, }; + + const { Create: CreateAlbum } = $derived(getAlbumsActions($t)); + const { ViewAll: ViewSharedLinks } = $derived(getSharedLinksActions($t)); - - {#snippet buttons()} - - - - - {/snippet} - +
{#if data.partners.length > 0}