Skip to content

Commit e3a729a

Browse files
authored
ROU-12069: Fix error that occured when the map was destroyed (#213)
* setting sonarcloud * Fixing the issue that caused the exception * Revert "setting sonarcloud" This reverts commit bac1839. * Removing unnecessary code
1 parent f5bf324 commit e3a729a

File tree

2 files changed

+56
-18
lines changed

2 files changed

+56
-18
lines changed

src/OutSystems/Maps/MapAPI/MapManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ namespace OutSystems.Maps.MapAPI.MapManager {
157157
map.dispose();
158158

159159
//Let's remove the empty markers references from the Markers API.
160-
MarkerManager.RemoveAllMarkers(mapId, false);
160+
MarkerManager.RemoveAllMarkersCreatedByAPI(mapId, false);
161161
}
162162

163163
/**

src/OutSystems/Maps/MapAPI/MarkerManager.ts

Lines changed: 55 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,21 @@ namespace OutSystems.Maps.MapAPI.MarkerManager {
3232
return map;
3333
}
3434

35+
/**
36+
* Cleans the markerMap and markerArr from the marker with the given id.
37+
*
38+
* @param {string} markerId Id of the Marker to be removed
39+
*/
40+
function CleanMarkerArrays(markerId: string): void {
41+
markerMap.has(markerId) && markerMap.delete(markerId);
42+
markerArr.splice(
43+
markerArr.findIndex((marker) => {
44+
return marker?.equalsToID(markerId);
45+
}),
46+
1
47+
);
48+
}
49+
3550
/**
3651
* Creates and adds a marker to a map.
3752
*
@@ -275,16 +290,45 @@ namespace OutSystems.Maps.MapAPI.MarkerManager {
275290
};
276291
try {
277292
const marker = GetMarkerById(markerId);
278-
const map = marker.map;
279-
map && map.removeMarker(markerId);
280-
281-
markerMap.delete(markerId);
282-
markerArr.splice(
283-
markerArr.findIndex((p) => {
284-
return p && p.equalsToID(markerId);
285-
}),
286-
1
287-
);
293+
marker.map?.removeMarker(markerId);
294+
CleanMarkerArrays(markerId);
295+
} catch (error) {
296+
responseObj.isSuccess = false;
297+
responseObj.message = error.message;
298+
responseObj.code = OSFramework.Maps.Enum.ErrorCodes.API_FailedRemoveMarker;
299+
}
300+
301+
return JSON.stringify(responseObj);
302+
}
303+
304+
/**
305+
* Removes all the markers created by the API.
306+
*
307+
* @export
308+
* @return {*} {string}
309+
*/
310+
// eslint-disable-next-line @typescript-eslint/naming-convention
311+
export function RemoveAllMarkersCreatedByAPI(mapId: string, removeFromMap = true): string {
312+
const responseObj = {
313+
isSuccess: true,
314+
message: 'Success',
315+
code: '200',
316+
};
317+
try {
318+
if (removeFromMap) {
319+
// First we try to remove the markers from the map.
320+
MapManager.RemoveMarkers(mapId);
321+
}
322+
323+
for (const [storedMarkerId, storedMapId] of markerMap) {
324+
if (storedMapId === mapId) {
325+
const marker = GetMarkerById(storedMarkerId, false);
326+
if (marker && marker.widgetId === undefined) {
327+
// If the marker does not have a widgetId, it means it was created by
328+
CleanMarkerArrays(storedMarkerId);
329+
}
330+
}
331+
}
288332
} catch (error) {
289333
responseObj.isSuccess = false;
290334
responseObj.message = error.message;
@@ -316,13 +360,7 @@ namespace OutSystems.Maps.MapAPI.MarkerManager {
316360
// Second remove the markers to destroy from local variables.
317361
markerMap.forEach((storedMapId, storedMarkerId) => {
318362
if (mapId === storedMapId) {
319-
markerMap.delete(storedMarkerId);
320-
markerArr.splice(
321-
markerArr.findIndex((p) => {
322-
return p && p.equalsToID(storedMarkerId);
323-
}),
324-
1
325-
);
363+
CleanMarkerArrays(storedMarkerId);
326364
}
327365
});
328366
} catch (error) {

0 commit comments

Comments
 (0)