@deck.gl-community/editable-layers 9.0.0-alpha.1 → 9.0.2
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/LICENSE +19 -0
- package/README.md +2 -81
- package/dist/constants.js +4 -1
- package/dist/edit-modes/composite-mode.d.ts +1 -1
- package/dist/edit-modes/composite-mode.js +4 -1
- package/dist/edit-modes/draw-90degree-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/draw-90degree-polygon-mode.js +29 -24
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-by-diameter-mode.js +7 -4
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-from-center-mode.js +7 -4
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts +1 -1
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.js +3 -0
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts +1 -1
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.js +3 -0
- package/dist/edit-modes/draw-line-string-mode.d.ts +1 -1
- package/dist/edit-modes/draw-line-string-mode.js +19 -16
- package/dist/edit-modes/draw-point-mode.d.ts +1 -1
- package/dist/edit-modes/draw-point-mode.js +7 -4
- package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts +1 -1
- package/dist/edit-modes/draw-polygon-by-dragging-mode.js +10 -5
- package/dist/edit-modes/draw-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/draw-polygon-mode.js +20 -16
- package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-from-center-mode.js +3 -0
- package/dist/edit-modes/draw-rectangle-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-mode.js +3 -0
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.js +8 -5
- package/dist/edit-modes/draw-square-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-square-from-center-mode.js +3 -0
- package/dist/edit-modes/draw-square-mode.d.ts +1 -1
- package/dist/edit-modes/draw-square-mode.js +3 -0
- package/dist/edit-modes/duplicate-mode.d.ts +1 -1
- package/dist/edit-modes/duplicate-mode.js +3 -0
- package/dist/edit-modes/edit-mode.js +3 -1
- package/dist/edit-modes/elevation-mode.d.ts +2 -2
- package/dist/edit-modes/elevation-mode.js +8 -5
- package/dist/edit-modes/extend-line-string-mode.d.ts +1 -1
- package/dist/edit-modes/extend-line-string-mode.js +9 -6
- package/dist/edit-modes/extrude-mode.d.ts +1 -1
- package/dist/edit-modes/extrude-mode.js +10 -7
- package/dist/edit-modes/geojson-edit-mode.d.ts +1 -1
- package/dist/edit-modes/geojson-edit-mode.js +18 -15
- package/dist/edit-modes/immutable-feature-collection.d.ts +2 -1
- package/dist/edit-modes/immutable-feature-collection.js +25 -20
- package/dist/edit-modes/measure-angle-mode.d.ts +1 -1
- package/dist/edit-modes/measure-angle-mode.js +8 -8
- package/dist/edit-modes/measure-area-mode.d.ts +1 -1
- package/dist/edit-modes/measure-area-mode.js +7 -5
- package/dist/edit-modes/measure-distance-mode.d.ts +1 -1
- package/dist/edit-modes/measure-distance-mode.js +17 -14
- package/dist/edit-modes/modify-mode.d.ts +1 -1
- package/dist/edit-modes/modify-mode.js +17 -14
- package/dist/edit-modes/resize-circle-mode.d.ts +2 -2
- package/dist/edit-modes/resize-circle-mode.js +3 -1
- package/dist/edit-modes/rotate-mode.d.ts +1 -1
- package/dist/edit-modes/rotate-mode.js +8 -5
- package/dist/edit-modes/scale-mode.d.ts +1 -1
- package/dist/edit-modes/scale-mode.js +8 -5
- package/dist/edit-modes/snappable-mode.d.ts +1 -1
- package/dist/edit-modes/snappable-mode.js +8 -5
- package/dist/edit-modes/split-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/split-polygon-mode.js +12 -9
- package/dist/edit-modes/three-click-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/three-click-polygon-mode.js +9 -6
- package/dist/edit-modes/transform-mode.d.ts +1 -1
- package/dist/edit-modes/transform-mode.js +4 -1
- package/dist/edit-modes/translate-mode.d.ts +1 -1
- package/dist/edit-modes/translate-mode.js +7 -4
- package/dist/edit-modes/two-click-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/two-click-polygon-mode.js +9 -6
- package/dist/edit-modes/types.d.ts +1 -1
- package/dist/edit-modes/types.js +3 -0
- package/dist/edit-modes/utils.d.ts +1 -1
- package/dist/edit-modes/utils.js +21 -19
- package/dist/edit-modes/view-mode.js +3 -0
- package/dist/editable-layers/editable-geojson-layer.d.ts +4 -4
- package/dist/editable-layers/editable-geojson-layer.js +27 -26
- package/dist/editable-layers/editable-h3-cluster-layer.d.ts +2 -2
- package/dist/editable-layers/editable-h3-cluster-layer.js +6 -3
- package/dist/editable-layers/editable-layer.d.ts +5 -5
- package/dist/editable-layers/editable-layer.js +18 -15
- package/dist/editable-layers/editable-path-layer.d.ts +1 -1
- package/dist/editable-layers/editable-path-layer.js +10 -7
- package/dist/editable-layers/elevated-edit-handle-layer.d.ts +1 -1
- package/dist/editable-layers/elevated-edit-handle-layer.js +6 -3
- package/dist/editable-layers/junction-scatterplot-layer.d.ts +2 -2
- package/dist/editable-layers/junction-scatterplot-layer.js +10 -7
- package/dist/editable-layers/selection-layer.d.ts +1 -1
- package/dist/editable-layers/selection-layer.js +5 -2
- package/dist/index.cjs +65 -537
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +19 -20
- package/dist/index.js +20 -18
- package/dist/lib/constants.js +3 -0
- package/dist/lib/deck-renderer/deck-cache.d.ts +1 -1
- package/dist/lib/deck-renderer/deck-cache.js +1 -1
- package/dist/lib/deck-renderer/deck-drawer.d.ts +2 -3
- package/dist/lib/deck-renderer/deck-drawer.js +12 -12
- package/dist/lib/feature.d.ts +4 -4
- package/dist/lib/feature.js +4 -1
- package/dist/lib/layer-mouse-event.d.ts +2 -2
- package/dist/lib/layer-mouse-event.js +4 -1
- package/dist/lib/layers/junctions-layer.d.ts +4 -4
- package/dist/lib/layers/junctions-layer.js +10 -7
- package/dist/lib/layers/segments-layer.d.ts +4 -4
- package/dist/lib/layers/segments-layer.js +11 -8
- package/dist/lib/layers/texts-layer.d.ts +3 -3
- package/dist/lib/layers/texts-layer.js +8 -5
- package/dist/lib/math.d.ts +1 -1
- package/dist/lib/math.js +3 -0
- package/dist/lib/{nebula.d.ts → nebula-core.d.ts} +2 -2
- package/dist/lib/{nebula.js → nebula-core.js} +7 -4
- package/dist/lib/nebula-layer.d.ts +2 -2
- package/dist/lib/nebula-layer.js +4 -1
- package/dist/lib/style.js +5 -2
- package/dist/mode-handlers/composite-mode-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.js +13 -10
- package/dist/mode-handlers/draw-circle-by-bounding-box-handler.js +3 -0
- package/dist/mode-handlers/draw-circle-from-center-handler.js +3 -0
- package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.js +3 -0
- package/dist/mode-handlers/draw-ellipse-using-three-points-handler.js +5 -2
- package/dist/mode-handlers/draw-line-string-handler.js +7 -4
- package/dist/mode-handlers/draw-point-handler.js +4 -1
- package/dist/mode-handlers/draw-polygon-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-polygon-handler.js +10 -7
- package/dist/mode-handlers/draw-rectangle-handler.js +3 -0
- package/dist/mode-handlers/draw-rectangle-using-three-points-handler.js +11 -8
- package/dist/mode-handlers/duplicate-handler.js +3 -0
- package/dist/mode-handlers/elevation-handler.d.ts +2 -2
- package/dist/mode-handlers/elevation-handler.js +8 -5
- package/dist/mode-handlers/extrude-handler.js +10 -7
- package/dist/mode-handlers/mode-handler.d.ts +1 -1
- package/dist/mode-handlers/mode-handler.js +17 -14
- package/dist/mode-handlers/modify-handler.d.ts +2 -2
- package/dist/mode-handlers/modify-handler.js +18 -15
- package/dist/mode-handlers/rotate-handler.d.ts +1 -1
- package/dist/mode-handlers/rotate-handler.js +4 -1
- package/dist/mode-handlers/scale-handler.d.ts +1 -1
- package/dist/mode-handlers/scale-handler.js +5 -2
- package/dist/mode-handlers/snappable-handler.d.ts +1 -1
- package/dist/mode-handlers/snappable-handler.js +6 -3
- package/dist/mode-handlers/split-polygon-handler.js +11 -8
- package/dist/mode-handlers/three-click-polygon-handler.js +3 -0
- package/dist/mode-handlers/translate-handler.d.ts +1 -1
- package/dist/mode-handlers/translate-handler.js +4 -1
- package/dist/mode-handlers/two-click-polygon-handler.js +3 -0
- package/dist/mode-handlers/view-handler.d.ts +1 -1
- package/dist/mode-handlers/view-handler.js +3 -0
- package/dist/shaderlib/color/color.d.ts +7 -6
- package/dist/shaderlib/color/color.js +7 -4
- package/dist/shaderlib/utils/utils.d.ts +2 -2
- package/dist/shaderlib/utils/utils.js +5 -2
- package/dist/{curve-utils.js → utils/curve-utils.js} +7 -4
- package/dist/{geojson-types.d.ts → utils/geojson-types.d.ts} +2 -25
- package/dist/utils/geojson-types.js +4 -0
- package/dist/{memoize.d.ts → utils/memoize.d.ts} +1 -1
- package/dist/{memoize.js → utils/memoize.js} +4 -1
- package/dist/{translateFromCenter.js → utils/translate-from-center.js} +4 -1
- package/dist/utils/types.js +4 -0
- package/dist/{utils.js → utils/utils.js} +8 -6
- package/package.json +10 -10
- package/src/constants.ts +5 -1
- package/src/edit-modes/composite-mode.ts +9 -5
- package/src/edit-modes/draw-90degree-polygon-mode.ts +38 -34
- package/src/edit-modes/draw-circle-by-diameter-mode.ts +16 -12
- package/src/edit-modes/draw-circle-from-center-mode.ts +15 -11
- package/src/edit-modes/draw-ellipse-by-bounding-box-mode.ts +8 -4
- package/src/edit-modes/draw-ellipse-using-three-points-mode.ts +9 -5
- package/src/edit-modes/draw-line-string-mode.ts +29 -25
- package/src/edit-modes/draw-point-mode.ts +13 -9
- package/src/edit-modes/draw-polygon-by-dragging-mode.ts +16 -16
- package/src/edit-modes/draw-polygon-mode.ts +28 -23
- package/src/edit-modes/draw-rectangle-from-center-mode.ts +6 -2
- package/src/edit-modes/draw-rectangle-mode.ts +6 -2
- package/src/edit-modes/draw-rectangle-using-three-points-mode.ts +12 -8
- package/src/edit-modes/draw-square-from-center-mode.ts +7 -3
- package/src/edit-modes/draw-square-mode.ts +7 -3
- package/src/edit-modes/duplicate-mode.ts +7 -3
- package/src/edit-modes/edit-mode.ts +5 -1
- package/src/edit-modes/elevation-mode.ts +13 -9
- package/src/edit-modes/extend-line-string-mode.ts +16 -12
- package/src/edit-modes/extrude-mode.ts +22 -18
- package/src/edit-modes/geojson-edit-mode.ts +37 -33
- package/src/edit-modes/immutable-feature-collection.ts +28 -22
- package/src/edit-modes/measure-angle-mode.ts +66 -59
- package/src/edit-modes/measure-area-mode.ts +13 -10
- package/src/edit-modes/measure-distance-mode.ts +37 -33
- package/src/edit-modes/modify-mode.ts +36 -32
- package/src/edit-modes/resize-circle-mode.ts +8 -5
- package/src/edit-modes/rotate-mode.ts +22 -18
- package/src/edit-modes/scale-mode.ts +29 -23
- package/src/edit-modes/snappable-mode.ts +19 -15
- package/src/edit-modes/split-polygon-mode.ts +25 -21
- package/src/edit-modes/three-click-polygon-mode.ts +15 -11
- package/src/edit-modes/transform-mode.ts +15 -11
- package/src/edit-modes/translate-mode.ts +15 -11
- package/src/edit-modes/two-click-polygon-mode.ts +15 -11
- package/src/edit-modes/types.ts +5 -1
- package/src/edit-modes/utils.ts +33 -30
- package/src/edit-modes/view-mode.ts +5 -1
- package/src/editable-layers/editable-geojson-layer.ts +44 -41
- package/src/editable-layers/editable-h3-cluster-layer.ts +17 -14
- package/src/editable-layers/editable-layer.ts +42 -32
- package/src/editable-layers/editable-path-layer.ts +12 -8
- package/src/editable-layers/elevated-edit-handle-layer.ts +11 -7
- package/src/editable-layers/junction-scatterplot-layer.ts +15 -11
- package/src/editable-layers/selection-layer.ts +11 -7
- package/src/index.ts +68 -65
- package/src/lib/constants.ts +4 -0
- package/src/lib/deck-renderer/deck-cache.ts +1 -1
- package/src/lib/deck-renderer/deck-drawer.ts +28 -28
- package/src/lib/feature.ts +7 -3
- package/src/lib/layer-mouse-event.ts +7 -6
- package/src/lib/layers/junctions-layer.ts +14 -10
- package/src/lib/layers/segments-layer.ts +24 -20
- package/src/lib/layers/texts-layer.ts +18 -14
- package/src/lib/math.ts +5 -1
- package/src/lib/{nebula.ts → nebula-core.ts} +8 -4
- package/src/lib/nebula-layer.ts +9 -5
- package/src/lib/style.ts +6 -2
- package/src/mode-handlers/composite-mode-handler.ts +6 -6
- package/src/mode-handlers/draw-90degree-polygon-handler.ts +22 -18
- package/src/mode-handlers/draw-circle-by-bounding-box-handler.ts +10 -6
- package/src/mode-handlers/draw-circle-from-center-handler.ts +10 -6
- package/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts +9 -5
- package/src/mode-handlers/draw-ellipse-using-three-points-handler.ts +12 -8
- package/src/mode-handlers/draw-line-string-handler.ts +12 -8
- package/src/mode-handlers/draw-point-handler.ts +9 -5
- package/src/mode-handlers/draw-polygon-handler.ts +16 -12
- package/src/mode-handlers/draw-rectangle-handler.ts +8 -4
- package/src/mode-handlers/draw-rectangle-using-three-points-handler.ts +17 -13
- package/src/mode-handlers/duplicate-handler.ts +8 -4
- package/src/mode-handlers/elevation-handler.ts +14 -10
- package/src/mode-handlers/extrude-handler.ts +15 -11
- package/src/mode-handlers/mode-handler.ts +26 -28
- package/src/mode-handlers/modify-handler.ts +29 -25
- package/src/mode-handlers/rotate-handler.ts +13 -17
- package/src/mode-handlers/scale-handler.ts +13 -13
- package/src/mode-handlers/snappable-handler.ts +28 -24
- package/src/mode-handlers/split-polygon-handler.ts +22 -18
- package/src/mode-handlers/three-click-polygon-handler.ts +6 -2
- package/src/mode-handlers/translate-handler.ts +12 -8
- package/src/mode-handlers/two-click-polygon-handler.ts +6 -2
- package/src/mode-handlers/view-handler.ts +7 -3
- package/src/shaderlib/color/color.ts +10 -5
- package/src/shaderlib/utils/utils.ts +6 -2
- package/src/{curve-utils.ts → utils/curve-utils.ts} +11 -7
- package/src/{geojson-types.ts → utils/geojson-types.ts} +16 -31
- package/src/{memoize.ts → utils/memoize.ts} +5 -1
- package/src/{translateFromCenter.ts → utils/translate-from-center.ts} +8 -4
- package/src/{types.ts → utils/types.ts} +4 -0
- package/src/{utils.ts → utils/utils.ts} +14 -11
- package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.d.ts +0 -4
- package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.js +0 -55
- package/dist/editable-layers/path-marker-layer/create-path-markers.d.ts +0 -16
- package/dist/editable-layers/path-marker-layer/create-path-markers.js +0 -75
- package/dist/editable-layers/path-marker-layer/path-marker-layer.d.ts +0 -40
- package/dist/editable-layers/path-marker-layer/path-marker-layer.js +0 -121
- package/dist/editable-layers/path-marker-layer/polyline.d.ts +0 -18
- package/dist/editable-layers/path-marker-layer/polyline.js +0 -37
- package/dist/editable-layers/path-outline-layer/path-outline-layer.d.ts +0 -26
- package/dist/editable-layers/path-outline-layer/path-outline-layer.js +0 -106
- package/dist/geojson-types.js +0 -2
- package/dist/shaderlib/outline/outline.d.ts +0 -8
- package/dist/shaderlib/outline/outline.js +0 -97
- package/dist/types.js +0 -1
- package/src/editable-layers/path-marker-layer/arrow-2d-geometry.ts +0 -61
- package/src/editable-layers/path-marker-layer/create-path-markers.ts +0 -107
- package/src/editable-layers/path-marker-layer/path-marker-layer.ts +0 -179
- package/src/editable-layers/path-marker-layer/polyline.ts +0 -40
- package/src/editable-layers/path-outline-layer/path-outline-layer.ts +0 -147
- package/src/shaderlib/outline/outline.ts +0 -101
- /package/dist/{curve-utils.d.ts → utils/curve-utils.d.ts} +0 -0
- /package/dist/{translateFromCenter.d.ts → utils/translate-from-center.d.ts} +0 -0
- /package/dist/{types.d.ts → utils/types.d.ts} +0 -0
- /package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {
|
|
2
6
|
ClickEvent,
|
|
3
7
|
StartDraggingEvent,
|
|
@@ -5,10 +9,10 @@ import {
|
|
|
5
9
|
PointerMoveEvent,
|
|
6
10
|
ModeProps,
|
|
7
11
|
GuideFeatureCollection,
|
|
8
|
-
TentativeFeature
|
|
12
|
+
TentativeFeature
|
|
9
13
|
} from './types';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
14
|
+
import {Polygon, FeatureCollection, FeatureOf, Position} from '../utils/geojson-types';
|
|
15
|
+
import {GeoJsonEditMode} from './geojson-edit-mode';
|
|
12
16
|
|
|
13
17
|
export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
14
18
|
handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {
|
|
@@ -54,12 +58,12 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
54
58
|
const feature: FeatureOf<Polygon> = {
|
|
55
59
|
type: 'Feature',
|
|
56
60
|
properties: {
|
|
57
|
-
shape: tentativeFeature.properties.shape
|
|
61
|
+
shape: tentativeFeature.properties.shape
|
|
58
62
|
},
|
|
59
63
|
geometry: {
|
|
60
64
|
type: 'Polygon',
|
|
61
|
-
coordinates: tentativeFeature.geometry.coordinates
|
|
62
|
-
}
|
|
65
|
+
coordinates: tentativeFeature.geometry.coordinates
|
|
66
|
+
}
|
|
63
67
|
};
|
|
64
68
|
const editAction = this.getAddFeatureOrBooleanPolygonAction(feature, props);
|
|
65
69
|
|
|
@@ -72,12 +76,12 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
getGuides(props: ModeProps<FeatureCollection>): GuideFeatureCollection {
|
|
75
|
-
const {
|
|
79
|
+
const {lastPointerMoveEvent, modeConfig} = props;
|
|
76
80
|
const clickSequence = this.getClickSequence();
|
|
77
81
|
|
|
78
82
|
const guides: GuideFeatureCollection = {
|
|
79
83
|
type: 'FeatureCollection',
|
|
80
|
-
features: []
|
|
84
|
+
features: []
|
|
81
85
|
};
|
|
82
86
|
|
|
83
87
|
if (clickSequence.length === 0 || !lastPointerMoveEvent) {
|
|
@@ -94,9 +98,9 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
94
98
|
type: 'Feature',
|
|
95
99
|
properties: {
|
|
96
100
|
shape: polygon.properties && polygon.properties.shape,
|
|
97
|
-
guideType: 'tentative'
|
|
101
|
+
guideType: 'tentative'
|
|
98
102
|
},
|
|
99
|
-
geometry: polygon.geometry
|
|
103
|
+
geometry: polygon.geometry
|
|
100
104
|
});
|
|
101
105
|
}
|
|
102
106
|
|
|
@@ -117,7 +121,7 @@ export class TwoClickPolygonMode extends GeoJsonEditMode {
|
|
|
117
121
|
}
|
|
118
122
|
|
|
119
123
|
createTentativeFeature(props: ModeProps<FeatureCollection>): TentativeFeature {
|
|
120
|
-
const {
|
|
124
|
+
const {lastPointerMoveEvent} = props;
|
|
121
125
|
const clickSequence = this.getClickSequence();
|
|
122
126
|
|
|
123
127
|
const lastCoords = lastPointerMoveEvent ? [lastPointerMoveEvent.mapCoords] : [];
|
package/src/edit-modes/types.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {Position, Point, Geometry, FeatureWithProps} from '../utils/geojson-types';
|
|
2
6
|
|
|
3
7
|
export type ScreenCoordinates = [number, number];
|
|
4
8
|
|
package/src/edit-modes/utils.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import destination from '@turf/destination';
|
|
2
6
|
import bearing from '@turf/bearing';
|
|
3
7
|
import pointToLineDistance from '@turf/point-to-line-distance';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
8
|
+
import {flattenEach} from '@turf/meta';
|
|
9
|
+
import {point, MultiLineString} from '@turf/helpers';
|
|
10
|
+
import {getCoords} from '@turf/invariant';
|
|
7
11
|
import WebMercatorViewport from 'viewport-mercator-project';
|
|
8
|
-
import {
|
|
12
|
+
import {Viewport, Pick, EditHandleFeature, EditHandleType} from './types';
|
|
9
13
|
import {
|
|
10
14
|
Geometry,
|
|
11
15
|
Position,
|
|
@@ -14,10 +18,10 @@ import {
|
|
|
14
18
|
Polygon,
|
|
15
19
|
FeatureOf,
|
|
16
20
|
FeatureWithProps,
|
|
17
|
-
AnyCoordinates
|
|
18
|
-
} from '../geojson-types';
|
|
21
|
+
AnyCoordinates
|
|
22
|
+
} from '../utils/geojson-types';
|
|
19
23
|
|
|
20
|
-
export type NearestPointType = FeatureWithProps<Point, {
|
|
24
|
+
export type NearestPointType = FeatureWithProps<Point, {dist: number; index: number}>;
|
|
21
25
|
|
|
22
26
|
export function toDeckColor(
|
|
23
27
|
color?: [number, number, number, number] | number,
|
|
@@ -78,7 +82,7 @@ export function generatePointsParallelToLinePoints(
|
|
|
78
82
|
): Position[] {
|
|
79
83
|
const lineString: LineString = {
|
|
80
84
|
type: 'LineString',
|
|
81
|
-
coordinates: [p1, p2]
|
|
85
|
+
coordinates: [p1, p2]
|
|
82
86
|
};
|
|
83
87
|
const pt = point(mapCoords);
|
|
84
88
|
const ddistance = pointToLineDistance(pt, lineString);
|
|
@@ -150,12 +154,12 @@ export function nearestPointOnProjectedLine(
|
|
|
150
154
|
minPointInfo = {
|
|
151
155
|
index,
|
|
152
156
|
x0: (B * (B * x - A * y) - A * C) / div,
|
|
153
|
-
y0: (A * (-B * x + A * y) - B * C) / div
|
|
157
|
+
y0: (A * (-B * x + A * y) - B * C) / div
|
|
154
158
|
};
|
|
155
159
|
}
|
|
156
160
|
});
|
|
157
|
-
// @ts-
|
|
158
|
-
const {
|
|
161
|
+
// @ts-expect-error TODO
|
|
162
|
+
const {index, x0, y0} = minPointInfo;
|
|
159
163
|
const [x1, y1, z1 = 0] = projectedCoords[index - 1];
|
|
160
164
|
const [x2, y2, z2 = 0] = projectedCoords[index];
|
|
161
165
|
|
|
@@ -169,14 +173,13 @@ export function nearestPointOnProjectedLine(
|
|
|
169
173
|
type: 'Feature',
|
|
170
174
|
geometry: {
|
|
171
175
|
type: 'Point',
|
|
172
|
-
|
|
173
|
-
coordinates: wmViewport.unproject([x0, y0, z0]),
|
|
176
|
+
coordinates: wmViewport.unproject([x0, y0, z0])
|
|
174
177
|
},
|
|
175
178
|
properties: {
|
|
176
179
|
// TODO: calculate the distance in proper units
|
|
177
180
|
dist: minDistance,
|
|
178
|
-
index: index - 1
|
|
179
|
-
}
|
|
181
|
+
index: index - 1
|
|
182
|
+
}
|
|
180
183
|
};
|
|
181
184
|
}
|
|
182
185
|
|
|
@@ -191,18 +194,18 @@ export function nearestPointOnLine<G extends LineString | MultiLineString>(
|
|
|
191
194
|
mercator = new WebMercatorViewport(viewport);
|
|
192
195
|
}
|
|
193
196
|
let closestPoint: any = point([Infinity, Infinity], {
|
|
194
|
-
dist: Infinity
|
|
197
|
+
dist: Infinity
|
|
195
198
|
});
|
|
196
199
|
|
|
197
200
|
if (!lines.geometry?.coordinates.length || lines.geometry?.coordinates.length < 2) {
|
|
198
201
|
return closestPoint;
|
|
199
202
|
}
|
|
200
203
|
|
|
201
|
-
// @ts-
|
|
204
|
+
// @ts-expect-error TODO
|
|
202
205
|
// eslint-disable-next-line max-statements, complexity
|
|
203
206
|
flattenEach(lines, (line: any) => {
|
|
204
207
|
const coords: any = getCoords(line);
|
|
205
|
-
// @ts-
|
|
208
|
+
// @ts-expect-error TODO
|
|
206
209
|
const pointCoords: any = getCoords(inPoint);
|
|
207
210
|
|
|
208
211
|
let minDist;
|
|
@@ -293,7 +296,7 @@ export function nearestPointOnLine<G extends LineString | MultiLineString>(
|
|
|
293
296
|
}
|
|
294
297
|
|
|
295
298
|
// index needs to be -1 because we have to account for the shift from initial backscan
|
|
296
|
-
let snapPoint = {
|
|
299
|
+
let snapPoint = {x, y, idx: segmentIdx - 1, to, from};
|
|
297
300
|
|
|
298
301
|
if (mercator) {
|
|
299
302
|
const pixelToLatLong = mercator.unproject([snapPoint.x, snapPoint.y]);
|
|
@@ -302,13 +305,13 @@ export function nearestPointOnLine<G extends LineString | MultiLineString>(
|
|
|
302
305
|
y: pixelToLatLong[1],
|
|
303
306
|
idx: segmentIdx - 1,
|
|
304
307
|
to,
|
|
305
|
-
from
|
|
308
|
+
from
|
|
306
309
|
};
|
|
307
310
|
}
|
|
308
311
|
|
|
309
312
|
closestPoint = point([snapPoint.x, snapPoint.y], {
|
|
310
313
|
dist: Math.abs(snapPoint.from - snapPoint.to),
|
|
311
|
-
index: snapPoint.idx
|
|
314
|
+
index: snapPoint.idx
|
|
312
315
|
});
|
|
313
316
|
});
|
|
314
317
|
|
|
@@ -338,7 +341,7 @@ export function getPickedExistingEditHandle(
|
|
|
338
341
|
): EditHandleFeature | null | undefined {
|
|
339
342
|
const handles = getPickedEditHandles(picks);
|
|
340
343
|
return handles.find(
|
|
341
|
-
({
|
|
344
|
+
({properties}) => properties.featureIndex >= 0 && properties.editHandleType === 'existing'
|
|
342
345
|
);
|
|
343
346
|
}
|
|
344
347
|
|
|
@@ -347,7 +350,7 @@ export function getPickedIntermediateEditHandle(
|
|
|
347
350
|
): EditHandleFeature | null | undefined {
|
|
348
351
|
const handles = getPickedEditHandles(picks);
|
|
349
352
|
return handles.find(
|
|
350
|
-
({
|
|
353
|
+
({properties}) => properties.featureIndex >= 0 && properties.editHandleType === 'intermediate'
|
|
351
354
|
);
|
|
352
355
|
}
|
|
353
356
|
|
|
@@ -379,13 +382,13 @@ export function getEditHandlesForGeometry(
|
|
|
379
382
|
guideType: 'editHandle',
|
|
380
383
|
editHandleType,
|
|
381
384
|
positionIndexes: [],
|
|
382
|
-
featureIndex
|
|
385
|
+
featureIndex
|
|
383
386
|
},
|
|
384
387
|
geometry: {
|
|
385
388
|
type: 'Point',
|
|
386
|
-
coordinates: geometry.coordinates
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
+
coordinates: geometry.coordinates
|
|
390
|
+
}
|
|
391
|
+
}
|
|
389
392
|
];
|
|
390
393
|
break;
|
|
391
394
|
case 'MultiPoint':
|
|
@@ -449,12 +452,12 @@ function getEditHandlesForCoordinates(
|
|
|
449
452
|
guideType: 'editHandle',
|
|
450
453
|
positionIndexes: [...positionIndexPrefix, i],
|
|
451
454
|
featureIndex,
|
|
452
|
-
editHandleType
|
|
455
|
+
editHandleType
|
|
453
456
|
},
|
|
454
457
|
geometry: {
|
|
455
458
|
type: 'Point',
|
|
456
|
-
coordinates: position
|
|
457
|
-
}
|
|
459
|
+
coordinates: position
|
|
460
|
+
}
|
|
458
461
|
});
|
|
459
462
|
}
|
|
460
463
|
return editHandles;
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
/* eslint-env browser */
|
|
2
6
|
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
7
|
+
import type {UpdateParameters, DefaultProps} from '@deck.gl/core';
|
|
8
|
+
import {GeoJsonLayer, ScatterplotLayer, IconLayer, TextLayer} from '@deck.gl/layers';
|
|
5
9
|
import {
|
|
6
10
|
EditAction,
|
|
7
11
|
ClickEvent,
|
|
8
12
|
StartDraggingEvent,
|
|
9
13
|
StopDraggingEvent,
|
|
10
14
|
DraggingEvent,
|
|
11
|
-
PointerMoveEvent
|
|
15
|
+
PointerMoveEvent
|
|
12
16
|
} from '../edit-modes/types';
|
|
13
17
|
|
|
14
18
|
import {ViewMode} from '../edit-modes/view-mode';
|
|
@@ -38,12 +42,12 @@ import {SnappableMode} from '../edit-modes/snappable-mode';
|
|
|
38
42
|
import {TransformMode} from '../edit-modes/transform-mode';
|
|
39
43
|
import {GeoJsonEditModeType} from '../edit-modes/geojson-edit-mode';
|
|
40
44
|
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
45
|
+
import {Color} from '../utils/types';
|
|
46
|
+
import {PROJECTED_PIXEL_SIZE_MULTIPLIER} from '../constants';
|
|
43
47
|
|
|
44
|
-
import EditableLayer,
|
|
45
|
-
import EditablePathLayer from './editable-path-layer';
|
|
46
|
-
import {
|
|
48
|
+
import {EditableLayer, EditableLayerProps} from './editable-layer';
|
|
49
|
+
import {EditablePathLayer} from './editable-path-layer';
|
|
50
|
+
import {Feature, FeatureCollection} from '../utils/geojson-types';
|
|
47
51
|
|
|
48
52
|
const DEFAULT_LINE_COLOR: Color = [0x0, 0x0, 0x0, 0x99];
|
|
49
53
|
const DEFAULT_FILL_COLOR: Color = [0x0, 0x0, 0x0, 0x90];
|
|
@@ -228,7 +232,7 @@ const defaultProps: DefaultProps<EditableGeojsonLayerProps<any>> = {
|
|
|
228
232
|
getEditHandleIconAngle: 0,
|
|
229
233
|
|
|
230
234
|
// misc
|
|
231
|
-
billboard: true
|
|
235
|
+
billboard: true
|
|
232
236
|
};
|
|
233
237
|
|
|
234
238
|
// Mapping of mode name to mode class (for legacy purposes)
|
|
@@ -261,10 +265,10 @@ const modeNameMapping = {
|
|
|
261
265
|
drawRectangleUsing3Points: DrawRectangleUsingThreePointsMode,
|
|
262
266
|
drawEllipseUsing3Points: DrawEllipseUsingThreePointsMode,
|
|
263
267
|
draw90DegreePolygon: Draw90DegreePolygonMode,
|
|
264
|
-
drawPolygonByDragging: DrawPolygonByDraggingMode
|
|
268
|
+
drawPolygonByDragging: DrawPolygonByDraggingMode
|
|
265
269
|
};
|
|
266
270
|
|
|
267
|
-
export
|
|
271
|
+
export class EditableGeoJsonLayer extends EditableLayer<
|
|
268
272
|
FeatureCollection,
|
|
269
273
|
EditableGeojsonLayerProps<FeatureCollection>
|
|
270
274
|
> {
|
|
@@ -310,8 +314,8 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
310
314
|
billboard: this.props.billboard,
|
|
311
315
|
updateTriggers: {
|
|
312
316
|
// required to update dashed array attribute
|
|
313
|
-
all: [this.props.selectedFeatureIndexes, this.props.mode]
|
|
314
|
-
}
|
|
317
|
+
all: [this.props.selectedFeatureIndexes, this.props.mode]
|
|
318
|
+
}
|
|
315
319
|
},
|
|
316
320
|
'polygons-stroke': {
|
|
317
321
|
billboard: this.props.billboard,
|
|
@@ -319,17 +323,17 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
319
323
|
type: EditablePathLayer,
|
|
320
324
|
updateTriggers: {
|
|
321
325
|
// required to update dashed array attribute
|
|
322
|
-
all: [this.props.selectedFeatureIndexes, this.props.mode]
|
|
323
|
-
}
|
|
324
|
-
}
|
|
326
|
+
all: [this.props.selectedFeatureIndexes, this.props.mode]
|
|
327
|
+
}
|
|
328
|
+
}
|
|
325
329
|
},
|
|
326
330
|
|
|
327
331
|
updateTriggers: {
|
|
328
332
|
getLineColor: [this.props.selectedFeatureIndexes, this.props.mode],
|
|
329
333
|
getFillColor: [this.props.selectedFeatureIndexes, this.props.mode],
|
|
330
334
|
getPointRadius: [this.props.selectedFeatureIndexes, this.props.mode],
|
|
331
|
-
getLineWidth: [this.props.selectedFeatureIndexes, this.props.mode]
|
|
332
|
-
}
|
|
335
|
+
getLineWidth: [this.props.selectedFeatureIndexes, this.props.mode]
|
|
336
|
+
}
|
|
333
337
|
});
|
|
334
338
|
|
|
335
339
|
let layers: any = [new GeoJsonLayer(subLayerProps)];
|
|
@@ -344,7 +348,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
344
348
|
|
|
345
349
|
this.setState({
|
|
346
350
|
selectedFeatures: [],
|
|
347
|
-
editHandles: []
|
|
351
|
+
editHandles: []
|
|
348
352
|
});
|
|
349
353
|
}
|
|
350
354
|
|
|
@@ -358,8 +362,8 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
358
362
|
return super.shouldUpdateState(opts) || opts.changeFlags.stateChanged;
|
|
359
363
|
}
|
|
360
364
|
|
|
361
|
-
updateState({
|
|
362
|
-
super.updateState({
|
|
365
|
+
updateState({props, oldProps, changeFlags, context}: UpdateParameters<this>) {
|
|
366
|
+
super.updateState({oldProps, props, changeFlags, context});
|
|
363
367
|
|
|
364
368
|
if (changeFlags.propsOrDataChanged) {
|
|
365
369
|
const modePropChanged = Object.keys(oldProps).length === 0 || props.mode !== oldProps.mode;
|
|
@@ -374,7 +378,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
374
378
|
mode = modeNameMapping[props.mode];
|
|
375
379
|
// eslint-disable-next-line no-console
|
|
376
380
|
console.warn(
|
|
377
|
-
|
|
381
|
+
"Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead."
|
|
378
382
|
);
|
|
379
383
|
} else {
|
|
380
384
|
// Should be an instance of EditMode in this case
|
|
@@ -388,7 +392,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
388
392
|
}
|
|
389
393
|
|
|
390
394
|
if (mode !== this.state.mode) {
|
|
391
|
-
this.setState({
|
|
395
|
+
this.setState({mode, cursor: null});
|
|
392
396
|
}
|
|
393
397
|
}
|
|
394
398
|
}
|
|
@@ -401,11 +405,10 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
401
405
|
) {
|
|
402
406
|
// TODO: needs improved testing, i.e. checking for duplicates, NaNs, out of range numbers, ...
|
|
403
407
|
const propsData = props.data;
|
|
404
|
-
// @ts-ignore error TS2339: Property 'features' does not exist on type 'never'
|
|
405
408
|
selectedFeatures = props.selectedFeatureIndexes.map((elem) => propsData.features[elem]);
|
|
406
409
|
}
|
|
407
410
|
|
|
408
|
-
this.setState({
|
|
411
|
+
this.setState({selectedFeatures});
|
|
409
412
|
}
|
|
410
413
|
|
|
411
414
|
getModeProps(props: EditableGeojsonLayerProps<any>) {
|
|
@@ -420,11 +423,11 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
420
423
|
// This supports double-click where we need to ensure that there's a re-render between the two clicks
|
|
421
424
|
// even though the data wasn't changed, just the internal tentative feature.
|
|
422
425
|
this.setNeedsUpdate();
|
|
423
|
-
props.onEdit
|
|
426
|
+
props.onEdit(editAction);
|
|
424
427
|
},
|
|
425
428
|
onUpdateCursor: (cursor: string | null | undefined) => {
|
|
426
|
-
this.setState({
|
|
427
|
-
}
|
|
429
|
+
this.setState({cursor});
|
|
430
|
+
}
|
|
428
431
|
};
|
|
429
432
|
}
|
|
430
433
|
|
|
@@ -447,7 +450,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
447
450
|
return this.state.selectedFeatures.includes(feature);
|
|
448
451
|
}
|
|
449
452
|
|
|
450
|
-
getPickingInfo({
|
|
453
|
+
getPickingInfo({info, sourceLayer}: Record<string, any>) {
|
|
451
454
|
if (sourceLayer.id.endsWith('guides')) {
|
|
452
455
|
// If user is picking an editing handle, add additional data to the info
|
|
453
456
|
info.isGuide = true;
|
|
@@ -480,14 +483,14 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
480
483
|
const subLayerProps = {
|
|
481
484
|
linestrings: {
|
|
482
485
|
billboard: this.props.billboard,
|
|
483
|
-
autoHighlight: false
|
|
486
|
+
autoHighlight: false
|
|
484
487
|
},
|
|
485
488
|
'polygons-fill': {
|
|
486
|
-
autoHighlight: false
|
|
489
|
+
autoHighlight: false
|
|
487
490
|
},
|
|
488
491
|
'polygons-stroke': {
|
|
489
|
-
billboard: this.props.billboard
|
|
490
|
-
}
|
|
492
|
+
billboard: this.props.billboard
|
|
493
|
+
}
|
|
491
494
|
};
|
|
492
495
|
|
|
493
496
|
if (this.props.editHandleType === 'icon') {
|
|
@@ -501,7 +504,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
501
504
|
getSize: guideAccessor(this.props.getEditHandleIconSize),
|
|
502
505
|
getColor: guideAccessor(this.props.getEditHandleIconColor),
|
|
503
506
|
getAngle: guideAccessor(this.props.getEditHandleIconAngle),
|
|
504
|
-
billboard: this.props.billboard
|
|
507
|
+
billboard: this.props.billboard
|
|
505
508
|
};
|
|
506
509
|
} else {
|
|
507
510
|
subLayerProps['points-circle'] = {
|
|
@@ -515,7 +518,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
515
518
|
getRadius: guideAccessor(this.props.getEditHandlePointRadius),
|
|
516
519
|
getFillColor: guideAccessor(this.props.getEditHandlePointColor),
|
|
517
520
|
getLineColor: guideAccessor(this.props.getEditHandlePointOutlineColor),
|
|
518
|
-
billboard: this.props.billboard
|
|
521
|
+
billboard: this.props.billboard
|
|
519
522
|
};
|
|
520
523
|
}
|
|
521
524
|
|
|
@@ -536,7 +539,7 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
536
539
|
getLineWidth: guideAccessor(this.props.getTentativeLineWidth),
|
|
537
540
|
getFillColor: guideAccessor(this.props.getTentativeFillColor),
|
|
538
541
|
pointType: this.props.editHandleType === 'icon' ? 'icon' : 'circle',
|
|
539
|
-
iconAtlas: this.props.editHandleIconAtlas
|
|
542
|
+
iconAtlas: this.props.editHandleIconAtlas
|
|
540
543
|
})
|
|
541
544
|
);
|
|
542
545
|
|
|
@@ -551,8 +554,8 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
551
554
|
getSize: DEFAULT_TOOLTIP_FONT_SIZE,
|
|
552
555
|
...this.getSubLayerProps({
|
|
553
556
|
id: 'tooltips',
|
|
554
|
-
data: tooltips
|
|
555
|
-
})
|
|
557
|
+
data: tooltips
|
|
558
|
+
})
|
|
556
559
|
});
|
|
557
560
|
|
|
558
561
|
return [layer];
|
|
@@ -579,17 +582,17 @@ export default class EditableGeoJsonLayer extends EditableLayer<
|
|
|
579
582
|
}
|
|
580
583
|
|
|
581
584
|
onPointerMove(event: PointerMoveEvent): void {
|
|
582
|
-
this.setState({
|
|
585
|
+
this.setState({lastPointerMoveEvent: event});
|
|
583
586
|
this.getActiveMode().handlePointerMove(event, this.getModeProps(this.props) as any);
|
|
584
587
|
}
|
|
585
588
|
|
|
586
|
-
getCursor({
|
|
589
|
+
getCursor({isDragging}: {isDragging: boolean}): null | 'grabbing' | 'grab' {
|
|
587
590
|
if (this.state === null || this.state === undefined) {
|
|
588
591
|
// Layer in 'Awaiting state'
|
|
589
592
|
return null;
|
|
590
593
|
}
|
|
591
594
|
|
|
592
|
-
let {
|
|
595
|
+
let {cursor} = this.state;
|
|
593
596
|
if (!cursor) {
|
|
594
597
|
// default cursor
|
|
595
598
|
cursor = isDragging ? 'grabbing' : 'grab';
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
/* eslint-env browser */
|
|
2
6
|
|
|
3
7
|
import {H3ClusterLayer} from '@deck.gl/geo-layers';
|
|
@@ -5,8 +9,8 @@ import {DefaultProps} from '@deck.gl/core';
|
|
|
5
9
|
// TODO: Fix H3 support.
|
|
6
10
|
// import { polyfill, geoToH3 } from 'h3-js';
|
|
7
11
|
import {PROJECTED_PIXEL_SIZE_MULTIPLIER} from '../constants';
|
|
8
|
-
import EditableGeoJsonLayer from './editable-geojson-layer';
|
|
9
|
-
import EditableLayer,
|
|
12
|
+
import {EditableGeoJsonLayer} from './editable-geojson-layer';
|
|
13
|
+
import {EditableLayer, EditableLayerProps} from './editable-layer';
|
|
10
14
|
import {ViewMode} from '../edit-modes/view-mode';
|
|
11
15
|
|
|
12
16
|
const DEFAULT_EDIT_MODE = ViewMode;
|
|
@@ -62,10 +66,7 @@ const defaultProps: DefaultProps<EditableH3ClusterLayerProps<any>> = {
|
|
|
62
66
|
resolution: DEFAULT_H3_RESOLUTION
|
|
63
67
|
};
|
|
64
68
|
|
|
65
|
-
export
|
|
66
|
-
any,
|
|
67
|
-
EditableH3ClusterLayerProps<any>
|
|
68
|
-
> {
|
|
69
|
+
export class EditableH3ClusterLayer extends EditableLayer<any, EditableH3ClusterLayerProps<any>> {
|
|
69
70
|
static layerName = 'EditableH3ClusterLayer';
|
|
70
71
|
static defaultProps = defaultProps;
|
|
71
72
|
|
|
@@ -129,16 +130,18 @@ export default class EditableH3ClusterLayer extends EditableLayer<
|
|
|
129
130
|
if (!modeConfig || !modeConfig.booleanOperation) {
|
|
130
131
|
// add new h3 cluster
|
|
131
132
|
updatedData.push(
|
|
132
|
-
this.props.getEditedCluster
|
|
133
|
+
this.props.getEditedCluster(this.state.tentativeHexagonIDs, null)
|
|
133
134
|
);
|
|
134
|
-
} else if (this.props.selectedIndexes
|
|
135
|
+
} else if (this.props.selectedIndexes.length !== 1) {
|
|
135
136
|
// eslint-disable-next-line no-console,no-undef
|
|
136
137
|
console.warn('booleanOperation only supported for single cluster selection');
|
|
137
138
|
} else {
|
|
138
139
|
// they're affecting a selected cluster
|
|
139
140
|
let finalHexagonIDs: (string | number)[];
|
|
140
141
|
const committedHexagonIDs = new Set<string | number>(this.getSelectedHexIDs());
|
|
141
|
-
const tentativeHexagonIDs = new Set<string | number>(
|
|
142
|
+
const tentativeHexagonIDs = new Set<string | number>(
|
|
143
|
+
this.state.tentativeHexagonIDs
|
|
144
|
+
);
|
|
142
145
|
|
|
143
146
|
switch (modeConfig.booleanOperation) {
|
|
144
147
|
case 'union':
|
|
@@ -159,9 +162,9 @@ export default class EditableH3ClusterLayer extends EditableLayer<
|
|
|
159
162
|
break;
|
|
160
163
|
}
|
|
161
164
|
|
|
162
|
-
const selectedIndex = this.props.selectedIndexes
|
|
165
|
+
const selectedIndex = this.props.selectedIndexes[0];
|
|
163
166
|
const existingCluster = this.props.data[selectedIndex];
|
|
164
|
-
updatedData[selectedIndex] = this.props.getEditedCluster
|
|
167
|
+
updatedData[selectedIndex] = this.props.getEditedCluster(
|
|
165
168
|
finalHexagonIDs,
|
|
166
169
|
existingCluster
|
|
167
170
|
);
|
|
@@ -171,7 +174,7 @@ export default class EditableH3ClusterLayer extends EditableLayer<
|
|
|
171
174
|
tentativeHexagonIDs: []
|
|
172
175
|
});
|
|
173
176
|
|
|
174
|
-
this.props.onEdit
|
|
177
|
+
this.props.onEdit({updatedData});
|
|
175
178
|
|
|
176
179
|
break;
|
|
177
180
|
default:
|
|
@@ -207,9 +210,9 @@ export default class EditableH3ClusterLayer extends EditableLayer<
|
|
|
207
210
|
// using props.getHexagons to support multiple data types
|
|
208
211
|
getSelectedHexIDs() {
|
|
209
212
|
let cumulativeHexIDs: number[] = [];
|
|
210
|
-
this.props.selectedIndexes
|
|
213
|
+
this.props.selectedIndexes.forEach((index) => {
|
|
211
214
|
const selectedCluster = this.props.data[index];
|
|
212
|
-
const hexIDs = this.props.getHexagons
|
|
215
|
+
const hexIDs = this.props.getHexagons(selectedCluster);
|
|
213
216
|
cumulativeHexIDs = cumulativeHexIDs.concat(hexIDs);
|
|
214
217
|
});
|
|
215
218
|
return cumulativeHexIDs;
|