From 7cdc252384b41f8d9e3e7962897d407beba388cc Mon Sep 17 00:00:00 2001 From: Yaros Date: Thu, 11 Jun 2026 21:46:27 +0200 Subject: [PATCH] refactor: use eventmanager for onundoarchive --- .../asset-viewer/AssetViewer.svelte | 5 +--- .../asset-viewer/AssetViewerNavBar.svelte | 6 ++--- .../asset-viewer/actions/ArchiveAction.svelte | 6 ++--- .../timeline/TimelineAssetViewer.svelte | 24 +++++++++---------- web/src/lib/managers/event-manager.svelte.ts | 1 + web/src/lib/utils/actions.ts | 1 - web/src/lib/utils/asset-utils.ts | 8 +++---- 7 files changed, 22 insertions(+), 29 deletions(-) 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 } })); }