2025-02-02 11:17:22 +01:00
|
|
|
import type { LayerTreeType } from '$lib/assets/layers';
|
|
|
|
import { writable } from 'svelte/store';
|
2024-05-05 18:59:09 +02:00
|
|
|
|
|
|
|
export function anySelectedLayer(node: LayerTreeType) {
|
2025-02-02 11:17:22 +01:00
|
|
|
return (
|
|
|
|
Object.keys(node).find((id) => {
|
|
|
|
if (typeof node[id] == 'boolean') {
|
|
|
|
if (node[id]) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (anySelectedLayer(node[id])) {
|
|
|
|
return true;
|
|
|
|
}
|
2024-05-05 18:59:09 +02:00
|
|
|
}
|
2025-02-02 11:17:22 +01:00
|
|
|
return false;
|
|
|
|
}) !== undefined
|
|
|
|
);
|
2024-05-05 18:59:09 +02:00
|
|
|
}
|
|
|
|
|
2025-02-02 11:17:22 +01:00
|
|
|
export function getLayers(
|
|
|
|
node: LayerTreeType,
|
|
|
|
layers: { [key: string]: boolean } = {}
|
|
|
|
): { [key: string]: boolean } {
|
2024-06-06 18:11:03 +02:00
|
|
|
Object.keys(node).forEach((id) => {
|
2025-02-02 11:17:22 +01:00
|
|
|
if (typeof node[id] == 'boolean') {
|
2024-05-05 18:59:09 +02:00
|
|
|
layers[id] = node[id];
|
|
|
|
} else {
|
|
|
|
getLayers(node[id], layers);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return layers;
|
2024-06-26 18:46:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export function isSelected(node: LayerTreeType, id: string) {
|
|
|
|
return Object.keys(node).some((key) => {
|
|
|
|
if (key === id) {
|
|
|
|
return node[key];
|
|
|
|
}
|
2025-02-02 11:17:22 +01:00
|
|
|
if (typeof node[key] !== 'boolean' && isSelected(node[key], id)) {
|
2024-06-26 18:46:03 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
2024-08-14 09:21:55 +02:00
|
|
|
}
|
|
|
|
|
2024-09-24 14:40:08 +02:00
|
|
|
export function toggle(node: LayerTreeType, id: string) {
|
|
|
|
Object.keys(node).forEach((key) => {
|
|
|
|
if (key === id) {
|
|
|
|
node[key] = !node[key];
|
2025-02-02 11:17:22 +01:00
|
|
|
} else if (typeof node[key] !== 'boolean') {
|
2024-09-24 14:40:08 +02:00
|
|
|
toggle(node[key], id);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return node;
|
|
|
|
}
|
|
|
|
|
2025-02-02 11:17:22 +01:00
|
|
|
export const customBasemapUpdate = writable(0);
|