@@ -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