-
Notifications
You must be signed in to change notification settings - Fork 286
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
map.remove() won't work when DistortableImage layers exist #1381
Comments
Have you found a workaround? |
Only workaround I could find is to catch
|
This won't properly unmount the map, though, because it cancels in the middle of the function. We did find a workaround, however. Sorry for not replying earlier! /* eslint-disable @typescript-eslint/ban-ts-comment */
map.eachLayer(layer => {
// @ts-ignore
if (layer.editing) {
// @ts-ignore
const layers = layer.editing.currentHandle?._layers ?? {};
// @ts-ignore
Object.values(layers).forEach(layer => layer.remove());
// @ts-ignore
layer.editing.currentHandle = null;
}
layer.remove();
});
map.remove();
/* eslint-enable @typescript-eslint/ban-ts-comment */ Comments are obviously only useful if using TypeScript and/or ESLint :) |
Hi everyone i might have found the core issue here and a stable solution for it
// Remove the 4 corners of the distortable image overlay
// Can be placed on the Unmount lifecycle of your map component or on the onRemove callback of the overlay
const layerId = this.myDistortableOverlay._leaflet_id;
if (this.map) {
this.map.eachLayer((layer) => {
if (!layer || layer._leaflet_id != layerId) {
return;
}
if (layer.editing) {
const layers = layer.editing.currentHandle?._layers ?? {};
Object.values(layers).forEach((layer) => {
layer.remove();
});
layer.editing.currentHandle = null;
}
layer.remove();
});
} The problemeI think what is really causing the issue is either the layer containing the 4 corners of the distortable image overlay or the corners themselves The proposed solution
The solution consist of removing the 4 corners of the distortable image overlay, then the layer containing them. This can be done when -unmounting- the component containing the map |
Describe the bug:
When you try to remove the entire Leaflet map using
map.remove()
,leaflet-distortableimage
will throw an error if there is any distortable image on the map:We have an SPA that leaves us unable to correctly unmount the map when the user navigates away from the page, so this is rather unfortunate :(
Reproduce the behavior:
See this minimal JSFiddle: https://jsfiddle.net/bwcvaeyk/1/
Open your browser's console and wait for a second for the map to unmount (JSFiddle's console swallows the message). You should see the same error as above.
Browser, version, and operating system:
The text was updated successfully, but these errors were encountered: