This commit is contained in:
Alex 2026-08-14 08:24:31 -05:00 committed by GitHub
commit 0c6d0c0563
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 4 deletions

View file

@ -8,8 +8,9 @@
import { assetMultiSelectManager } from '$lib/managers/asset-multi-select-manager.svelte';
import { Route } from '$lib/route';
import { getAssetBulkActions } from '$lib/services/asset.service';
import { AssetVisibility } from '@immich/sdk';
import { ActionButton, CommandPaletteDefaultProvider } from '@immich/ui';
import { handleError } from '$lib/utils/handle-error';
import { AssetVisibility, updatePartner } from '@immich/sdk';
import { ActionButton, CommandPaletteDefaultProvider, Field, Switch, Text } from '@immich/ui';
import { mdiArrowLeft } from '@mdi/js';
import { t } from 'svelte-i18n';
import type { PageData } from './$types';
@ -20,6 +21,8 @@
let { data }: Props = $props();
let inTimeline = $derived(data.inTimeline);
const options = $derived({
userId: data.partner.id,
visibility: AssetVisibility.Timeline,
@ -34,6 +37,15 @@
assetMultiSelectManager.clear();
return;
};
const handleToggleInTimeline = async (status: boolean) => {
try {
await updatePartner({ id: data.partner.id, partnerUpdateDto: { inTimeline: status } });
inTimeline = status;
} catch (error) {
handleError(error, $t('errors.unable_to_update_timeline_display_status'));
}
};
</script>
<main class="relative h-dvh overflow-hidden px-2 pt-(--navbar-height) max-md:pt-(--navbar-height-md) md:px-6">
@ -55,5 +67,13 @@
{$t('partner_list_user_photos', { values: { user: data.partner.name } })}
</p>
{/snippet}
{#snippet trailing()}
<Field class="flex w-full place-content-center place-items-center gap-2">
<Text size="small">
{$t('show_in_timeline')}
</Text>
<Switch bind:checked={inTimeline} onCheckedChange={handleToggleInTimeline} />
</Field>
{/snippet}
</ControlAppBar>
{/if}

View file

@ -1,4 +1,4 @@
import { getUser } from '@immich/sdk';
import { getPartners, getUser, PartnerDirection } from '@immich/sdk';
import { authenticate } from '$lib/utils/auth';
import { getFormatter } from '$lib/utils/i18n';
import type { PageLoad } from './$types';
@ -6,11 +6,16 @@ import type { PageLoad } from './$types';
export const load = (async ({ params, url }) => {
await authenticate(url);
const partner = await getUser({ id: params.userId });
const [partner, sharedWith] = await Promise.all([
getUser({ id: params.userId }),
getPartners({ direction: PartnerDirection.SharedWith }),
]);
const inTimeline = sharedWith.find((p) => p.id === params.userId)?.inTimeline ?? false;
const $t = await getFormatter();
return {
partner,
inTimeline,
meta: {
title: $t('partner'),
},