@geospatial-sdk/openlayers 0.0.5-dev.54 → 0.0.5-dev.56

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.
Files changed (42) hide show
  1. package/dist/map/apply-context-diff.d.ts.map +1 -1
  2. package/dist/map/apply-context-diff.js +9 -1
  3. package/dist/map/create-map.d.ts +1 -1
  4. package/dist/map/create-map.d.ts.map +1 -1
  5. package/dist/map/create-map.js +73 -30
  6. package/dist/map/feature-hover.js +1 -1
  7. package/dist/map/handle-errors.d.ts +0 -7
  8. package/dist/map/handle-errors.d.ts.map +1 -1
  9. package/dist/map/handle-errors.js +10 -14
  10. package/dist/map/index.d.ts +2 -1
  11. package/dist/map/index.d.ts.map +1 -1
  12. package/dist/map/index.js +2 -1
  13. package/dist/map/layer-update.d.ts.map +1 -1
  14. package/dist/map/layer-update.js +1 -1
  15. package/dist/map/listen.d.ts.map +1 -1
  16. package/dist/map/listen.js +13 -26
  17. package/dist/map/register-events.d.ts +16 -2
  18. package/dist/map/register-events.d.ts.map +1 -1
  19. package/dist/map/register-events.js +172 -81
  20. package/lib/map/apply-context-diff.ts +16 -5
  21. package/lib/map/create-map.test.ts +172 -60
  22. package/lib/map/create-map.ts +100 -37
  23. package/lib/map/feature-hover.ts +1 -1
  24. package/lib/map/handle-errors.test.ts +13 -36
  25. package/lib/map/handle-errors.ts +10 -28
  26. package/lib/map/index.ts +2 -1
  27. package/lib/map/layer-update.ts +3 -2
  28. package/lib/map/listen.test.ts +977 -0
  29. package/lib/map/listen.ts +123 -0
  30. package/lib/map/register-events.ts +229 -109
  31. package/lib/map/resolved-map-state.ts +38 -0
  32. package/package.json +3 -3
  33. package/dist/map/feature-selection.d.ts +0 -8
  34. package/dist/map/feature-selection.d.ts.map +0 -1
  35. package/dist/map/feature-selection.js +0 -76
  36. package/dist/map/styles.d.ts +0 -16
  37. package/dist/map/styles.d.ts.map +0 -1
  38. package/dist/map/styles.js +0 -77
  39. package/dist/resolved-state/resolved-map-state.d.ts +0 -2
  40. package/dist/resolved-state/resolved-map-state.d.ts.map +0 -1
  41. package/dist/resolved-state/resolved-map-state.js +0 -1
  42. package/lib/map/register-events.test.ts +0 -259
