mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-12-02 10:02:12 +00:00
clean custom layer logic
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
import { i18n } from '$lib/i18n.svelte';
|
import { i18n } from '$lib/i18n.svelte';
|
||||||
import { defaultBasemap, type CustomLayer } from '$lib/assets/layers';
|
import { defaultBasemap, type CustomLayer } from '$lib/assets/layers';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { customBasemapUpdate } from './utils';
|
import { customBasemapUpdate, isSelected, remove } from './utils';
|
||||||
import { settings } from '$lib/logic/settings';
|
import { settings } from '$lib/logic/settings';
|
||||||
import { map } from '$lib/components/map/map';
|
import { map } from '$lib/components/map/map';
|
||||||
import { dndzone } from 'svelte-dnd-action';
|
import { dndzone } from 'svelte-dnd-action';
|
||||||
@@ -176,11 +176,7 @@
|
|||||||
return $tree;
|
return $tree;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (
|
if ($map && $currentOverlays && isSelected($currentOverlays, layerId)) {
|
||||||
$currentOverlays.overlays['custom'] &&
|
|
||||||
$currentOverlays.overlays['custom'][layerId] &&
|
|
||||||
$map
|
|
||||||
) {
|
|
||||||
try {
|
try {
|
||||||
$map.removeImport(layerId);
|
$map.removeImport(layerId);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -188,10 +184,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$currentOverlays.overlays.hasOwnProperty('custom')) {
|
currentOverlays.update(($overlays) => {
|
||||||
$currentOverlays.overlays['custom'] = {};
|
if (!$overlays.overlays.hasOwnProperty('custom')) {
|
||||||
|
$overlays.overlays['custom'] = {};
|
||||||
}
|
}
|
||||||
$currentOverlays.overlays['custom'][layerId] = true;
|
$overlays.overlays['custom'][layerId] = true;
|
||||||
|
return $overlays;
|
||||||
|
});
|
||||||
|
|
||||||
if (!$customOverlayOrder.includes(layerId)) {
|
if (!$customOverlayOrder.includes(layerId)) {
|
||||||
$customOverlayOrder = [...$customOverlayOrder, layerId];
|
$customOverlayOrder = [...$customOverlayOrder, layerId];
|
||||||
@@ -216,49 +215,15 @@
|
|||||||
$previousBasemap = defaultBasemap;
|
$previousBasemap = defaultBasemap;
|
||||||
}
|
}
|
||||||
|
|
||||||
$selectedBasemapTree.basemaps['custom'] = tryDeleteLayer(
|
$selectedBasemapTree = remove($selectedBasemapTree, layerId);
|
||||||
$selectedBasemapTree.basemaps['custom'],
|
|
||||||
layerId
|
|
||||||
);
|
|
||||||
if (Object.keys($selectedBasemapTree.basemaps['custom']).length === 0) {
|
|
||||||
$selectedBasemapTree.basemaps = tryDeleteLayer(
|
|
||||||
$selectedBasemapTree.basemaps,
|
|
||||||
'custom'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$customBasemapOrder = $customBasemapOrder.filter((id) => id !== layerId);
|
$customBasemapOrder = $customBasemapOrder.filter((id) => id !== layerId);
|
||||||
} else {
|
} else {
|
||||||
$currentOverlays.overlays['custom'][layerId] = false;
|
if ($currentOverlays) {
|
||||||
if ($previousOverlays.overlays['custom']) {
|
$currentOverlays = remove($currentOverlays, layerId);
|
||||||
$previousOverlays.overlays['custom'] = tryDeleteLayer(
|
|
||||||
$previousOverlays.overlays['custom'],
|
|
||||||
layerId
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$selectedOverlayTree.overlays['custom'] = tryDeleteLayer(
|
|
||||||
$selectedOverlayTree.overlays['custom'],
|
|
||||||
layerId
|
|
||||||
);
|
|
||||||
if (Object.keys($selectedOverlayTree.overlays['custom']).length === 0) {
|
|
||||||
$selectedOverlayTree.overlays = tryDeleteLayer(
|
|
||||||
$selectedOverlayTree.overlays,
|
|
||||||
'custom'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
$previousOverlays = remove($previousOverlays, layerId);
|
||||||
|
$selectedOverlayTree = remove($selectedOverlayTree, layerId);
|
||||||
$customOverlayOrder = $customOverlayOrder.filter((id) => id !== layerId);
|
$customOverlayOrder = $customOverlayOrder.filter((id) => id !== layerId);
|
||||||
|
|
||||||
if (
|
|
||||||
$currentOverlays.overlays['custom'] &&
|
|
||||||
$currentOverlays.overlays['custom'][layerId] &&
|
|
||||||
$map
|
|
||||||
) {
|
|
||||||
try {
|
|
||||||
$map.removeImport(layerId);
|
|
||||||
} catch (e) {
|
|
||||||
// No reliable way to check if the map is ready to remove sources and layers
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$customLayers = tryDeleteLayer($customLayers, layerId);
|
$customLayers = tryDeleteLayer($customLayers, layerId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,4 +55,15 @@ export function toggle(node: LayerTreeType, id: string) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function remove(node: LayerTreeType, id: string) {
|
||||||
|
Object.keys(node).forEach((key) => {
|
||||||
|
if (key === id) {
|
||||||
|
delete node[key];
|
||||||
|
} else if (typeof node[key] !== 'boolean') {
|
||||||
|
remove(node[key], id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
export const customBasemapUpdate = writable(0);
|
export const customBasemapUpdate = writable(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user