diff --git a/web/src/lib/components/sharedlinks-page/shared-link-card.svelte b/web/src/lib/components/sharedlinks-page/SharedLinkCard.svelte similarity index 59% rename from web/src/lib/components/sharedlinks-page/shared-link-card.svelte rename to web/src/lib/components/sharedlinks-page/SharedLinkCard.svelte index 7187dc22ad..64cc79c08d 100644 --- a/web/src/lib/components/sharedlinks-page/shared-link-card.svelte +++ b/web/src/lib/components/sharedlinks-page/SharedLinkCard.svelte @@ -5,7 +5,7 @@ import { getSharedLinkActions } from '$lib/services/shared-link.service'; import { locale } from '$lib/stores/preferences.store'; import { SharedLinkType, type SharedLinkResponseDto } from '@immich/sdk'; - import { Badge, ContextMenuButton, MenuItemType, Text } from '@immich/ui'; + import { ContextMenuButton, MenuItemType, Text } from '@immich/ui'; import { DateTime, type ToRelativeUnit } from 'luxon'; import { t } from 'svelte-i18n'; @@ -32,6 +32,28 @@ }; const { Edit, Copy, Delete } = $derived(getSharedLinkActions($t, sharedLink)); + + const capabilities = $derived.by(() => { + const items = []; + + if (sharedLink.allowUpload) { + items.push($t('upload')); + } + + if (sharedLink.allowDownload) { + items.push($t('download')); + } + + if (sharedLink.showMetadata) { + items.push($t('exif')); + } + + if (sharedLink.password) { + items.push($t('password')); + } + + return items; + });
-
- - {#if sharedLink.type === SharedLinkType.Album} - {sharedLink.album?.albumName} - {:else if sharedLink.type === SharedLinkType.Individual} - {$t('individual_share')} - {/if} - - -
- {#if isExpired} - {$t('expired')} - {:else if expiresAt} - +
+
+ + {#if isExpired} + {$t('expired')} + {:else if expiresAt} {$t('expires_date', { values: { date: getCountDownExpirationDate(expiresAt, now) } })} - - {:else} - {$t('expires_date', { values: { date: '∞' } })} - {/if} + {:else} + {$t('expires_date', { values: { date: '∞' } })} + {/if} + - {#if sharedLink.slug} - {$t('custom_url')} - {/if} + + {#if sharedLink.type === SharedLinkType.Album} + {sharedLink.album?.albumName} + {:else if sharedLink.type === SharedLinkType.Individual} + {$t('individual_share')} + {/if} + - {#if sharedLink.allowUpload} - {$t('upload')} - {/if} - - {#if sharedLink.showMetadata && sharedLink.allowDownload} - {$t('download')} - {/if} - - {#if sharedLink.showMetadata} - {$t('exif')} - {/if} - - {#if sharedLink.password} - {$t('password')} + {#if sharedLink.description} + {sharedLink.description} {/if}
- {#if sharedLink.description} - {sharedLink.description} - {/if} +
+ {#each capabilities as capability, index (index)} + + {capability} + + {#if index < capabilities.length - 1} + + {/if} + {/each} +
diff --git a/web/src/routes/(user)/shared-links/[[id=id]]/+page.svelte b/web/src/routes/(user)/shared-links/[[id=id]]/+page.svelte index d8b35204dc..cc9afd4f64 100644 --- a/web/src/routes/(user)/shared-links/[[id=id]]/+page.svelte +++ b/web/src/routes/(user)/shared-links/[[id=id]]/+page.svelte @@ -3,7 +3,7 @@ import { page } from '$app/state'; import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; import OnEvents from '$lib/components/OnEvents.svelte'; - import SharedLinkCard from '$lib/components/sharedlinks-page/shared-link-card.svelte'; + import SharedLinkCard from '$lib/components/sharedlinks-page/SharedLinkCard.svelte'; import { AppRoute } from '$lib/constants'; import GroupTab from '$lib/elements/GroupTab.svelte'; import SharedLinkUpdateModal from '$lib/modals/SharedLinkUpdateModal.svelte';