diff --git a/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte b/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte
index df4439065d..9e14f8a074 100644
--- a/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte
+++ b/web/src/lib/components/shared-components/gallery-viewer/gallery-viewer.svelte
@@ -228,11 +228,9 @@
};
const toggleArchive = async () => {
- const onUndoArchive = assetInteraction.isAllArchived ? undefined : () => onReload?.();
const ids = await archiveAssets(
assetInteraction.selectedAssets,
assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive,
- onUndoArchive,
);
if (ids) {
assets = assets.filter((asset) => !ids.includes(asset.id));
diff --git a/web/src/lib/components/shared-components/map/map.svelte b/web/src/lib/components/shared-components/map/map.svelte
index a73d6b040b..d8c7e31473 100644
--- a/web/src/lib/components/shared-components/map/map.svelte
+++ b/web/src/lib/components/shared-components/map/map.svelte
@@ -318,12 +318,12 @@
untrack(() => map?.jumpTo({ center, zoom }));
});
- const onAssetsDelete = async () => {
+ const onAssetsChanged = async () => {
mapMarkers = await loadMapMarkers();
};
-
+
{
const visibility = unarchive ? AssetVisibility.Timeline : AssetVisibility.Archive;
const assets = [...getOwnedAssets()].filter((asset) => asset.visibility !== visibility);
- const onUndoArchive = (ids: string[]) => onArchive?.(ids, AssetVisibility.Timeline);
loading = true;
- const ids = await archiveAssets(assets, visibility as AssetVisibility, onUndoArchive);
+ const ids = await archiveAssets(assets, visibility as AssetVisibility);
if (ids) {
onArchive?.(ids, visibility);
clearSelect();
diff --git a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte
index 70041f4e33..612e7e22a3 100644
--- a/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte
+++ b/web/src/lib/components/timeline/actions/TimelineKeyboardActions.svelte
@@ -70,9 +70,7 @@
const toggleArchive = async () => {
const visibility = assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive;
- const onUndoArchive = (ids: string[]) =>
- timelineManager.update(ids, (asset) => (asset.visibility = AssetVisibility.Timeline));
- const ids = await archiveAssets(assetInteraction.selectedAssets, visibility, onUndoArchive);
+ const ids = await archiveAssets(assetInteraction.selectedAssets, visibility);
timelineManager.update(ids, (asset) => (asset.visibility = visibility));
eventManager.emit('AssetsArchive', ids);
deselectAllAssets();
diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts
index 25e1b3c45b..7d6a680065 100644
--- a/web/src/lib/managers/event-manager.svelte.ts
+++ b/web/src/lib/managers/event-manager.svelte.ts
@@ -34,6 +34,7 @@ export type Events = {
AssetUpdate: [AssetResponseDto];
AssetsArchive: [string[]];
+ AssetsUnarchive: [string[]];
AssetsDelete: [string[]];
AssetEditsApplied: [string];
AssetsTag: [string[]];
diff --git a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts
index 38c593bd00..0fc6c75b1f 100644
--- a/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts
+++ b/web/src/lib/managers/timeline-manager/timeline-manager.svelte.ts
@@ -23,7 +23,7 @@ import {
type TimelineDateTime,
type TimelineYearMonth,
} from '$lib/utils/timeline-util';
-import { AssetOrder, getAssetInfo, getTimeBuckets, type AssetResponseDto } from '@immich/sdk';
+import { AssetOrder, AssetVisibility, getAssetInfo, getTimeBuckets, type AssetResponseDto } from '@immich/sdk';
import { clamp, isEqual } from 'lodash-es';
import { SvelteDate, SvelteSet } from 'svelte/reactivity';
import { DayGroup } from './day-group.svelte';
@@ -114,6 +114,7 @@ export class TimelineManager extends VirtualScrollManager {
this.#unsubscribes.push(
eventManager.on({
AssetUpdate: (asset: AssetResponseDto) => this.upsertAssets([toTimelineAsset(asset)]),
+ AssetsUnarchive: (ids) => this.update(ids, (asset) => (asset.visibility = AssetVisibility.Timeline)),
}),
);
}
diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts
index 946fc66dec..8a9b5d888b 100644
--- a/web/src/lib/utils/asset-utils.ts
+++ b/web/src/lib/utils/asset-utils.ts
@@ -1,5 +1,6 @@
import { authManager } from '$lib/managers/auth-manager.svelte';
import { downloadManager } from '$lib/managers/download-manager.svelte';
+import { eventManager } from '$lib/managers/event-manager.svelte';
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte';
@@ -440,10 +441,7 @@ export const toggleArchive = async (asset: AssetResponseDto) => {
description: $t('added_to_archive'),
button: {
label: $t('undo'),
- onclick: () =>
- undoArchiveAssets([asset.id], () => {
- asset.isArchived = false;
- }),
+ onclick: () => undoArchiveAssets([asset.id]),
},
},
{ timeout: 5000 },
@@ -458,7 +456,7 @@ export const toggleArchive = async (asset: AssetResponseDto) => {
return asset;
};
-const undoArchiveAssets = async (ids: string[], onUndo: ((ids: string[]) => void) | undefined = undefined) => {
+const undoArchiveAssets = async (ids: string[]) => {
const $t = get(t);
try {
if (ids.length > 0) {
@@ -470,17 +468,13 @@ const undoArchiveAssets = async (ids: string[], onUndo: ((ids: string[]) => void
});
}
- onUndo?.(ids);
+ eventManager.emit('AssetsUnarchive', ids);
} catch (error) {
handleError(error, $t('errors.unable_to_archive_unarchive', { values: { archived: false } }));
}
};
-export const archiveAssets = async (
- assets: { id: string }[],
- visibility: AssetVisibility,
- onUndoArchive: ((ids: string[]) => void) | undefined = undefined,
-) => {
+export const archiveAssets = async (assets: { id: string }[], visibility: AssetVisibility) => {
const ids = assets.map(({ id }) => id);
const $t = get(t);
@@ -497,7 +491,7 @@ export const archiveAssets = async (
description: $t('archived_count', { values: { count: ids.length } }),
button: {
label: $t('undo'),
- onclick: () => undoArchiveAssets(ids, onUndoArchive),
+ onclick: () => undoArchiveAssets(ids),
},
},
{ timeout: 5000 },
diff --git a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte
index a891c01b3e..c9a8418322 100644
--- a/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte
+++ b/web/src/routes/(user)/people/[personId]/[[photos=photos]]/[[assetId=id]]/+page.svelte
@@ -330,6 +330,7 @@
onPersonAssetDelete={handlePersonAssetDelete}
onAssetsDelete={updateAssetCount}
onAssetsArchive={updateAssetCount}
+ onAssetsUnarchive={updateAssetCount}
/>