Skip to content

Commit 6dc698e

Browse files
committed
[fix] icon layer - render default icon in case svgIconUrl loading fails
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
1 parent 2b8af82 commit 6dc698e

1 file changed

Lines changed: 48 additions & 38 deletions

File tree

src/layers/src/icon-layer/icon-layer.ts

Lines changed: 48 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,22 @@ export default class IconLayer extends Layer {
209209

210210
if (Window.fetch && this.svgIconUrl) {
211211
Window.fetch(this.svgIconUrl, fetchConfig)
212-
.then(response => response.json())
212+
.then(response => {
213+
if (!response.ok) {
214+
throw new Error(`Failed to load svg-icons.json: ${response.status}`);
215+
}
216+
return response.json();
217+
})
213218
.then((parsed: {svgIcons?: any[]} = {}) => {
214219
this.setSvgIcons(parsed.svgIcons);
220+
})
221+
.catch(() => {
222+
// Fallback to empty geometry to allow default icon rendering
223+
this.iconGeometry = {};
215224
});
225+
} else {
226+
// No fetch available; set empty geometry so layer can render default icons
227+
this.iconGeometry = {};
216228
}
217229
}
218230

@@ -389,42 +401,40 @@ export default class IconLayer extends Layer {
389401
cullFace: GL.FRONT
390402
};
391403

392-
return !this.iconGeometry
393-
? []
394-
: [
395-
new SvgIconLayer({
396-
...defaultLayerProps,
397-
...brushingProps,
398-
...layerProps,
399-
...data,
400-
parameters,
401-
getIconGeometry: id => this.iconGeometry?.[id],
402-
403-
// update triggers
404-
updateTriggers,
405-
extensions
406-
}),
407-
408-
// hover layer
409-
...(hoveredObject
410-
? [
411-
// @ts-expect-error SvgIconLayerProps needs getIcon Field
412-
new SvgIconLayer({
413-
...this.getDefaultHoverLayerProps(),
414-
...layerProps,
415-
visible: defaultLayerProps.visible,
416-
data: [hoveredObject],
417-
parameters,
418-
getPosition: data.getPosition,
419-
getRadius: data.getRadius,
420-
getFillColor: this.config.highlightColor,
421-
getIconGeometry: id => this.iconGeometry?.[id]
422-
})
423-
]
424-
: []),
425-
426-
// text label layer
427-
...labelLayers
428-
];
404+
return [
405+
new SvgIconLayer({
406+
...defaultLayerProps,
407+
...brushingProps,
408+
...layerProps,
409+
...data,
410+
parameters,
411+
getIconGeometry: id => this.iconGeometry?.[id],
412+
413+
// update triggers
414+
updateTriggers,
415+
extensions
416+
}),
417+
418+
// hover layer
419+
...(hoveredObject
420+
? [
421+
// @ts-expect-error SvgIconLayerProps needs getIcon Field
422+
new SvgIconLayer({
423+
...this.getDefaultHoverLayerProps(),
424+
...layerProps,
425+
visible: defaultLayerProps.visible,
426+
data: [hoveredObject],
427+
parameters,
428+
getPosition: data.getPosition,
429+
getRadius: data.getRadius,
430+
getFillColor: this.config.highlightColor,
431+
getIconGeometry: id => this.iconGeometry?.[id]
432+
})
433+
]
434+
: []),
435+
436+
// text label layer
437+
...labelLayers
438+
];
429439
}
430440
}

0 commit comments

Comments
 (0)