@@ -1,77 +0,0 @@
1
- import { Circle, Fill, Stroke, Style } from "ol/style.js";
2
- import chroma from "chroma-js";
3
- export function createGeometryStyles(options) {
4
- const { color, isFocused } = options;
5
- const zIndex = isFocused ? 10 : undefined;
6
- return {
7
- polygon: new Style({
8
- fill: new Fill({
9
- color: computeTransparentFillColor(color),
10
- }),
11
- stroke: new Stroke({
12
- color: "white",
13
- width: 2,
14
- }),
15
- zIndex,
16
- }),
17
- point: new Style({
18
- image: new Circle({
19
- fill: new Fill({
20
- color,
21
- }),
22
- stroke: new Stroke({
23
- color: "white",
24
- width: isFocused ? 3 : 2,
25
- }),
26
- radius: isFocused ? 8 : 7,
27
- }),
28
- zIndex,
29
- }),
30
- line: [
31
- new Style({
32
- stroke: new Stroke({
33
- color: "white",
34
- width: isFocused ? 8 : 6,
35
- }),
36
- zIndex,
37
- }),
38
- new Style({
39
- stroke: new Stroke({
40
- color,
41
- width: isFocused ? 3 : 2,
42
- }),
43
- zIndex,
44
- }),
45
- ],
46
- };
47
- }
48
- export function createStyleFunction(styleByGeometryType) {
49
- return (feature) => {
50
- const geometryType = feature?.getGeometry()?.getType();
51
- switch (geometryType) {
52
- case "LinearRing":
53
- case "LineString":
54
- case "MultiLineString":
55
- return styleByGeometryType.line;
56
- case "Point":
57
- case "MultiPoint":
58
- return styleByGeometryType.point;
59
- case "Circle":
60
- case "Polygon":
61
- case "MultiPolygon":
62
- return styleByGeometryType.polygon;
63
- default:
64
- return styleByGeometryType.point;
65
- }
66
- };
67
- }
68
- function computeTransparentFillColor(color, alpha = 0.25) {
69
- return chroma(color).alpha(alpha).css();
70
- }
71
- export const defaultStyle = createStyleFunction(createGeometryStyles({
72
- color: "blue",
73
- }));
74
- export const defaultHighlightStyle = createStyleFunction(createGeometryStyles({
75
- color: "red",
76
- isFocused: true,
77
- }));
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=resolved-map-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolved-map-state.d.ts","sourceRoot":"","sources":["../../lib/resolved-state/resolved-map-state.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- export {};
@@ -1,259 +0,0 @@
1
- import OlMap from "ol/Map.js";
2
- import { Mock } from "vitest";
3
- import { listen } from "./register-events.js";
4
- import { MapBrowserEvent, Object as BaseObject } from "ol";
5
- import View from "ol/View.js";
6
- import { toLonLat } from "ol/proj.js";
7
- import { FeaturesHoverEventType } from "@geospatial-sdk/core";
8
- import BaseEvent from "ol/events/Event.js";
9
-
10
- vi.mock("./get-features.js", () => ({
11
- readFeaturesAtPixel() {
12
- return Promise.resolve(
13
- new Map([
14
- [
15
- 0,
16
- [
17
- {
18
- geometry: {
19
- coordinates: [100, 200],
20
- type: "Point",
21
- },
22
- properties: null,
23
- type: "Feature",
24
- },
25
- ],
26
- ],
27
- [
28
- 1,
29
- [
30
- {
31
- geometry: null,
32
- properties: {
33
- density: 123,
34
- },
35
- type: "Feature",
36
- },
37
- ],
38
- ],
39
- ]),
40
- );
41
- },
42
- }));
43
-
44
- const featureA = {
45
- geometry: {
46
- coordinates: [100, 200],
47
- type: "Point",
48
- },
49
- properties: null,
50
- type: "Feature",
51
- };
52
- const featureB = {
53
- geometry: null,
54
- properties: {
55
- density: 123,
56
- },
57
- type: "Feature",
58
- };
59
-
60
- const EXPECTED_MAP_EXTENT_EPSG4326 = [
61
- -0.0035932611364780857, -0.0026949458513598756, 0.0035932611364780857,
62
- 0.0026949458513740865,
63
- ];
64
-
65
- function createMap(): OlMap {
66
- const view = new View({
67
- projection: "EPSG:3857",
68
- resolution: 1,
69
- center: [0, 0],
70
- });
71
- const map = new BaseObject() as OlMap;
72
- Object.defineProperties(map, {
73
- getView: { value: vi.fn(() => view) },
74
- getEventPixel: { value: vi.fn(() => [10, 10]) },
75
- getCoordinateFromPixel: { value: vi.fn(() => [123, 123]) },
76
- getSize: { value: vi.fn(() => [800, 600]) },
77
- });
78
- // simulate hover feature initialization
79
- map.on("pointermove", () => {
80
- map.dispatchEvent({
81
- type: FeaturesHoverEventType,
82
- features: [featureB],
83
- featuresByLayer: new Map([[0, [featureB]]]),
84
- } as unknown as BaseEvent);
85
- });
86
- return map;
87
- }
88
- function createMapEvent(map: OlMap, type: string) {
89
- return new MapBrowserEvent(
90
- type,
91
- map,
92
- new MouseEvent(type, {
93
- clientX: 10,
94
- clientY: 10,
95
- }) as PointerEvent,
96
- false,
97
- );
98
- }
99
-
100
- describe("event registration", () => {
101
- let map: OlMap;
102
- beforeEach(() => {
103
- map = createMap();
104
- vi.useFakeTimers();
105
- });
106
- describe("features hover event", () => {
107
- let callback: Mock;
108
- beforeEach(async () => {
109
- callback = vi.fn();
110
- listen(map, "features-hover", callback);
111
- map.dispatchEvent(createMapEvent(map, "pointermove"));
112
- await vi.runAllTimersAsync();
113
- });
114
- it("registers the event on the map", () => {
115
- expect(callback).toHaveBeenCalledWith({
116
- type: "features-hover",
117
- features: [featureB],
118
- featuresByLayer: new Map([[0, [featureB]]]),
119
- target: expect.anything(),
120
- });
121
- });
122
- });
123
- describe("features click event", () => {
124
- let callback: Mock;
125
- beforeEach(async () => {
126
- callback = vi.fn();
127
- listen(map, "features-click", callback);
128
- map.dispatchEvent(createMapEvent(map, "click"));
129
- await vi.runAllTimersAsync();
130
- });
131
- it("registers the event on the map", () => {
132
- expect(callback).toHaveBeenCalledWith({
133
- type: "features-click",
134
- features: [featureA, featureB],
135
- featuresByLayer: new Map([
136
- [0, [featureA]],
137
- [1, [featureB]],
138
- ]),
139
- target: expect.anything(),
140
- });
141
- });
142
- });
143
- describe("map click event", () => {
144
- let callback: Mock;
145
- beforeEach(() => {
146
- callback = vi.fn();
147
- listen(map, "map-click", callback);
148
- map.dispatchEvent(createMapEvent(map, "click"));
149
- });
150
- it("registers the event on the map", () => {
151
- expect(callback).toHaveBeenCalledWith({
152
- coordinate: toLonLat([123, 123]),
153
- type: "map-click",
154
- });
155
- });
156
- });
157
- describe("map extent change event", () => {
158
- let callback: Mock;
159
-
160
- beforeEach(() => {
161
- callback = vi.fn();
162
- listen(map, "map-extent-change", callback);
163
- });
164
-
165
- it("should registers the event on the map when center changed", () => {
166
- map.getView().dispatchEvent(createMapEvent(map, "change:center"));
167
-
168
- expect(callback).toHaveBeenCalledOnce();
169
- expect(callback).toHaveBeenCalledWith({
170
- type: "map-extent-change",
171
- extent: EXPECTED_MAP_EXTENT_EPSG4326,
172
- target: expect.anything(),
173
- });
174
- });
175
-
176
- it("should registers the event on the map when resolution changed", () => {
177
- map.getView().dispatchEvent(createMapEvent(map, "change:resolution"));
178
-
179
- expect(callback).toHaveBeenCalledOnce();
180
- expect(callback).toHaveBeenCalledWith({
181
- type: "map-extent-change",
182
- extent: EXPECTED_MAP_EXTENT_EPSG4326,
183
- target: expect.anything(),
184
- });
185
- });
186
-
187
- it("should registers the event on the map when rotation changed", () => {
188
- map.getView().dispatchEvent(createMapEvent(map, "change:rotation"));
189
-
190
- expect(callback).toHaveBeenCalledOnce();
191
- expect(callback).toHaveBeenCalledWith({
192
- type: "map-extent-change",
193
- extent: EXPECTED_MAP_EXTENT_EPSG4326,
194
- target: expect.anything(),
195
- });
196
- });
197
-
198
- it("should registers the event on the map when size changed", () => {
199
- map.dispatchEvent(createMapEvent(map, "change:size"));
200
-
201
- expect(callback).toHaveBeenCalledOnce();
202
- expect(callback).toHaveBeenCalledWith({
203
- type: "map-extent-change",
204
- extent: EXPECTED_MAP_EXTENT_EPSG4326,
205
- target: expect.anything(),
206
- });
207
- });
208
-
209
- it("should send map-extent-change only once when multiple events occur with same extent", () => {
210
- map.getView().dispatchEvent(createMapEvent(map, "change:center"));
211
- map.getView().dispatchEvent(createMapEvent(map, "change:resolution"));
212
- map.getView().dispatchEvent(createMapEvent(map, "change:rotation"));
213
- map.dispatchEvent(createMapEvent(map, "change:size"));
214
-
215
- expect(callback).toHaveBeenCalledOnce();
216
- expect(callback).toHaveBeenCalledWith({
217
- type: "map-extent-change",
218
- extent: EXPECTED_MAP_EXTENT_EPSG4326,
219
- target: expect.anything(),
220
- });
221
- });
222
-
223
- it("should send map-extent-change twice when view properties actually change", () => {
224
- map.getView().setCenter([1000, 1000]);
225
- map.getView().dispatchEvent(createMapEvent(map, "change:center"));
226
-
227
- map.getView().setResolution(2);
228
- map.getView().dispatchEvent(createMapEvent(map, "change:resolution"));
229
-
230
- expect(callback).toHaveBeenCalledTimes(2);
231
- expect(callback).toHaveBeenCalledWith(
232
- expect.objectContaining({
233
- type: "map-extent-change",
234
- extent: expect.any(Array),
235
- }),
236
- );
237
-
238
- const firstCall = callback.mock.calls[0][0];
239
- const lastCall = callback.mock.calls[1][0];
240
- expect(firstCall.extent).not.toEqual(lastCall.extent);
241
- });
242
-
243
- it("should send map-extent-change only once when same view property is set multiple times to same value", () => {
244
- map.getView().setCenter([1000, 1000]);
245
- map.getView().dispatchEvent(createMapEvent(map, "change:center"));
246
-
247
- map.getView().setCenter([1000, 1000]);
248
- map.getView().dispatchEvent(createMapEvent(map, "change:center"));
249
-
250
- expect(callback).toHaveBeenCalledTimes(1);
251
- expect(callback).toHaveBeenCalledWith(
252
- expect.objectContaining({
253
- type: "map-extent-change",
254
- extent: expect.any(Array),
255
- }),
256
- );
257
- });
258
- });
259
- });