From af51a11b1bb7ccf20599d51f019d9d5215444e19 Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Fri, 23 Jan 2026 14:06:19 -0500 Subject: [PATCH] refactor: asset navbar (#25476) --- .../asset-viewer/actions/edit-action.svelte | 20 ----- .../asset-viewer/asset-viewer-nav-bar.svelte | 74 +++++++++---------- .../asset-viewer/asset-viewer.svelte | 25 ++----- .../managers/asset-viewer-manager.svelte.ts | 10 +++ web/src/lib/services/asset.service.ts | 18 +++++ 5 files changed, 70 insertions(+), 77 deletions(-) delete mode 100644 web/src/lib/components/asset-viewer/actions/edit-action.svelte diff --git a/web/src/lib/components/asset-viewer/actions/edit-action.svelte b/web/src/lib/components/asset-viewer/actions/edit-action.svelte deleted file mode 100644 index 2a630f169..000000000 --- a/web/src/lib/components/asset-viewer/actions/edit-action.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - onAction()} -/> 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 93d1a4acd..bd20d6efe 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 @@ -7,7 +7,6 @@ import AddToStackAction from '$lib/components/asset-viewer/actions/add-to-stack-action.svelte'; import ArchiveAction from '$lib/components/asset-viewer/actions/archive-action.svelte'; import DeleteAction from '$lib/components/asset-viewer/actions/delete-action.svelte'; - import EditAction from '$lib/components/asset-viewer/actions/edit-action.svelte'; import KeepThisDeleteOthersAction from '$lib/components/asset-viewer/actions/keep-this-delete-others.svelte'; import RatingAction from '$lib/components/asset-viewer/actions/rating-action.svelte'; import RemoveAssetFromStack from '$lib/components/asset-viewer/actions/remove-asset-from-stack.svelte'; @@ -20,7 +19,6 @@ import UnstackAction from '$lib/components/asset-viewer/actions/unstack-action.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 { ProjectionType } from '$lib/constants'; import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { Route } from '$lib/route'; import { getGlobalActions } from '$lib/services/app.service'; @@ -67,7 +65,6 @@ onAction: OnAction; onUndoDelete?: OnUndoDelete; onPlaySlideshow: () => void; - onEdit: () => void; onClose?: () => void; playOriginalVideo: boolean; setPlayOriginalVideo: (value: boolean) => void; @@ -86,26 +83,42 @@ onUndoDelete = undefined, onPlaySlideshow, onClose, - onEdit, playOriginalVideo = false, setPlayOriginalVideo, }: Props = $props(); - let isOwner = $derived($user && asset.ownerId === $user?.id); - let isLocked = $derived(asset.visibility === AssetVisibility.Locked); - let smartSearchEnabled = $derived(featureFlagsManager.value.smartSearch); - - const Close: ActionItem = { - title: $t('go_back'), - type: $t('assets'), - icon: mdiArrowLeft, - $if: () => !!onClose, - onAction: () => onClose?.(), - shortcuts: [{ key: 'Escape' }], - }; + const isOwner = $derived($user && asset.ownerId === $user?.id); + const isLocked = $derived(asset.visibility === AssetVisibility.Locked); + const isImage = $derived(asset.type === AssetTypeEnum.Image); + const smartSearchEnabled = $derived(featureFlagsManager.value.smartSearch); const { Cast } = $derived(getGlobalActions($t)); + const { Close, ZoomIn, ZoomOut } = $derived({ + Close: { + title: $t('go_back'), + type: $t('assets'), + icon: mdiArrowLeft, + $if: () => !!onClose, + onAction: () => onClose?.(), + shortcuts: [{ key: 'Escape' }], + }, + + ZoomIn: { + title: $t('zoom_image'), + icon: mdiMagnifyPlusOutline, + $if: () => isImage && $photoZoomState && $photoZoomState.currentZoom <= 1, + onAction: () => onZoomImage(), + }, + + ZoomOut: { + title: $t('zoom_image'), + icon: mdiMagnifyMinusOutline, + $if: () => $photoZoomState && $photoZoomState.currentZoom > 1, + onAction: () => onZoomImage(), + }, + } satisfies Record); + const { Share, Download, @@ -117,22 +130,13 @@ PlayMotionPhoto, StopMotionPhoto, Info, + Edit, RefreshFacesJob, RefreshMetadataJob, RegenerateThumbnailJob, TranscodeVideoJob, } = $derived(getAssetActions($t, asset)); const sharedLink = getSharedLink(); - - const editorDisabled = $derived( - !isOwner || - asset.type !== AssetTypeEnum.Image || - asset.livePhotoVideoId || - (asset.exifInfo?.projectionType === ProjectionType.EQUIRECTANGULAR && - asset.originalPath.toLowerCase().endsWith('.insp')) || - asset.originalPath.toLowerCase().endsWith('.gif') || - asset.originalPath.toLowerCase().endsWith('.svg'), - ); + + - {#if asset.type === AssetTypeEnum.Image} -