11import { ConfigLayer , ConfigTileSetRaster } from '@basemaps/config' ;
22import { LogType } from '@basemaps/shared' ;
3- import { Category } from '../cogify/action.make.cog.pr.js' ;
3+ import { Category , DefaultCategorySetting } from '../cogify/action.make.cog.pr.js' ;
44import { Github , owner , repo } from './github.js' ;
55
66export class MakeCogGithub extends Github {
@@ -60,6 +60,36 @@ export class MakeCogGithub extends Github {
6060 return prNumber ;
6161 }
6262
63+ /**
64+ * Set the default setting for the category
65+ */
66+ setDefaultConfig ( layer : ConfigLayer , category : Category ) : ConfigLayer {
67+ layer . category = category ;
68+ const defaultSetting = DefaultCategorySetting [ category ] ;
69+ if ( defaultSetting ) {
70+ if ( defaultSetting . minZoom != null && layer . minZoom != null ) layer . minZoom = defaultSetting . minZoom ;
71+ if ( defaultSetting . minZoom != null && layer . minZoom != null ) layer . disabled = defaultSetting . disabled ;
72+ }
73+
74+ return layer ;
75+ }
76+
77+ /**
78+ * Add new layer at the bottom of related category
79+ */
80+ addLayer ( layer : ConfigLayer , tileSet : ConfigTileSetRaster , category : Category ) : ConfigTileSetRaster {
81+ this . setDefaultConfig ( layer , category ) ;
82+ for ( let i = tileSet . layers . length - 1 ; i >= 0 ; i -- ) {
83+ // Add new layer at the end of category
84+ if ( tileSet . layers [ i ] . category === category ) {
85+ // Find first valid category and insert new record above that.
86+ tileSet . layers . splice ( i + 1 , 0 , layer ) ;
87+ break ;
88+ }
89+ }
90+ return tileSet ;
91+ }
92+
6393 /**
6494 * Prepare aerial tileSet config json
6595 */
@@ -68,44 +98,32 @@ export class MakeCogGithub extends Github {
6898 tileSet : ConfigTileSetRaster ,
6999 category : Category ,
70100 ) : Promise < ConfigTileSetRaster | undefined > {
101+ // Reprocess existing layer
102+ for ( let i = 0 ; i < tileSet . layers . length ; i ++ ) {
103+ if ( tileSet . layers [ i ] . name === layer . name ) {
104+ tileSet . layers [ i ] = layer ;
105+ return tileSet ;
106+ }
107+ }
108+
109+ // Set default Config if not existing layer
110+ this . setDefaultConfig ( layer , category ) ;
111+
71112 // Set layer zoom level and add to latest order
72113 if ( category === Category . Rural ) {
73- layer . minZoom = 13 ;
74- layer . category = Category . Rural ;
75114 for ( let i = 0 ; i < tileSet . layers . length ; i ++ ) {
76- // Add new layer at the end of rural
77- if ( tileSet . layers [ i ] . category === Category . Rural && tileSet . layers [ i ] . minZoom === 14 ) {
115+ // Add new layer above the first Urban
116+ if ( tileSet . layers [ i ] . category === Category . Urban ) {
78117 // Find first valid Urban and insert new record above that.
79118 tileSet . layers . splice ( i , 0 , layer ) ;
80119 break ;
81120 }
82121 }
83- } else if ( category === Category . Urban ) {
84- layer . minZoom = 14 ;
85- layer . category = Category . Urban ;
86- // Add new layer at the end of urban
87- for ( let i = tileSet . layers . length - 1 ; i >= 0 ; i -- ) {
88- if ( tileSet . layers [ i ] . category === Category . Urban && tileSet . minZoom === 14 ) {
89- // Find first Urban from the bottom up and insert the record below that.
90- tileSet . layers . splice ( i + 1 , 0 , layer ) ;
91- break ;
92- }
93- }
94- } else if ( category === Category . Satellite ) {
95- layer . minZoom = 5 ;
96- layer . category = Category . Satellite ;
97- // Add new layer at the end of satellite
98- for ( let i = tileSet . layers . length - 1 ; i >= 0 ; i -- ) {
99- // Find first Satellite imagery from bottom up and insert the record below that.
100- if ( tileSet . layers [ i ] . category === Category . Satellite ) {
101- tileSet . layers . splice ( i + 1 , 0 , layer ) ;
102- break ;
103- }
104- }
105- } else {
122+ } else if ( category === Category . Other ) {
106123 // Add new layer at the bottom
107- layer . category = Category . Other ;
108124 tileSet . layers . push ( layer ) ;
125+ } else {
126+ this . addLayer ( layer , tileSet , category ) ;
109127 }
110128
111129 return tileSet ;
0 commit comments