+
handleSendComment()}
/>
diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts
index 48c72221e5..957c9a17d2 100644
--- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts
+++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts
@@ -10,7 +10,6 @@ describe('AssetViewerNavBar component', () => {
const additionalProps = {
showCopyButton: false,
showZoomButton: false,
- showDetailButton: false,
showDownloadButton: false,
showMotionPlayButton: false,
showShareButton: false,
@@ -19,7 +18,6 @@ describe('AssetViewerNavBar component', () => {
onAction: () => {},
onRunJob: () => {},
onPlaySlideshow: () => {},
- onShowDetail: () => {},
onClose: () => {},
playOriginalVideo: false,
setPlayOriginalVideo: () => Promise.resolve(),
diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte
index 3bd08f0a7b..689cd5c20c 100644
--- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte
+++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte
@@ -24,6 +24,7 @@
import ButtonContextMenu from '$lib/components/shared-components/context-menu/button-context-menu.svelte';
import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte';
import { AppRoute } from '$lib/constants';
+ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte';
import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte';
import { getAssetActions, handleReplaceAsset } from '$lib/services/asset.service';
import { photoViewerImgElement } from '$lib/stores/assets-store.svelte';
@@ -68,7 +69,6 @@
person?: PersonResponseDto | null;
stack?: StackResponseDto | null;
showCloseButton?: boolean;
- showDetailButton: boolean;
showSlideshow?: boolean;
onZoomImage: () => void;
onCopyImage?: () => Promise
;
@@ -77,7 +77,6 @@
onUndoDelete?: OnUndoDelete;
onRunJob: (name: AssetJobName) => void;
onPlaySlideshow: () => void;
- onShowDetail: () => void;
// export let showEditorHandler: () => void;
onClose: () => void;
motionPhoto?: Snippet;
@@ -91,7 +90,6 @@
person = null,
stack = null,
showCloseButton = true,
- showDetailButton,
showSlideshow = false,
onZoomImage,
onCopyImage,
@@ -100,7 +98,6 @@
onUndoDelete = undefined,
onRunJob,
onPlaySlideshow,
- onShowDetail,
onClose,
motionPhoto,
playOriginalVideo = false,
@@ -143,7 +140,7 @@
shape="round"
color="danger"
icon={mdiAlertOutline}
- onclick={onShowDetail}
+ onclick={() => assetViewerManager.toggleDetailPanel()}
aria-label={$t('asset_offline')}
/>
{/if}
@@ -176,8 +173,8 @@
{/if}
- {#if showDetailButton}
-
+ {#if asset.hasMetadata}
+
{/if}
{#if isOwner}
diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte
index e846c01eae..8b35c00fa1 100644
--- a/web/src/lib/components/asset-viewer/asset-viewer.svelte
+++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte
@@ -9,12 +9,13 @@
import OnEvents from '$lib/components/OnEvents.svelte';
import { AppRoute, AssetAction, ProjectionType } from '$lib/constants';
import { activityManager } from '$lib/managers/activity-manager.svelte';
+ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte';
import { authManager } from '$lib/managers/auth-manager.svelte';
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
import { closeEditorCofirm } from '$lib/stores/asset-editor.store';
import { assetViewingStore } from '$lib/stores/asset-viewing.store';
import { ocrManager } from '$lib/stores/ocr.svelte';
- import { alwaysLoadOriginalVideo, isShowDetail } from '$lib/stores/preferences.store';
+ import { alwaysLoadOriginalVideo } from '$lib/stores/preferences.store';
import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store';
import { user } from '$lib/stores/user.store';
import { websocketEvents } from '$lib/stores/websocket';
@@ -105,11 +106,7 @@
let appearsInAlbums: AlbumResponseDto[] = $state([]);
let shouldPlayMotionPhoto = $state(false);
let sharedLink = getSharedLink();
- let enableDetailPanel = asset.hasMetadata;
- let slideshowStateUnsubscribe: () => void;
- let shuffleSlideshowUnsubscribe: () => void;
let previewStackedAsset: AssetResponseDto | undefined = $state();
- let isShowActivity = $state(false);
let isShowEditor = $state(false);
let fullscreenElement = $state();
let unsubscribes: (() => void)[] = [];
@@ -163,39 +160,29 @@
unsubscribes.push(
websocketEvents.on('on_upload_success', (asset) => onAssetUpdate({ event: 'upload', asset })),
websocketEvents.on('on_asset_update', (asset) => onAssetUpdate({ event: 'update', asset })),
+ slideshowState.subscribe((value) => {
+ if (value === SlideshowState.PlaySlideshow) {
+ slideshowHistory.reset();
+ slideshowHistory.queue(toTimelineAsset(asset));
+ handlePromiseError(handlePlaySlideshow());
+ } else if (value === SlideshowState.StopSlideshow) {
+ handlePromiseError(handleStopSlideshow());
+ }
+ }),
+ slideshowNavigation.subscribe((value) => {
+ if (value === SlideshowNavigation.Shuffle) {
+ slideshowHistory.reset();
+ slideshowHistory.queue(toTimelineAsset(asset));
+ }
+ }),
);
- slideshowStateUnsubscribe = slideshowState.subscribe((value) => {
- if (value === SlideshowState.PlaySlideshow) {
- slideshowHistory.reset();
- slideshowHistory.queue(toTimelineAsset(asset));
- handlePromiseError(handlePlaySlideshow());
- } else if (value === SlideshowState.StopSlideshow) {
- handlePromiseError(handleStopSlideshow());
- }
- });
-
- shuffleSlideshowUnsubscribe = slideshowNavigation.subscribe((value) => {
- if (value === SlideshowNavigation.Shuffle) {
- slideshowHistory.reset();
- slideshowHistory.queue(toTimelineAsset(asset));
- }
- });
-
if (!sharedLink) {
await handleGetAllAlbums();
}
});
onDestroy(() => {
- if (slideshowStateUnsubscribe) {
- slideshowStateUnsubscribe();
- }
-
- if (shuffleSlideshowUnsubscribe) {
- shuffleSlideshowUnsubscribe();
- }
-
for (const unsubscribe of unsubscribes) {
unsubscribe();
}
@@ -215,18 +202,6 @@
}
};
- const handleOpenActivity = () => {
- if ($isShowDetail) {
- $isShowDetail = false;
- }
- isShowActivity = !isShowActivity;
- };
-
- const toggleDetailPanel = () => {
- isShowActivity = false;
- $isShowDetail = !$isShowDetail;
- };
-
const closeViewer = () => {
onClose(asset);
};
@@ -389,7 +364,7 @@
});
$effect(() => {
if (album && !album.isActivityEnabled && activityManager.commentCount === 0) {
- isShowActivity = false;
+ assetViewerManager.closeActivityPanel();
}
});
$effect(() => {
@@ -427,7 +402,6 @@
{person}
{stack}
{showCloseButton}
- showDetailButton={enableDetailPanel}
showSlideshow={true}
onZoomImage={zoomToggle}
onCopyImage={copyImage}
@@ -436,7 +410,6 @@
{onUndoDelete}
onRunJob={handleRunJob}
onPlaySlideshow={() => ($slideshowState = SlideshowState.PlaySlideshow)}
- onShowDetail={toggleDetailPanel}
onClose={closeViewer}
{playOriginalVideo}
{setPlayOriginalVideo}
@@ -555,7 +528,6 @@
numberOfComments={activityManager.commentCount}
numberOfLikes={activityManager.likeCount}
onFavorite={handleFavorite}
- onOpenActivityTab={handleOpenActivity}
/>