From 7d61ed7ce46722bb6d22d3ffd7dcd9a52008587e Mon Sep 17 00:00:00 2001 From: David <32419820+davidpcrd@users.noreply.github.com> Date: Mon, 5 May 2025 04:58:44 +0200 Subject: [PATCH] feat(web): Map in albums & shared albums (#17906) * add btn, map and marker * Fix bug in navigation assetviewer * Correct bug on main Viewer * Add to user album the map of his pictures * change icon to outline * lint & format * with manager instead of variable * remove duplicate * chore: minor styling change * formatting --------- Co-authored-by: Alex Tran --- .../components/album-page/album-map.svelte | 158 ++++++++++++++++++ .../components/album-page/album-viewer.svelte | 5 +- .../components/photos-page/asset-grid.svelte | 44 ++--- .../shared-components/map/map.svelte | 4 +- .../managers/album-view-map.manager.svelte.ts | 13 ++ .../[[assetId=id]]/+page.svelte | 3 + 6 files changed, 203 insertions(+), 24 deletions(-) create mode 100644 web/src/lib/components/album-page/album-map.svelte create mode 100644 web/src/lib/managers/album-view-map.manager.svelte.ts diff --git a/web/src/lib/components/album-page/album-map.svelte b/web/src/lib/components/album-page/album-map.svelte new file mode 100644 index 00000000000..8230dea92e3 --- /dev/null +++ b/web/src/lib/components/album-page/album-map.svelte @@ -0,0 +1,158 @@ + + + + +{#if albumMapViewManager.isInMapView} +
+ +
+
+ {#await import('../shared-components/map/map.svelte')} + {#await delay(timeToLoadTheMap) then} + +
+ +
+ {/await} + {:then { default: Map }} + + {/await} +
+
+
+
+ + + {#if $showAssetViewer} + {#await import('../../../lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} + 1} + onNext={navigateNext} + onPrevious={navigatePrevious} + onRandom={navigateRandom} + onClose={() => { + assetViewingStore.showAssetViewer(false); + handlePromiseError(navigate({ targetRoute: 'current', assetId: null })); + }} + isShared={false} + /> + {/await} + {/if} + +{/if} diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index 09ec67e92bd..1f15e22d9e3 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -20,6 +20,7 @@ import { t } from 'svelte-i18n'; import { onDestroy } from 'svelte'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import AlbumMap from '$lib/components/album-page/album-map.svelte'; interface Props { sharedLink: SharedLinkResponseDto; @@ -91,7 +92,9 @@ icon={mdiFolderDownloadOutline} /> {/if} - + {#if sharedLink.showMetadata} + + {/if} {/snippet} diff --git a/web/src/lib/components/photos-page/asset-grid.svelte b/web/src/lib/components/photos-page/asset-grid.svelte index 7d496b7e3fd..b454d89217e 100644 --- a/web/src/lib/components/photos-page/asset-grid.svelte +++ b/web/src/lib/components/photos-page/asset-grid.svelte @@ -27,6 +27,7 @@ import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { mobileDevice } from '$lib/stores/mobile-device.svelte'; import { focusNext } from '$lib/utils/focus-util'; + import { albumMapViewManager } from '$lib/managers/album-view-map.manager.svelte'; interface Props { isSelectionMode?: boolean; @@ -382,7 +383,6 @@ const handleNext = async () => { const nextAsset = await assetStore.getNextAsset($viewingAsset); - if (nextAsset) { const preloadAsset = await assetStore.getNextAsset(nextAsset); assetViewingStore.setAsset(nextAsset, preloadAsset ? [preloadAsset] : []); @@ -802,26 +802,28 @@ - - {#if $showAssetViewer} - {#await import('../asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} - - {/await} - {/if} - +{#if !albumMapViewManager.isInMapView} + + {#if $showAssetViewer} + {#await import('../asset-viewer/asset-viewer.svelte') then { default: AssetViewer }} + + {/await} + {/if} + +{/if}