- {#each Object.keys(downloadStore.assets) as downloadKey (downloadKey)}
- {@const download = downloadStore.assets[downloadKey]}
+ {#each Object.keys(downloadManager.assets) as downloadKey (downloadKey)}
+ {@const download = downloadManager.assets[downloadKey]}
diff --git a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte
index c50c21bef8..4ab28a1958 100644
--- a/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte
+++ b/web/src/lib/components/asset-viewer/face-editor/face-editor.svelte
@@ -2,7 +2,6 @@
import ImageThumbnail from '$lib/components/assets/thumbnail/image-thumbnail.svelte';
import { dialogController } from '$lib/components/shared-components/dialog/dialog';
import { notificationController } from '$lib/components/shared-components/notification/notification';
- import { isFaceEditMode } from '$lib/stores/face-edit.svelte';
import { getPeopleThumbnailUrl } from '$lib/utils';
import { getAllPeople, createFace, type PersonResponseDto } from '@immich/sdk';
import { Button, Input } from '@immich/ui';
@@ -10,6 +9,7 @@
import { onMount } from 'svelte';
import { assetViewingStore } from '$lib/stores/asset-viewing.store';
import { handleError } from '$lib/utils/handle-error';
+ import { faceManager } from '$lib/managers/face.manager.svelte';
interface Props {
htmlElement: HTMLImageElement | HTMLVideoElement;
@@ -140,7 +140,7 @@
};
const cancel = () => {
- isFaceEditMode.value = false;
+ faceManager.isEditMode = false;
};
const getPeople = async () => {
@@ -303,7 +303,7 @@
} catch (error) {
handleError(error, 'Error tagging face');
} finally {
- isFaceEditMode.value = false;
+ faceManager.isEditMode = false;
}
};
diff --git a/web/src/lib/components/asset-viewer/photo-viewer.svelte b/web/src/lib/components/asset-viewer/photo-viewer.svelte
index d3a9da3633..eb159a96fc 100644
--- a/web/src/lib/components/asset-viewer/photo-viewer.svelte
+++ b/web/src/lib/components/asset-viewer/photo-viewer.svelte
@@ -20,7 +20,7 @@
import { handleError } from '$lib/utils/handle-error';
import FaceEditor from '$lib/components/asset-viewer/face-editor/face-editor.svelte';
import { photoViewerImgElement } from '$lib/stores/assets-store.svelte';
- import { isFaceEditMode } from '$lib/stores/face-edit.svelte';
+ import { faceManager } from '$lib/managers/face.manager.svelte';
interface Props {
asset: AssetResponseDto;
@@ -109,7 +109,7 @@
};
$effect(() => {
- if (isFaceEditMode.value && $photoZoomState.currentZoom > 1) {
+ if (faceManager.isEditMode && $photoZoomState.currentZoom > 1) {
zoomToggle();
}
});
@@ -235,7 +235,7 @@
{/each}
- {#if isFaceEditMode.value}
+ {#if faceManager.isEditMode}
{/if}
{/if}
diff --git a/web/src/lib/components/asset-viewer/video-native-viewer.svelte b/web/src/lib/components/asset-viewer/video-native-viewer.svelte
index 07760b3c6b..6fba2fa2ca 100644
--- a/web/src/lib/components/asset-viewer/video-native-viewer.svelte
+++ b/web/src/lib/components/asset-viewer/video-native-viewer.svelte
@@ -9,8 +9,8 @@
import type { SwipeCustomEvent } from 'svelte-gestures';
import { fade } from 'svelte/transition';
import { t } from 'svelte-i18n';
- import { isFaceEditMode } from '$lib/stores/face-edit.svelte';
import FaceEditor from '$lib/components/asset-viewer/face-editor/face-editor.svelte';
+ import { faceManager } from '$lib/managers/face.manager.svelte';
interface Props {
assetId: string;
@@ -94,7 +94,7 @@
let containerHeight = $state(0);
$effect(() => {
- if (isFaceEditMode.value) {
+ if (faceManager.isEditMode) {
videoPlayer?.pause();
}
});
@@ -141,7 +141,7 @@
{/if}
- {#if isFaceEditMode.value}
+ {#if faceManager.isEditMode}
{/if}
diff --git a/web/src/lib/components/share-page/individual-shared-viewer.svelte b/web/src/lib/components/share-page/individual-shared-viewer.svelte
index 36ccf3f7dc..049ad920ad 100644
--- a/web/src/lib/components/share-page/individual-shared-viewer.svelte
+++ b/web/src/lib/components/share-page/individual-shared-viewer.svelte
@@ -2,7 +2,6 @@
import { goto } from '$app/navigation';
import type { Action } from '$lib/components/asset-viewer/actions/action';
import { AppRoute, AssetAction } from '$lib/constants';
- import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store';
import { getKey, handlePromiseError } from '$lib/utils';
import { downloadArchive } from '$lib/utils/asset-utils';
import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader';
@@ -22,6 +21,7 @@
import type { Viewport } from '$lib/stores/assets-store.svelte';
import { t } from 'svelte-i18n';
import { AssetInteraction } from '$lib/stores/asset-interaction.svelte';
+ import { dragAndDropManager } from '$lib/managers/drag-and-drop.manager.svelte';
interface Props {
sharedLink: SharedLinkResponseDto;
@@ -35,10 +35,10 @@
let assets = $derived(sharedLink.assets);
- dragAndDropFilesStore.subscribe((value) => {
- if (value.isDragging && value.files.length > 0) {
- handlePromiseError(handleUploadAssets(value.files));
- dragAndDropFilesStore.set({ isDragging: false, files: [] });
+ $effect(() => {
+ if (dragAndDropManager.isDragging && dragAndDropManager.files.length > 0) {
+ handlePromiseError(handleUploadAssets(dragAndDropManager.files));
+ dragAndDropManager.reset();
}
});
diff --git a/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte b/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte
index a3e12e4f12..4777b73509 100644
--- a/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte
+++ b/web/src/lib/components/shared-components/context-menu/button-context-menu.svelte
@@ -6,7 +6,7 @@
type Padding,
} from '$lib/components/elements/buttons/circle-icon-button.svelte';
import ContextMenu from '$lib/components/shared-components/context-menu/context-menu.svelte';
- import { optionClickCallbackStore, selectedIdStore } from '$lib/stores/context-menu.store';
+ import { contextMenuManager } from '$lib/managers/context-menu.manager.svelte';
import {
getContextMenuPositionFromBoundingRect,
getContextMenuPositionFromEvent,
@@ -97,7 +97,7 @@
}
focusButton();
isOpen = false;
- $selectedIdStore = undefined;
+ contextMenuManager.selectedId = undefined;
};
const handleOptionClick = () => {
@@ -124,7 +124,7 @@
$effect(() => {
if (isOpen) {
- $optionClickCallbackStore = handleOptionClick;
+ contextMenuManager.optionClickCallback = handleOptionClick;
}
});
@@ -139,8 +139,8 @@
isOpen,
onEscape,
openDropdown,
- selectedId: $selectedIdStore,
- selectionChanged: (id) => ($selectedIdStore = id),
+ selectedId: contextMenuManager.selectedId,
+ selectionChanged: (id) => (contextMenuManager.selectedId = id),
}}
onresize={onResize}
{...restProps}
@@ -178,7 +178,7 @@