feat(web): add geolocation utility (#20758)

* feat(geolocation):  add geolocation utility

* feat(web): geolocation utility - fix code review - 1

* feat(web): geolocation utility - fix code review - 2

* chore: cleanup

* chore: feedback

* feat(web): add animation and text

animation on locations change and action text on thumbnail

* styling, messages and filtering

* selected color

* format i18n

* fix lint

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>
This commit is contained in:
Johann
2025-08-28 18:54:11 +02:00
committed by GitHub
parent 80fa5ec198
commit 662d44536e
17 changed files with 733 additions and 49 deletions
@@ -4,10 +4,10 @@
import { getSelectedAssets } from '$lib/utils/asset-utils';
import { handleError } from '$lib/utils/handle-error';
import { updateAssets } from '@immich/sdk';
import MenuOption from '../../shared-components/context-menu/menu-option.svelte';
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
import { mdiMapMarkerMultipleOutline } from '@mdi/js';
import { t } from 'svelte-i18n';
import MenuOption from '../../shared-components/context-menu/menu-option.svelte';
import { getAssetControlContext } from '../asset-select-control-bar.svelte';
interface Props {
menuItem?: boolean;
@@ -18,16 +18,21 @@
let isShowChangeLocation = $state(false);
async function handleConfirm(point: { lng: number; lat: number }) {
async function handleConfirm(point?: { lng: number; lat: number }) {
isShowChangeLocation = false;
if (!point) {
return;
}
const ids = getSelectedAssets(getOwnedAssets(), $user);
try {
await updateAssets({ assetBulkUpdateDto: { ids, latitude: point.lat, longitude: point.lng } });
clearSelect();
} catch (error) {
handleError(error, $t('errors.unable_to_update_location'));
}
clearSelect();
}
</script>
@@ -39,5 +44,5 @@
/>
{/if}
{#if isShowChangeLocation}
<ChangeLocation onConfirm={handleConfirm} onCancel={() => (isShowChangeLocation = false)} />
<ChangeLocation onClose={handleConfirm} />
{/if}