diff --git a/web/src/lib/components/asset-viewer/AssetViewer.svelte b/web/src/lib/components/asset-viewer/AssetViewer.svelte
index 3126431e5b..f12caa8c79 100644
--- a/web/src/lib/components/asset-viewer/AssetViewer.svelte
+++ b/web/src/lib/components/asset-viewer/AssetViewer.svelte
@@ -20,7 +20,7 @@
import { alwaysLoadOriginalVideo } from '$lib/stores/preferences.store';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store';
import { getSharedLink, handlePromiseError } from '$lib/utils';
- import type { OnUndoArchive, OnUndoDelete } from '$lib/utils/actions';
+ import type { OnUndoDelete } from '$lib/utils/actions';
import { navigateToAsset } from '$lib/utils/asset-utils';
import { handleError } from '$lib/utils/handle-error';
import { InvocationTracker } from '$lib/utils/invocationTracker';
@@ -70,7 +70,6 @@
preAction?: PreAction;
onAction?: OnAction;
onUndoDelete?: OnUndoDelete;
- onUndoArchive?: OnUndoArchive;
onClose?: (assetId: string) => void;
onRemoveFromAlbum?: (assetIds: string[]) => void;
onRandom?: () => Promise<{ id: string } | undefined>;
@@ -87,7 +86,6 @@
preAction,
onAction,
onUndoDelete,
- onUndoArchive,
onClose,
onRemoveFromAlbum,
onRandom,
@@ -504,7 +502,6 @@
preAction={handlePreAction}
onAction={handleAction}
{onUndoDelete}
- {onUndoArchive}
onPlaySlideshow={() => ($slideshowState = SlideshowState.PlaySlideshow)}
onClose={onClose ? () => onClose(stack?.primaryAssetId ?? asset.id) : undefined}
{onRemoveFromAlbum}
diff --git a/web/src/lib/components/asset-viewer/AssetViewerNavBar.svelte b/web/src/lib/components/asset-viewer/AssetViewerNavBar.svelte
index 25ad397b2c..75504765e2 100644
--- a/web/src/lib/components/asset-viewer/AssetViewerNavBar.svelte
+++ b/web/src/lib/components/asset-viewer/AssetViewerNavBar.svelte
@@ -27,7 +27,7 @@
import { getGlobalActions } from '$lib/services/app.service';
import { getAssetActions } from '$lib/services/asset.service';
import { getSharedLink, withoutIcons } from '$lib/utils';
- import type { OnUndoArchive, OnUndoDelete } from '$lib/utils/actions';
+ import type { OnUndoDelete } from '$lib/utils/actions';
import { toTimelineAsset } from '$lib/utils/timeline-util';
import {
AssetTypeEnum,
@@ -58,7 +58,6 @@
preAction: PreAction;
onAction: OnAction;
onUndoDelete?: OnUndoDelete;
- onUndoArchive?: OnUndoArchive;
onPlaySlideshow: () => void;
onClose?: () => void;
onRemoveFromAlbum?: (assetIds: string[]) => void;
@@ -75,7 +74,6 @@
preAction,
onAction,
onUndoDelete = undefined,
- onUndoArchive = undefined,
onPlaySlideshow,
onClose,
onRemoveFromAlbum,
@@ -190,7 +188,7 @@
{#if !isLocked}
{#if isOwner}
-
+
{#if !asset.isArchived && !asset.isTrashed}
void;
}
- let { asset, onAction, preAction, onUndoArchive }: Props = $props();
+ let { asset, onAction, preAction }: Props = $props();
const onArchive = async () => {
if (!asset.isArchived) {
preAction({ type: AssetAction.ARCHIVE, asset: toTimelineAsset(asset) });
}
- const updatedAsset = await toggleArchive(asset, onUndoArchive);
+ const updatedAsset = await toggleArchive(asset);
if (updatedAsset) {
onAction({ type: asset.isArchived ? AssetAction.ARCHIVE : AssetAction.UNARCHIVE, asset: toTimelineAsset(asset) });
}
diff --git a/web/src/lib/components/timeline/TimelineAssetViewer.svelte b/web/src/lib/components/timeline/TimelineAssetViewer.svelte
index 7d4e7be565..828b1a4b99 100644
--- a/web/src/lib/components/timeline/TimelineAssetViewer.svelte
+++ b/web/src/lib/components/timeline/TimelineAssetViewer.svelte
@@ -7,6 +7,7 @@
import { authManager } from '$lib/managers/auth-manager.svelte';
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
+ import { eventManager } from '$lib/managers/event-manager.svelte';
import { websocketEvents } from '$lib/stores/websocket';
import { handlePromiseError } from '$lib/utils';
import { updateStackedAssetInTimeline, updateUnstackedAssetInTimeline } from '$lib/utils/actions';
@@ -209,17 +210,6 @@
await navigate({ targetRoute: 'current', assetId: restoredAsset.id });
};
- const handleUndoArchive = async (assets: TimelineAsset[]) => {
- if (assets.length === 0) {
- return;
- }
-
- const restoredAsset = assets[0];
- const asset = await getAssetInfo({ ...authManager.params, id: restoredAsset.id });
- assetViewerManager.setAsset(asset);
- await navigate({ targetRoute: 'current', assetId: restoredAsset.id });
- };
-
const handleUpdateOrUpload = (asset: AssetResponseDto) => {
if (asset.id === assetCursor.current.id) {
void loadCloseAssets(asset);
@@ -230,6 +220,17 @@
const unsubscribes = [
websocketEvents.on('on_upload_success', (asset: AssetResponseDto) => handleUpdateOrUpload(asset)),
websocketEvents.on('on_asset_update', (asset: AssetResponseDto) => handleUpdateOrUpload(asset)),
+ eventManager.on({
+ AssetsUndoArchive: async (assets) => {
+ if (assets.length === 0) {
+ return;
+ }
+ const restoredAsset = assets[0];
+ const asset = await getAssetInfo({ ...authManager.params, id: restoredAsset.id });
+ assetViewerManager.setAsset(asset);
+ await navigate({ targetRoute: 'current', assetId: restoredAsset.id });
+ },
+ }),
];
return () => {
for (const unsubscribe of unsubscribes) {
@@ -259,7 +260,6 @@
assetCacheManager.invalidate();
}}
onUndoDelete={handleUndoDelete}
- onUndoArchive={handleUndoArchive}
onRandom={handleRandom}
onRemoveFromAlbum={handleRemoveFromAlbum}
onClose={handleClose}
diff --git a/web/src/lib/managers/event-manager.svelte.ts b/web/src/lib/managers/event-manager.svelte.ts
index 64fc85b3c5..13bdaf55d6 100644
--- a/web/src/lib/managers/event-manager.svelte.ts
+++ b/web/src/lib/managers/event-manager.svelte.ts
@@ -35,6 +35,7 @@ export type Events = {
AssetUpdate: [AssetResponseDto];
AssetsArchive: [string[]];
AssetsUnarchive: [TimelineAsset[]];
+ AssetsUndoArchive: [TimelineAsset[]];
AssetsDelete: [string[]];
AssetEditsApplied: [string];
AssetsTag: [string[]];
diff --git a/web/src/lib/utils/actions.ts b/web/src/lib/utils/actions.ts
index 0c4bf9e468..59c431557b 100644
--- a/web/src/lib/utils/actions.ts
+++ b/web/src/lib/utils/actions.ts
@@ -9,7 +9,6 @@ import { handleError } from './handle-error';
export type OnDelete = (assetIds: string[]) => void;
export type OnUndoDelete = (assets: TimelineAsset[]) => void;
-export type OnUndoArchive = (assets: TimelineAsset[]) => void;
export type OnRestore = (ids: string[]) => void;
export type OnLink = (assets: { still: TimelineAsset; motion: TimelineAsset }) => void;
export type OnUnlink = (assets: { still: TimelineAsset; motion: TimelineAsset }) => void;
diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts
index 90f110848b..1efadca26b 100644
--- a/web/src/lib/utils/asset-utils.ts
+++ b/web/src/lib/utils/asset-utils.ts
@@ -391,7 +391,7 @@ export const selectAllAssets = async (timelineManager: TimelineManager, assetInt
}
};
-export const toggleArchive = async (asset: AssetResponseDto, onUndoArchive?: (assets: TimelineAsset[]) => void) => {
+export const toggleArchive = async (asset: AssetResponseDto) => {
const $t = get(t);
try {
const data = await updateAsset({
@@ -409,7 +409,7 @@ export const toggleArchive = async (asset: AssetResponseDto, onUndoArchive?: (as
description: $t('added_to_archive'),
button: {
label: $t('undo'),
- onclick: () => undoArchiveAssets([timelineAsset], onUndoArchive),
+ onclick: () => undoArchiveAssets([timelineAsset]),
},
},
{ timeout: 5000 },
@@ -424,7 +424,7 @@ export const toggleArchive = async (asset: AssetResponseDto, onUndoArchive?: (as
return asset;
};
-const undoArchiveAssets = async (assets: TimelineAsset[], onUndoArchive?: (assets: TimelineAsset[]) => void) => {
+const undoArchiveAssets = async (assets: TimelineAsset[]) => {
const $t = get(t);
try {
const ids = assets.map((a) => a.id);
@@ -441,7 +441,7 @@ const undoArchiveAssets = async (assets: TimelineAsset[], onUndoArchive?: (asset
asset.visibility = AssetVisibility.Timeline;
}
eventManager.emit('AssetsUnarchive', assets);
- onUndoArchive?.(assets);
+ eventManager.emit('AssetsUndoArchive', assets);
} catch (error) {
handleError(error, $t('errors.unable_to_archive_unarchive', { values: { archived: false } }));
}