@open-pioneer/editing 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/EditingCreateWorkflowImpl.d.ts +36 -0
- package/{EditingWorkflowImpl.js → EditingCreateWorkflowImpl.js} +93 -73
- package/EditingCreateWorkflowImpl.js.map +1 -0
- package/EditingServiceImpl.d.ts +8 -5
- package/EditingServiceImpl.js +37 -11
- package/EditingServiceImpl.js.map +1 -1
- package/EditingUpdateWorkflowImpl.d.ts +41 -0
- package/EditingUpdateWorkflowImpl.js +236 -0
- package/EditingUpdateWorkflowImpl.js.map +1 -0
- package/README.md +76 -11
- package/SaveFeaturesHandler.d.ts +9 -0
- package/SaveFeaturesHandler.js +20 -3
- package/SaveFeaturesHandler.js.map +1 -1
- package/Tooltip.d.ts +17 -0
- package/Tooltip.js +35 -0
- package/Tooltip.js.map +1 -0
- package/api.d.ts +42 -9
- package/i18n/de.yaml +5 -3
- package/i18n/en.yaml +5 -3
- package/package.json +23 -13
- package/style-utils.d.ts +17 -0
- package/style-utils.js +55 -0
- package/style-utils.js.map +1 -0
- package/EditingWorkflowImpl.d.ts +0 -44
- package/EditingWorkflowImpl.js.map +0 -1
package/i18n/en.yaml
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
messages:
|
|
2
2
|
title: Editing
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
create:
|
|
4
|
+
tooltip:
|
|
5
|
+
begin: Click to start creating the geometry
|
|
6
|
+
continue: Double click to finish the geometry and save the feature
|
|
7
|
+
deselect: Click outside the geometry in the map to save changes
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/editing",
|
|
4
|
-
"version": "0.1
|
|
4
|
+
"version": "0.2.1",
|
|
5
5
|
"description": "This package provides an editing service that allows to start and handle geometry editing workflows.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"directory": "src/packages/editing"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
|
-
"@open-pioneer/core": "^1.2.
|
|
18
|
-
"@open-pioneer/http": "^2.1.
|
|
19
|
-
"@open-pioneer/runtime": "^2.1.
|
|
17
|
+
"@open-pioneer/core": "^1.2.3",
|
|
18
|
+
"@open-pioneer/http": "^2.1.7",
|
|
19
|
+
"@open-pioneer/runtime": "^2.1.5",
|
|
20
20
|
"ol": "^9.0.0",
|
|
21
|
-
"@open-pioneer/map": "^0.
|
|
21
|
+
"@open-pioneer/map": "^0.5.1"
|
|
22
22
|
},
|
|
23
23
|
"exports": {
|
|
24
24
|
"./package.json": "./package.json",
|
|
@@ -68,15 +68,25 @@
|
|
|
68
68
|
},
|
|
69
69
|
"properties": [
|
|
70
70
|
{
|
|
71
|
-
"propertyName": "
|
|
71
|
+
"propertyName": "polygonStyle",
|
|
72
72
|
"defaultValue": {
|
|
73
|
-
"
|
|
74
|
-
"stroke-
|
|
75
|
-
"
|
|
76
|
-
"circle-radius":
|
|
77
|
-
"circle-fill-color": "
|
|
78
|
-
"circle-stroke-
|
|
79
|
-
"circle-stroke-
|
|
73
|
+
"fill-color": "rgba(255,255,255,0.4)",
|
|
74
|
+
"stroke-color": "red",
|
|
75
|
+
"stroke-width": 1.25,
|
|
76
|
+
"circle-radius": 3,
|
|
77
|
+
"circle-fill-color": "red",
|
|
78
|
+
"circle-stroke-width": 1.25,
|
|
79
|
+
"circle-stroke-color": "red"
|
|
80
|
+
},
|
|
81
|
+
"required": false
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"propertyName": "vertexStyle",
|
|
85
|
+
"defaultValue": {
|
|
86
|
+
"circle-radius": 3,
|
|
87
|
+
"circle-fill-color": "red",
|
|
88
|
+
"circle-stroke-width": 1.25,
|
|
89
|
+
"circle-stroke-color": "red"
|
|
80
90
|
},
|
|
81
91
|
"required": false
|
|
82
92
|
}
|
package/style-utils.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Style } from "ol/style";
|
|
2
|
+
import { FlatStyle } from "ol/style/flat";
|
|
3
|
+
interface EditingStyleProps {
|
|
4
|
+
polygon: FlatStyle;
|
|
5
|
+
vertex: FlatStyle;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Function to retrieve an OpenLayers style for an editing workflow
|
|
9
|
+
* from editing polygon and vertex style.
|
|
10
|
+
*
|
|
11
|
+
* The polygon OpenLayers FlatStyle is convert to an OpenLayers style.
|
|
12
|
+
*
|
|
13
|
+
* The vertex OpenLayers FlatStyle is convert to an OpenLayers style
|
|
14
|
+
* by setting an geometry to the style to render a vertex geometry instead of the feature's geometry.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createStyles(editingStyle: EditingStyleProps): Style[];
|
|
17
|
+
export {};
|
package/style-utils.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { MultiPoint } from 'ol/geom';
|
|
2
|
+
import VectorLayer from 'ol/layer/Vector';
|
|
3
|
+
import { Feature } from 'ol';
|
|
4
|
+
|
|
5
|
+
function createStyles(editingStyle) {
|
|
6
|
+
let polygonStyle = convertFlatStyleToStyle(editingStyle.polygon);
|
|
7
|
+
if (Array.isArray(polygonStyle)) {
|
|
8
|
+
polygonStyle = polygonStyle[0];
|
|
9
|
+
}
|
|
10
|
+
let vertexStyle = convertFlatStyleToStyle(editingStyle.vertex);
|
|
11
|
+
if (Array.isArray(vertexStyle)) {
|
|
12
|
+
vertexStyle = vertexStyle[0];
|
|
13
|
+
}
|
|
14
|
+
const style = [];
|
|
15
|
+
if (polygonStyle) {
|
|
16
|
+
style.push(polygonStyle);
|
|
17
|
+
}
|
|
18
|
+
if (vertexStyle) {
|
|
19
|
+
vertexStyle.setGeometry(createVertexGeometry);
|
|
20
|
+
style.push(vertexStyle);
|
|
21
|
+
}
|
|
22
|
+
return style;
|
|
23
|
+
}
|
|
24
|
+
const createVertexGeometry = (feature) => {
|
|
25
|
+
if (feature) {
|
|
26
|
+
const geometry = feature.getGeometry();
|
|
27
|
+
if (geometry && geometry.getType() === "Polygon") {
|
|
28
|
+
const coordinates = geometry.getCoordinates()[0];
|
|
29
|
+
if (coordinates) {
|
|
30
|
+
return new MultiPoint(coordinates);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return void 0;
|
|
35
|
+
};
|
|
36
|
+
const convertFlatStyleToStyle = (flatStyle) => {
|
|
37
|
+
const feature = new Feature();
|
|
38
|
+
const vectorLayer = new VectorLayer({ style: flatStyle });
|
|
39
|
+
const styleFunction = vectorLayer.getStyleFunction();
|
|
40
|
+
if (!styleFunction) {
|
|
41
|
+
throw new Error("can't retrieve style function");
|
|
42
|
+
}
|
|
43
|
+
const styles = styleFunction(feature, 1);
|
|
44
|
+
if (!styles) {
|
|
45
|
+
throw new Error("can't retrieve styles from feature style function");
|
|
46
|
+
}
|
|
47
|
+
if (Array.isArray(styles) && styles.length) {
|
|
48
|
+
return styles.length > 1 ? styles : styles[0];
|
|
49
|
+
} else {
|
|
50
|
+
return styles;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { createStyles };
|
|
55
|
+
//# sourceMappingURL=style-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-utils.js","sources":["style-utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Style } from \"ol/style\";\nimport { MultiPoint, Polygon } from \"ol/geom\";\nimport { GeometryFunction } from \"ol/style/Style\";\nimport { FlatStyle } from \"ol/style/flat\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport { Feature } from \"ol\";\n\ninterface EditingStyleProps {\n polygon: FlatStyle;\n vertex: FlatStyle;\n}\n\n/**\n * Function to retrieve an OpenLayers style for an editing workflow\n * from editing polygon and vertex style.\n *\n * The polygon OpenLayers FlatStyle is convert to an OpenLayers style.\n *\n * The vertex OpenLayers FlatStyle is convert to an OpenLayers style\n * by setting an geometry to the style to render a vertex geometry instead of the feature's geometry.\n */\nexport function createStyles(editingStyle: EditingStyleProps) {\n let polygonStyle = convertFlatStyleToStyle(editingStyle.polygon);\n if (Array.isArray(polygonStyle)) {\n polygonStyle = polygonStyle[0];\n }\n\n let vertexStyle = convertFlatStyleToStyle(editingStyle.vertex);\n if (Array.isArray(vertexStyle)) {\n vertexStyle = vertexStyle[0];\n }\n\n const style = [];\n if (polygonStyle) {\n style.push(polygonStyle);\n }\n\n // Set a vertex geometry that is rendered instead of the feature's geometry\n if (vertexStyle) {\n vertexStyle.setGeometry(createVertexGeometry);\n style.push(vertexStyle);\n }\n\n return style;\n}\n\n/**\n * Function to create a new multi point geometry from a given feature (to style the point as a vertex).\n * Returns an Openlayers geometry function.\n */\nconst createVertexGeometry: GeometryFunction = (feature) => {\n if (feature) {\n const geometry = feature.getGeometry() as Polygon;\n if (geometry && geometry.getType() === \"Polygon\") {\n const coordinates = geometry.getCoordinates()[0];\n if (coordinates) {\n return new MultiPoint(coordinates);\n }\n }\n }\n return undefined;\n};\n\n/**\n * Function to convert a OpenLayers FlatStyle to an OpenLayers Style by setting the FlatStyle\n * to an OpenLayers feature and retrieving the style from a vector layer's style function.\n */\nconst convertFlatStyleToStyle = (flatStyle: FlatStyle): Style | Style[] | undefined => {\n const feature = new Feature();\n const vectorLayer = new VectorLayer({ style: flatStyle });\n\n const styleFunction = vectorLayer.getStyleFunction();\n if (!styleFunction) {\n throw new Error(\"can't retrieve style function\");\n }\n\n const styles = styleFunction(feature, 1);\n if (!styles) {\n throw new Error(\"can't retrieve styles from feature style function\");\n }\n\n // Return only first style in array\n if (Array.isArray(styles) && styles.length) {\n return styles.length > 1 ? styles : styles[0];\n } else {\n return styles;\n }\n};\n"],"names":[],"mappings":";;;;AAuBO,SAAS,aAAa,YAAiC,EAAA;AAC1D,EAAI,IAAA,YAAA,GAAe,uBAAwB,CAAA,YAAA,CAAa,OAAO,CAAA,CAAA;AAC/D,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAC7B,IAAA,YAAA,GAAe,aAAa,CAAC,CAAA,CAAA;AAAA,GACjC;AAEA,EAAI,IAAA,WAAA,GAAc,uBAAwB,CAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAC7D,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,WAAW,CAAG,EAAA;AAC5B,IAAA,WAAA,GAAc,YAAY,CAAC,CAAA,CAAA;AAAA,GAC/B;AAEA,EAAA,MAAM,QAAQ,EAAC,CAAA;AACf,EAAA,IAAI,YAAc,EAAA;AACd,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA,CAAA;AAAA,GAC3B;AAGA,EAAA,IAAI,WAAa,EAAA;AACb,IAAA,WAAA,CAAY,YAAY,oBAAoB,CAAA,CAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA,CAAA;AAAA,GAC1B;AAEA,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;AAMA,MAAM,oBAAA,GAAyC,CAAC,OAAY,KAAA;AACxD,EAAA,IAAI,OAAS,EAAA;AACT,IAAM,MAAA,QAAA,GAAW,QAAQ,WAAY,EAAA,CAAA;AACrC,IAAA,IAAI,QAAY,IAAA,QAAA,CAAS,OAAQ,EAAA,KAAM,SAAW,EAAA;AAC9C,MAAA,MAAM,WAAc,GAAA,QAAA,CAAS,cAAe,EAAA,CAAE,CAAC,CAAA,CAAA;AAC/C,MAAA,IAAI,WAAa,EAAA;AACb,QAAO,OAAA,IAAI,WAAW,WAAW,CAAA,CAAA;AAAA,OACrC;AAAA,KACJ;AAAA,GACJ;AACA,EAAO,OAAA,KAAA,CAAA,CAAA;AACX,CAAA,CAAA;AAMA,MAAM,uBAAA,GAA0B,CAAC,SAAsD,KAAA;AACnF,EAAM,MAAA,OAAA,GAAU,IAAI,OAAQ,EAAA,CAAA;AAC5B,EAAA,MAAM,cAAc,IAAI,WAAA,CAAY,EAAE,KAAA,EAAO,WAAW,CAAA,CAAA;AAExD,EAAM,MAAA,aAAA,GAAgB,YAAY,gBAAiB,EAAA,CAAA;AACnD,EAAA,IAAI,CAAC,aAAe,EAAA;AAChB,IAAM,MAAA,IAAI,MAAM,+BAA+B,CAAA,CAAA;AAAA,GACnD;AAEA,EAAM,MAAA,MAAA,GAAS,aAAc,CAAA,OAAA,EAAS,CAAC,CAAA,CAAA;AACvC,EAAA,IAAI,CAAC,MAAQ,EAAA;AACT,IAAM,MAAA,IAAI,MAAM,mDAAmD,CAAA,CAAA;AAAA,GACvE;AAGA,EAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAA,IAAK,OAAO,MAAQ,EAAA;AACxC,IAAA,OAAO,MAAO,CAAA,MAAA,GAAS,CAAI,GAAA,MAAA,GAAS,OAAO,CAAC,CAAA,CAAA;AAAA,GACzC,MAAA;AACH,IAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACJ,CAAA;;;;"}
|
package/EditingWorkflowImpl.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from "@open-pioneer/core";
|
|
2
|
-
import { MapModel } from "@open-pioneer/map";
|
|
3
|
-
import { Draw } from "ol/interaction";
|
|
4
|
-
import { HttpService } from "@open-pioneer/http";
|
|
5
|
-
import { PackageIntl } from "@open-pioneer/runtime";
|
|
6
|
-
import { FlatStyleLike } from "ol/style/flat";
|
|
7
|
-
import { EditingWorkflowEvents, EditingWorkflowState, EditingWorkflow } from "./api";
|
|
8
|
-
interface EditingWorkflowProps {
|
|
9
|
-
map: MapModel;
|
|
10
|
-
ogcApiFeatureLayerUrl: URL;
|
|
11
|
-
polygonDrawStyle: FlatStyleLike;
|
|
12
|
-
httpService: HttpService;
|
|
13
|
-
intl: PackageIntl;
|
|
14
|
-
}
|
|
15
|
-
export declare class EditingWorkflowImpl extends EventEmitter<EditingWorkflowEvents> implements EditingWorkflow {
|
|
16
|
-
#private;
|
|
17
|
-
private _httpService;
|
|
18
|
-
private _intl;
|
|
19
|
-
private _map;
|
|
20
|
-
private _polygonDrawStyle;
|
|
21
|
-
private _state;
|
|
22
|
-
private _editLayerURL;
|
|
23
|
-
private _drawSource;
|
|
24
|
-
private _drawLayer;
|
|
25
|
-
private _drawInteraction;
|
|
26
|
-
private _olMap;
|
|
27
|
-
private _mapContainer;
|
|
28
|
-
private _tooltip;
|
|
29
|
-
private _enterHandler;
|
|
30
|
-
private _escapeHandler;
|
|
31
|
-
private _interactionListener;
|
|
32
|
-
private _mapListener;
|
|
33
|
-
constructor(options: EditingWorkflowProps);
|
|
34
|
-
getDrawInteraction(): Draw;
|
|
35
|
-
getState(): EditingWorkflowState;
|
|
36
|
-
private _setState;
|
|
37
|
-
private _start;
|
|
38
|
-
reset(): void;
|
|
39
|
-
stop(): void;
|
|
40
|
-
private _destroy;
|
|
41
|
-
whenComplete(): Promise<string | undefined>;
|
|
42
|
-
private _createTooltip;
|
|
43
|
-
}
|
|
44
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EditingWorkflowImpl.js","sources":["EditingWorkflowImpl.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { EventEmitter, ManualPromise, createManualPromise } from \"@open-pioneer/core\";\nimport { MapModel, TOPMOST_LAYER_Z } from \"@open-pioneer/map\";\nimport { Draw } from \"ol/interaction\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport VectorSource from \"ol/source/Vector\";\nimport { HttpService } from \"@open-pioneer/http\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport { FlatStyleLike } from \"ol/style/flat\";\nimport GeoJSON from \"ol/format/GeoJSON\";\nimport GeoJSONGeometry from \"ol/format/GeoJSON\";\nimport GeoJSONGeometryCollection from \"ol/format/GeoJSON\";\nimport { saveCreatedFeature } from \"./SaveFeaturesHandler\";\nimport OlMap from \"ol/Map\";\nimport Overlay from \"ol/Overlay\";\nimport { Resource } from \"@open-pioneer/core\";\nimport { unByKey } from \"ol/Observable\";\nimport { EventsKey } from \"ol/events\";\nimport { EditingWorkflowEvents, EditingWorkflowState, EditingWorkflow } from \"./api\";\n\n// Represents a tooltip rendered on the OpenLayers map\ninterface Tooltip extends Resource {\n overlay: Overlay;\n element: HTMLDivElement;\n}\n\ninterface EditingWorkflowProps {\n map: MapModel;\n ogcApiFeatureLayerUrl: URL;\n polygonDrawStyle: FlatStyleLike;\n httpService: HttpService;\n intl: PackageIntl;\n}\n\nexport class EditingWorkflowImpl\n extends EventEmitter<EditingWorkflowEvents>\n implements EditingWorkflow\n{\n #waiter: ManualPromise<string | undefined> | undefined;\n\n private _httpService: HttpService;\n private _intl: PackageIntl;\n\n private _map: MapModel;\n private _polygonDrawStyle: FlatStyleLike;\n private _state: EditingWorkflowState;\n private _editLayerURL: URL;\n\n private _drawSource: VectorSource;\n private _drawLayer: VectorLayer<VectorSource>;\n private _drawInteraction: Draw;\n private _olMap: OlMap;\n private _mapContainer: HTMLElement | undefined;\n private _tooltip: Tooltip;\n private _enterHandler: (e: KeyboardEvent) => void;\n private _escapeHandler: (e: KeyboardEvent) => void;\n\n private _interactionListener: Array<EventsKey>;\n private _mapListener: Array<Resource>;\n\n constructor(options: EditingWorkflowProps) {\n super();\n this._httpService = options.httpService;\n this._intl = options.intl;\n\n this._polygonDrawStyle = options.polygonDrawStyle;\n\n this._map = options.map;\n this._olMap = options.map.olMap;\n this._state = \"active:initialized\";\n this._editLayerURL = options.ogcApiFeatureLayerUrl;\n\n this._drawSource = new VectorSource();\n this._drawLayer = new VectorLayer({\n source: this._drawSource,\n zIndex: TOPMOST_LAYER_Z,\n properties: {\n name: \"editing-layer\"\n }\n });\n\n this._drawInteraction = new Draw({\n source: this._drawSource,\n type: \"Polygon\",\n style: this._polygonDrawStyle\n });\n\n this._tooltip = this._createTooltip(this._olMap);\n\n this._enterHandler = (e: KeyboardEvent) => {\n if (e.code === \"Enter\" && e.target === this._olMap.getTargetElement()) {\n const features = this._drawInteraction.getOverlay().getSource().getFeatures();\n\n /**\n * Get the first linear ring of the polygon\n * Coordinates include closing vertex, so a triangle has 4, while drawing the\n * actual mouse position is an extra vertex, therefor we have to check\n * \"length > 4\" instead of \"length >= 4\"\n */\n if (features[0] && features[0].getGeometry().getCoordinates()[0].length > 4) {\n this._drawInteraction.finishDrawing();\n }\n }\n };\n\n this._escapeHandler = (e: KeyboardEvent) => {\n if (e.code === \"Escape\" && e.target === this._olMap.getTargetElement()) {\n this.reset();\n }\n };\n\n this._interactionListener = [];\n this._mapListener = [];\n\n this._start();\n }\n\n getDrawInteraction() {\n return this._drawInteraction;\n }\n\n getState() {\n return this._state;\n }\n\n private _setState(state: EditingWorkflowState) {\n this._state = state;\n this.emit(state);\n }\n\n private _start() {\n this._olMap.addLayer(this._drawLayer);\n this._olMap.addInteraction(this._drawInteraction);\n\n // Add EventListener on focused map to abort actual interaction via `Escape`\n this._mapContainer = this._olMap.getTargetElement() ?? undefined;\n if (this._mapContainer) {\n this._mapContainer.addEventListener(\"keydown\", this._enterHandler, false);\n this._mapContainer.addEventListener(\"keydown\", this._escapeHandler, false);\n }\n\n this._tooltip.element.classList.remove(\"editing-tooltip-hidden\");\n\n const drawStart = this._drawInteraction.on(\"drawstart\", () => {\n this._setState(\"active:drawing\");\n this._tooltip.element.textContent = this._intl.formatMessage({\n id: \"tooltip.continue\"\n });\n });\n\n const drawEnd = this._drawInteraction.on(\"drawend\", (e) => {\n this._setState(\"active:saving\");\n\n const layerUrl = this._editLayerURL;\n\n const geometry = e.feature.getGeometry();\n if (!geometry) {\n this._destroy();\n this.#waiter?.reject(new Error(\"no geometry available\"));\n return;\n }\n const projection = this._olMap.getView().getProjection();\n const geoJson = new GeoJSON({\n dataProjection: projection\n });\n const geoJSONGeometry: GeoJSONGeometry | GeoJSONGeometryCollection =\n geoJson.writeGeometryObject(geometry, {\n rightHanded: true,\n decimals: 10\n });\n saveCreatedFeature(this._httpService, layerUrl, geoJSONGeometry, projection)\n .then((featureId) => {\n this._destroy();\n this.#waiter?.resolve(featureId);\n })\n .catch((err: Error) => {\n console.log(err);\n this._destroy();\n this.#waiter?.reject(err);\n });\n });\n\n // update event handler when container changes\n const changedContainer = this._map.on(\"changed:container\", () => {\n this._mapContainer?.removeEventListener(\"keydown\", this._enterHandler);\n this._mapContainer?.removeEventListener(\"keydown\", this._escapeHandler);\n\n this._mapContainer = this._olMap.getTargetElement() ?? undefined;\n if (this._mapContainer) {\n this._mapContainer.addEventListener(\"keydown\", this._enterHandler, false);\n this._mapContainer.addEventListener(\"keydown\", this._escapeHandler, false);\n }\n });\n\n this._interactionListener.push(drawStart, drawEnd);\n this._mapListener.push(changedContainer);\n }\n\n reset() {\n this._drawInteraction.abortDrawing();\n this._tooltip.element.textContent = this._intl.formatMessage({ id: \"tooltip.begin\" });\n this._setState(\"active:initialized\");\n }\n\n stop() {\n this._destroy();\n this.#waiter?.resolve(undefined);\n }\n\n private _destroy() {\n this._olMap.removeLayer(this._drawLayer);\n this._olMap.removeInteraction(this._drawInteraction);\n this._tooltip.destroy();\n\n // Remove event listener on interaction and on map\n this._interactionListener.map((listener) => {\n unByKey(listener);\n });\n this._mapListener.map((listener) => {\n listener.destroy();\n });\n\n // Remove event escape listener\n this._mapContainer?.removeEventListener(\"keydown\", this._enterHandler);\n this._mapContainer?.removeEventListener(\"keydown\", this._escapeHandler);\n\n this._state = \"inactive\";\n }\n\n whenComplete(): Promise<string | undefined> {\n const manualPromise = (this.#waiter ??= createManualPromise());\n return manualPromise.promise;\n }\n\n private _createTooltip(olMap: OlMap): Tooltip {\n const element = document.createElement(\"div\");\n element.className = \"editing-tooltip editing-tooltip-hidden\";\n element.textContent = this._intl.formatMessage({ id: \"tooltip.begin\" });\n\n const overlay = new Overlay({\n element: element,\n offset: [15, 0],\n positioning: \"center-left\"\n });\n\n const pointerMove = olMap.on(\"pointermove\", (evt) => {\n if (evt.dragging) {\n return;\n }\n\n overlay.setPosition(evt.coordinate);\n });\n\n olMap.addOverlay(overlay);\n\n return {\n overlay,\n element,\n destroy() {\n unByKey(pointerMove);\n olMap.removeOverlay(overlay);\n }\n };\n }\n}\n"],"names":[],"mappings":"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"}
|