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 dd197f3a90..5d82d8ff5c 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 @@ -19,9 +19,12 @@ import ShareAction from '$lib/components/asset-viewer/actions/share-action.svelte'; import ShowDetailAction from '$lib/components/asset-viewer/actions/show-detail-action.svelte'; import UnstackAction from '$lib/components/asset-viewer/actions/unstack-action.svelte'; + import Icon from '$lib/components/elements/icon.svelte'; 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 type { TimelineAsset } from '$lib/managers/timeline-manager/types'; + import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { featureFlags } from '$lib/stores/server-config.store'; import { user } from '$lib/stores/user.store'; import { photoZoomState } from '$lib/stores/zoom-image.store'; @@ -41,6 +44,7 @@ import { IconButton } from '@immich/ui'; import { mdiAlertOutline, + mdiCheckCircle, mdiCogRefreshOutline, mdiCompare, mdiContentCopy, @@ -59,12 +63,14 @@ interface Props { asset: AssetResponseDto; + assetInteraction: AssetInteraction; album?: AlbumResponseDto | null; person?: PersonResponseDto | null; stack?: StackResponseDto | null; showCloseButton?: boolean; showDetailButton: boolean; showSlideshow?: boolean; + onSelectAsset: (asset: TimelineAsset) => void; onZoomImage: () => void; onCopyImage?: () => Promise; preAction: PreAction; @@ -79,12 +85,14 @@ let { asset, + assetInteraction, album = null, person = null, stack = null, showCloseButton = true, showDetailButton, showSlideshow = false, + onSelectAsset, onZoomImage, onCopyImage, preAction, @@ -102,6 +110,7 @@ let isLocked = $derived(asset.visibility === AssetVisibility.Locked); let smartSearchEnabled = $derived($featureFlags.loaded && $featureFlags.smartSearch); + let selected = $derived(assetInteraction.hasSelectedAsset(asset.id)); // $: showEditorButton = // isOwner && // asset.type === AssetTypeEnum.Image && @@ -122,149 +131,182 @@ {/if}
- - - {#if !asset.isTrashed && $user && !isLocked} - - {/if} - {#if asset.isOffline} - - {/if} - {#if asset.livePhotoVideoId} - {@render motionPhoto?.()} - {/if} - {#if asset.type === AssetTypeEnum.Image} -
diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte index 0737031635..ebc7e6025d 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte @@ -10,6 +10,7 @@ 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 { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { isShowDetail } from '$lib/stores/preferences.store'; import { SlideshowNavigation, SlideshowState, slideshowStore } from '$lib/stores/slideshow.store'; @@ -49,6 +50,7 @@ interface Props { asset: AssetResponseDto; + assetInteraction: AssetInteraction; preloadAssets?: TimelineAsset[]; showNavigation?: boolean; withStacked?: boolean; @@ -58,6 +60,7 @@ preAction?: PreAction | undefined; onAction?: OnAction | undefined; showCloseButton?: boolean; + onSelectAsset: (asset: TimelineAsset) => void; onClose: (asset: AssetResponseDto) => void; onNext: () => Promise; onPrevious: () => Promise; @@ -67,6 +70,7 @@ let { asset = $bindable(), + assetInteraction, preloadAssets = $bindable([]), showNavigation = true, withStacked = false, @@ -76,6 +80,7 @@ preAction = undefined, onAction = undefined, showCloseButton, + onSelectAsset, onClose, onNext, onPrevious, @@ -391,12 +396,14 @@
{/if} - {#if enableDetailPanel && $slideshowState === SlideshowState.None && $isShowDetail && !isShowEditor} + {#if enableDetailPanel && $slideshowState === SlideshowState.None && $isShowDetail && !isShowEditor && !assetInteraction.selectionActive}
{/await} {/if}