Merge pull request #6016 from vvlladd28/improvement/map/tooltip-disable
[3.3.4] UI: Improvement map control button tooltip; fix incorrect updated marker/polygon when editing
This commit is contained in:
commit
158f233daf
21
ui-ngx/patches/@geoman-io+leaflet-geoman-free+2.11.4.patch
Normal file
21
ui-ngx/patches/@geoman-io+leaflet-geoman-free+2.11.4.patch
Normal file
File diff suppressed because one or more lines are too long
@ -400,6 +400,40 @@ export default abstract class LeafletMap {
|
|||||||
this.updatePending = false;
|
this.updatePending = false;
|
||||||
this.updateData(this.drawRoutes, this.showPolygon);
|
this.updateData(this.drawRoutes, this.showPolygon);
|
||||||
}
|
}
|
||||||
|
this.createdControlButtonTooltip();
|
||||||
|
}
|
||||||
|
|
||||||
|
private createdControlButtonTooltip() {
|
||||||
|
import('tooltipster').then(() => {
|
||||||
|
$(this.ctx.$container)
|
||||||
|
.find('a[role="button"]:not(.leaflet-pm-action)')
|
||||||
|
.each((index, element) => {
|
||||||
|
let title;
|
||||||
|
if (element.children.length) {
|
||||||
|
title = (element.children[0] as HTMLElement).title;
|
||||||
|
$(element).children().removeAttr('title');
|
||||||
|
} else {
|
||||||
|
title = element.title;
|
||||||
|
$(element).removeAttr('title');
|
||||||
|
}
|
||||||
|
$(element).tooltipster(
|
||||||
|
{
|
||||||
|
content: title,
|
||||||
|
theme: 'tooltipster-shadow',
|
||||||
|
delay: 10,
|
||||||
|
triggerClose: {
|
||||||
|
click: true,
|
||||||
|
tap: true,
|
||||||
|
scroll: true,
|
||||||
|
mouseleave: true
|
||||||
|
},
|
||||||
|
side: 'right',
|
||||||
|
distance: 2,
|
||||||
|
trackOrigin: true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
createLatLng(lat: number, lng: number): L.LatLng {
|
createLatLng(lat: number, lng: number): L.LatLng {
|
||||||
@ -545,7 +579,10 @@ export default abstract class LeafletMap {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.map.pm.Toolbar.setButtonDisabled('tbMarker', !foundEntityWithoutLocation);
|
// @ts-ignore
|
||||||
|
if (this.map.pm.Toolbar.getButtons().tbMarker.disable !== foundEntityWithoutLocation) {
|
||||||
|
this.map.pm.Toolbar.setButtonDisabled('tbMarker', !foundEntityWithoutLocation);
|
||||||
|
}
|
||||||
this.datasources = formattedData;
|
this.datasources = formattedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -561,8 +598,11 @@ export default abstract class LeafletMap {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.map.pm.Toolbar.setButtonDisabled('tbPolygon', !foundEntityWithoutPolygon);
|
// @ts-ignore
|
||||||
this.map.pm.Toolbar.setButtonDisabled('tbRectangle', !foundEntityWithoutPolygon);
|
if (this.map.pm.Toolbar.getButtons().tbPolygon.disable !== foundEntityWithoutPolygon) {
|
||||||
|
this.map.pm.Toolbar.setButtonDisabled('tbPolygon', !foundEntityWithoutPolygon);
|
||||||
|
this.map.pm.Toolbar.setButtonDisabled('tbRectangle', !foundEntityWithoutPolygon);
|
||||||
|
}
|
||||||
this.datasources = formattedData;
|
this.datasources = formattedData;
|
||||||
}
|
}
|
||||||
if (!this.options.hideRemoveControlButton && !this.options.hideAllControlButton) {
|
if (!this.options.hideRemoveControlButton && !this.options.hideAllControlButton) {
|
||||||
@ -574,23 +614,15 @@ export default abstract class LeafletMap {
|
|||||||
}
|
}
|
||||||
if (!this.options.hideEditControlButton && !this.options.hideAllControlButton) {
|
if (!this.options.hideEditControlButton && !this.options.hideAllControlButton) {
|
||||||
const disabledButton = !foundEntityWithLocation && !foundEntityWithPolygon;
|
const disabledButton = !foundEntityWithLocation && !foundEntityWithPolygon;
|
||||||
if (disabledButton) {
|
// @ts-ignore
|
||||||
|
if (this.map.pm.Toolbar.getButtons().dragMode.disable !== disabledButton) {
|
||||||
|
this.map.pm.Toolbar.setButtonDisabled('dragMode', disabledButton);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.map.pm.Toolbar.toggleButton('dragMode', false);
|
if (this.editPolygons && this.map.pm.Toolbar.getButtons().editMode.disable !== foundEntityWithPolygon) {
|
||||||
}
|
this.map.pm.Toolbar.setButtonDisabled('editMode', !foundEntityWithPolygon);
|
||||||
if (this.editPolygons && !foundEntityWithPolygon) {
|
this.map.pm.Toolbar.setButtonDisabled('cutPolygon', !foundEntityWithPolygon);
|
||||||
// @ts-ignore
|
this.map.pm.Toolbar.setButtonDisabled('rotateMode', !foundEntityWithPolygon);
|
||||||
this.map.pm.Toolbar.toggleButton('editMode', false);
|
}
|
||||||
// @ts-ignore
|
|
||||||
this.map.pm.Toolbar.toggleButton('cutPolygon', false);
|
|
||||||
// @ts-ignore
|
|
||||||
this.map.pm.Toolbar.toggleButton('rotateMode', false);
|
|
||||||
}
|
|
||||||
this.map.pm.Toolbar.setButtonDisabled('dragMode', disabledButton);
|
|
||||||
if (this.editPolygons) {
|
|
||||||
this.map.pm.Toolbar.setButtonDisabled('editMode', !foundEntityWithPolygon);
|
|
||||||
this.map.pm.Toolbar.setButtonDisabled('cutPolygon', !foundEntityWithPolygon);
|
|
||||||
this.map.pm.Toolbar.setButtonDisabled('rotateMode', !foundEntityWithPolygon);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -309,6 +309,12 @@ export class MapWidgetController implements MapWidgetInterface {
|
|||||||
if (this.map) {
|
if (this.map) {
|
||||||
this.map.remove();
|
this.map.remove();
|
||||||
}
|
}
|
||||||
|
if ($.tooltipster) {
|
||||||
|
const instances = $.tooltipster.instances();
|
||||||
|
instances.forEach((instance) => {
|
||||||
|
instance.destroy();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,3 @@
|
|||||||
.leaflet-container {
|
.leaflet-container {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.leaflet-buttons-control-button.pm-disabled {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -30,6 +30,9 @@ import { isDefined, isDefinedAndNotNull } from '@core/utils';
|
|||||||
import LeafletMap from './leaflet-map';
|
import LeafletMap from './leaflet-map';
|
||||||
|
|
||||||
export class Marker {
|
export class Marker {
|
||||||
|
|
||||||
|
private editing = false;
|
||||||
|
|
||||||
leafletMarker: L.Marker;
|
leafletMarker: L.Marker;
|
||||||
labelOffset: L.LatLngTuple;
|
labelOffset: L.LatLngTuple;
|
||||||
tooltipOffset: L.LatLngTuple;
|
tooltipOffset: L.LatLngTuple;
|
||||||
@ -77,11 +80,13 @@ export class Marker {
|
|||||||
this.leafletMarker.on('pm:dragstart', (e) => {
|
this.leafletMarker.on('pm:dragstart', (e) => {
|
||||||
(this.leafletMarker.dragging as any)._draggable = { _moved: true };
|
(this.leafletMarker.dragging as any)._draggable = { _moved: true };
|
||||||
(this.leafletMarker.dragging as any)._enabled = true;
|
(this.leafletMarker.dragging as any)._enabled = true;
|
||||||
|
this.editing = true;
|
||||||
});
|
});
|
||||||
this.leafletMarker.on('pm:dragend', (e) => {
|
this.leafletMarker.on('pm:dragend', (e) => {
|
||||||
onDragendListener(e, this.data);
|
onDragendListener(e, this.data);
|
||||||
delete (this.leafletMarker.dragging as any)._draggable;
|
delete (this.leafletMarker.dragging as any)._draggable;
|
||||||
delete (this.leafletMarker.dragging as any)._enabled;
|
delete (this.leafletMarker.dragging as any)._enabled;
|
||||||
|
this.editing = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,7 +110,7 @@ export class Marker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateMarkerPosition(position: L.LatLng) {
|
updateMarkerPosition(position: L.LatLng) {
|
||||||
if (!this.leafletMarker.getLatLng().equals(position)) {
|
if (!this.leafletMarker.getLatLng().equals(position) && !this.editing) {
|
||||||
this.location = position;
|
this.location = position;
|
||||||
this.leafletMarker.setLatLng(position);
|
this.leafletMarker.setLatLng(position);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,8 @@ import { FormattedData, PolygonSettings, UnitedMapSettings } from './map-models'
|
|||||||
|
|
||||||
export class Polygon {
|
export class Polygon {
|
||||||
|
|
||||||
|
private editing = false;
|
||||||
|
|
||||||
leafletPoly: L.Polygon;
|
leafletPoly: L.Polygon;
|
||||||
tooltip: L.Popup;
|
tooltip: L.Popup;
|
||||||
data: FormattedData;
|
data: FormattedData;
|
||||||
@ -62,6 +64,8 @@ export class Polygon {
|
|||||||
|
|
||||||
private createEventListeners() {
|
private createEventListeners() {
|
||||||
if (this.settings.editablePolygon && this.onDragendListener) {
|
if (this.settings.editablePolygon && this.onDragendListener) {
|
||||||
|
this.leafletPoly.on('pm:markerdragstart', () => this.editing = true);
|
||||||
|
this.leafletPoly.on('pm:markerdragend', () => this.editing = false);
|
||||||
this.leafletPoly.on('pm:edit', (e) => this.onDragendListener(e, this.data));
|
this.leafletPoly.on('pm:edit', (e) => this.onDragendListener(e, this.data));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,6 +104,9 @@ export class Polygon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updatePolygon(data: FormattedData, dataSources: FormattedData[], settings: PolygonSettings) {
|
updatePolygon(data: FormattedData, dataSources: FormattedData[], settings: PolygonSettings) {
|
||||||
|
if (this.editing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.dataSources = dataSources;
|
this.dataSources = dataSources;
|
||||||
const polyData = data[this.settings.polygonKeyName];
|
const polyData = data[this.settings.polygonKeyName];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user