diff --git a/web/src/lib/components/asset-viewer/detail-panel.svelte b/web/src/lib/components/asset-viewer/detail-panel.svelte index 6af265e3da..16f65241f2 100644 --- a/web/src/lib/components/asset-viewer/detail-panel.svelte +++ b/web/src/lib/components/asset-viewer/detail-panel.svelte @@ -42,6 +42,7 @@ import AlbumListItemDetails from './album-list-item-details.svelte'; import DetailPanelDescription from '$lib/components/asset-viewer/detail-panel-description.svelte'; import { t } from 'svelte-i18n'; + import { goto } from '$app/navigation'; export let asset: AssetResponseDto; export let albums: AlbumResponseDto[] = []; @@ -441,6 +442,7 @@ zoom={15} simplified useLocationPin + onOpenInMapView={() => goto(`${AppRoute.MAP}#15/${latlng.lat}/${latlng.lng}`)} > {@const { lat, lon } = marker} diff --git a/web/src/lib/components/shared-components/map/map.svelte b/web/src/lib/components/shared-components/map/map.svelte index 91f8146631..d05e3263f9 100644 --- a/web/src/lib/components/shared-components/map/map.svelte +++ b/web/src/lib/components/shared-components/map/map.svelte @@ -4,7 +4,7 @@ import { colorTheme, mapSettings } from '$lib/stores/preferences.store'; import { getAssetThumbnailUrl, getKey, handlePromiseError } from '$lib/utils'; import { getMapStyle, MapTheme, type MapMarkerResponseDto } from '@immich/sdk'; - import { mdiCog, mdiMapMarker } from '@mdi/js'; + import { mdiCog, mdiMap, mdiMapMarker } from '@mdi/js'; import type { Feature, GeoJsonProperties, Geometry, Point } from 'geojson'; import type { GeoJSONSource, LngLatLike, StyleSpecification } from 'maplibre-gl'; import maplibregl from 'maplibre-gl'; @@ -30,6 +30,7 @@ export let showSettingsModal: boolean | undefined = undefined; export let zoom: number | undefined = undefined; export let center: LngLatLike | undefined = undefined; + export let hash = false; export let simplified = false; export let clickable = false; export let useLocationPin = false; @@ -45,6 +46,8 @@ } } + export let onOpenInMapView: (() => Promise | void) | undefined = undefined; + let map: maplibregl.Map; let marker: maplibregl.Marker | null = null; @@ -121,6 +124,7 @@ {#await style then style} + {#if !simplified} {/if} + {#if showSettingsModal !== undefined} @@ -146,12 +152,21 @@ {/if} + + {#if onOpenInMapView} + + + onOpenInMapView()}> + + + + + {/if} + { - return asFeature(marker); - }), + features: mapMarkers.map((marker) => asFeature(marker)), }} id="geojson" cluster={{ radius: 500, maxZoom: 24 }} diff --git a/web/src/lib/i18n/en.json b/web/src/lib/i18n/en.json index 6e0887cee9..1149bc99b8 100644 --- a/web/src/lib/i18n/en.json +++ b/web/src/lib/i18n/en.json @@ -857,6 +857,7 @@ "online": "Online", "only_favorites": "Only favorites", "only_refreshes_modified_files": "Only refreshes modified files", + "open_in_map_view": "Open in map view", "open_in_openstreetmap": "Open in OpenStreetMap", "open_the_search_filters": "Open the search filters", "options": "Options", diff --git a/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.svelte index 1b5923663b..1d606ba8d7 100644 --- a/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -111,9 +111,9 @@ {#if $featureFlags.loaded && $featureFlags.map}
- onViewAssets(event.detail)} /> -
+ onViewAssets(event.detail)} /> + + {#if $showAssetViewer} {#await import('../../../../../lib/components/asset-viewer/asset-viewer.svelte') then { default: AssetViewer }}