Skip to content

Commit 467cb2e

Browse files
author
vcoppe
committed
update extension api
1 parent f13d8c1 commit 467cb2e

File tree

3 files changed

+50
-8
lines changed

3 files changed

+50
-8
lines changed

website/src/lib/components/map/layer-control/LayerTreeNode.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
{:else if anySelectedLayer(node[id])}
8686
<CollapsibleTreeNode {id}>
8787
{#snippet trigger()}
88-
<span>{i18n._(`layers.label.${id}`)}</span>
88+
<span>{i18n._(`layers.label.${id}`, id)}</span>
8989
{/snippet}
9090
{#snippet content()}
9191
<div class="ml-2">

website/src/lib/components/map/layer-control/extension-api.ts

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { map } from '$lib/components/map/map';
88
const { currentOverlays, previousOverlays, selectedOverlayTree } = settings;
99

1010
export type CustomOverlay = {
11+
extensionName: string;
1112
id: string;
1213
name: string;
1314
tileUrls: string[];
@@ -46,8 +47,16 @@ export class ExtensionAPI {
4647
}
4748

4849
addOrUpdateOverlay(overlay: CustomOverlay) {
49-
if (!overlay.id || !overlay.name || !overlay.tileUrls || overlay.tileUrls.length === 0) {
50-
throw new Error('Overlay must have an id, name, and at least one tile URL.');
50+
if (
51+
!overlay.extensionName ||
52+
!overlay.id ||
53+
!overlay.name ||
54+
!overlay.tileUrls ||
55+
overlay.tileUrls.length === 0
56+
) {
57+
throw new Error(
58+
'Overlay must have an extensionName, id, name, and at least one tile URL.'
59+
);
5160
}
5261
overlay.id = this.getOverlayId(overlay.id);
5362

@@ -75,10 +84,17 @@ export class ExtensionAPI {
7584
],
7685
};
7786

78-
overlayTree.overlays.world[overlay.id] = true;
87+
if (!overlayTree.overlays.hasOwnProperty(overlay.extensionName)) {
88+
overlayTree.overlays[overlay.extensionName] = {};
89+
}
90+
91+
overlayTree.overlays[overlay.extensionName][overlay.id] = true;
7992

8093
selectedOverlayTree.update((selected) => {
81-
selected.overlays.world[overlay.id] = true;
94+
if (!selected.overlays.hasOwnProperty(overlay.extensionName)) {
95+
selected.overlays[overlay.extensionName] = {};
96+
}
97+
selected.overlays[overlay.extensionName][overlay.id] = true;
8298
return selected;
8399
});
84100

@@ -94,7 +110,10 @@ export class ExtensionAPI {
94110
}
95111

96112
currentOverlays.update((current) => {
97-
current.overlays.world[overlay.id] = show;
113+
if (!current.overlays.hasOwnProperty(overlay.extensionName)) {
114+
current.overlays[overlay.extensionName] = {};
115+
}
116+
current.overlays[overlay.extensionName][overlay.id] = show;
98117
return current;
99118
});
100119
}
@@ -133,6 +152,29 @@ export class ExtensionAPI {
133152
});
134153
}
135154

155+
updateOverlaysOrder(ids: string[]) {
156+
ids = ids.map((id) => this.getOverlayId(id));
157+
selectedOverlayTree.update((selected) => {
158+
let isSelected: Record<string, boolean> = {};
159+
ids.forEach((id) => {
160+
const overlay = get(this._overlays).get(id);
161+
if (
162+
overlay &&
163+
selected.overlays.hasOwnProperty(overlay.extensionName) &&
164+
selected.overlays[overlay.extensionName].hasOwnProperty(id)
165+
) {
166+
isSelected[id] = selected.overlays[overlay.extensionName][id];
167+
delete selected.overlays[overlay.extensionName][id];
168+
}
169+
});
170+
Object.entries(isSelected).forEach(([id, value]) => {
171+
const overlay = get(this._overlays).get(id)!;
172+
selected.overlays[overlay.extensionName][id] = value;
173+
});
174+
return selected;
175+
});
176+
}
177+
136178
isLayerFromExtension = derived(this._overlays, ($overlays) => {
137179
return (id: string) => $overlays.has(id);
138180
});

website/src/lib/i18n.svelte.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ class Locale {
1414
private _isLoadingInitial = $state(true);
1515
private _isLoading = $state(true);
1616
private dictionary: Dictionary = $state({});
17-
private _t = $derived((key: string) => {
17+
private _t = $derived((key: string, fallback?: string) => {
1818
const keys = key.split('.');
1919
let value: string | Dictionary = this.dictionary;
2020

2121
for (const k of keys) {
2222
if (value && typeof value === 'object' && k in value) {
2323
value = value[k];
2424
} else {
25-
return key;
25+
return fallback || key;
2626
}
2727
}
2828

0 commit comments

Comments
 (0)