Yaros 2025-12-10 18:20:45 +07:00 committed by GitHub
commit 670d15e401
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 15 deletions

@ -54,6 +54,8 @@
isShowDeleteConfirmation?: boolean;
onSelect?: (asset: TimelineAsset) => void;
onEscape?: () => void;
onKeyboardDelete?: (assetIds: string[]) => void;
onKeyboardArchive?: (ids: string[]) => void;
children?: Snippet;
empty?: Snippet;
customThumbnailLayout?: Snippet<[TimelineAsset]>;
@ -87,6 +89,8 @@
isShowDeleteConfirmation = $bindable(false),
onSelect = () => {},
onEscape = () => {},
onKeyboardDelete,
onKeyboardArchive,
children,
empty,
customThumbnailLayout,
@ -604,6 +608,8 @@
{assetInteraction}
bind:isShowDeleteConfirmation
{onEscape}
onAssetDelete={onKeyboardDelete}
onArchive={onKeyboardArchive}
/>
{#if timelineManager.months.length > 0}

@ -27,6 +27,8 @@
assetInteraction: AssetInteraction;
isShowDeleteConfirmation: boolean;
onEscape?: () => void;
onAssetDelete?: (assetIds: string[]) => void;
onArchive?: (ids: string[]) => void;
scrollToAsset: (asset: TimelineAsset) => boolean;
}
@ -35,6 +37,8 @@
assetInteraction,
isShowDeleteConfirmation = $bindable(false),
onEscape,
onAssetDelete,
onArchive,
scrollToAsset,
}: Props = $props();
@ -44,7 +48,10 @@
isShowDeleteConfirmation = false;
await deleteAssets(
!(isTrashEnabled && !force),
(assetIds) => timelineManager.removeAssets(assetIds),
(assetIds) => {
timelineManager.removeAssets(assetIds);
onAssetDelete?.(assetIds);
},
assetInteraction.selectedAssets,
!isTrashEnabled || force ? undefined : (assets) => timelineManager.upsertAssets(assets),
);
@ -81,6 +88,7 @@
const visibility = assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive;
const ids = await archiveAssets(assetInteraction.selectedAssets, visibility);
timelineManager.update(ids, (asset) => (asset.visibility = visibility));
onArchive?.(ids);
deselectAllAssets();
};

@ -38,13 +38,7 @@
import { getPeopleThumbnailUrl } from '$lib/utils';
import { handleError } from '$lib/utils/handle-error';
import { isExternalUrl } from '$lib/utils/navigation';
import {
AssetVisibility,
getPersonStatistics,
searchPerson,
updatePerson,
type PersonResponseDto,
} from '@immich/sdk';
import { AssetVisibility, searchPerson, updatePerson, type PersonResponseDto } from '@immich/sdk';
import { LoadingSpinner, modalManager, toastManager } from '@immich/ui';
import {
mdiAccountBoxOutline,
@ -69,7 +63,7 @@
let { data }: Props = $props();
let numberOfAssets = $state(data.statistics.assets);
let numberOfAssets = $derived(data.statistics.assets);
let { isViewing: showAssetViewer } = assetViewingStore;
let timelineManager = $state<TimelineManager>() as TimelineManager;
@ -129,12 +123,7 @@
};
const updateAssetCount = async () => {
try {
const { assets } = await getPersonStatistics({ id: person.id });
numberOfAssets = assets;
} catch (error) {
handleError(error, "Can't update the asset count");
}
await invalidateAll();
};
afterNavigate(({ from }) => {
@ -373,6 +362,8 @@
singleSelect={viewMode === PersonPageViewMode.SELECT_PERSON}
onSelect={handleSelectFeaturePhoto}
onEscape={handleEscape}
onKeyboardDelete={() => updateAssetCount()}
onKeyboardArchive={() => updateAssetCount()}
>
{#if viewMode === PersonPageViewMode.VIEW_ASSETS}
<!-- Person information block -->