@@ -180,14 +180,86 @@ export default ({
180180 hideLayers,
181181 isLayerHidden,
182182 showLayers,
183- addLayer,
184- overrideLayerProperty,
183+ addLayer : addLayerRaw ,
184+ overrideLayerProperty : overrideLayerPropertyRaw ,
185185 } = useLayers ( {
186186 rootLayer : transformedRootLayer ,
187187 selected : outerSelectedLayerId ,
188188 onSelect : onLayerSelect ,
189189 } ) ;
190190
191+ // Middleware for addLayer: Apply fallbacks when adding layers via plugin API
192+ const addLayer = useCallback (
193+ ( layer : Layer , parentId ?: string , creator ?: string ) => {
194+ const hasCesiumIonToken = ! ! overriddenSceneProperty ?. default ?. ion ;
195+
196+ // Apply fallback transformation if needed
197+ let transformedLayer = layer ;
198+
199+ // Check if this is a tileset layer with osm sourceType and no Cesium Ion token
200+ if (
201+ ! hasCesiumIonToken &&
202+ ( layer . extensionId === "tileset" || layer . type === "tileset" ) &&
203+ layer . property ?. default ?. sourceType === "osm"
204+ ) {
205+ transformedLayer = {
206+ ...layer ,
207+ property : {
208+ ...layer . property ,
209+ default : {
210+ ...layer . property . default ,
211+ sourceType : "reearth-buildings" ,
212+ } ,
213+ } ,
214+ } ;
215+
216+ console . warn (
217+ `[Re:Earth] Layer sourceType fallback: "osm" (OSM Buildings) → "reearth-buildings" (Re:Earth Buildings) - No Cesium Ion token available (layer added via plugin API)` ,
218+ ) ;
219+ }
220+
221+ return addLayerRaw ( transformedLayer , parentId , creator ) ;
222+ } ,
223+ [ addLayerRaw , overriddenSceneProperty ?. default ?. ion ] ,
224+ ) ;
225+
226+ // Middleware for overrideLayerProperty: Apply fallbacks when overriding layer properties via plugin API
227+ const overrideLayerProperty = useCallback (
228+ ( id : string , property : any ) => {
229+ const hasCesiumIonToken = ! ! overriddenSceneProperty ?. default ?. ion ;
230+
231+ // Apply fallback transformation if needed
232+ let transformedProperty = property ;
233+
234+ // Check if this is a tileset layer property override with osm sourceType and no Cesium Ion token
235+ if (
236+ ! hasCesiumIonToken &&
237+ property &&
238+ typeof property === "object" &&
239+ property . default ?. sourceType === "osm"
240+ ) {
241+ // Check if the target layer is a tileset layer
242+ const targetLayer = layers . findById ( id ) ;
243+ if ( targetLayer && targetLayer . extensionId === "tileset" ) {
244+ transformedProperty = {
245+ ...property ,
246+ default : {
247+ ...property . default ,
248+ sourceType : "reearth-buildings" ,
249+ } ,
250+ } ;
251+
252+ console . warn (
253+ `[Re:Earth] Layer sourceType fallback: "osm" (OSM Buildings) → "reearth-buildings" (Re:Earth Buildings) - No Cesium Ion token available (layer property override via plugin API, layer ID: ${ id } )` ,
254+ ) ;
255+ }
256+ }
257+
258+ return overrideLayerPropertyRaw ( id , transformedProperty ) ;
259+ } ,
260+ [ overrideLayerPropertyRaw , overriddenSceneProperty ?. default ?. ion , layers ] ,
261+ ) ;
262+
191263 // selected block
192264 const [ selectedBlockId , selectBlock ] = useInnerState < string > ( outerSelectedBlockId , onBlockSelect ) ;
193265
0 commit comments