@@ -8,6 +8,7 @@ import { map } from '$lib/components/map/map';
88const { currentOverlays, previousOverlays, selectedOverlayTree } = settings ;
99
1010export 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 } ) ;
0 commit comments