@open-pioneer/selection 1.3.0-dev.20260303160408 → 1.3.0-dev.20260310142705
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 +1 -139
- package/DragController.d.ts +2 -1
- package/DragController.js +25 -35
- package/DragController.js.map +1 -1
- package/Selection.js +1 -1
- package/Selection.js.map +1 -1
- package/SelectionTooltipContent.d.ts +4 -0
- package/SelectionTooltipContent.js +10 -0
- package/SelectionTooltipContent.js.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
# @open-pioneer/selection
|
|
2
2
|
|
|
3
|
-
## 1.3.0-dev.
|
|
3
|
+
## 1.3.0-dev.20260310142705
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
7
|
- 9b5d5f3: Support for new common container props (role, aria-_, data-_ and css)
|
|
8
8
|
- d54ccfd: Update to Chakra UI 3.32.0
|
|
9
9
|
|
|
10
|
-
### Patch Changes
|
|
11
|
-
|
|
12
|
-
- Updated dependencies [9b5d5f3]
|
|
13
|
-
- Updated dependencies [fcbd505]
|
|
14
|
-
- Updated dependencies [2ceb1ca]
|
|
15
|
-
- Updated dependencies [73453af]
|
|
16
|
-
- Updated dependencies [fcbd505]
|
|
17
|
-
- Updated dependencies [d54ccfd]
|
|
18
|
-
- Updated dependencies [4bcc8ce]
|
|
19
|
-
- Updated dependencies [2ceb1ca]
|
|
20
|
-
- @open-pioneer/map@1.3.0-dev.20260303160408
|
|
21
|
-
|
|
22
10
|
## 1.2.0
|
|
23
11
|
|
|
24
12
|
### Patch Changes
|
|
@@ -27,13 +15,6 @@
|
|
|
27
15
|
- 279ca67: Use `workspace:*` instead of `workspace:^` for local package references as default. This ensures that trails packages from this repository are always referenced with their exact version to avoid potential issues with version mismatches. If a project specifically wants to use other versions for some trails packages, a pnpm override can be used to force other versions.
|
|
28
16
|
- 9580bb4: Update various dependencies.
|
|
29
17
|
- 9580bb4: Update to Chakra 3.31.0
|
|
30
|
-
- Updated dependencies [597584b]
|
|
31
|
-
- Updated dependencies [9c29256]
|
|
32
|
-
- Updated dependencies [279ca67]
|
|
33
|
-
- Updated dependencies [597584b]
|
|
34
|
-
- Updated dependencies [9580bb4]
|
|
35
|
-
- Updated dependencies [9580bb4]
|
|
36
|
-
- @open-pioneer/map@1.2.0
|
|
37
18
|
|
|
38
19
|
## 1.1.0
|
|
39
20
|
|
|
@@ -46,12 +27,6 @@
|
|
|
46
27
|
### Patch Changes
|
|
47
28
|
|
|
48
29
|
- fce7fa9: Implement stricter null safety checks.
|
|
49
|
-
- Updated dependencies [fce7fa9]
|
|
50
|
-
- Updated dependencies [10338fa]
|
|
51
|
-
- Updated dependencies [a8b8a36]
|
|
52
|
-
- Updated dependencies [10338fa]
|
|
53
|
-
- Updated dependencies [c38b619]
|
|
54
|
-
- @open-pioneer/map@1.1.0
|
|
55
30
|
|
|
56
31
|
## 1.0.0
|
|
57
32
|
|
|
@@ -65,30 +40,6 @@
|
|
|
65
40
|
- 10d2fe7: Update dependencies
|
|
66
41
|
- 138d85b: Update core packages to 4.2.0
|
|
67
42
|
- da6a410: Update dependencies
|
|
68
|
-
- Updated dependencies [c6180c6]
|
|
69
|
-
- Updated dependencies [29a10df]
|
|
70
|
-
- Updated dependencies [10d2fe7]
|
|
71
|
-
- Updated dependencies [4f1e7bd]
|
|
72
|
-
- Updated dependencies [2702df4]
|
|
73
|
-
- Updated dependencies [12561fe]
|
|
74
|
-
- Updated dependencies [5df900f]
|
|
75
|
-
- Updated dependencies [8986b3b]
|
|
76
|
-
- Updated dependencies [b3709f1]
|
|
77
|
-
- Updated dependencies [14c484e]
|
|
78
|
-
- Updated dependencies [138d85b]
|
|
79
|
-
- Updated dependencies [4f1e7bd]
|
|
80
|
-
- Updated dependencies [aeb9000]
|
|
81
|
-
- Updated dependencies [9e9bc6e]
|
|
82
|
-
- Updated dependencies [b3709f1]
|
|
83
|
-
- Updated dependencies [2c8b617]
|
|
84
|
-
- Updated dependencies [b3709f1]
|
|
85
|
-
- Updated dependencies [5df900f]
|
|
86
|
-
- Updated dependencies [f1f69f2]
|
|
87
|
-
- Updated dependencies [a1614de]
|
|
88
|
-
- Updated dependencies [773fa2d]
|
|
89
|
-
- Updated dependencies [2abcaaf]
|
|
90
|
-
- Updated dependencies [da6a410]
|
|
91
|
-
- @open-pioneer/map@1.0.0
|
|
92
43
|
|
|
93
44
|
## 0.11.0
|
|
94
45
|
|
|
@@ -100,12 +51,6 @@
|
|
|
100
51
|
### Patch Changes
|
|
101
52
|
|
|
102
53
|
- 5c2cca2: Add `aria-description` to select input to ensure that screen readers read the tooltip of the select interaction.
|
|
103
|
-
- Updated dependencies [738390e]
|
|
104
|
-
- Updated dependencies [66179bc]
|
|
105
|
-
- Updated dependencies [0a8ff71]
|
|
106
|
-
- Updated dependencies [acd5115]
|
|
107
|
-
- Updated dependencies [738390e]
|
|
108
|
-
- @open-pioneer/map@0.11.0
|
|
109
54
|
|
|
110
55
|
## 0.10.0
|
|
111
56
|
|
|
@@ -131,13 +76,6 @@
|
|
|
131
76
|
- cd1435b: Update ol to 10.5.0
|
|
132
77
|
- 032eed7: Bump dependencies.
|
|
133
78
|
- cd1435b: Update to react 19.1.0
|
|
134
|
-
- Updated dependencies [2bafdad]
|
|
135
|
-
- Updated dependencies [cd1435b]
|
|
136
|
-
- Updated dependencies [193068a]
|
|
137
|
-
- Updated dependencies [032eed7]
|
|
138
|
-
- Updated dependencies [cd1435b]
|
|
139
|
-
- Updated dependencies [7558df4]
|
|
140
|
-
- @open-pioneer/map@0.10.0
|
|
141
79
|
|
|
142
80
|
## 0.9.0
|
|
143
81
|
|
|
@@ -145,18 +83,6 @@
|
|
|
145
83
|
|
|
146
84
|
- cb94c75: update dependencies
|
|
147
85
|
|
|
148
|
-
### Patch Changes
|
|
149
|
-
|
|
150
|
-
- Updated dependencies [e7fdc5d]
|
|
151
|
-
- Updated dependencies [cb94c75]
|
|
152
|
-
- Updated dependencies [37cd707]
|
|
153
|
-
- Updated dependencies [32ed2cd]
|
|
154
|
-
- Updated dependencies [f327eec]
|
|
155
|
-
- Updated dependencies [f327eec]
|
|
156
|
-
- Updated dependencies [209eb8e]
|
|
157
|
-
- Updated dependencies [d72e42c]
|
|
158
|
-
- @open-pioneer/map@0.9.0
|
|
159
|
-
|
|
160
86
|
## 0.8.0
|
|
161
87
|
|
|
162
88
|
### Minor Changes
|
|
@@ -195,17 +121,6 @@
|
|
|
195
121
|
### Patch Changes
|
|
196
122
|
|
|
197
123
|
- 49f0207: Update trails core packages to version 2.4.0
|
|
198
|
-
- Updated dependencies [b717121]
|
|
199
|
-
- Updated dependencies [e7978a8]
|
|
200
|
-
- Updated dependencies [7a5f1e1]
|
|
201
|
-
- Updated dependencies [7ae9f90]
|
|
202
|
-
- Updated dependencies [d8337a6]
|
|
203
|
-
- Updated dependencies [49f0207]
|
|
204
|
-
- Updated dependencies [b2127df]
|
|
205
|
-
- Updated dependencies [2fa8020]
|
|
206
|
-
- Updated dependencies [7ae9f90]
|
|
207
|
-
- Updated dependencies [d8337a6]
|
|
208
|
-
- @open-pioneer/map@0.8.0
|
|
209
124
|
|
|
210
125
|
## 0.7.0
|
|
211
126
|
|
|
@@ -225,17 +140,6 @@
|
|
|
225
140
|
- a8b3449: Switch to a new versioning strategy.
|
|
226
141
|
From now on, packages released by this repository share a common version number.
|
|
227
142
|
- 900eb11: Update dependencies.
|
|
228
|
-
- Updated dependencies [310800c]
|
|
229
|
-
- Updated dependencies [2502050]
|
|
230
|
-
- Updated dependencies [583f1d6]
|
|
231
|
-
- Updated dependencies [583f1d6]
|
|
232
|
-
- Updated dependencies [397d617]
|
|
233
|
-
- Updated dependencies [a8b3449]
|
|
234
|
-
- Updated dependencies [310800c]
|
|
235
|
-
- Updated dependencies [900eb11]
|
|
236
|
-
- Updated dependencies [583f1d6]
|
|
237
|
-
- Updated dependencies [397d617]
|
|
238
|
-
- @open-pioneer/map@0.7.0
|
|
239
143
|
|
|
240
144
|
## 0.2.4
|
|
241
145
|
|
|
@@ -244,9 +148,6 @@
|
|
|
244
148
|
- 291ccb6: Automatically select initial selection-source.
|
|
245
149
|
- b152428: Update trails dependencies
|
|
246
150
|
- da18bda: The `onSelectionSourceChange` event is no longer thrown if user selects the currently selected source again.
|
|
247
|
-
- Updated dependencies [b152428]
|
|
248
|
-
- Updated dependencies [291ccb6]
|
|
249
|
-
- @open-pioneer/map@0.6.1
|
|
250
151
|
|
|
251
152
|
## 0.2.3
|
|
252
153
|
|
|
@@ -260,10 +161,6 @@
|
|
|
260
161
|
|
|
261
162
|
- 65a14f4: Open select-menu on enter (fixes issue [#320](https://github.com/open-pioneer/trails-openlayers-base-packages/issues/320))
|
|
262
163
|
- 484ad86: Add tooltip role to tooltip divs (See https://github.com/open-pioneer/trails-openlayers-base-packages/issues/309).
|
|
263
|
-
- Updated dependencies [28e092a]
|
|
264
|
-
- Updated dependencies [0d51d2f]
|
|
265
|
-
- Updated dependencies [76f8863]
|
|
266
|
-
- @open-pioneer/map@0.6.0
|
|
267
164
|
|
|
268
165
|
## 0.2.2
|
|
269
166
|
|
|
@@ -274,22 +171,9 @@
|
|
|
274
171
|
- 4140646: Update to react 18.3.1
|
|
275
172
|
- 81bc7da: Update trails dependencies
|
|
276
173
|
- 2c092dc: Update dependencies
|
|
277
|
-
- Updated dependencies [4140646]
|
|
278
|
-
- Updated dependencies [4140646]
|
|
279
|
-
- Updated dependencies [b5bb7a1]
|
|
280
|
-
- Updated dependencies [81bc7da]
|
|
281
|
-
- Updated dependencies [2c092dc]
|
|
282
|
-
- Updated dependencies [4140646]
|
|
283
|
-
- @open-pioneer/react-utils@0.2.3
|
|
284
|
-
- @open-pioneer/map@0.5.1
|
|
285
174
|
|
|
286
175
|
## 0.2.1
|
|
287
176
|
|
|
288
|
-
### Patch Changes
|
|
289
|
-
|
|
290
|
-
- Updated dependencies [520a97b]
|
|
291
|
-
- @open-pioneer/map@0.5.0
|
|
292
|
-
|
|
293
177
|
## 0.2.0
|
|
294
178
|
|
|
295
179
|
### Minor Changes
|
|
@@ -303,24 +187,12 @@
|
|
|
303
187
|
- 13ea342: Fix import of internal module of another package.
|
|
304
188
|
- a0d8882: hide help texts during map export
|
|
305
189
|
- 6162979: Update versions of core packages
|
|
306
|
-
- Updated dependencies [1a8ad89]
|
|
307
|
-
- Updated dependencies [a11bf72]
|
|
308
|
-
- Updated dependencies [fc6bf82]
|
|
309
|
-
- Updated dependencies [a0d8882]
|
|
310
|
-
- Updated dependencies [6162979]
|
|
311
|
-
- Updated dependencies [9334e81]
|
|
312
|
-
- Updated dependencies [ac7fdd1]
|
|
313
|
-
- Updated dependencies [13ea342]
|
|
314
|
-
- @open-pioneer/react-utils@0.2.2
|
|
315
|
-
- @open-pioneer/map@0.4.0
|
|
316
190
|
|
|
317
191
|
## 0.1.1
|
|
318
192
|
|
|
319
193
|
### Patch Changes
|
|
320
194
|
|
|
321
195
|
- 611ddb9: Export interface `BaseFeature` from Map API and use it correctly in base packages `selection` and `search`.
|
|
322
|
-
- Updated dependencies [611ddb9]
|
|
323
|
-
- @open-pioneer/map@0.3.1
|
|
324
196
|
|
|
325
197
|
## 0.1.0
|
|
326
198
|
|
|
@@ -330,13 +202,3 @@
|
|
|
330
202
|
- 61d3e0e: Initial release.
|
|
331
203
|
- 0456500: Add interface `BaseFeature` to Map API.
|
|
332
204
|
- 35be8ef: Introduction of `SelectionSourceFactory` for creating selection sources of an OpenLayers VectorLayer.
|
|
333
|
-
|
|
334
|
-
### Patch Changes
|
|
335
|
-
|
|
336
|
-
- Updated dependencies [ee7c2d4]
|
|
337
|
-
- Updated dependencies [a582e5e]
|
|
338
|
-
- Updated dependencies [0456500]
|
|
339
|
-
- Updated dependencies [762e7b9]
|
|
340
|
-
- @open-pioneer/map@0.3.0
|
|
341
|
-
- @open-pioneer/notifier@0.3.0
|
|
342
|
-
- @open-pioneer/react-utils@0.2.1
|
package/DragController.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Resource } from "@open-pioneer/core";
|
|
2
|
+
import { MapModel } from "@open-pioneer/map";
|
|
2
3
|
import OlMap from "ol/Map";
|
|
3
4
|
import Geometry from "ol/geom/Geometry";
|
|
4
5
|
import PointerInteraction from "ol/interaction/Pointer";
|
|
@@ -13,7 +14,7 @@ export declare class DragController {
|
|
|
13
14
|
private tooltipMessage;
|
|
14
15
|
private tooltipDisabledMessage;
|
|
15
16
|
private tooltipSync;
|
|
16
|
-
constructor(
|
|
17
|
+
constructor(map: MapModel, tooltipMessage: string, tooltipDisabledMessage: string, onExtentSelected: (geometry: Geometry) => void);
|
|
17
18
|
initViewport(olMap: OlMap): HTMLElement;
|
|
18
19
|
/**
|
|
19
20
|
* Method for destroying the controller when it is no longer needed
|
package/DragController.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { reactive, watch } from '@conterra/reactivity-core';
|
|
2
|
-
import { unByKey } from 'ol/Observable.js';
|
|
3
|
-
import Overlay from 'ol/Overlay.js';
|
|
4
2
|
import { mouseActionButton } from 'ol/events/condition.js';
|
|
5
3
|
import { DragBox, DragPan } from 'ol/interaction.js';
|
|
4
|
+
import { createElement } from 'react';
|
|
5
|
+
import { SelectionTooltipContent } from './SelectionTooltipContent.js';
|
|
6
6
|
|
|
7
7
|
const ACTIVE_CLASS = "selection-active";
|
|
8
8
|
const INACTIVE_CLASS = "selection-inactive";
|
|
@@ -14,20 +14,25 @@ class DragController {
|
|
|
14
14
|
tooltipMessage;
|
|
15
15
|
tooltipDisabledMessage;
|
|
16
16
|
tooltipSync;
|
|
17
|
-
constructor(
|
|
18
|
-
|
|
17
|
+
constructor(map, tooltipMessage, tooltipDisabledMessage, onExtentSelected) {
|
|
18
|
+
this.olMap = map.olMap;
|
|
19
|
+
const viewPort = this.initViewport(this.olMap);
|
|
19
20
|
this.interactionResources.push(
|
|
20
|
-
this.createDragBox(olMap, onExtentSelected, viewPort, this.interactionResources)
|
|
21
|
+
this.createDragBox(this.olMap, onExtentSelected, viewPort, this.interactionResources)
|
|
21
22
|
);
|
|
22
|
-
this.interactionResources.push(
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
this.interactionResources.push(
|
|
24
|
+
this.createDrag(this.olMap, viewPort, this.interactionResources)
|
|
25
|
+
);
|
|
26
|
+
this.tooltip = this.createHelpTooltip(map, tooltipMessage);
|
|
25
27
|
this.tooltipMessage = tooltipMessage;
|
|
26
28
|
this.tooltipDisabledMessage = tooltipDisabledMessage;
|
|
27
29
|
this.tooltipSync = watch(
|
|
28
30
|
() => [this.isActive.value, this.tooltipText],
|
|
29
31
|
([isActive, tooltipText]) => {
|
|
30
|
-
|
|
32
|
+
const tooltipContent = createElement(SelectionTooltipContent, {
|
|
33
|
+
content: tooltipText
|
|
34
|
+
});
|
|
35
|
+
this.tooltip.setContent(tooltipContent);
|
|
31
36
|
viewPort.classList.toggle(ACTIVE_CLASS, isActive);
|
|
32
37
|
viewPort.classList.toggle(INACTIVE_CLASS, !isActive);
|
|
33
38
|
},
|
|
@@ -132,34 +137,19 @@ class DragController {
|
|
|
132
137
|
/**
|
|
133
138
|
* Method to generate a tooltip on the mouse cursor
|
|
134
139
|
*/
|
|
135
|
-
createHelpTooltip(
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
element.role = "tooltip";
|
|
139
|
-
const content = document.createElement("span");
|
|
140
|
-
content.textContent = message;
|
|
141
|
-
element.appendChild(content);
|
|
142
|
-
const overlay = new Overlay({
|
|
143
|
-
element,
|
|
144
|
-
offset: [15, 0],
|
|
145
|
-
positioning: "center-left"
|
|
140
|
+
createHelpTooltip(map, message) {
|
|
141
|
+
const tooltipContent = createElement(SelectionTooltipContent, {
|
|
142
|
+
content: message
|
|
146
143
|
});
|
|
147
|
-
const
|
|
148
|
-
|
|
144
|
+
const tooltipOverlay = map.overlays.add({
|
|
145
|
+
content: tooltipContent,
|
|
146
|
+
mode: "follow-pointer",
|
|
147
|
+
offset: [15, 0],
|
|
148
|
+
positioning: "center-left",
|
|
149
|
+
ariaRole: "tooltip",
|
|
150
|
+
className: "selection-tooltip printing-hide"
|
|
149
151
|
});
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
overlay,
|
|
153
|
-
element,
|
|
154
|
-
destroy() {
|
|
155
|
-
olMap.removeOverlay(overlay);
|
|
156
|
-
overlay.dispose();
|
|
157
|
-
unByKey(pointHandler);
|
|
158
|
-
},
|
|
159
|
-
setText(value) {
|
|
160
|
-
content.textContent = value;
|
|
161
|
-
}
|
|
162
|
-
};
|
|
152
|
+
return tooltipOverlay;
|
|
163
153
|
}
|
|
164
154
|
/**
|
|
165
155
|
* Method for testing purposes only
|
package/DragController.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragController.js","sources":["DragController.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { reactive, watch } from \"@conterra/reactivity-core\";\nimport { Resource } from \"@open-pioneer/core\";\nimport { MapBrowserEvent } from \"ol\";\nimport OlMap from \"ol/Map\";\nimport { unByKey } from \"ol/Observable\";\nimport Overlay from \"ol/Overlay\";\nimport { mouseActionButton } from \"ol/events/condition\";\nimport Geometry from \"ol/geom/Geometry\";\nimport { DragBox, DragPan } from \"ol/interaction\";\nimport PointerInteraction from \"ol/interaction/Pointer\";\n\ninterface InteractionResource extends Resource {\n interaction: PointerInteraction;\n}\n/** Represents a tooltip rendered on the OpenLayers map. */\ninterface Tooltip extends Resource {\n overlay: Overlay;\n element: HTMLDivElement;\n setText(value: string): void;\n}\n\nconst ACTIVE_CLASS = \"selection-active\";\nconst INACTIVE_CLASS = \"selection-inactive\";\n\nexport class DragController {\n private tooltip: Tooltip;\n private interactionResources: InteractionResource[] = [];\n private olMap: OlMap;\n private isActive = reactive(true);\n private tooltipMessage: string;\n private tooltipDisabledMessage: string;\n private tooltipSync: Resource | undefined;\n\n constructor(\n olMap: OlMap,\n tooltipMessage: string,\n tooltipDisabledMessage: string,\n onExtentSelected: (geometry: Geometry) => void\n ) {\n const viewPort = this.initViewport(olMap);\n this.interactionResources.push(\n this.createDragBox(olMap, onExtentSelected, viewPort, this.interactionResources)\n );\n this.interactionResources.push(this.createDrag(olMap, viewPort, this.interactionResources));\n\n this.tooltip = this.createHelpTooltip(olMap, tooltipMessage);\n this.olMap = olMap;\n this.tooltipMessage = tooltipMessage;\n this.tooltipDisabledMessage = tooltipDisabledMessage;\n\n this.tooltipSync = watch(\n () => [this.isActive.value, this.tooltipText],\n ([isActive, tooltipText]) => {\n this.tooltip.setText(tooltipText);\n viewPort.classList.toggle(ACTIVE_CLASS, isActive);\n viewPort.classList.toggle(INACTIVE_CLASS, !isActive);\n },\n {\n immediate: true\n }\n );\n }\n\n initViewport(olMap: OlMap) {\n const viewPort = olMap.getViewport();\n viewPort.classList.add(ACTIVE_CLASS);\n\n viewPort.oncontextmenu = (e) => {\n e.preventDefault();\n return false;\n };\n return viewPort;\n }\n\n /**\n * Method for destroying the controller when it is no longer needed\n */\n destroy() {\n this.tooltipSync?.destroy();\n this.tooltipSync = undefined;\n\n this.tooltip.destroy();\n this.interactionResources.forEach((interaction) => {\n interaction.destroy();\n });\n }\n\n /**\n * The current tooltip text shown to the user.\n */\n get tooltipText(): string {\n const isActive = this.isActive.value;\n return isActive ? this.tooltipMessage : this.tooltipDisabledMessage;\n }\n\n setActive(isActive: boolean) {\n if (this.isActive.value === isActive) {\n return;\n }\n\n if (isActive) {\n this.interactionResources.forEach((interaction) =>\n this.olMap.addInteraction(interaction.interaction)\n );\n this.isActive.value = true;\n } else {\n this.interactionResources.forEach((interaction) =>\n this.olMap.removeInteraction(interaction.interaction)\n );\n this.isActive.value = false;\n }\n }\n\n /**\n * Method to create a simple extent-selection\n */\n private createDragBox(\n olMap: OlMap,\n onExtentSelected: (geometry: Geometry) => void,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const dragBox = new DragBox({\n className: \"selection-drag-box\",\n condition: mouseActionButton\n });\n\n olMap.addInteraction(dragBox);\n dragBox.on(\"boxend\", function () {\n onExtentSelected(dragBox.getGeometry());\n });\n\n const interactionResource: InteractionResource = {\n interaction: dragBox,\n destroy() {\n olMap.removeInteraction(dragBox);\n interactionResources.splice(interactionResources.indexOf(this));\n dragBox.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n return interactionResource;\n }\n\n /**\n * Method to activate pan with right-mouse-click\n */\n private createDrag(\n olMap: OlMap,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const condition = function (mapBrowserEvent: MapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return \"button\" in originalEvent && originalEvent.button == 2;\n };\n const drag = new DragPan({\n condition: condition\n });\n\n olMap.addInteraction(drag);\n\n const interactionResource: InteractionResource = {\n interaction: drag,\n destroy() {\n olMap.removeInteraction(drag);\n interactionResources.splice(interactionResources.indexOf(this));\n drag.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n\n return interactionResource;\n }\n\n /**\n * Method to generate a tooltip on the mouse cursor\n */\n private createHelpTooltip(olMap: OlMap, message: string): Tooltip {\n const element = document.createElement(\"div\");\n element.className = \"selection-tooltip printing-hide\";\n element.role = \"tooltip\";\n\n const content = document.createElement(\"span\");\n content.textContent = message;\n element.appendChild(content);\n\n const overlay = new Overlay({\n element: element,\n offset: [15, 0],\n positioning: \"center-left\"\n });\n\n const pointHandler = olMap.on(\"pointermove\", (evt) => {\n overlay.setPosition(evt.coordinate);\n });\n\n olMap.addOverlay(overlay);\n return {\n overlay,\n element,\n destroy() {\n olMap.removeOverlay(overlay);\n overlay.dispose();\n unByKey(pointHandler);\n },\n setText(value) {\n content.textContent = value;\n }\n };\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragBox\n */\n getDragboxInteraction() {\n return this.interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragBox\n );\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragPan\n */\n getDragPanInteraction() {\n return this.interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragPan\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DragController.js","sources":["DragController.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { reactive, watch } from \"@conterra/reactivity-core\";\nimport { Resource } from \"@open-pioneer/core\";\nimport { MapModel, Overlay } from \"@open-pioneer/map\";\nimport { MapBrowserEvent } from \"ol\";\nimport OlMap from \"ol/Map\";\nimport { mouseActionButton } from \"ol/events/condition\";\nimport Geometry from \"ol/geom/Geometry\";\nimport { DragBox, DragPan } from \"ol/interaction\";\nimport PointerInteraction from \"ol/interaction/Pointer\";\nimport { createElement } from \"react\";\nimport { SelectionTooltipContent } from \"./SelectionTooltipContent\";\n\ninterface InteractionResource extends Resource {\n interaction: PointerInteraction;\n}\n\nconst ACTIVE_CLASS = \"selection-active\";\nconst INACTIVE_CLASS = \"selection-inactive\";\n\nexport class DragController {\n private tooltip: Overlay;\n private interactionResources: InteractionResource[] = [];\n private olMap: OlMap;\n private isActive = reactive(true);\n private tooltipMessage: string;\n private tooltipDisabledMessage: string;\n private tooltipSync: Resource | undefined;\n\n constructor(\n map: MapModel,\n tooltipMessage: string,\n tooltipDisabledMessage: string,\n onExtentSelected: (geometry: Geometry) => void\n ) {\n this.olMap = map.olMap;\n const viewPort = this.initViewport(this.olMap);\n this.interactionResources.push(\n this.createDragBox(this.olMap, onExtentSelected, viewPort, this.interactionResources)\n );\n this.interactionResources.push(\n this.createDrag(this.olMap, viewPort, this.interactionResources)\n );\n\n this.tooltip = this.createHelpTooltip(map, tooltipMessage);\n this.tooltipMessage = tooltipMessage;\n this.tooltipDisabledMessage = tooltipDisabledMessage;\n\n this.tooltipSync = watch(\n () => [this.isActive.value, this.tooltipText],\n ([isActive, tooltipText]) => {\n const tooltipContent = createElement(SelectionTooltipContent, {\n content: tooltipText\n });\n this.tooltip.setContent(tooltipContent);\n viewPort.classList.toggle(ACTIVE_CLASS, isActive);\n viewPort.classList.toggle(INACTIVE_CLASS, !isActive);\n },\n {\n immediate: true\n }\n );\n }\n\n initViewport(olMap: OlMap) {\n const viewPort = olMap.getViewport();\n viewPort.classList.add(ACTIVE_CLASS);\n\n viewPort.oncontextmenu = (e) => {\n e.preventDefault();\n return false;\n };\n return viewPort;\n }\n\n /**\n * Method for destroying the controller when it is no longer needed\n */\n destroy() {\n this.tooltipSync?.destroy();\n this.tooltipSync = undefined;\n\n this.tooltip.destroy();\n this.interactionResources.forEach((interaction) => {\n interaction.destroy();\n });\n }\n\n /**\n * The current tooltip text shown to the user.\n */\n get tooltipText(): string {\n const isActive = this.isActive.value;\n return isActive ? this.tooltipMessage : this.tooltipDisabledMessage;\n }\n\n setActive(isActive: boolean) {\n if (this.isActive.value === isActive) {\n return;\n }\n\n if (isActive) {\n this.interactionResources.forEach((interaction) =>\n this.olMap.addInteraction(interaction.interaction)\n );\n this.isActive.value = true;\n } else {\n this.interactionResources.forEach((interaction) =>\n this.olMap.removeInteraction(interaction.interaction)\n );\n this.isActive.value = false;\n }\n }\n\n /**\n * Method to create a simple extent-selection\n */\n private createDragBox(\n olMap: OlMap,\n onExtentSelected: (geometry: Geometry) => void,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const dragBox = new DragBox({\n className: \"selection-drag-box\",\n condition: mouseActionButton\n });\n\n olMap.addInteraction(dragBox);\n dragBox.on(\"boxend\", function () {\n onExtentSelected(dragBox.getGeometry());\n });\n\n const interactionResource: InteractionResource = {\n interaction: dragBox,\n destroy() {\n olMap.removeInteraction(dragBox);\n interactionResources.splice(interactionResources.indexOf(this));\n dragBox.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n return interactionResource;\n }\n\n /**\n * Method to activate pan with right-mouse-click\n */\n private createDrag(\n olMap: OlMap,\n viewPort: HTMLElement,\n interactionResources: InteractionResource[]\n ): InteractionResource {\n const condition = function (mapBrowserEvent: MapBrowserEvent) {\n const originalEvent = mapBrowserEvent.originalEvent;\n return \"button\" in originalEvent && originalEvent.button == 2;\n };\n const drag = new DragPan({\n condition: condition\n });\n\n olMap.addInteraction(drag);\n\n const interactionResource: InteractionResource = {\n interaction: drag,\n destroy() {\n olMap.removeInteraction(drag);\n interactionResources.splice(interactionResources.indexOf(this));\n drag.dispose();\n viewPort.classList.remove(ACTIVE_CLASS);\n viewPort.classList.remove(INACTIVE_CLASS);\n viewPort.oncontextmenu = null;\n }\n };\n\n return interactionResource;\n }\n\n /**\n * Method to generate a tooltip on the mouse cursor\n */\n private createHelpTooltip(map: MapModel, message: string): Overlay {\n const tooltipContent = createElement(SelectionTooltipContent, {\n content: message\n });\n const tooltipOverlay = map.overlays.add({\n content: tooltipContent,\n mode: \"follow-pointer\",\n offset: [15, 0],\n positioning: \"center-left\",\n ariaRole: \"tooltip\",\n className: \"selection-tooltip printing-hide\"\n });\n\n return tooltipOverlay;\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragBox\n */\n getDragboxInteraction() {\n return this.interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragBox\n );\n }\n\n /**\n * Method for testing purposes only\n * @returns InteractionResource of class DragPan\n */\n getDragPanInteraction() {\n return this.interactionResources.find(\n (interactionResource) => interactionResource.interaction instanceof DragPan\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
package/Selection.js
CHANGED
|
@@ -213,7 +213,7 @@ function useDragSelection(map, intl, onExtentSelected, isActive, hasSelectedSour
|
|
|
213
213
|
useEffect(() => {
|
|
214
214
|
const disabledMessage = hasSelectedSource ? intl.formatMessage({ id: "disabledTooltip" }) : intl.formatMessage({ id: "noSourceTooltip" });
|
|
215
215
|
const dragController = new DragController(
|
|
216
|
-
map
|
|
216
|
+
map,
|
|
217
217
|
intl.formatMessage({ id: "tooltip" }),
|
|
218
218
|
disabledMessage,
|
|
219
219
|
onExtentSelected
|
package/Selection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Selection.js","sources":["Selection.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n Box,\n chakra,\n createListCollection,\n Flex,\n Icon,\n Portal,\n Select,\n VStack\n} from \"@chakra-ui/react\";\nimport { Tooltip } from \"@open-pioneer/chakra-snippets/tooltip\";\nimport { MapModel, MapModelProps, useMapModelValue } from \"@open-pioneer/map\";\nimport { NotificationService } from \"@open-pioneer/notifier\";\nimport { CommonComponentProps, useCommonComponentProps, useEvent } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport { Geometry } from \"ol/geom\";\nimport { useIntl, useService } from \"open-pioneer:react-hooks\";\nimport { FC, useCallback, useEffect, useRef, useState } from \"react\";\nimport { LuTriangleAlert } from \"react-icons/lu\";\nimport { DragController } from \"./DragController\";\nimport { SelectionController } from \"./SelectionController\";\nimport { SelectionResult, SelectionSource, SelectionSourceStatusObject } from \"./api\";\n\n/**\n * Properties supported by the {@link Selection} component.\n */\nexport interface SelectionProps extends CommonComponentProps, MapModelProps {\n /**\n * Array of selection sources available for spatial selection.\n */\n sources: SelectionSource[];\n\n /**\n * This handler is called whenever the user has successfully selected\n * some items.\n */\n onSelectionComplete?(event: SelectionCompleteEvent): void;\n\n /**\n * This handler is called whenever the user has changed the selected source\n */\n onSelectionSourceChanged?(event: SelectionSourceChangedEvent): void;\n}\n\nexport interface SelectionCompleteEvent {\n /** The source that returned the {@link results}. */\n source: SelectionSource;\n\n /** Results selected by the user. */\n results: SelectionResult[];\n}\n\nexport interface SelectionSourceChangedEvent {\n /** The new selected source */\n source: SelectionSource | undefined;\n}\n\n/**\n * A component that allows the user to perform a spatial selection on a given set of {@link SelectionSource}.\n */\nexport const Selection: FC<SelectionProps> = (props) => {\n const intl = useIntl();\n const { sources, onSelectionComplete, onSelectionSourceChanged } = props;\n const { containerProps } = useCommonComponentProps(\"selection\", props);\n\n const [currentSource, setCurrentSource] = useCurrentSelectionSource(\n sources,\n onSelectionSourceChanged\n );\n\n const currentSourceStatus = useSourceStatus(currentSource);\n\n const map = useMapModelValue(props);\n const { onExtentSelected } = useSelectionController(\n map,\n sources,\n currentSource,\n onSelectionComplete\n );\n\n const isActive = currentSourceStatus.kind === \"available\";\n const hasSelectedSource = !!currentSource;\n\n const dragController = useDragSelection(\n map,\n intl,\n onExtentSelected,\n isActive,\n hasSelectedSource\n );\n const dragTooltip = useReactiveSnapshot(() => dragController?.tooltipText, [dragController]);\n\n const getId = useSelectionSourceId();\n\n const sourceOptionsCollection = createListCollection({\n items: sources,\n isItemDisabled: () => {\n return false;\n },\n itemToString: (item) => item.label,\n itemToValue: (item) => getId(item)\n });\n\n let triggerItem;\n if (currentSource) {\n triggerItem = <SelectionSourceItem source={currentSource} />;\n } else {\n triggerItem = null;\n }\n\n return (\n <VStack {...containerProps} gap={2}>\n <Select.Root\n className=\"selection-source\"\n collection={sourceOptionsCollection}\n value={currentSource ? [getId(currentSource)] : undefined}\n onValueChange={(option) => option && setCurrentSource(option.items[0])}\n lazyMount={true}\n unmountOnExit={true}\n >\n <Select.Label>{intl.formatMessage({ id: \"selectSource\" })}</Select.Label>\n\n <Select.Control>\n <Select.Trigger aria-description={dragTooltip}>\n <Select.ValueText\n placeholder={intl.formatMessage({ id: \"selectionPlaceholder\" })}\n >\n {triggerItem}\n </Select.ValueText>\n </Select.Trigger>\n <Select.IndicatorGroup>\n <Select.Indicator />\n </Select.IndicatorGroup>\n </Select.Control>\n\n <Portal>\n <Select.Positioner>\n <Select.Content className=\"selection-source-options\">\n {sourceOptionsCollection.items.map((item) => (\n <SelectionSourceItemContent item={item} key={getId(item)} />\n ))}\n </Select.Content>\n </Select.Positioner>\n </Portal>\n </Select.Root>\n </VStack>\n );\n};\n\ntype GetSelectionSourceId = (selectionSource: SelectionSource) => string;\n\n/**\n * Assigns unique IDs to selection sources.\n */\nfunction useSelectionSourceId(): GetSelectionSourceId {\n const sourceIds = useRef<WeakMap<SelectionSource, string>>(undefined);\n const counter = useRef(0);\n if (!sourceIds.current) {\n sourceIds.current = new WeakMap();\n }\n\n return useCallback((selectionSource: SelectionSource) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const ids = sourceIds.current!;\n if (!ids.has(selectionSource)) {\n ids.set(selectionSource, `source-${counter.current++}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return ids.get(selectionSource)!;\n }, []);\n}\n\nfunction SelectionSourceItemContent(props: { item: SelectionSource }) {\n const { item } = props;\n\n const isDisabled = useSourceStatus(item).kind === \"unavailable\";\n\n return (\n <Select.Item\n className=\"selection-source-option\"\n item={item}\n justifyContent=\"flex-start\"\n // Override pointer-events: none rule for disabled items; we want to show the tooltip on hover\n pointerEvents=\"auto\"\n aria-disabled={isDisabled ? \"true\" : undefined}\n >\n <SelectionSourceItem source={item} />\n </Select.Item>\n );\n}\n\nfunction useCurrentSelectionSource(\n sources: SelectionSource[],\n onSourceChanged: ((event: SelectionSourceChangedEvent) => void) | undefined\n): [SelectionSource | undefined, (source: SelectionSource | undefined) => void] {\n const [currentSource, setCurrentSource] = useState<SelectionSource | undefined>(\n () => sources[0]\n );\n\n // Reset to undefined if the current source is not in the list of sources\n useEffect(() => {\n if (currentSource && !sources.includes(currentSource)) {\n setCurrentSource(undefined);\n }\n }, [sources, currentSource]);\n\n // Track the current source and notify the parent component if it changes\n const prevSelectedSource = useRef<SelectionSource | undefined>(undefined);\n useEffect(() => {\n if (currentSource !== prevSelectedSource.current) {\n prevSelectedSource.current = currentSource;\n onSourceChanged?.({ source: currentSource });\n }\n }, [currentSource, onSourceChanged]);\n return [currentSource, setCurrentSource];\n}\n\nfunction SelectionSourceItem(props: { source: SelectionSource | undefined }) {\n const source = props.source;\n const label: string | undefined = source?.label;\n const status = useSourceStatus(source);\n const isAvailable = status.kind === \"available\";\n const clazz = isAvailable\n ? \"selection-source-value\"\n : \"selection-source-value selection-source-value--disabled\";\n\n return (\n <Flex className={clazz} direction=\"row\" alignItems=\"center\" grow={1}>\n {label}\n {status.kind === \"unavailable\" && (\n <Box ml={2}>\n <Tooltip\n content={status.reason}\n positioning={{ placement: \"right\" }}\n openDelay={500}\n >\n <chakra.span>\n <Icon\n color=\"red\"\n className=\"warning-icon\"\n aria-label={status.reason}\n aria-hidden={undefined} // Overwrite icon default so the label gets read\n >\n <LuTriangleAlert />\n </Icon>\n </chakra.span>\n </Tooltip>\n </Box>\n )}\n </Flex>\n );\n}\n\n/**\n * Hook to manage selection controller\n */\nfunction useSelectionController(\n mapModel: MapModel,\n sources: SelectionSource[],\n currentSource: SelectionSource | undefined,\n onSelectionComplete: ((event: SelectionCompleteEvent) => void) | undefined\n) {\n const notifier = useService<NotificationService>(\"notifier.NotificationService\");\n const intl = useIntl();\n const [controller, setController] = useState<SelectionController | undefined>(undefined);\n useEffect(() => {\n const controller = new SelectionController({\n mapModel,\n onError() {\n notifier.notify({\n level: \"error\",\n message: intl.formatMessage({ id: \"selectionFailed\" })\n });\n }\n });\n setController(controller);\n return () => {\n controller.destroy();\n };\n }, [mapModel, notifier, sources, intl]);\n\n const onExtentSelected = useEvent(async (geometry: Geometry) => {\n if (!controller || !currentSource) {\n return;\n }\n\n const selectionResult = await controller.select(currentSource, geometry.getExtent());\n if (!selectionResult) {\n return;\n }\n\n onSelectionComplete?.(selectionResult);\n });\n return {\n controller,\n onExtentSelected\n };\n}\n\ntype SimpleStatus =\n | {\n kind: \"available\";\n }\n | {\n kind: \"unavailable\";\n reason: string;\n };\n\nfunction getSourceStatus(source: SelectionSource, sourceNotAvailableReason: string): SimpleStatus {\n const rawCurrent = source.status ?? \"available\";\n const current: SelectionSourceStatusObject =\n typeof rawCurrent === \"string\" ? { kind: rawCurrent } : rawCurrent;\n if (current.kind === \"available\") {\n return current;\n }\n\n return {\n kind: \"unavailable\",\n reason: current.reason ?? sourceNotAvailableReason\n };\n}\n\n/**\n * Hook to manage source status\n */\nfunction useSourceStatus(source: SelectionSource | undefined): SimpleStatus {\n const intl = useIntl();\n const defaultNotAvailableMessage = intl.formatMessage({ id: \"sourceNotAvailable\" });\n const sourceStatus = useReactiveSnapshot((): SimpleStatus => {\n if (!source) {\n return { kind: \"unavailable\", reason: defaultNotAvailableMessage };\n }\n return getSourceStatus(source, defaultNotAvailableMessage);\n }, [source, defaultNotAvailableMessage]);\n return sourceStatus;\n}\n\n/**\n * Hook to manage map controls and tooltip\n */\nfunction useDragSelection(\n map: MapModel,\n intl: PackageIntl,\n onExtentSelected: (geometry: Geometry) => void,\n isActive: boolean,\n hasSelectedSource: boolean\n): DragController | undefined {\n const [controller, setController] = useState<DragController | undefined>();\n useEffect(() => {\n const disabledMessage = hasSelectedSource\n ? intl.formatMessage({ id: \"disabledTooltip\" })\n : intl.formatMessage({ id: \"noSourceTooltip\" });\n\n const dragController = new DragController(\n map.olMap,\n intl.formatMessage({ id: \"tooltip\" }),\n disabledMessage,\n onExtentSelected\n );\n\n dragController.setActive(isActive);\n setController(dragController);\n return () => {\n setController(undefined);\n dragController.destroy();\n };\n }, [map, intl, onExtentSelected, isActive, hasSelectedSource]);\n return controller;\n}\n"],"names":["controller"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Selection.js","sources":["Selection.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport {\n Box,\n chakra,\n createListCollection,\n Flex,\n Icon,\n Portal,\n Select,\n VStack\n} from \"@chakra-ui/react\";\nimport { Tooltip } from \"@open-pioneer/chakra-snippets/tooltip\";\nimport { MapModel, MapModelProps, useMapModelValue } from \"@open-pioneer/map\";\nimport { NotificationService } from \"@open-pioneer/notifier\";\nimport { CommonComponentProps, useCommonComponentProps, useEvent } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport { PackageIntl } from \"@open-pioneer/runtime\";\nimport { Geometry } from \"ol/geom\";\nimport { useIntl, useService } from \"open-pioneer:react-hooks\";\nimport { FC, useCallback, useEffect, useRef, useState } from \"react\";\nimport { LuTriangleAlert } from \"react-icons/lu\";\nimport { DragController } from \"./DragController\";\nimport { SelectionController } from \"./SelectionController\";\nimport { SelectionResult, SelectionSource, SelectionSourceStatusObject } from \"./api\";\n\n/**\n * Properties supported by the {@link Selection} component.\n */\nexport interface SelectionProps extends CommonComponentProps, MapModelProps {\n /**\n * Array of selection sources available for spatial selection.\n */\n sources: SelectionSource[];\n\n /**\n * This handler is called whenever the user has successfully selected\n * some items.\n */\n onSelectionComplete?(event: SelectionCompleteEvent): void;\n\n /**\n * This handler is called whenever the user has changed the selected source\n */\n onSelectionSourceChanged?(event: SelectionSourceChangedEvent): void;\n}\n\nexport interface SelectionCompleteEvent {\n /** The source that returned the {@link results}. */\n source: SelectionSource;\n\n /** Results selected by the user. */\n results: SelectionResult[];\n}\n\nexport interface SelectionSourceChangedEvent {\n /** The new selected source */\n source: SelectionSource | undefined;\n}\n\n/**\n * A component that allows the user to perform a spatial selection on a given set of {@link SelectionSource}.\n */\nexport const Selection: FC<SelectionProps> = (props) => {\n const intl = useIntl();\n const { sources, onSelectionComplete, onSelectionSourceChanged } = props;\n const { containerProps } = useCommonComponentProps(\"selection\", props);\n\n const [currentSource, setCurrentSource] = useCurrentSelectionSource(\n sources,\n onSelectionSourceChanged\n );\n\n const currentSourceStatus = useSourceStatus(currentSource);\n\n const map = useMapModelValue(props);\n const { onExtentSelected } = useSelectionController(\n map,\n sources,\n currentSource,\n onSelectionComplete\n );\n\n const isActive = currentSourceStatus.kind === \"available\";\n const hasSelectedSource = !!currentSource;\n\n const dragController = useDragSelection(\n map,\n intl,\n onExtentSelected,\n isActive,\n hasSelectedSource\n );\n const dragTooltip = useReactiveSnapshot(() => dragController?.tooltipText, [dragController]);\n\n const getId = useSelectionSourceId();\n\n const sourceOptionsCollection = createListCollection({\n items: sources,\n isItemDisabled: () => {\n return false;\n },\n itemToString: (item) => item.label,\n itemToValue: (item) => getId(item)\n });\n\n let triggerItem;\n if (currentSource) {\n triggerItem = <SelectionSourceItem source={currentSource} />;\n } else {\n triggerItem = null;\n }\n\n return (\n <VStack {...containerProps} gap={2}>\n <Select.Root\n className=\"selection-source\"\n collection={sourceOptionsCollection}\n value={currentSource ? [getId(currentSource)] : undefined}\n onValueChange={(option) => option && setCurrentSource(option.items[0])}\n lazyMount={true}\n unmountOnExit={true}\n >\n <Select.Label>{intl.formatMessage({ id: \"selectSource\" })}</Select.Label>\n\n <Select.Control>\n <Select.Trigger aria-description={dragTooltip}>\n <Select.ValueText\n placeholder={intl.formatMessage({ id: \"selectionPlaceholder\" })}\n >\n {triggerItem}\n </Select.ValueText>\n </Select.Trigger>\n <Select.IndicatorGroup>\n <Select.Indicator />\n </Select.IndicatorGroup>\n </Select.Control>\n\n <Portal>\n <Select.Positioner>\n <Select.Content className=\"selection-source-options\">\n {sourceOptionsCollection.items.map((item) => (\n <SelectionSourceItemContent item={item} key={getId(item)} />\n ))}\n </Select.Content>\n </Select.Positioner>\n </Portal>\n </Select.Root>\n </VStack>\n );\n};\n\ntype GetSelectionSourceId = (selectionSource: SelectionSource) => string;\n\n/**\n * Assigns unique IDs to selection sources.\n */\nfunction useSelectionSourceId(): GetSelectionSourceId {\n const sourceIds = useRef<WeakMap<SelectionSource, string>>(undefined);\n const counter = useRef(0);\n if (!sourceIds.current) {\n sourceIds.current = new WeakMap();\n }\n\n return useCallback((selectionSource: SelectionSource) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const ids = sourceIds.current!;\n if (!ids.has(selectionSource)) {\n ids.set(selectionSource, `source-${counter.current++}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return ids.get(selectionSource)!;\n }, []);\n}\n\nfunction SelectionSourceItemContent(props: { item: SelectionSource }) {\n const { item } = props;\n\n const isDisabled = useSourceStatus(item).kind === \"unavailable\";\n\n return (\n <Select.Item\n className=\"selection-source-option\"\n item={item}\n justifyContent=\"flex-start\"\n // Override pointer-events: none rule for disabled items; we want to show the tooltip on hover\n pointerEvents=\"auto\"\n aria-disabled={isDisabled ? \"true\" : undefined}\n >\n <SelectionSourceItem source={item} />\n </Select.Item>\n );\n}\n\nfunction useCurrentSelectionSource(\n sources: SelectionSource[],\n onSourceChanged: ((event: SelectionSourceChangedEvent) => void) | undefined\n): [SelectionSource | undefined, (source: SelectionSource | undefined) => void] {\n const [currentSource, setCurrentSource] = useState<SelectionSource | undefined>(\n () => sources[0]\n );\n\n // Reset to undefined if the current source is not in the list of sources\n useEffect(() => {\n if (currentSource && !sources.includes(currentSource)) {\n setCurrentSource(undefined);\n }\n }, [sources, currentSource]);\n\n // Track the current source and notify the parent component if it changes\n const prevSelectedSource = useRef<SelectionSource | undefined>(undefined);\n useEffect(() => {\n if (currentSource !== prevSelectedSource.current) {\n prevSelectedSource.current = currentSource;\n onSourceChanged?.({ source: currentSource });\n }\n }, [currentSource, onSourceChanged]);\n return [currentSource, setCurrentSource];\n}\n\nfunction SelectionSourceItem(props: { source: SelectionSource | undefined }) {\n const source = props.source;\n const label: string | undefined = source?.label;\n const status = useSourceStatus(source);\n const isAvailable = status.kind === \"available\";\n const clazz = isAvailable\n ? \"selection-source-value\"\n : \"selection-source-value selection-source-value--disabled\";\n\n return (\n <Flex className={clazz} direction=\"row\" alignItems=\"center\" grow={1}>\n {label}\n {status.kind === \"unavailable\" && (\n <Box ml={2}>\n <Tooltip\n content={status.reason}\n positioning={{ placement: \"right\" }}\n openDelay={500}\n >\n <chakra.span>\n <Icon\n color=\"red\"\n className=\"warning-icon\"\n aria-label={status.reason}\n aria-hidden={undefined} // Overwrite icon default so the label gets read\n >\n <LuTriangleAlert />\n </Icon>\n </chakra.span>\n </Tooltip>\n </Box>\n )}\n </Flex>\n );\n}\n\n/**\n * Hook to manage selection controller\n */\nfunction useSelectionController(\n mapModel: MapModel,\n sources: SelectionSource[],\n currentSource: SelectionSource | undefined,\n onSelectionComplete: ((event: SelectionCompleteEvent) => void) | undefined\n) {\n const notifier = useService<NotificationService>(\"notifier.NotificationService\");\n const intl = useIntl();\n const [controller, setController] = useState<SelectionController | undefined>(undefined);\n useEffect(() => {\n const controller = new SelectionController({\n mapModel,\n onError() {\n notifier.notify({\n level: \"error\",\n message: intl.formatMessage({ id: \"selectionFailed\" })\n });\n }\n });\n setController(controller);\n return () => {\n controller.destroy();\n };\n }, [mapModel, notifier, sources, intl]);\n\n const onExtentSelected = useEvent(async (geometry: Geometry) => {\n if (!controller || !currentSource) {\n return;\n }\n\n const selectionResult = await controller.select(currentSource, geometry.getExtent());\n if (!selectionResult) {\n return;\n }\n\n onSelectionComplete?.(selectionResult);\n });\n return {\n controller,\n onExtentSelected\n };\n}\n\ntype SimpleStatus =\n | {\n kind: \"available\";\n }\n | {\n kind: \"unavailable\";\n reason: string;\n };\n\nfunction getSourceStatus(source: SelectionSource, sourceNotAvailableReason: string): SimpleStatus {\n const rawCurrent = source.status ?? \"available\";\n const current: SelectionSourceStatusObject =\n typeof rawCurrent === \"string\" ? { kind: rawCurrent } : rawCurrent;\n if (current.kind === \"available\") {\n return current;\n }\n\n return {\n kind: \"unavailable\",\n reason: current.reason ?? sourceNotAvailableReason\n };\n}\n\n/**\n * Hook to manage source status\n */\nfunction useSourceStatus(source: SelectionSource | undefined): SimpleStatus {\n const intl = useIntl();\n const defaultNotAvailableMessage = intl.formatMessage({ id: \"sourceNotAvailable\" });\n const sourceStatus = useReactiveSnapshot((): SimpleStatus => {\n if (!source) {\n return { kind: \"unavailable\", reason: defaultNotAvailableMessage };\n }\n return getSourceStatus(source, defaultNotAvailableMessage);\n }, [source, defaultNotAvailableMessage]);\n return sourceStatus;\n}\n\n/**\n * Hook to manage map controls and tooltip\n */\nfunction useDragSelection(\n map: MapModel,\n intl: PackageIntl,\n onExtentSelected: (geometry: Geometry) => void,\n isActive: boolean,\n hasSelectedSource: boolean\n): DragController | undefined {\n const [controller, setController] = useState<DragController | undefined>();\n useEffect(() => {\n const disabledMessage = hasSelectedSource\n ? intl.formatMessage({ id: \"disabledTooltip\" })\n : intl.formatMessage({ id: \"noSourceTooltip\" });\n\n const dragController = new DragController(\n map,\n intl.formatMessage({ id: \"tooltip\" }),\n disabledMessage,\n onExtentSelected\n );\n\n dragController.setActive(isActive);\n setController(dragController);\n return () => {\n setController(undefined);\n dragController.destroy();\n };\n }, [map, intl, onExtentSelected, isActive, hasSelectedSource]);\n return controller;\n}\n"],"names":["controller"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Span } from '@chakra-ui/react';
|
|
3
|
+
|
|
4
|
+
function SelectionTooltipContent(props) {
|
|
5
|
+
const { content } = props;
|
|
6
|
+
return /* @__PURE__ */ jsx(Span, { children: content });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { SelectionTooltipContent };
|
|
10
|
+
//# sourceMappingURL=SelectionTooltipContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionTooltipContent.js","sources":["SelectionTooltipContent.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Span } from \"@chakra-ui/react\";\nimport { ReactNode } from \"react\";\n\nexport function SelectionTooltipContent(props: { content?: ReactNode }) {\n const { content } = props;\n return <Span>{content}</Span>;\n}\n"],"names":[],"mappings":";;;AAKO,SAAS,wBAAwB,KAAA,EAAgC;AACpE,EAAA,MAAM,EAAE,SAAQ,GAAI,KAAA;AACpB,EAAA,uBAAO,GAAA,CAAC,QAAM,QAAA,EAAA,OAAA,EAAQ,CAAA;AAC1B;;;;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/selection",
|
|
4
|
-
"version": "1.3.0-dev.
|
|
4
|
+
"version": "1.3.0-dev.20260310142705",
|
|
5
5
|
"description": "This package provides a UI component to perform a selection on given selection sources from the map.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"@conterra/reactivity-core": "^0.8.1",
|
|
28
28
|
"@open-pioneer/reactivity": "4.5.0-dev.20260225121659",
|
|
29
29
|
"@open-pioneer/chakra-snippets": "4.5.0-dev.20260225121659",
|
|
30
|
-
"@open-pioneer/map": "1.3.0-dev.
|
|
30
|
+
"@open-pioneer/map": "1.3.0-dev.20260310142705"
|
|
31
31
|
},
|
|
32
32
|
"exports": {
|
|
33
33
|
"./package.json": "./package.json",
|