fix(web): person asset count doesn't update when navigating (#24438)

This commit is contained in:
Yaros 2026-01-09 15:55:23 +01:00 committed by GitHub
parent 1d71bb5a79
commit cca037b03c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 12 additions and 16 deletions

View file

@ -6,6 +6,7 @@
setFocusTo as setFocusToInit, setFocusTo as setFocusToInit,
} from '$lib/components/timeline/actions/focus-actions'; } from '$lib/components/timeline/actions/focus-actions';
import { AppRoute } from '$lib/constants'; import { AppRoute } from '$lib/constants';
import { eventManager } from '$lib/managers/event-manager.svelte';
import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte';
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
@ -46,7 +47,10 @@
await deleteAssets( await deleteAssets(
force, force,
(assetIds) => timelineManager.removeAssets(assetIds), (assetIds) => {
timelineManager.removeAssets(assetIds);
eventManager.emit('AssetsDelete', assetIds);
},
selectedAssets, selectedAssets,
force ? undefined : (assets) => timelineManager.upsertAssets(assets), force ? undefined : (assets) => timelineManager.upsertAssets(assets),
); );
@ -70,6 +74,7 @@
const visibility = assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive; const visibility = assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive;
const ids = await archiveAssets(assetInteraction.selectedAssets, visibility); const ids = await archiveAssets(assetInteraction.selectedAssets, visibility);
timelineManager.update(ids, (asset) => (asset.visibility = visibility)); timelineManager.update(ids, (asset) => (asset.visibility = visibility));
eventManager.emit('AssetsArchive', ids);
deselectAllAssets(); deselectAllAssets();
}; };

View file

@ -32,6 +32,8 @@ export type Events = {
AssetUpdate: [AssetResponseDto]; AssetUpdate: [AssetResponseDto];
AssetReplace: [{ oldAssetId: string; newAssetId: string }]; AssetReplace: [{ oldAssetId: string; newAssetId: string }];
AssetsArchive: [string[]];
AssetsDelete: [string[]];
AlbumAddAssets: []; AlbumAddAssets: [];
AlbumUpdate: [AlbumResponseDto]; AlbumUpdate: [AlbumResponseDto];

View file

@ -40,13 +40,7 @@
import { getPeopleThumbnailUrl } from '$lib/utils'; import { getPeopleThumbnailUrl } from '$lib/utils';
import { handleError } from '$lib/utils/handle-error'; import { handleError } from '$lib/utils/handle-error';
import { isExternalUrl } from '$lib/utils/navigation'; import { isExternalUrl } from '$lib/utils/navigation';
import { import { AssetVisibility, searchPerson, updatePerson, type PersonResponseDto } from '@immich/sdk';
AssetVisibility,
getPersonStatistics,
searchPerson,
updatePerson,
type PersonResponseDto,
} from '@immich/sdk';
import { LoadingSpinner, modalManager, toastManager } from '@immich/ui'; import { LoadingSpinner, modalManager, toastManager } from '@immich/ui';
import { import {
mdiAccountBoxOutline, mdiAccountBoxOutline,
@ -70,7 +64,7 @@
let { data }: Props = $props(); let { data }: Props = $props();
let numberOfAssets = $state(data.statistics.assets); let numberOfAssets = $derived(data.statistics.assets);
let { isViewing: showAssetViewer } = assetViewingStore; let { isViewing: showAssetViewer } = assetViewingStore;
let timelineManager = $state<TimelineManager>() as TimelineManager; let timelineManager = $state<TimelineManager>() as TimelineManager;
@ -129,12 +123,7 @@
}; };
const updateAssetCount = async () => { const updateAssetCount = async () => {
try { await invalidateAll();
const { assets } = await getPersonStatistics({ id: person.id });
numberOfAssets = assets;
} catch (error) {
handleError(error, "Can't update the asset count");
}
}; };
afterNavigate(({ from }) => { afterNavigate(({ from }) => {
@ -344,7 +333,7 @@
const { SetDateOfBirth } = $derived(getPersonActions($t, person)); const { SetDateOfBirth } = $derived(getPersonActions($t, person));
</script> </script>
<OnEvents {onPersonUpdate} /> <OnEvents {onPersonUpdate} onAssetsDelete={updateAssetCount} onAssetsArchive={updateAssetCount} />
<main <main
class="relative z-0 h-dvh overflow-hidden px-2 md:px-6 md:pt-(--navbar-height-md) pt-(--navbar-height)" class="relative z-0 h-dvh overflow-hidden px-2 md:px-6 md:pt-(--navbar-height-md) pt-(--navbar-height)"