Files
gpx.studio/website/src/lib/components/layer-control/utils.ts

59 lines
1.5 KiB
TypeScript
Raw Normal View History

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) {
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
}
return false;
}) !== undefined
);
2024-05-05 18:59:09 +02: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) => {
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];
}
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
}
export function toggle(node: LayerTreeType, id: string) {
Object.keys(node).forEach((key) => {
if (key === id) {
node[key] = !node[key];
} else if (typeof node[key] !== 'boolean') {
toggle(node[key], id);
}
});
return node;
}
export const customBasemapUpdate = writable(0);