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';