diff --git a/web/src/lib/components/album-page/user-selection-modal.svelte b/web/src/lib/components/album-page/user-selection-modal.svelte index 5521d521735b3..a1c9f643e7063 100644 --- a/web/src/lib/components/album-page/user-selection-modal.svelte +++ b/web/src/lib/components/album-page/user-selection-modal.svelte @@ -174,7 +174,7 @@ {#if sharedLinks.length} diff --git a/web/src/params/shareType.ts b/web/src/params/shareType.ts new file mode 100644 index 0000000000000..fc720eee8e058 --- /dev/null +++ b/web/src/params/shareType.ts @@ -0,0 +1,5 @@ +import type { ParamMatcher } from '@sveltejs/kit'; + +export const match: ParamMatcher = (param: string) => { + return param === 'album' || param === 'individual'; +}; diff --git a/web/src/routes/(user)/sharing/sharedlinks/+page.ts b/web/src/routes/(user)/sharing/sharedlinks/+page.ts deleted file mode 100644 index 920e5bdba4792..0000000000000 --- a/web/src/routes/(user)/sharing/sharedlinks/+page.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { authenticate } from '$lib/utils/auth'; -import { getFormatter } from '$lib/utils/i18n'; -import type { PageLoad } from './$types'; - -export const load = (async () => { - await authenticate(); - const $t = await getFormatter(); - - return { - meta: { - title: $t('shared_links'), - }, - }; -}) satisfies PageLoad; diff --git a/web/src/routes/(user)/sharing/sharedlinks/+page.svelte b/web/src/routes/(user)/sharing/sharedlinks/[[type=shareType]]/[[sharedItemId=id]]/+page.svelte similarity index 87% rename from web/src/routes/(user)/sharing/sharedlinks/+page.svelte rename to web/src/routes/(user)/sharing/sharedlinks/[[type=shareType]]/[[sharedItemId=id]]/+page.svelte index 5e934143dff2a..88b5d5e39582a 100644 --- a/web/src/routes/(user)/sharing/sharedlinks/+page.svelte +++ b/web/src/routes/(user)/sharing/sharedlinks/[[type=shareType]]/[[sharedItemId=id]]/+page.svelte @@ -12,14 +12,22 @@ import { getAllSharedLinks, removeSharedLink, type SharedLinkResponseDto } from '@immich/sdk'; import { mdiArrowLeft } from '@mdi/js'; import { onMount } from 'svelte'; + import type { PageData } from './$types'; import { dialogController } from '$lib/components/shared-components/dialog/dialog'; import { t } from 'svelte-i18n'; + export let data: PageData; + let sharedLinks: SharedLinkResponseDto[] = []; let editSharedLink: SharedLinkResponseDto | null = null; const refresh = async () => { sharedLinks = await getAllSharedLinks(); + if (data.sharedItem.type === 'album') { + sharedLinks = sharedLinks.filter((link) => link.album?.id === data.sharedItem.id); + } else if (data.sharedItem.type === 'individual') { + sharedLinks = sharedLinks.filter((link) => link.assets.some((asset) => asset.id === data.sharedItem.id)); + } }; onMount(async () => { diff --git a/web/src/routes/(user)/sharing/sharedlinks/[[type=shareType]]/[[sharedItemId=id]]/+page.ts b/web/src/routes/(user)/sharing/sharedlinks/[[type=shareType]]/[[sharedItemId=id]]/+page.ts new file mode 100644 index 0000000000000..a73b29085b4bb --- /dev/null +++ b/web/src/routes/(user)/sharing/sharedlinks/[[type=shareType]]/[[sharedItemId=id]]/+page.ts @@ -0,0 +1,26 @@ +import { authenticate } from '$lib/utils/auth'; +import { getFormatter } from '$lib/utils/i18n'; +import { getAssetInfoFromParam } from '$lib/utils/navigation'; +import { getAlbumInfo } from '@immich/sdk'; +import type { PageLoad } from './$types'; + +export const load = (async ({ params }) => { + await authenticate(); + + if (params.type === 'album' && params.sharedItemId) { + await getAlbumInfo({ id: params.sharedItemId, withoutAssets: true }); + } else if (params.type === 'individual') { + await getAssetInfoFromParam({ assetId: params.sharedItemId }); + } + const $t = await getFormatter(); + + return { + sharedItem: { + type: params.type, + id: params.sharedItemId, + }, + meta: { + title: $t('shared_links'), + }, + }; +}) satisfies PageLoad;