diff --git a/ui-ngx/src/app/core/api/widget-api.models.ts b/ui-ngx/src/app/core/api/widget-api.models.ts index 7d0f091739..d5f1b45a82 100644 --- a/ui-ngx/src/app/core/api/widget-api.models.ts +++ b/ui-ngx/src/app/core/api/widget-api.models.ts @@ -91,7 +91,7 @@ export interface IWidgetUtils { } export interface PlaceMapItemActionData { - action: WidgetAction; + action: WidgetAction | WidgetActionDescriptor; additionalParams?: any; afterPlaceItemCallback: ($event: Event, descriptor: WidgetAction, entityId?: EntityId, entityName?: string, additionalParams?: any, entityLabel?: string) => void; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts index 6672941045..70433f7999 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts @@ -133,6 +133,7 @@ export abstract class TbMap { private currentEditButton: L.TB.ToolbarButton; private dragMode = true; + private createMapItemActionId: string; private get isPlacingItem(): boolean { return !!this.currentEditButton; @@ -685,9 +686,14 @@ export abstract class TbMap { } private createItem(actionData: PlaceMapItemActionData, prepareDrawMode: () => void) { - if (this.isPlacingItem) { + const actionId = 'id' in actionData.action ? actionData.action.id : 'map-button'; + if (this.createMapItemActionId === actionId) { + this.finishCreatedItem(); return; } + if (isDefined(this.createMapItemActionId)) { + this.finishCreatedItem(); + } this.updatePlaceItemState(actionData.additionalParams?.button, true); this.map.once('pm:create', (e) => { @@ -700,7 +706,7 @@ export abstract class TbMap { // @ts-ignore e.layer._pmTempLayer = true; e.layer.remove(); - this.finishAdd(); + this.finishCreatedItem(); }); prepareDrawMode(); @@ -713,10 +719,12 @@ export abstract class TbMap { iconClass: 'tb-close', title: this.ctx.translate.instant('action.cancel'), showText: true, - click: this.finishAdd + click: this.finishCreatedItem } ], false); + this.createMapItemActionId = actionId; + const convertLayerToCoordinates = (type: MapItemType, layer: L.Layer): {x: number; y: number} | TbPolygonRawCoordinates | TbCircleData => { switch (type) { case MapItemType.marker: @@ -748,6 +756,11 @@ export abstract class TbMap { } } + private finishCreatedItem = () => { + delete this.createMapItemActionId; + this.finishAdd(); + } + private finishAdd = () => { if (this.currentPopover) { this.currentPopover.hide();