@twinmatrix/spatialverse-sdk-web 0.0.3 → 0.0.4

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 (81) hide show
  1. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
  2. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  3. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
  4. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  5. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +202 -198
  6. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  7. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  8. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  9. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
  10. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  11. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -13
  12. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  13. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
  14. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  15. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
  16. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  17. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +73 -69
  18. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  19. package/lib/cjs/meta-atlas-sdk/utils/helpers.js +1 -1
  20. package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
  21. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +6 -1
  22. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  23. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -103
  24. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  25. package/lib/cjs/react/MetaAtlasMap.js +4 -4
  26. package/lib/cjs/react/MetaAtlasMap.js.map +1 -1
  27. package/lib/cjs/react/hooks/useMapEvents/index.js +6 -3
  28. package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
  29. package/lib/cjs/react/hooks/useStampRally/index.js +7 -5
  30. package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
  31. package/lib/cjs/react/hooks/useStampRally/utils.js +1 -1
  32. package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
  33. package/lib/cjs/react/stores/useMapDataStore.js +17 -21
  34. package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
  35. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
  36. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  37. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
  38. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  39. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +202 -198
  40. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  41. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  42. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  43. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +34 -31
  44. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  45. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -8
  46. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  47. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
  48. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  49. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
  50. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  51. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +73 -68
  52. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  53. package/lib/esm/meta-atlas-sdk/utils/helpers.js +1 -1
  54. package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
  55. package/lib/esm/meta-atlas-sdk/utils/local-storage.js +6 -1
  56. package/lib/esm/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  57. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -101
  58. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  59. package/lib/esm/react/MetaAtlasMap.js +4 -4
  60. package/lib/esm/react/MetaAtlasMap.js.map +1 -1
  61. package/lib/esm/react/hooks/useMapEvents/index.js +6 -3
  62. package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
  63. package/lib/esm/react/hooks/useStampRally/index.js +7 -5
  64. package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
  65. package/lib/esm/react/hooks/useStampRally/utils.js +1 -1
  66. package/lib/esm/react/hooks/useStampRally/utils.js.map +1 -1
  67. package/lib/esm/react/stores/useMapDataStore.js +17 -21
  68. package/lib/esm/react/stores/useMapDataStore.js.map +1 -1
  69. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts +30 -0
  70. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts.map +1 -0
  71. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts +5 -0
  72. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts.map +1 -0
  73. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts +21 -0
  74. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts.map +1 -0
  75. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts +27 -0
  76. package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts.map +1 -0
  77. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts +18 -0
  78. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts.map +1 -0
  79. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts +37 -0
  80. package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts.map +1 -0
  81. package/package.json +4 -4
@@ -1,3 +1,6 @@
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
4
  import { cloneDeep } from 'lodash';
2
5
  import maplibregl from 'maplibre-gl';
3
6
  import { point as turfPoint, point } from '@turf/helpers';
@@ -12,28 +15,106 @@ import { routeAnimateLayers, routeLayers } from "../../MetaAtlasCore/routing-cor
12
15
  import { lineString } from '@turf/turf';
13
16
  import useRouteDataStore from "../routing-store.js";
14
17
  export class RoutingVisualizer {
15
- // Routing
16
- routeSourceName = 'routeGeojson';
17
- patchFeatureCollection = (() => ({
18
- type: 'FeatureCollection',
19
- features: []
20
- }))();
21
- highlightedSegmentNumber = (() => -1)();
22
- currentPatchNumber = (() => -1)();
23
-
24
- // Routing animation
25
- animateRouteSourceName = 'routeAnimateGeojson';
26
- animationFrameID = (() => -1)();
27
- animateRouteSegmentFeatureCollection = (() => ({
28
- type: 'FeatureCollection',
29
- features: []
30
- }))();
31
- animationStartTime = 0;
32
- end = {
33
- from: 0,
34
- to: 0
35
- };
36
18
  constructor(sdk) {
19
+ // Routing
20
+ _defineProperty(this, "routeSourceName", 'routeGeojson');
21
+ _defineProperty(this, "patchFeatureCollection", {
22
+ type: 'FeatureCollection',
23
+ features: []
24
+ });
25
+ _defineProperty(this, "highlightedSegmentNumber", -1);
26
+ _defineProperty(this, "currentPatchNumber", -1);
27
+ // Routing animation
28
+ _defineProperty(this, "animateRouteSourceName", 'routeAnimateGeojson');
29
+ _defineProperty(this, "animationFrameID", -1);
30
+ _defineProperty(this, "animateRouteSegmentFeatureCollection", {
31
+ type: 'FeatureCollection',
32
+ features: []
33
+ });
34
+ _defineProperty(this, "animationStartTime", 0);
35
+ _defineProperty(this, "end", {
36
+ from: 0,
37
+ to: 0
38
+ });
39
+ _defineProperty(this, "animateHighlightedRouteSegment", () => {
40
+ const routeFeature = cloneDeep(this.animateRouteSegmentFeatureCollection.features[0]);
41
+ if (routeFeature) {
42
+ const currentTime = Date.now();
43
+ const elapsed = currentTime - this.animationStartTime;
44
+ const writeToSource = (feature, coords) => {
45
+ //@ts-ignore
46
+ feature.geometry.coordinates = coords;
47
+ const routeSource = this.map.getSource(this.animateRouteSourceName);
48
+ if (routeSource) {
49
+ //@ts-ignore
50
+ routeSource.setData({
51
+ type: 'FeatureCollection',
52
+ features: [feature]
53
+ });
54
+ }
55
+ };
56
+ const animationDuration = 2000;
57
+ if (elapsed < animationDuration) {
58
+ const progress = 1 - elapsed / animationDuration;
59
+
60
+ //@ts-ignore
61
+ const fullRoute = routeFeature.geometry.coordinates;
62
+ const {
63
+ end
64
+ } = this;
65
+ let currentEnd;
66
+ if (progress > 0.5) {
67
+ const customProgress = 2 * (progress - 0.5); // map 0.5 - 1 to 0 - 1 range
68
+ currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;
69
+ } else {
70
+ const customProgress = progress * 2; // map 0 - 0.5 to 0 - 1 range
71
+ currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;
72
+ }
73
+
74
+ // calculate distance along the line using current animation percentage
75
+ // percentage travels 1 - 0
76
+ let prevsum = 0;
77
+ let actsum = 0;
78
+ let i = fullRoute.length - 1;
79
+ while (actsum < currentEnd && i > 0) {
80
+ prevsum = actsum;
81
+ actsum += turf.distance(point(fullRoute[i]), point(fullRoute[i - 1]));
82
+ i -= 1;
83
+ }
84
+ if (progress > 0.5) {
85
+ // Reverse animation
86
+ // if (actsum <= currentEnd) {
87
+ // const actRoute = [
88
+ // ...fullRoute.slice(fullRoute.length - 2, fullRoute.length),
89
+ // ];
90
+ // return {fullRoute, end: {...end, current: currentEnd}, actRoute};
91
+ // }
92
+
93
+ // Return coordinates from line start to current percentage point
94
+ const r = (currentEnd - prevsum) / (actsum - prevsum);
95
+ const or = 1.0 - r;
96
+ const actRoute = [...fullRoute.slice(0, i + 1), [fullRoute[i][0] * r + fullRoute[i + 1][0] * or, fullRoute[i][1] * r + fullRoute[i + 1][1] * or]];
97
+ writeToSource(routeFeature, actRoute);
98
+ } else {
99
+ // Forward animation
100
+ if (actsum <= currentEnd) {
101
+ // Return last two points of the line as final result
102
+ const actRoute = [...fullRoute.slice(fullRoute.length - 2, fullRoute.length)];
103
+ writeToSource(routeFeature, actRoute);
104
+ }
105
+
106
+ // Return coordinates from line end to current percentage point
107
+ const r = (currentEnd - prevsum) / (actsum - prevsum);
108
+ const or = 1.0 - r;
109
+ const actRoute = [[fullRoute[i][0] * r + fullRoute[i + 1][0] * or, fullRoute[i][1] * r + fullRoute[i + 1][1] * or], ...fullRoute.slice(i + 1, fullRoute.length)];
110
+ writeToSource(routeFeature, actRoute);
111
+ }
112
+ this.animationFrameID = requestAnimationFrame(this.animateHighlightedRouteSegment);
113
+ } else {
114
+ this.resetRouteSegmentAnimation();
115
+ }
116
+ }
117
+ });
37
118
  this.main = sdk;
38
119
  }
39
120
 
@@ -187,7 +268,7 @@ export class RoutingVisualizer {
187
268
  if (generatedRoute.segments.length > 0) {
188
269
  const segmentOverview = generatedRoute.segments[0];
189
270
  segmentOverview.maneuverType = ManeuverType.SectionOverview;
190
- segmentOverview.instructions = [`${segmentOverview.startEdge.name} to ${segmentOverview.endEdge.name}`];
271
+ segmentOverview.instructions = ["".concat(segmentOverview.startEdge.name, " to ").concat(segmentOverview.endEdge.name)];
191
272
  }
192
273
  for (let j = 0; j < generatedRoute.segments.length; j += 1) {
193
274
  const segment = generatedRoute.segments[j];
@@ -240,85 +321,6 @@ export class RoutingVisualizer {
240
321
  if (routeFeature.geometry.type === 'LineString') this.animateHighlightedRouteSegment();
241
322
  }
242
323
  }
243
- animateHighlightedRouteSegment = () => {
244
- const routeFeature = cloneDeep(this.animateRouteSegmentFeatureCollection.features[0]);
245
- if (routeFeature) {
246
- const currentTime = Date.now();
247
- const elapsed = currentTime - this.animationStartTime;
248
- const writeToSource = (feature, coords) => {
249
- //@ts-ignore
250
- feature.geometry.coordinates = coords;
251
- const routeSource = this.map.getSource(this.animateRouteSourceName);
252
- if (routeSource) {
253
- //@ts-ignore
254
- routeSource.setData({
255
- type: 'FeatureCollection',
256
- features: [feature]
257
- });
258
- }
259
- };
260
- const animationDuration = 2000;
261
- if (elapsed < animationDuration) {
262
- const progress = 1 - elapsed / animationDuration;
263
-
264
- //@ts-ignore
265
- const fullRoute = routeFeature.geometry.coordinates;
266
- const {
267
- end
268
- } = this;
269
- let currentEnd;
270
- if (progress > 0.5) {
271
- const customProgress = 2 * (progress - 0.5); // map 0.5 - 1 to 0 - 1 range
272
- currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;
273
- } else {
274
- const customProgress = progress * 2; // map 0 - 0.5 to 0 - 1 range
275
- currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;
276
- }
277
-
278
- // calculate distance along the line using current animation percentage
279
- // percentage travels 1 - 0
280
- let prevsum = 0;
281
- let actsum = 0;
282
- let i = fullRoute.length - 1;
283
- while (actsum < currentEnd && i > 0) {
284
- prevsum = actsum;
285
- actsum += turf.distance(point(fullRoute[i]), point(fullRoute[i - 1]));
286
- i -= 1;
287
- }
288
- if (progress > 0.5) {
289
- // Reverse animation
290
- // if (actsum <= currentEnd) {
291
- // const actRoute = [
292
- // ...fullRoute.slice(fullRoute.length - 2, fullRoute.length),
293
- // ];
294
- // return {fullRoute, end: {...end, current: currentEnd}, actRoute};
295
- // }
296
-
297
- // Return coordinates from line start to current percentage point
298
- const r = (currentEnd - prevsum) / (actsum - prevsum);
299
- const or = 1.0 - r;
300
- const actRoute = [...fullRoute.slice(0, i + 1), [fullRoute[i][0] * r + fullRoute[i + 1][0] * or, fullRoute[i][1] * r + fullRoute[i + 1][1] * or]];
301
- writeToSource(routeFeature, actRoute);
302
- } else {
303
- // Forward animation
304
- if (actsum <= currentEnd) {
305
- // Return last two points of the line as final result
306
- const actRoute = [...fullRoute.slice(fullRoute.length - 2, fullRoute.length)];
307
- writeToSource(routeFeature, actRoute);
308
- }
309
-
310
- // Return coordinates from line end to current percentage point
311
- const r = (currentEnd - prevsum) / (actsum - prevsum);
312
- const or = 1.0 - r;
313
- const actRoute = [[fullRoute[i][0] * r + fullRoute[i + 1][0] * or, fullRoute[i][1] * r + fullRoute[i + 1][1] * or], ...fullRoute.slice(i + 1, fullRoute.length)];
314
- writeToSource(routeFeature, actRoute);
315
- }
316
- this.animationFrameID = requestAnimationFrame(this.animateHighlightedRouteSegment);
317
- } else {
318
- this.resetRouteSegmentAnimation();
319
- }
320
- }
321
- };
322
324
  updateFeaturesToAnimate(segmentNumber, whereDimensionForFeatures) {
323
325
  if (this.route && this.route.segments.length > segmentNumber) {
324
326
  const routeSegment = this.route.segments[segmentNumber];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["cloneDeep","maplibregl","point","turfPoint","length","nearestPointOnLine","turf","transformTranslate","DISTANCE_UNIT","WALK_SPEED","RouteDimension","ManeuverType","createRoute","generateInstructions","generateOverviewSegment","getFeaturesForPatch","getLineStringFeaturesOfRouteSegment","getPatch","highlightRouteSegment","isOverviewSegment","routeAnimateLayers","routeLayers","lineString","useRouteDataStore","RoutingVisualizer","routeSourceName","patchFeatureCollection","type","features","highlightedSegmentNumber","currentPatchNumber","animateRouteSourceName","animationFrameID","animateRouteSegmentFeatureCollection","animationStartTime","end","from","to","constructor","sdk","main","getCurrentFocus","filterWhereDimension","dimension","focusTo","setupRouting","map","addSource","data","layer","source","addLayer","computeRoute","startMapObjectId","endMapObjectId","wheelChairAccessibleRouting","arguments","undefined","shouldAddOverviewSegment","indexOffset","generatedRoute","console","log","segments","handleAllRouteUpdate","allSegments","userPosition","segmentIndex","featureLineStringToUpdate","filter","f","geometry","lineStringToUpdate","coordinates","slice","subLine","nearestPoint","sourceCoords","unshift","coordsToUpdate","index","properties","coordsToKeep","featureIndex","i","computeRoutes","mapObjectIds","wheelChairAccessibleRouteOnly","warn","mergedRoute","walkingDistance","transportDistance","walkingTime","transportTime","distanceUnit","speed","dummySegment","push","id","routeData","getState","project","feats","queryRenderedFeatures","Edge","hasOwnProperty","mapObjectId","edgeData","lines","segmentOverview","maneuverType","SectionOverview","instructions","startEdge","name","endEdge","j","segment","overviewSegment","updateRouteSource","updatedFeatureCollection","routeSource","getSource","setData","updateAnimateRouteSource","setActiveRoute","route","getActiveRoute","resetRouteSegmentAnimation","Date","now","cancelAnimationFrame","routeFeature","animateHighlightedRouteSegment","currentTime","elapsed","writeToSource","feature","coords","animationDuration","progress","fullRoute","currentEnd","customProgress","prevsum","actsum","distance","r","or","actRoute","requestAnimationFrame","updateFeaturesToAnimate","segmentNumber","whereDimensionForFeatures","routeSegment","lineFeaturesOfSegment","ls","nearest","toDist","location","segmentNumberToHighlight","updateFilters","segmentWhereDimension","ExitPortal","Static","whereDimension","routeFeaturesToUse","segmentPatchNumber","patchNumber","featureCollectionToDraw","includeOverviewFeatures","patchNumberForOverviewFeatures","updatedFeatures","getStartCoords","canvas","getCanvas","w","clientWidth","h","clientHeight","fitBoundsConfig","padding","top","bottom","left","right","duration","bearing","getBearing","pitch","getPitch","currentPatchFeatures","startCoords","sw","LngLat","ne","llb","LngLatBounds","element","extend","coord","fitBounds","transformedFeatures","forwardTransformed","reverseTransformed","bbox","clearRoute"],"sources":["../../../../../src/meta-atlas-sdk/utils/routing-visualizer/index.ts"],"sourcesContent":["import { cloneDeep } from 'lodash';\nimport maplibregl, { Feature, Map } from 'maplibre-gl';\nimport {\n Units, point as turfPoint,\n point,\n} from '@turf/helpers';\nimport length from '@turf/length';\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\n// import { distance } from \"@turf/distance\";\nimport * as turf from '@turf/turf';\nimport { transformTranslate } from \"@turf/transform-translate\";\nimport { FeatureCollection } from 'geojson';\nimport { DISTANCE_UNIT, WALK_SPEED, RouteDimension, UserPosition } from '../../MetaAtlasCore/routing-core/interfaces';\nimport {\n ManeuverType, Route, RouteSegment, createRoute, generateInstructions, generateOverviewSegment, getFeaturesForPatch, getLineStringFeaturesOfRouteSegment, getPatch, highlightRouteSegment,\n isOverviewSegment,\n} from '../../MetaAtlasCore/routing-core/routing-helpers';\nimport { routeAnimateLayers, routeLayers } from '../../MetaAtlasCore/routing-core/routeLayers';\nimport { lineString } from '@turf/turf';\nimport useRouteDataStore from '../routing-store';\n\nexport class RoutingVisualizer {\n map: Map;\n\n // Routing\n routeSourceName = 'routeGeojson';\n\n patchFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection;\n\n route: Route | null;\n\n highlightedSegmentNumber = -1;\n\n currentPatchNumber = -1;\n\n // Routing animation\n animateRouteSourceName = 'routeAnimateGeojson';\n\n animationFrameID = -1;\n\n animateRouteSegmentFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection;\n\n animationStartTime = 0;\n\n end = {\n from: 0,\n to: 0,\n };\n\n main: any;\n\n constructor(sdk: any) {\n this.main = sdk\n }\n\n // MetaAtlasCore To Editor\n // eslint-disable-next-line class-methods-use-this\n getCurrentFocus() {\n return this.main.getCurrentFocus();\n }\n\n // eslint-disable-next-line class-methods-use-this\n filterWhereDimension(dimension: string) {\n this.main.focusTo(dimension, false);\n }\n\n // Routing\n setupRouting(map: Map) {\n this.map = map;\n this.map.addSource(this.routeSourceName, {\n type: 'geojson',\n data: this.patchFeatureCollection,\n });\n\n for (const layer of routeLayers) {\n (layer as any).source = this.routeSourceName;\n this.map.addLayer(layer as any);\n }\n\n // Animation data\n this.map.addSource(this.animateRouteSourceName, {\n type: 'geojson',\n data: this.animateRouteSegmentFeatureCollection,\n });\n\n for (const layer of routeAnimateLayers) {\n (layer as any).source = this.animateRouteSourceName;\n this.map.addLayer(layer as any);\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n async computeRoute(\n startMapObjectId: string,\n endMapObjectId: string,\n wheelChairAccessibleRouting = false,\n shouldAddOverviewSegment = true,\n indexOffset = 0, // offset for patch and segment numbers calculation\n ): Promise<Route> {\n this.currentPatchNumber = -1;\n\n const generatedRoute = await createRoute(\n startMapObjectId,\n endMapObjectId,\n wheelChairAccessibleRouting,\n shouldAddOverviewSegment,\n indexOffset,\n );\n\n console.log('internal generated: ', generatedRoute);\n\n // Generate textual instructions\n generateInstructions(generatedRoute);\n console.log(generatedRoute.segments);\n\n return generatedRoute;\n }\n\n handleAllRouteUpdate(allSegments: any, userPosition: UserPosition, segmentIndex) {\n // Get the LineString Feature of the route\n const featureLineStringToUpdate = allSegments[segmentIndex].features.filter(\n f => f.geometry.type === 'LineString'\n )[0];\n\n // Create a LineString with the coordinates of the route that would be updated accordingly\n const lineStringToUpdate = lineString(featureLineStringToUpdate.geometry.coordinates.slice(1));\n\n // Create a subset of LineString that contains the first two coords of the route which actually represent the route edge\n const subLine = lineString([\n featureLineStringToUpdate.geometry.coordinates[0],\n featureLineStringToUpdate.geometry.coordinates[1]\n ]);\n\n // Find the nearest point to the user position on the sub line and update the LineString.\n const nearestPoint = nearestPointOnLine(subLine, userPosition.sourceCoords);\n lineStringToUpdate.geometry.coordinates.unshift(userPosition.sourceCoords, nearestPoint.geometry.coordinates);\n const coordsToUpdate = lineStringToUpdate.geometry.coordinates;\n const index = nearestPoint.properties.index;\n const coordsToKeep = coordsToUpdate.slice(index);\n lineStringToUpdate.geometry.coordinates = coordsToKeep;\n lineStringToUpdate.geometry.coordinates.unshift(userPosition.sourceCoords);\n lineStringToUpdate.properties = featureLineStringToUpdate.properties;\n let featureIndex = -1;\n allSegments[segmentIndex].features.map((f, i) => {\n if (f.geometry.type === 'LineString') {\n featureIndex = i;\n }\n });\n\n // Update the new LineString in the route\n allSegments[segmentIndex].features[featureIndex] = lineStringToUpdate;\n allSegments[segmentIndex].coordinates = lineStringToUpdate.geometry.coordinates;\n }\n\n async computeRoutes(mapObjectIds: string[], wheelChairAccessibleRouteOnly = false): Promise<Route | undefined> {\n if (mapObjectIds.length < 2) {\n console.warn('Invalid array passed to computeRoutes');\n return undefined;\n }\n\n console.log('calling computeRoutes with mapObjectIds: ', mapObjectIds);\n\n const mergedRoute = {\n segments: [] as RouteSegment[],\n walkingDistance: 0,\n transportDistance: 0,\n walkingTime: 0,\n transportTime: 0,\n\n distanceUnit: DISTANCE_UNIT as Units,\n speed: WALK_SPEED,\n } as Route;\n\n // Dummy segment for overview segment\n const dummySegment = {};\n mergedRoute.segments.push(dummySegment as any);\n let indexOffset = 1; // Index set to 1, since overview segment will be added to 0th index\n\n for (let index = 0; index < mapObjectIds.length - 1; index += 1) {\n let startMapObjectId = mapObjectIds[index];\n const endMapObjectId = mapObjectIds[index + 1];\n\n const shouldAddOverviewSegment = true; // include overview segment in first route\n\n const id = mapObjectIds[0] as unknown as UserPosition;\n if (typeof mapObjectIds[0] !== 'string') {\n // Run queryRenderedFeatures.\n const routeData = useRouteDataStore.getState().data;\n const point = this.map.project([id.sourceCoords[0], id.sourceCoords[1]]);\n const feats = this.map.queryRenderedFeatures(point);\n feats.map(f => {\n if (routeData[RouteDimension.Edge].hasOwnProperty(f.properties.mapObjectId)) {\n const edgeData = routeData[RouteDimension.Edge][f.properties.mapObjectId];\n if (edgeData.lines.length > 0) {\n startMapObjectId = f.properties.mapObjectId;\n }\n }\n });\n }\n\n // eslint-disable-next-line no-await-in-loop\n const generatedRoute = await this.computeRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly, shouldAddOverviewSegment, indexOffset);\n const allSegments = generatedRoute.segments;\n // if (typeof mapObjectIds[index] !== 'string' && typeof startMapObjectId === 'string') {\n // //Handle SectionOverview:\n // this.handleAllRouteUpdate(allSegments, id as UserPosition, 0);\n\n // // Handle the second segment.\n // const secondSegmentFeatures = generatedRoute.segments[1].features;\n // if (secondSegmentFeatures.length < 3 && secondSegmentFeatures[0].geometry.type === 'Point') {\n // secondSegmentFeatures[0].geometry.coordinates = id.sourceCoords;\n // allSegments[1].coordinates = id.sourceCoords as any;\n // } else {\n // this.handleAllRouteUpdate(allSegments, id as UserPosition, 1);\n // }\n\n // // Handle third segment\n // const thirdSegmentFeatures = generatedRoute.segments[2].features;\n // if (thirdSegmentFeatures.length < 3 && thirdSegmentFeatures.geometry.type === 'Point') {\n // allSegments[1].features[0].geometry.coordinates = id.sourceCoords;\n // allSegments[1].coordinates = id.sourceCoords as any;\n // } else {\n // this.handleAllRouteUpdate(allSegments, id as UserPosition, 2);\n // }\n // }\n \n if (generatedRoute.segments.length > 0) {\n const segmentOverview = generatedRoute.segments[0];\n segmentOverview.maneuverType = ManeuverType.SectionOverview;\n segmentOverview.instructions = [`${segmentOverview.startEdge.name} to ${segmentOverview.endEdge.name}`];\n }\n for (let j = 0; j < generatedRoute.segments.length; j += 1) {\n const segment = generatedRoute.segments[j];\n mergedRoute.segments.push(segment);\n }\n mergedRoute.walkingDistance += generatedRoute.walkingDistance;\n mergedRoute.transportDistance += generatedRoute.transportDistance;\n mergedRoute.walkingTime += generatedRoute.walkingTime;\n mergedRoute.transportTime += generatedRoute.transportTime;\n\n // Increment by segment count\n indexOffset += generatedRoute.segments.length;\n }\n\n if (mergedRoute.segments.length > 1) { // Use 1 here because 1 dummy segment will always be included\n const overviewSegment = generateOverviewSegment(mergedRoute);\n mergedRoute.segments[0] = overviewSegment;\n } else {\n mergedRoute.segments.length = 0; // Remove dummy segment\n }\n\n console.log('merged route: ', mergedRoute);\n\n return mergedRoute;\n }\n\n updateRouteSource(updatedFeatureCollection: FeatureCollection) {\n if (!this.map) return false;\n this.patchFeatureCollection = updatedFeatureCollection;\n const routeSource = (this.map.getSource(this.routeSourceName) as maplibregl.GeoJSONSource);\n if (routeSource) routeSource.setData(updatedFeatureCollection);\n\n return true;\n }\n\n updateAnimateRouteSource(updatedFeatureCollection: FeatureCollection) {\n if (!this.map) return false;\n this.animateRouteSegmentFeatureCollection = updatedFeatureCollection;\n const routeSource = (this.map.getSource(this.animateRouteSourceName) as maplibregl.GeoJSONSource);\n if (routeSource) routeSource.setData(updatedFeatureCollection);\n\n return true;\n }\n\n setActiveRoute(route: Route) {\n this.route = route;\n }\n\n getActiveRoute(): Route | null {\n return this.route;\n }\n\n resetRouteSegmentAnimation() {\n this.animationStartTime = Date.now();\n cancelAnimationFrame(this.animationFrameID);\n if (this.animateRouteSegmentFeatureCollection.features.length > 0) {\n const routeFeature = this.animateRouteSegmentFeatureCollection.features[0] as unknown as Feature;\n //@ts-ignore\n if (routeFeature.geometry.type === 'LineString') this.animateHighlightedRouteSegment();\n }\n }\n\n animateHighlightedRouteSegment = () => {\n const routeFeature = cloneDeep(this.animateRouteSegmentFeatureCollection.features[0]) as Feature;\n if (routeFeature) {\n const currentTime = Date.now();\n const elapsed = currentTime - this.animationStartTime;\n\n const writeToSource = (feature: Feature, coords: []) => {\n //@ts-ignore\n feature.geometry.coordinates = coords;\n const routeSource = (this.map.getSource(this.animateRouteSourceName) as maplibregl.GeoJSONSource);\n if (routeSource) {\n //@ts-ignore\n routeSource.setData({\n type: 'FeatureCollection',\n features: [feature],\n } as FeatureCollection);\n }\n };\n const animationDuration = 2000;\n if (elapsed < animationDuration) {\n const progress = 1 - elapsed / animationDuration;\n\n //@ts-ignore\n const fullRoute = routeFeature.geometry.coordinates;\n const { end } = this;\n\n let currentEnd;\n if (progress > 0.5) {\n const customProgress = 2 * (progress - 0.5); // map 0.5 - 1 to 0 - 1 range\n currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;\n } else {\n const customProgress = progress * 2; // map 0 - 0.5 to 0 - 1 range\n currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;\n }\n\n // calculate distance along the line using current animation percentage\n // percentage travels 1 - 0\n let prevsum = 0;\n let actsum = 0;\n let i = fullRoute.length - 1;\n while (actsum < currentEnd && i > 0) {\n prevsum = actsum;\n actsum += turf.distance(point(fullRoute[i]), point(fullRoute[i - 1]));\n i -= 1;\n }\n if (progress > 0.5) {\n // Reverse animation\n // if (actsum <= currentEnd) {\n // const actRoute = [\n // ...fullRoute.slice(fullRoute.length - 2, fullRoute.length),\n // ];\n // return {fullRoute, end: {...end, current: currentEnd}, actRoute};\n // }\n\n // Return coordinates from line start to current percentage point\n const r = (currentEnd - prevsum) / (actsum - prevsum);\n const or = 1.0 - r;\n\n const actRoute = [\n ...fullRoute.slice(0, i + 1),\n [\n fullRoute[i][0] * r + fullRoute[i + 1][0] * or,\n fullRoute[i][1] * r + fullRoute[i + 1][1] * or,\n ],\n ];\n\n writeToSource(routeFeature, actRoute as any);\n } else {\n // Forward animation\n if (actsum <= currentEnd) {\n // Return last two points of the line as final result\n const actRoute = [\n ...fullRoute.slice(fullRoute.length - 2, fullRoute.length),\n ];\n\n writeToSource(routeFeature, actRoute as any);\n }\n\n // Return coordinates from line end to current percentage point\n const r = (currentEnd - prevsum) / (actsum - prevsum);\n const or = 1.0 - r;\n\n const actRoute = [\n [\n fullRoute[i][0] * r + fullRoute[i + 1][0] * or,\n fullRoute[i][1] * r + fullRoute[i + 1][1] * or,\n ],\n ...fullRoute.slice(i + 1, fullRoute.length),\n ];\n\n writeToSource(routeFeature, actRoute as any);\n }\n\n this.animationFrameID = requestAnimationFrame(\n this.animateHighlightedRouteSegment,\n );\n } else {\n this.resetRouteSegmentAnimation();\n }\n }\n };\n\n updateFeaturesToAnimate(segmentNumber: number, whereDimensionForFeatures: string) {\n if (this.route && this.route.segments.length > segmentNumber) {\n const routeSegment = this.route.segments[segmentNumber];\n // set features for animated segment source\n if (routeSegment.features.length > 0) {\n const lineFeaturesOfSegment =\n // include where dimension here?\n getLineStringFeaturesOfRouteSegment(\n routeSegment,\n whereDimensionForFeatures,\n );\n\n if (lineFeaturesOfSegment.length > 0) {\n this.updateAnimateRouteSource({\n type: 'FeatureCollection',\n features: lineFeaturesOfSegment,\n } as FeatureCollection);\n\n const ls = lineFeaturesOfSegment[0];\n //@ts-ignore\n const nearest = nearestPointOnLine(ls as any, point(lineFeaturesOfSegment[0].geometry.coordinates[0]));\n const toDist = length(ls) - nearest.properties.location;\n this.end = {\n from: 0,\n to: toDist,\n };\n } else {\n this.updateAnimateRouteSource({\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection);\n }\n\n this.resetRouteSegmentAnimation();\n }\n }\n }\n\n highlightRouteSegment(segmentNumberToHighlight: number, updateFilters = true) {\n const { route } = this;\n if (route && route.segments.length > segmentNumberToHighlight) {\n if (\n route.segments[segmentNumberToHighlight].coordinates.length > 0\n ) {\n this.highlightedSegmentNumber = segmentNumberToHighlight;\n const routeSegment = route.segments[segmentNumberToHighlight];\n\n const segmentWhereDimension = routeSegment.maneuverType === ManeuverType.ExitPortal || routeSegment.maneuverType === ManeuverType.Static\n ? routeSegment.endEdge.whereDimension\n : routeSegment.startEdge.whereDimension;\n let routeFeaturesToUse = this.patchFeatureCollection.features;\n\n // update visible route features if required\n const segmentPatchNumber = (\n routeSegment.features[0].properties as any\n ).patchNumber;\n if (this.currentPatchNumber !== segmentPatchNumber) {\n this.currentPatchNumber = segmentPatchNumber;\n const featureCollectionToDraw = {\n type: 'FeatureCollection',\n features: getFeaturesForPatch(route, segmentPatchNumber, {\n includeOverviewFeatures: isOverviewSegment(routeSegment),\n patchNumberForOverviewFeatures: segmentPatchNumber,\n }),\n } as FeatureCollection;\n\n routeFeaturesToUse = featureCollectionToDraw.features;\n }\n\n if (\n segmentWhereDimension\n && segmentWhereDimension !== this.getCurrentFocus()\n && updateFilters\n ) {\n this.filterWhereDimension(segmentWhereDimension);\n }\n\n // update highlighted route segment\n const updatedFeatures = highlightRouteSegment(\n routeFeaturesToUse as any,\n segmentNumberToHighlight,\n );\n\n this.updateRouteSource({\n type: 'FeatureCollection',\n features: updatedFeatures,\n });\n\n if (!isOverviewSegment(routeSegment)) {\n this.updateFeaturesToAnimate(\n segmentNumberToHighlight,\n segmentWhereDimension,\n );\n } else {\n // clear animation source\n this.updateAnimateRouteSource({\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection);\n }\n\n // animate camera to segment\n if (routeSegment) {\n const getStartCoords = (feature: Feature) => {\n //@ts-ignore\n if (feature.geometry.type === 'Point') {\n //@ts-ignore\n return feature.geometry.coordinates;\n }\n\n //@ts-ignore\n return feature.geometry.coordinates[0];\n };\n\n const canvas = this.map.getCanvas();\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n const fitBoundsConfig = {\n padding: {\n top: h * 0.2, bottom: h * 0.2, left: w * 0.2, right: w * 0.2,\n },\n duration: 1000,\n bearing: this.map.getBearing(),\n pitch: this.map.getPitch(),\n };\n if (routeSegment.coordinates.length > 1) {\n const currentPatchFeatures = getPatch(route, routeSegment.patchNumber);\n const startCoords = getStartCoords(currentPatchFeatures[0] as any);\n // let index = 0;\n // for (index = 0; index < currentPatchFeatures.length; index++) {\n // const element = currentPatchFeatures[index];\n // if (element.properties.segmentNumber === segmentNumberToHighlight) {\n // startCoords = getStartCoords(element);\n // }\n // }\n const sw = new maplibregl.LngLat(startCoords[0], startCoords[1]);\n const ne = new maplibregl.LngLat(startCoords[0], startCoords[1]);\n const llb = new maplibregl.LngLatBounds(sw, ne);\n for (let index = 0; index < currentPatchFeatures.length; index++) {\n const element = currentPatchFeatures[index];\n if (element.geometry.type === 'Point') {\n llb.extend(element.geometry.coordinates as any);\n } else {\n //@ts-ignore\n for (const coord of element.geometry.coordinates) {\n llb.extend(coord);\n }\n }\n }\n\n this.map.fitBounds(\n llb,\n fitBoundsConfig,\n );\n } else {\n // Translate the point slightly to get another point which can used for the fitBounds function.\n const transformedFeatures = {\n type: 'FeatureCollection',\n features: [turfPoint(routeSegment.coordinates[0])],\n } as FeatureCollection;\n const forwardTransformed = transformTranslate(\n transformedFeatures as any,\n 0.025,\n 3,\n ).features[0].geometry.coordinates;\n\n const reverseTransformed = transformTranslate(\n transformedFeatures as any,\n -0.025,\n -3,\n ).features[0].geometry.coordinates;\n\n const bbox = [reverseTransformed, forwardTransformed];\n this.map.fitBounds(\n bbox as any,\n fitBoundsConfig,\n );\n }\n }\n } else {\n console.log('at vertical portal segment, ignoring!');\n }\n\n console.log(route.segments[segmentNumberToHighlight].instructions);\n } else {\n console.warn(\n 'Invalid segment number passed to highlightRouteSegment',\n );\n }\n }\n\n clearRoute() {\n const featureCollectionToDraw = {\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection;\n\n this.updateRouteSource(featureCollectionToDraw);\n this.updateAnimateRouteSource(featureCollectionToDraw);\n this.route = null;\n cancelAnimationFrame(this.animationFrameID);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["cloneDeep","maplibregl","point","turfPoint","length","nearestPointOnLine","turf","transformTranslate","DISTANCE_UNIT","WALK_SPEED","RouteDimension","ManeuverType","createRoute","generateInstructions","generateOverviewSegment","getFeaturesForPatch","getLineStringFeaturesOfRouteSegment","getPatch","highlightRouteSegment","isOverviewSegment","routeAnimateLayers","routeLayers","lineString","useRouteDataStore","RoutingVisualizer","constructor","sdk","_defineProperty","type","features","from","to","routeFeature","animateRouteSegmentFeatureCollection","currentTime","Date","now","elapsed","animationStartTime","writeToSource","feature","coords","geometry","coordinates","routeSource","map","getSource","animateRouteSourceName","setData","animationDuration","progress","fullRoute","end","currentEnd","customProgress","prevsum","actsum","i","distance","r","or","actRoute","slice","animationFrameID","requestAnimationFrame","animateHighlightedRouteSegment","resetRouteSegmentAnimation","main","getCurrentFocus","filterWhereDimension","dimension","focusTo","setupRouting","addSource","routeSourceName","data","patchFeatureCollection","layer","source","addLayer","computeRoute","startMapObjectId","endMapObjectId","wheelChairAccessibleRouting","arguments","undefined","shouldAddOverviewSegment","indexOffset","currentPatchNumber","generatedRoute","console","log","segments","handleAllRouteUpdate","allSegments","userPosition","segmentIndex","featureLineStringToUpdate","filter","f","lineStringToUpdate","subLine","nearestPoint","sourceCoords","unshift","coordsToUpdate","index","properties","coordsToKeep","featureIndex","computeRoutes","mapObjectIds","wheelChairAccessibleRouteOnly","warn","mergedRoute","walkingDistance","transportDistance","walkingTime","transportTime","distanceUnit","speed","dummySegment","push","id","routeData","getState","project","feats","queryRenderedFeatures","Edge","hasOwnProperty","mapObjectId","edgeData","lines","segmentOverview","maneuverType","SectionOverview","instructions","concat","startEdge","name","endEdge","j","segment","overviewSegment","updateRouteSource","updatedFeatureCollection","updateAnimateRouteSource","setActiveRoute","route","getActiveRoute","cancelAnimationFrame","updateFeaturesToAnimate","segmentNumber","whereDimensionForFeatures","routeSegment","lineFeaturesOfSegment","ls","nearest","toDist","location","segmentNumberToHighlight","updateFilters","highlightedSegmentNumber","segmentWhereDimension","ExitPortal","Static","whereDimension","routeFeaturesToUse","segmentPatchNumber","patchNumber","featureCollectionToDraw","includeOverviewFeatures","patchNumberForOverviewFeatures","updatedFeatures","getStartCoords","canvas","getCanvas","w","clientWidth","h","clientHeight","fitBoundsConfig","padding","top","bottom","left","right","duration","bearing","getBearing","pitch","getPitch","currentPatchFeatures","startCoords","sw","LngLat","ne","llb","LngLatBounds","element","extend","coord","fitBounds","transformedFeatures","forwardTransformed","reverseTransformed","bbox","clearRoute"],"sources":["../../../../../src/meta-atlas-sdk/utils/routing-visualizer/index.ts"],"sourcesContent":["import { cloneDeep } from 'lodash';\nimport maplibregl, { Feature, Map } from 'maplibre-gl';\nimport {\n Units, point as turfPoint,\n point,\n} from '@turf/helpers';\nimport length from '@turf/length';\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\n// import { distance } from \"@turf/distance\";\nimport * as turf from '@turf/turf';\nimport { transformTranslate } from \"@turf/transform-translate\";\nimport { FeatureCollection } from 'geojson';\nimport { DISTANCE_UNIT, WALK_SPEED, RouteDimension, UserPosition } from '../../MetaAtlasCore/routing-core/interfaces';\nimport {\n ManeuverType, Route, RouteSegment, createRoute, generateInstructions, generateOverviewSegment, getFeaturesForPatch, getLineStringFeaturesOfRouteSegment, getPatch, highlightRouteSegment,\n isOverviewSegment,\n} from '../../MetaAtlasCore/routing-core/routing-helpers';\nimport { routeAnimateLayers, routeLayers } from '../../MetaAtlasCore/routing-core/routeLayers';\nimport { lineString } from '@turf/turf';\nimport useRouteDataStore from '../routing-store';\n\nexport class RoutingVisualizer {\n map: Map;\n\n // Routing\n routeSourceName = 'routeGeojson';\n\n patchFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection;\n\n route: Route | null;\n\n highlightedSegmentNumber = -1;\n\n currentPatchNumber = -1;\n\n // Routing animation\n animateRouteSourceName = 'routeAnimateGeojson';\n\n animationFrameID = -1;\n\n animateRouteSegmentFeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection;\n\n animationStartTime = 0;\n\n end = {\n from: 0,\n to: 0,\n };\n\n main: any;\n\n constructor(sdk: any) {\n this.main = sdk\n }\n\n // MetaAtlasCore To Editor\n // eslint-disable-next-line class-methods-use-this\n getCurrentFocus() {\n return this.main.getCurrentFocus();\n }\n\n // eslint-disable-next-line class-methods-use-this\n filterWhereDimension(dimension: string) {\n this.main.focusTo(dimension, false);\n }\n\n // Routing\n setupRouting(map: Map) {\n this.map = map;\n this.map.addSource(this.routeSourceName, {\n type: 'geojson',\n data: this.patchFeatureCollection,\n });\n\n for (const layer of routeLayers) {\n (layer as any).source = this.routeSourceName;\n this.map.addLayer(layer as any);\n }\n\n // Animation data\n this.map.addSource(this.animateRouteSourceName, {\n type: 'geojson',\n data: this.animateRouteSegmentFeatureCollection,\n });\n\n for (const layer of routeAnimateLayers) {\n (layer as any).source = this.animateRouteSourceName;\n this.map.addLayer(layer as any);\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n async computeRoute(\n startMapObjectId: string,\n endMapObjectId: string,\n wheelChairAccessibleRouting = false,\n shouldAddOverviewSegment = true,\n indexOffset = 0, // offset for patch and segment numbers calculation\n ): Promise<Route> {\n this.currentPatchNumber = -1;\n\n const generatedRoute = await createRoute(\n startMapObjectId,\n endMapObjectId,\n wheelChairAccessibleRouting,\n shouldAddOverviewSegment,\n indexOffset,\n );\n\n console.log('internal generated: ', generatedRoute);\n\n // Generate textual instructions\n generateInstructions(generatedRoute);\n console.log(generatedRoute.segments);\n\n return generatedRoute;\n }\n\n handleAllRouteUpdate(allSegments: any, userPosition: UserPosition, segmentIndex) {\n // Get the LineString Feature of the route\n const featureLineStringToUpdate = allSegments[segmentIndex].features.filter(\n f => f.geometry.type === 'LineString'\n )[0];\n\n // Create a LineString with the coordinates of the route that would be updated accordingly\n const lineStringToUpdate = lineString(featureLineStringToUpdate.geometry.coordinates.slice(1));\n\n // Create a subset of LineString that contains the first two coords of the route which actually represent the route edge\n const subLine = lineString([\n featureLineStringToUpdate.geometry.coordinates[0],\n featureLineStringToUpdate.geometry.coordinates[1]\n ]);\n\n // Find the nearest point to the user position on the sub line and update the LineString.\n const nearestPoint = nearestPointOnLine(subLine, userPosition.sourceCoords);\n lineStringToUpdate.geometry.coordinates.unshift(userPosition.sourceCoords, nearestPoint.geometry.coordinates);\n const coordsToUpdate = lineStringToUpdate.geometry.coordinates;\n const index = nearestPoint.properties.index;\n const coordsToKeep = coordsToUpdate.slice(index);\n lineStringToUpdate.geometry.coordinates = coordsToKeep;\n lineStringToUpdate.geometry.coordinates.unshift(userPosition.sourceCoords);\n lineStringToUpdate.properties = featureLineStringToUpdate.properties;\n let featureIndex = -1;\n allSegments[segmentIndex].features.map((f, i) => {\n if (f.geometry.type === 'LineString') {\n featureIndex = i;\n }\n });\n\n // Update the new LineString in the route\n allSegments[segmentIndex].features[featureIndex] = lineStringToUpdate;\n allSegments[segmentIndex].coordinates = lineStringToUpdate.geometry.coordinates;\n }\n\n async computeRoutes(mapObjectIds: string[], wheelChairAccessibleRouteOnly = false): Promise<Route | undefined> {\n if (mapObjectIds.length < 2) {\n console.warn('Invalid array passed to computeRoutes');\n return undefined;\n }\n\n console.log('calling computeRoutes with mapObjectIds: ', mapObjectIds);\n\n const mergedRoute = {\n segments: [] as RouteSegment[],\n walkingDistance: 0,\n transportDistance: 0,\n walkingTime: 0,\n transportTime: 0,\n\n distanceUnit: DISTANCE_UNIT as Units,\n speed: WALK_SPEED,\n } as Route;\n\n // Dummy segment for overview segment\n const dummySegment = {};\n mergedRoute.segments.push(dummySegment as any);\n let indexOffset = 1; // Index set to 1, since overview segment will be added to 0th index\n\n for (let index = 0; index < mapObjectIds.length - 1; index += 1) {\n let startMapObjectId = mapObjectIds[index];\n const endMapObjectId = mapObjectIds[index + 1];\n\n const shouldAddOverviewSegment = true; // include overview segment in first route\n\n const id = mapObjectIds[0] as unknown as UserPosition;\n if (typeof mapObjectIds[0] !== 'string') {\n // Run queryRenderedFeatures.\n const routeData = useRouteDataStore.getState().data;\n const point = this.map.project([id.sourceCoords[0], id.sourceCoords[1]]);\n const feats = this.map.queryRenderedFeatures(point);\n feats.map(f => {\n if (routeData[RouteDimension.Edge].hasOwnProperty(f.properties.mapObjectId)) {\n const edgeData = routeData[RouteDimension.Edge][f.properties.mapObjectId];\n if (edgeData.lines.length > 0) {\n startMapObjectId = f.properties.mapObjectId;\n }\n }\n });\n }\n\n // eslint-disable-next-line no-await-in-loop\n const generatedRoute = await this.computeRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly, shouldAddOverviewSegment, indexOffset);\n const allSegments = generatedRoute.segments;\n // if (typeof mapObjectIds[index] !== 'string' && typeof startMapObjectId === 'string') {\n // //Handle SectionOverview:\n // this.handleAllRouteUpdate(allSegments, id as UserPosition, 0);\n\n // // Handle the second segment.\n // const secondSegmentFeatures = generatedRoute.segments[1].features;\n // if (secondSegmentFeatures.length < 3 && secondSegmentFeatures[0].geometry.type === 'Point') {\n // secondSegmentFeatures[0].geometry.coordinates = id.sourceCoords;\n // allSegments[1].coordinates = id.sourceCoords as any;\n // } else {\n // this.handleAllRouteUpdate(allSegments, id as UserPosition, 1);\n // }\n\n // // Handle third segment\n // const thirdSegmentFeatures = generatedRoute.segments[2].features;\n // if (thirdSegmentFeatures.length < 3 && thirdSegmentFeatures.geometry.type === 'Point') {\n // allSegments[1].features[0].geometry.coordinates = id.sourceCoords;\n // allSegments[1].coordinates = id.sourceCoords as any;\n // } else {\n // this.handleAllRouteUpdate(allSegments, id as UserPosition, 2);\n // }\n // }\n \n if (generatedRoute.segments.length > 0) {\n const segmentOverview = generatedRoute.segments[0];\n segmentOverview.maneuverType = ManeuverType.SectionOverview;\n segmentOverview.instructions = [`${segmentOverview.startEdge.name} to ${segmentOverview.endEdge.name}`];\n }\n for (let j = 0; j < generatedRoute.segments.length; j += 1) {\n const segment = generatedRoute.segments[j];\n mergedRoute.segments.push(segment);\n }\n mergedRoute.walkingDistance += generatedRoute.walkingDistance;\n mergedRoute.transportDistance += generatedRoute.transportDistance;\n mergedRoute.walkingTime += generatedRoute.walkingTime;\n mergedRoute.transportTime += generatedRoute.transportTime;\n\n // Increment by segment count\n indexOffset += generatedRoute.segments.length;\n }\n\n if (mergedRoute.segments.length > 1) { // Use 1 here because 1 dummy segment will always be included\n const overviewSegment = generateOverviewSegment(mergedRoute);\n mergedRoute.segments[0] = overviewSegment;\n } else {\n mergedRoute.segments.length = 0; // Remove dummy segment\n }\n\n console.log('merged route: ', mergedRoute);\n\n return mergedRoute;\n }\n\n updateRouteSource(updatedFeatureCollection: FeatureCollection) {\n if (!this.map) return false;\n this.patchFeatureCollection = updatedFeatureCollection;\n const routeSource = (this.map.getSource(this.routeSourceName) as maplibregl.GeoJSONSource);\n if (routeSource) routeSource.setData(updatedFeatureCollection);\n\n return true;\n }\n\n updateAnimateRouteSource(updatedFeatureCollection: FeatureCollection) {\n if (!this.map) return false;\n this.animateRouteSegmentFeatureCollection = updatedFeatureCollection;\n const routeSource = (this.map.getSource(this.animateRouteSourceName) as maplibregl.GeoJSONSource);\n if (routeSource) routeSource.setData(updatedFeatureCollection);\n\n return true;\n }\n\n setActiveRoute(route: Route) {\n this.route = route;\n }\n\n getActiveRoute(): Route | null {\n return this.route;\n }\n\n resetRouteSegmentAnimation() {\n this.animationStartTime = Date.now();\n cancelAnimationFrame(this.animationFrameID);\n if (this.animateRouteSegmentFeatureCollection.features.length > 0) {\n const routeFeature = this.animateRouteSegmentFeatureCollection.features[0] as unknown as Feature;\n //@ts-ignore\n if (routeFeature.geometry.type === 'LineString') this.animateHighlightedRouteSegment();\n }\n }\n\n animateHighlightedRouteSegment = () => {\n const routeFeature = cloneDeep(this.animateRouteSegmentFeatureCollection.features[0]) as Feature;\n if (routeFeature) {\n const currentTime = Date.now();\n const elapsed = currentTime - this.animationStartTime;\n\n const writeToSource = (feature: Feature, coords: []) => {\n //@ts-ignore\n feature.geometry.coordinates = coords;\n const routeSource = (this.map.getSource(this.animateRouteSourceName) as maplibregl.GeoJSONSource);\n if (routeSource) {\n //@ts-ignore\n routeSource.setData({\n type: 'FeatureCollection',\n features: [feature],\n } as FeatureCollection);\n }\n };\n const animationDuration = 2000;\n if (elapsed < animationDuration) {\n const progress = 1 - elapsed / animationDuration;\n\n //@ts-ignore\n const fullRoute = routeFeature.geometry.coordinates;\n const { end } = this;\n\n let currentEnd;\n if (progress > 0.5) {\n const customProgress = 2 * (progress - 0.5); // map 0.5 - 1 to 0 - 1 range\n currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;\n } else {\n const customProgress = progress * 2; // map 0 - 0.5 to 0 - 1 range\n currentEnd = end.from * (1.0 - customProgress) + customProgress * end.to;\n }\n\n // calculate distance along the line using current animation percentage\n // percentage travels 1 - 0\n let prevsum = 0;\n let actsum = 0;\n let i = fullRoute.length - 1;\n while (actsum < currentEnd && i > 0) {\n prevsum = actsum;\n actsum += turf.distance(point(fullRoute[i]), point(fullRoute[i - 1]));\n i -= 1;\n }\n if (progress > 0.5) {\n // Reverse animation\n // if (actsum <= currentEnd) {\n // const actRoute = [\n // ...fullRoute.slice(fullRoute.length - 2, fullRoute.length),\n // ];\n // return {fullRoute, end: {...end, current: currentEnd}, actRoute};\n // }\n\n // Return coordinates from line start to current percentage point\n const r = (currentEnd - prevsum) / (actsum - prevsum);\n const or = 1.0 - r;\n\n const actRoute = [\n ...fullRoute.slice(0, i + 1),\n [\n fullRoute[i][0] * r + fullRoute[i + 1][0] * or,\n fullRoute[i][1] * r + fullRoute[i + 1][1] * or,\n ],\n ];\n\n writeToSource(routeFeature, actRoute as any);\n } else {\n // Forward animation\n if (actsum <= currentEnd) {\n // Return last two points of the line as final result\n const actRoute = [\n ...fullRoute.slice(fullRoute.length - 2, fullRoute.length),\n ];\n\n writeToSource(routeFeature, actRoute as any);\n }\n\n // Return coordinates from line end to current percentage point\n const r = (currentEnd - prevsum) / (actsum - prevsum);\n const or = 1.0 - r;\n\n const actRoute = [\n [\n fullRoute[i][0] * r + fullRoute[i + 1][0] * or,\n fullRoute[i][1] * r + fullRoute[i + 1][1] * or,\n ],\n ...fullRoute.slice(i + 1, fullRoute.length),\n ];\n\n writeToSource(routeFeature, actRoute as any);\n }\n\n this.animationFrameID = requestAnimationFrame(\n this.animateHighlightedRouteSegment,\n );\n } else {\n this.resetRouteSegmentAnimation();\n }\n }\n };\n\n updateFeaturesToAnimate(segmentNumber: number, whereDimensionForFeatures: string) {\n if (this.route && this.route.segments.length > segmentNumber) {\n const routeSegment = this.route.segments[segmentNumber];\n // set features for animated segment source\n if (routeSegment.features.length > 0) {\n const lineFeaturesOfSegment =\n // include where dimension here?\n getLineStringFeaturesOfRouteSegment(\n routeSegment,\n whereDimensionForFeatures,\n );\n\n if (lineFeaturesOfSegment.length > 0) {\n this.updateAnimateRouteSource({\n type: 'FeatureCollection',\n features: lineFeaturesOfSegment,\n } as FeatureCollection);\n\n const ls = lineFeaturesOfSegment[0];\n //@ts-ignore\n const nearest = nearestPointOnLine(ls as any, point(lineFeaturesOfSegment[0].geometry.coordinates[0]));\n const toDist = length(ls) - nearest.properties.location;\n this.end = {\n from: 0,\n to: toDist,\n };\n } else {\n this.updateAnimateRouteSource({\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection);\n }\n\n this.resetRouteSegmentAnimation();\n }\n }\n }\n\n highlightRouteSegment(segmentNumberToHighlight: number, updateFilters = true) {\n const { route } = this;\n if (route && route.segments.length > segmentNumberToHighlight) {\n if (\n route.segments[segmentNumberToHighlight].coordinates.length > 0\n ) {\n this.highlightedSegmentNumber = segmentNumberToHighlight;\n const routeSegment = route.segments[segmentNumberToHighlight];\n\n const segmentWhereDimension = routeSegment.maneuverType === ManeuverType.ExitPortal || routeSegment.maneuverType === ManeuverType.Static\n ? routeSegment.endEdge.whereDimension\n : routeSegment.startEdge.whereDimension;\n let routeFeaturesToUse = this.patchFeatureCollection.features;\n\n // update visible route features if required\n const segmentPatchNumber = (\n routeSegment.features[0].properties as any\n ).patchNumber;\n if (this.currentPatchNumber !== segmentPatchNumber) {\n this.currentPatchNumber = segmentPatchNumber;\n const featureCollectionToDraw = {\n type: 'FeatureCollection',\n features: getFeaturesForPatch(route, segmentPatchNumber, {\n includeOverviewFeatures: isOverviewSegment(routeSegment),\n patchNumberForOverviewFeatures: segmentPatchNumber,\n }),\n } as FeatureCollection;\n\n routeFeaturesToUse = featureCollectionToDraw.features;\n }\n\n if (\n segmentWhereDimension\n && segmentWhereDimension !== this.getCurrentFocus()\n && updateFilters\n ) {\n this.filterWhereDimension(segmentWhereDimension);\n }\n\n // update highlighted route segment\n const updatedFeatures = highlightRouteSegment(\n routeFeaturesToUse as any,\n segmentNumberToHighlight,\n );\n\n this.updateRouteSource({\n type: 'FeatureCollection',\n features: updatedFeatures,\n });\n\n if (!isOverviewSegment(routeSegment)) {\n this.updateFeaturesToAnimate(\n segmentNumberToHighlight,\n segmentWhereDimension,\n );\n } else {\n // clear animation source\n this.updateAnimateRouteSource({\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection);\n }\n\n // animate camera to segment\n if (routeSegment) {\n const getStartCoords = (feature: Feature) => {\n //@ts-ignore\n if (feature.geometry.type === 'Point') {\n //@ts-ignore\n return feature.geometry.coordinates;\n }\n\n //@ts-ignore\n return feature.geometry.coordinates[0];\n };\n\n const canvas = this.map.getCanvas();\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n const fitBoundsConfig = {\n padding: {\n top: h * 0.2, bottom: h * 0.2, left: w * 0.2, right: w * 0.2,\n },\n duration: 1000,\n bearing: this.map.getBearing(),\n pitch: this.map.getPitch(),\n };\n if (routeSegment.coordinates.length > 1) {\n const currentPatchFeatures = getPatch(route, routeSegment.patchNumber);\n const startCoords = getStartCoords(currentPatchFeatures[0] as any);\n // let index = 0;\n // for (index = 0; index < currentPatchFeatures.length; index++) {\n // const element = currentPatchFeatures[index];\n // if (element.properties.segmentNumber === segmentNumberToHighlight) {\n // startCoords = getStartCoords(element);\n // }\n // }\n const sw = new maplibregl.LngLat(startCoords[0], startCoords[1]);\n const ne = new maplibregl.LngLat(startCoords[0], startCoords[1]);\n const llb = new maplibregl.LngLatBounds(sw, ne);\n for (let index = 0; index < currentPatchFeatures.length; index++) {\n const element = currentPatchFeatures[index];\n if (element.geometry.type === 'Point') {\n llb.extend(element.geometry.coordinates as any);\n } else {\n //@ts-ignore\n for (const coord of element.geometry.coordinates) {\n llb.extend(coord);\n }\n }\n }\n\n this.map.fitBounds(\n llb,\n fitBoundsConfig,\n );\n } else {\n // Translate the point slightly to get another point which can used for the fitBounds function.\n const transformedFeatures = {\n type: 'FeatureCollection',\n features: [turfPoint(routeSegment.coordinates[0])],\n } as FeatureCollection;\n const forwardTransformed = transformTranslate(\n transformedFeatures as any,\n 0.025,\n 3,\n ).features[0].geometry.coordinates;\n\n const reverseTransformed = transformTranslate(\n transformedFeatures as any,\n -0.025,\n -3,\n ).features[0].geometry.coordinates;\n\n const bbox = [reverseTransformed, forwardTransformed];\n this.map.fitBounds(\n bbox as any,\n fitBoundsConfig,\n );\n }\n }\n } else {\n console.log('at vertical portal segment, ignoring!');\n }\n\n console.log(route.segments[segmentNumberToHighlight].instructions);\n } else {\n console.warn(\n 'Invalid segment number passed to highlightRouteSegment',\n );\n }\n }\n\n clearRoute() {\n const featureCollectionToDraw = {\n type: 'FeatureCollection',\n features: [],\n } as FeatureCollection;\n\n this.updateRouteSource(featureCollectionToDraw);\n this.updateAnimateRouteSource(featureCollectionToDraw);\n this.route = null;\n cancelAnimationFrame(this.animationFrameID);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -65,20 +65,20 @@ export function MetaAtlasMap(_ref) {
65
65
  // Initialize SDK instance
66
66
  useEffect(() => {
67
67
  const handleLoad = () => {
68
- onLoad?.();
68
+ onLoad === null || onLoad === void 0 || onLoad();
69
69
  };
70
70
  const handleLoadFail = errorMessage => {
71
71
  setError(errorMessage);
72
72
  setMapCoreReady(false);
73
- onLoadFail?.(errorMessage);
73
+ onLoadFail === null || onLoadFail === void 0 || onLoadFail(errorMessage);
74
74
  };
75
75
  const handleRoutingStatusUpdate = isReady => {
76
76
  setRoutingReady(isReady);
77
- onRoutingStatusUpdate?.(isReady);
77
+ onRoutingStatusUpdate === null || onRoutingStatusUpdate === void 0 || onRoutingStatusUpdate(isReady);
78
78
  };
79
79
  const handleSearchStatusUpdate = isReady => {
80
80
  setSearchReady(isReady);
81
- onSearchStatusUpdate?.(isReady);
81
+ onSearchStatusUpdate === null || onSearchStatusUpdate === void 0 || onSearchStatusUpdate(isReady);
82
82
  };
83
83
  const sdkInstance = new MetaAtlasSdk(accessToken, secretKey, handleLoad, handleLoadFail, handleRoutingStatusUpdate, handleSearchStatusUpdate);
84
84
  setSdk(sdkInstance);
@@ -1 +1 @@
1
- {"version":3,"file":"MetaAtlasMap.js","names":["useRef","useEffect","useCallback","useMemo","Map","maplibregl","MetaAtlasSdk","DEFAULT_MAP_STYLE","useMetaAtlasStore","useFocus","jsx","_jsx","MetaAtlasMap","_ref","accessToken","secretKey","role","onLoad","onLoadFail","onRoutingStatusUpdate","_loaded","onSearchStatusUpdate","initialViewState","initialViewStateProp","style","children","mapRef","sdk","state","mapCoreReady","setSdk","setMapCoreReady","setRoutingReady","setSearchReady","setError","getRootSiteCameraProps","isReady","defaultViewState","cameraProps","longitude","latitude","zoom","bearing","pitch","handleLoad","handleLoadFail","errorMessage","handleRoutingStatusUpdate","handleSearchStatusUpdate","sdkInstance","handleMapLoad","current","console","log","mapInstance","getMap","setupMap","ref","mapLib","width","height","mapStyle"],"sources":["../../../src/react/MetaAtlasMap.tsx"],"sourcesContent":["import { useRef, useEffect, useCallback, useMemo } from 'react';\nimport { Map, MapRef } from 'react-map-gl/maplibre';\nimport maplibregl from 'maplibre-gl';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { MetaAtlasSdk, DEFAULT_MAP_STYLE } from '../meta-atlas-sdk/meta-atlas-sdk';\nimport { useMetaAtlasStore } from './stores/useMetaAtlasStore';\nimport { MetaAtlasMapProps } from './types';\nimport { useFocus } from './hooks/useFocus';\n\nexport function MetaAtlasMap({\n accessToken,\n secretKey,\n role = 'changipublic',\n onLoad,\n onLoadFail,\n onRoutingStatusUpdate = (_loaded: boolean) => {},\n onSearchStatusUpdate = (_loaded: boolean) => {},\n initialViewState: initialViewStateProp,\n style,\n children,\n}: MetaAtlasMapProps) {\n const mapRef = useRef<MapRef>(null);\n \n // Get store state and actions\n const sdk = useMetaAtlasStore((state) => state.sdk);\n const mapCoreReady = useMetaAtlasStore((state) => state.mapCoreReady);\n const setSdk = useMetaAtlasStore((state) => state.setSdk);\n const setMapCoreReady = useMetaAtlasStore((state) => state.setMapCoreReady);\n const setRoutingReady = useMetaAtlasStore((state) => state.setRoutingReady);\n const setSearchReady = useMetaAtlasStore((state) => state.setSearchReady);\n const setError = useMetaAtlasStore((state) => state.setError);\n\n // Get camera props from focusTree when not provided as prop\n const { getRootSiteCameraProps, isReady } = useFocus();\n \n // Default fallback view state\n const defaultViewState = null;\n\n // Compute initialViewState: use prop if provided, otherwise try to get from focusTree\n const initialViewState = useMemo(() => {\n // If prop is provided, use it\n if (initialViewStateProp) {\n return initialViewStateProp;\n }\n \n // Try to get from focusTree root site camera config\n const cameraProps = getRootSiteCameraProps('web');\n if (cameraProps) {\n return {\n longitude: cameraProps.longitude,\n latitude: cameraProps.latitude,\n zoom: cameraProps.zoom,\n bearing: cameraProps.bearing,\n pitch: cameraProps.pitch,\n };\n }\n \n // Fallback to default\n return defaultViewState;\n }, [initialViewStateProp, isReady, getRootSiteCameraProps]);\n\n // Initialize SDK instance\n useEffect(() => {\n const handleLoad = () => {\n onLoad?.();\n };\n\n const handleLoadFail = (errorMessage: string) => {\n setError(errorMessage);\n setMapCoreReady(false);\n onLoadFail?.(errorMessage);\n };\n\n const handleRoutingStatusUpdate = (isReady: boolean) => {\n setRoutingReady(isReady);\n onRoutingStatusUpdate?.(isReady);\n };\n\n const handleSearchStatusUpdate = (isReady: boolean) => {\n setSearchReady(isReady);\n onSearchStatusUpdate?.(isReady);\n };\n\n const sdkInstance = new MetaAtlasSdk(\n accessToken,\n secretKey,\n handleLoad,\n handleLoadFail,\n handleRoutingStatusUpdate,\n handleSearchStatusUpdate\n );\n\n setSdk(sdkInstance);\n\n return () => {\n // Cleanup if needed\n // Note: SDK cleanup logic can be added here if needed\n };\n }, [accessToken, secretKey]);\n\n // Attach SDK to map instance when map is ready\n const handleMapLoad = useCallback(() => {\n if (mapRef.current && sdk && !mapCoreReady) {\n console.log('map load', mapRef.current);\n const mapInstance = mapRef.current.getMap();\n \n // Initialize SDK with the map instance\n sdk.setupMap(role, mapInstance);\n \n setMapCoreReady(true); \n }\n }, [sdk, setMapCoreReady, mapCoreReady]);\n \n // Don't render map until initialViewState is available\n if (!initialViewState) {\n return null;\n }\n\n return (\n <Map\n ref={mapRef}\n mapLib={maplibregl}\n initialViewState={initialViewState}\n onLoad={handleMapLoad}\n style={style || { width: '100%', height: '100%' }}\n mapStyle={DEFAULT_MAP_STYLE}\n >\n {children}\n </Map>\n );\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetaAtlasMap.js","names":["useRef","useEffect","useCallback","useMemo","Map","maplibregl","MetaAtlasSdk","DEFAULT_MAP_STYLE","useMetaAtlasStore","useFocus","jsx","_jsx","MetaAtlasMap","_ref","accessToken","secretKey","role","onLoad","onLoadFail","onRoutingStatusUpdate","_loaded","onSearchStatusUpdate","initialViewState","initialViewStateProp","style","children","mapRef","sdk","state","mapCoreReady","setSdk","setMapCoreReady","setRoutingReady","setSearchReady","setError","getRootSiteCameraProps","isReady","defaultViewState","cameraProps","longitude","latitude","zoom","bearing","pitch","handleLoad","handleLoadFail","errorMessage","handleRoutingStatusUpdate","handleSearchStatusUpdate","sdkInstance","handleMapLoad","current","console","log","mapInstance","getMap","setupMap","ref","mapLib","width","height","mapStyle"],"sources":["../../../src/react/MetaAtlasMap.tsx"],"sourcesContent":["import { useRef, useEffect, useCallback, useMemo } from 'react';\nimport { Map, MapRef } from 'react-map-gl/maplibre';\nimport maplibregl from 'maplibre-gl';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { MetaAtlasSdk, DEFAULT_MAP_STYLE } from '../meta-atlas-sdk/meta-atlas-sdk';\nimport { useMetaAtlasStore } from './stores/useMetaAtlasStore';\nimport { MetaAtlasMapProps } from './types';\nimport { useFocus } from './hooks/useFocus';\n\nexport function MetaAtlasMap({\n accessToken,\n secretKey,\n role = 'changipublic',\n onLoad,\n onLoadFail,\n onRoutingStatusUpdate = (_loaded: boolean) => {},\n onSearchStatusUpdate = (_loaded: boolean) => {},\n initialViewState: initialViewStateProp,\n style,\n children,\n}: MetaAtlasMapProps) {\n const mapRef = useRef<MapRef>(null);\n \n // Get store state and actions\n const sdk = useMetaAtlasStore((state) => state.sdk);\n const mapCoreReady = useMetaAtlasStore((state) => state.mapCoreReady);\n const setSdk = useMetaAtlasStore((state) => state.setSdk);\n const setMapCoreReady = useMetaAtlasStore((state) => state.setMapCoreReady);\n const setRoutingReady = useMetaAtlasStore((state) => state.setRoutingReady);\n const setSearchReady = useMetaAtlasStore((state) => state.setSearchReady);\n const setError = useMetaAtlasStore((state) => state.setError);\n\n // Get camera props from focusTree when not provided as prop\n const { getRootSiteCameraProps, isReady } = useFocus();\n \n // Default fallback view state\n const defaultViewState = null;\n\n // Compute initialViewState: use prop if provided, otherwise try to get from focusTree\n const initialViewState = useMemo(() => {\n // If prop is provided, use it\n if (initialViewStateProp) {\n return initialViewStateProp;\n }\n \n // Try to get from focusTree root site camera config\n const cameraProps = getRootSiteCameraProps('web');\n if (cameraProps) {\n return {\n longitude: cameraProps.longitude,\n latitude: cameraProps.latitude,\n zoom: cameraProps.zoom,\n bearing: cameraProps.bearing,\n pitch: cameraProps.pitch,\n };\n }\n \n // Fallback to default\n return defaultViewState;\n }, [initialViewStateProp, isReady, getRootSiteCameraProps]);\n\n // Initialize SDK instance\n useEffect(() => {\n const handleLoad = () => {\n onLoad?.();\n };\n\n const handleLoadFail = (errorMessage: string) => {\n setError(errorMessage);\n setMapCoreReady(false);\n onLoadFail?.(errorMessage);\n };\n\n const handleRoutingStatusUpdate = (isReady: boolean) => {\n setRoutingReady(isReady);\n onRoutingStatusUpdate?.(isReady);\n };\n\n const handleSearchStatusUpdate = (isReady: boolean) => {\n setSearchReady(isReady);\n onSearchStatusUpdate?.(isReady);\n };\n\n const sdkInstance = new MetaAtlasSdk(\n accessToken,\n secretKey,\n handleLoad,\n handleLoadFail,\n handleRoutingStatusUpdate,\n handleSearchStatusUpdate\n );\n\n setSdk(sdkInstance);\n\n return () => {\n // Cleanup if needed\n // Note: SDK cleanup logic can be added here if needed\n };\n }, [accessToken, secretKey]);\n\n // Attach SDK to map instance when map is ready\n const handleMapLoad = useCallback(() => {\n if (mapRef.current && sdk && !mapCoreReady) {\n console.log('map load', mapRef.current);\n const mapInstance = mapRef.current.getMap();\n \n // Initialize SDK with the map instance\n sdk.setupMap(role, mapInstance as any);\n \n setMapCoreReady(true); \n }\n }, [sdk, setMapCoreReady, mapCoreReady]);\n \n // Don't render map until initialViewState is available\n if (!initialViewState) {\n return null;\n }\n\n return (\n <Map\n ref={mapRef}\n mapLib={maplibregl as any}\n initialViewState={initialViewState}\n onLoad={handleMapLoad}\n style={style || { width: '100%', height: '100%' }}\n mapStyle={DEFAULT_MAP_STYLE}\n >\n {children}\n </Map>\n );\n}\n\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,SAAS,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAC/D,SAASC,GAAG,QAAgB,uBAAuB;AACnD,OAAOC,UAAU,MAAM,aAAa;AACpC,OAAO,kCAAkC;AAAC,SACjCC,YAAY,EAAEC,iBAAiB;AAAA,SAC/BC,iBAAiB;AAAA,SAEjBC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEjB,OAAO,SAASC,YAAYA,CAAAC,IAAA,EAWN;EAAA,IAXO;IAC3BC,WAAW;IACXC,SAAS;IACTC,IAAI,GAAG,cAAc;IACrBC,MAAM;IACNC,UAAU;IACVC,qBAAqB,GAAIC,OAAgB,IAAK,CAAC,CAAC;IAChDC,oBAAoB,GAAID,OAAgB,IAAK,CAAC,CAAC;IAC/CE,gBAAgB,EAAEC,oBAAoB;IACtCC,KAAK;IACLC;EACiB,CAAC,GAAAZ,IAAA;EAClB,MAAMa,MAAM,GAAG1B,MAAM,CAAS,IAAI,CAAC;;EAEnC;EACA,MAAM2B,GAAG,GAAGnB,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACD,GAAG,CAAC;EACnD,MAAME,YAAY,GAAGrB,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACC,YAAY,CAAC;EACrE,MAAMC,MAAM,GAAGtB,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACE,MAAM,CAAC;EACzD,MAAMC,eAAe,GAAGvB,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACG,eAAe,CAAC;EAC3E,MAAMC,eAAe,GAAGxB,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACI,eAAe,CAAC;EAC3E,MAAMC,cAAc,GAAGzB,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACK,cAAc,CAAC;EACzE,MAAMC,QAAQ,GAAG1B,iBAAiB,CAAEoB,KAAK,IAAKA,KAAK,CAACM,QAAQ,CAAC;;EAE7D;EACA,MAAM;IAAEC,sBAAsB;IAAEC;EAAQ,CAAC,GAAG3B,QAAQ,CAAC,CAAC;;EAEtD;EACA,MAAM4B,gBAAgB,GAAG,IAAI;;EAE7B;EACA,MAAMf,gBAAgB,GAAGnB,OAAO,CAAC,MAAM;IACrC;IACA,IAAIoB,oBAAoB,EAAE;MACxB,OAAOA,oBAAoB;IAC7B;;IAEA;IACA,MAAMe,WAAW,GAAGH,sBAAsB,CAAC,KAAK,CAAC;IACjD,IAAIG,WAAW,EAAE;MACf,OAAO;QACLC,SAAS,EAAED,WAAW,CAACC,SAAS;QAChCC,QAAQ,EAAEF,WAAW,CAACE,QAAQ;QAC9BC,IAAI,EAAEH,WAAW,CAACG,IAAI;QACtBC,OAAO,EAAEJ,WAAW,CAACI,OAAO;QAC5BC,KAAK,EAAEL,WAAW,CAACK;MACrB,CAAC;IACH;;IAEA;IACA,OAAON,gBAAgB;EACzB,CAAC,EAAE,CAACd,oBAAoB,EAAEa,OAAO,EAAED,sBAAsB,CAAC,CAAC;;EAE3D;EACAlC,SAAS,CAAC,MAAM;IACd,MAAM2C,UAAU,GAAGA,CAAA,KAAM;MACvB3B,MAAM,aAANA,MAAM,eAANA,MAAM,CAAG,CAAC;IACZ,CAAC;IAED,MAAM4B,cAAc,GAAIC,YAAoB,IAAK;MAC/CZ,QAAQ,CAACY,YAAY,CAAC;MACtBf,eAAe,CAAC,KAAK,CAAC;MACtBb,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAG4B,YAAY,CAAC;IAC5B,CAAC;IAED,MAAMC,yBAAyB,GAAIX,OAAgB,IAAK;MACtDJ,eAAe,CAACI,OAAO,CAAC;MACxBjB,qBAAqB,aAArBA,qBAAqB,eAArBA,qBAAqB,CAAGiB,OAAO,CAAC;IAClC,CAAC;IAED,MAAMY,wBAAwB,GAAIZ,OAAgB,IAAK;MACrDH,cAAc,CAACG,OAAO,CAAC;MACvBf,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAGe,OAAO,CAAC;IACjC,CAAC;IAED,MAAMa,WAAW,GAAG,IAAI3C,YAAY,CAClCQ,WAAW,EACXC,SAAS,EACT6B,UAAU,EACVC,cAAc,EACdE,yBAAyB,EACzBC,wBACF,CAAC;IAEDlB,MAAM,CAACmB,WAAW,CAAC;IAEnB,OAAO,MAAM;MACX;MACA;IAAA,CACD;EACH,CAAC,EAAE,CAACnC,WAAW,EAAEC,SAAS,CAAC,CAAC;;EAE5B;EACA,MAAMmC,aAAa,GAAGhD,WAAW,CAAC,MAAM;IACtC,IAAIwB,MAAM,CAACyB,OAAO,IAAIxB,GAAG,IAAI,CAACE,YAAY,EAAE;MAC1CuB,OAAO,CAACC,GAAG,CAAC,UAAU,EAAE3B,MAAM,CAACyB,OAAO,CAAC;MACvC,MAAMG,WAAW,GAAG5B,MAAM,CAACyB,OAAO,CAACI,MAAM,CAAC,CAAC;;MAE3C;MACA5B,GAAG,CAAC6B,QAAQ,CAACxC,IAAI,EAAEsC,WAAkB,CAAC;MAEtCvB,eAAe,CAAC,IAAI,CAAC;IACvB;EACF,CAAC,EAAE,CAACJ,GAAG,EAAEI,eAAe,EAAEF,YAAY,CAAC,CAAC;;EAExC;EACA,IAAI,CAACP,gBAAgB,EAAE;IACrB,OAAO,IAAI;EACb;EAEA,oBACEX,IAAA,CAACP,GAAG;IACFqD,GAAG,EAAE/B,MAAO;IACZgC,MAAM,EAAErD,UAAkB;IAC1BiB,gBAAgB,EAAEA,gBAAiB;IACnCL,MAAM,EAAEiC,aAAc;IACtB1B,KAAK,EAAEA,KAAK,IAAI;MAAEmC,KAAK,EAAE,MAAM;MAAEC,MAAM,EAAE;IAAO,CAAE;IAClDC,QAAQ,EAAEtD,iBAAkB;IAAAkB,QAAA,EAE3BA;EAAQ,CACN,CAAC;AAEV","ignoreList":[]}
@@ -1,3 +1,6 @@
1
+ const _excluded = ["clickEvent"];
2
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
3
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
1
4
  import { useEffect, useRef } from 'react';
2
5
  import { useMetaAtlas } from "../useMetaAtlas/index.js";
3
6
  import { useMetaAtlasStore } from "../../stores/useMetaAtlasStore.js";
@@ -28,9 +31,9 @@ export function useMapEvents() {
28
31
 
29
32
  // Extract metaFeature part (without clickEvent) and update store
30
33
  const {
31
- clickEvent,
32
- ...metaFeaturePart
33
- } = clickedFeature;
34
+ clickEvent
35
+ } = clickedFeature,
36
+ metaFeaturePart = _objectWithoutProperties(clickedFeature, _excluded);
34
37
  useMapDataStore.getState().setActiveObject(metaFeaturePart);
35
38
  console.log('clickHandler clickedMetaFeature: ', clickedFeature);
36
39
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useEffect","useRef","useMetaAtlas","useMetaAtlasStore","useMapDataStore","useMapEvents","map","getLastClickedFeature","mapCoreReady","state","clickHandlersRef","Set","loadHandlersRef","moveEndHandlersRef","clickOnceHandlersRef","clickHandler","e","clickedFeature","clickEvent","metaFeaturePart","getState","setActiveObject","console","log","current","forEach","handler","size","clear","on","loadHandler","moveEndHandler","off","onMapClick","add","delete","onMapLoad","onMapMoveEnd","onceMapClick","isReady"],"sources":["../../../../../src/react/hooks/useMapEvents/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useMetaAtlas } from '../useMetaAtlas';\nimport { UseMapEventsReturn } from './types';\nimport * as maplibregl from 'maplibre-gl';\nimport { useMetaAtlasStore } from '../../stores/useMetaAtlasStore';\nimport { clickedMetaFeature } from '../../../meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core';\nimport { useMapDataStore } from '../../stores/useMapDataStore';\n\nexport function useMapEvents(): UseMapEventsReturn {\n const { map, getLastClickedFeature } = useMetaAtlas();\n const mapCoreReady = useMetaAtlasStore((state) => state.mapCoreReady);\n const clickHandlersRef = useRef<Set<(feature: clickedMetaFeature) => void>>(new Set());\n const loadHandlersRef = useRef<Set<() => void>>(new Set());\n const moveEndHandlersRef = useRef<Set<() => void>>(new Set());\n\n // ONCE handlers\n const clickOnceHandlersRef = useRef<Set<(feature: clickedMetaFeature) => void>>(new Set());\n\n // Attach event listeners when map is ready\n useEffect(() => {\n if (!map || !mapCoreReady) return;\n\n // Click event - get clickedMetaFeature from SDK (includes metaFeature + raw click event)\n const clickHandler = (e: maplibregl.MapMouseEvent) => {\n // Get the clickedMetaFeature from SDK's getLastClickedFeature\n // This includes both the metaFeature data and the raw click event\n const clickedFeature = getLastClickedFeature();\n if (!clickedFeature.clickEvent) clickedFeature.clickEvent = e;\n \n // Extract metaFeature part (without clickEvent) and update store\n const { clickEvent, ...metaFeaturePart } = clickedFeature;\n useMapDataStore.getState().setActiveObject(metaFeaturePart);\n \n console.log('clickHandler clickedMetaFeature: ', clickedFeature);\n\n // normal handlers\n clickHandlersRef.current.forEach(handler => handler(clickedFeature));\n\n // --- ONCE handlers ---\n if (clickOnceHandlersRef.current.size > 0) {\n clickOnceHandlersRef.current.forEach(handler => handler(clickedFeature));\n clickOnceHandlersRef.current.clear();\n }\n };\n map.on('click', clickHandler);\n\n // Load event\n const loadHandler = () => {\n loadHandlersRef.current.forEach(handler => handler());\n };\n map.on('load', loadHandler);\n\n // MoveEnd event\n const moveEndHandler = () => {\n moveEndHandlersRef.current.forEach(handler => handler());\n };\n map.on('moveend', moveEndHandler);\n\n return () => {\n map.off('click', clickHandler);\n map.off('load', loadHandler);\n map.off('moveend', moveEndHandler);\n };\n }, [map, mapCoreReady]);\n\n const onMapClick = (handler: (feature: clickedMetaFeature) => void) => {\n clickHandlersRef.current.add(handler);\n return () => {\n clickHandlersRef.current.delete(handler);\n };\n };\n\n const onMapLoad = (handler: () => void) => {\n loadHandlersRef.current.add(handler);\n return () => {\n loadHandlersRef.current.delete(handler);\n };\n };\n\n const onMapMoveEnd = (handler: () => void) => {\n moveEndHandlersRef.current.add(handler);\n return () => {\n moveEndHandlersRef.current.delete(handler);\n };\n };\n\n // ONCE registration methods\n const onceMapClick = (handler: (feature: clickedMetaFeature) => void) => {\n clickOnceHandlersRef.current.add(handler);\n };\n\n\n return {\n onMapClick,\n onMapLoad,\n onMapMoveEnd,\n onceMapClick,\n isReady: mapCoreReady,\n };\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAkB,OAAO;AAAC,SAC3CC,YAAY;AAAA,SAGZC,iBAAiB;AAAA,SAEjBC,eAAe;AAExB,OAAO,SAASC,YAAYA,CAAA,EAAuB;EACjD,MAAM;IAAEC,GAAG;IAAEC;EAAsB,CAAC,GAAGL,YAAY,CAAC,CAAC;EACrD,MAAMM,YAAY,GAAGL,iBAAiB,CAAEM,KAAK,IAAKA,KAAK,CAACD,YAAY,CAAC;EACrE,MAAME,gBAAgB,GAAGT,MAAM,CAA6C,IAAIU,GAAG,CAAC,CAAC,CAAC;EACtF,MAAMC,eAAe,GAAGX,MAAM,CAAkB,IAAIU,GAAG,CAAC,CAAC,CAAC;EAC1D,MAAME,kBAAkB,GAAGZ,MAAM,CAAkB,IAAIU,GAAG,CAAC,CAAC,CAAC;;EAE7D;EACA,MAAMG,oBAAoB,GAAGb,MAAM,CAA6C,IAAIU,GAAG,CAAC,CAAC,CAAC;;EAE1F;EACAX,SAAS,CAAC,MAAM;IACd,IAAI,CAACM,GAAG,IAAI,CAACE,YAAY,EAAE;;IAE3B;IACA,MAAMO,YAAY,GAAIC,CAA2B,IAAK;MACpD;MACA;MACA,MAAMC,cAAc,GAAGV,qBAAqB,CAAC,CAAC;MAC9C,IAAI,CAACU,cAAc,CAACC,UAAU,EAAED,cAAc,CAACC,UAAU,GAAGF,CAAC;;MAE7D;MACA,MAAM;QAAEE,UAAU;QAAE,GAAGC;MAAgB,CAAC,GAAGF,cAAc;MACzDb,eAAe,CAACgB,QAAQ,CAAC,CAAC,CAACC,eAAe,CAACF,eAAe,CAAC;MAE3DG,OAAO,CAACC,GAAG,CAAC,mCAAmC,EAAEN,cAAc,CAAC;;MAEhE;MACAP,gBAAgB,CAACc,OAAO,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAACT,cAAc,CAAC,CAAC;;MAEpE;MACA,IAAIH,oBAAoB,CAACU,OAAO,CAACG,IAAI,GAAG,CAAC,EAAE;QACzCb,oBAAoB,CAACU,OAAO,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAACT,cAAc,CAAC,CAAC;QACxEH,oBAAoB,CAACU,OAAO,CAACI,KAAK,CAAC,CAAC;MACtC;IACF,CAAC;IACDtB,GAAG,CAACuB,EAAE,CAAC,OAAO,EAAEd,YAAY,CAAC;;IAE7B;IACA,MAAMe,WAAW,GAAGA,CAAA,KAAM;MACxBlB,eAAe,CAACY,OAAO,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IACDpB,GAAG,CAACuB,EAAE,CAAC,MAAM,EAAEC,WAAW,CAAC;;IAE3B;IACA,MAAMC,cAAc,GAAGA,CAAA,KAAM;MAC3BlB,kBAAkB,CAACW,OAAO,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IACDpB,GAAG,CAACuB,EAAE,CAAC,SAAS,EAAEE,cAAc,CAAC;IAEjC,OAAO,MAAM;MACXzB,GAAG,CAAC0B,GAAG,CAAC,OAAO,EAAEjB,YAAY,CAAC;MAC9BT,GAAG,CAAC0B,GAAG,CAAC,MAAM,EAAEF,WAAW,CAAC;MAC5BxB,GAAG,CAAC0B,GAAG,CAAC,SAAS,EAAED,cAAc,CAAC;IACpC,CAAC;EACH,CAAC,EAAE,CAACzB,GAAG,EAAEE,YAAY,CAAC,CAAC;EAEvB,MAAMyB,UAAU,GAAIP,OAA8C,IAAK;IACrEhB,gBAAgB,CAACc,OAAO,CAACU,GAAG,CAACR,OAAO,CAAC;IACrC,OAAO,MAAM;MACXhB,gBAAgB,CAACc,OAAO,CAACW,MAAM,CAACT,OAAO,CAAC;IAC1C,CAAC;EACH,CAAC;EAED,MAAMU,SAAS,GAAIV,OAAmB,IAAK;IACzCd,eAAe,CAACY,OAAO,CAACU,GAAG,CAACR,OAAO,CAAC;IACpC,OAAO,MAAM;MACXd,eAAe,CAACY,OAAO,CAACW,MAAM,CAACT,OAAO,CAAC;IACzC,CAAC;EACH,CAAC;EAED,MAAMW,YAAY,GAAIX,OAAmB,IAAK;IAC5Cb,kBAAkB,CAACW,OAAO,CAACU,GAAG,CAACR,OAAO,CAAC;IACvC,OAAO,MAAM;MACXb,kBAAkB,CAACW,OAAO,CAACW,MAAM,CAACT,OAAO,CAAC;IAC5C,CAAC;EACH,CAAC;;EAED;EACA,MAAMY,YAAY,GAAIZ,OAA8C,IAAK;IACvEZ,oBAAoB,CAACU,OAAO,CAACU,GAAG,CAACR,OAAO,CAAC;EAC3C,CAAC;EAGD,OAAO;IACLO,UAAU;IACVG,SAAS;IACTC,YAAY;IACZC,YAAY;IACZC,OAAO,EAAE/B;EACX,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useEffect","useRef","useMetaAtlas","useMetaAtlasStore","useMapDataStore","useMapEvents","map","getLastClickedFeature","mapCoreReady","state","clickHandlersRef","Set","loadHandlersRef","moveEndHandlersRef","clickOnceHandlersRef","clickHandler","e","clickedFeature","clickEvent","metaFeaturePart","_objectWithoutProperties","_excluded","getState","setActiveObject","console","log","current","forEach","handler","size","clear","on","loadHandler","moveEndHandler","off","onMapClick","add","delete","onMapLoad","onMapMoveEnd","onceMapClick","isReady"],"sources":["../../../../../src/react/hooks/useMapEvents/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useMetaAtlas } from '../useMetaAtlas';\nimport { UseMapEventsReturn } from './types';\nimport * as maplibregl from 'maplibre-gl';\nimport { useMetaAtlasStore } from '../../stores/useMetaAtlasStore';\nimport { clickedMetaFeature } from '../../../meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core';\nimport { useMapDataStore } from '../../stores/useMapDataStore';\n\nexport function useMapEvents(): UseMapEventsReturn {\n const { map, getLastClickedFeature } = useMetaAtlas();\n const mapCoreReady = useMetaAtlasStore((state) => state.mapCoreReady);\n const clickHandlersRef = useRef<Set<(feature: clickedMetaFeature) => void>>(new Set());\n const loadHandlersRef = useRef<Set<() => void>>(new Set());\n const moveEndHandlersRef = useRef<Set<() => void>>(new Set());\n\n // ONCE handlers\n const clickOnceHandlersRef = useRef<Set<(feature: clickedMetaFeature) => void>>(new Set());\n\n // Attach event listeners when map is ready\n useEffect(() => {\n if (!map || !mapCoreReady) return;\n\n // Click event - get clickedMetaFeature from SDK (includes metaFeature + raw click event)\n const clickHandler = (e: maplibregl.MapMouseEvent) => {\n // Get the clickedMetaFeature from SDK's getLastClickedFeature\n // This includes both the metaFeature data and the raw click event\n const clickedFeature = getLastClickedFeature();\n if (!clickedFeature.clickEvent) clickedFeature.clickEvent = e;\n \n // Extract metaFeature part (without clickEvent) and update store\n const { clickEvent, ...metaFeaturePart } = clickedFeature;\n useMapDataStore.getState().setActiveObject(metaFeaturePart);\n \n console.log('clickHandler clickedMetaFeature: ', clickedFeature);\n\n // normal handlers\n clickHandlersRef.current.forEach(handler => handler(clickedFeature));\n\n // --- ONCE handlers ---\n if (clickOnceHandlersRef.current.size > 0) {\n clickOnceHandlersRef.current.forEach(handler => handler(clickedFeature));\n clickOnceHandlersRef.current.clear();\n }\n };\n map.on('click', clickHandler);\n\n // Load event\n const loadHandler = () => {\n loadHandlersRef.current.forEach(handler => handler());\n };\n map.on('load', loadHandler);\n\n // MoveEnd event\n const moveEndHandler = () => {\n moveEndHandlersRef.current.forEach(handler => handler());\n };\n map.on('moveend', moveEndHandler);\n\n return () => {\n map.off('click', clickHandler);\n map.off('load', loadHandler);\n map.off('moveend', moveEndHandler);\n };\n }, [map, mapCoreReady]);\n\n const onMapClick = (handler: (feature: clickedMetaFeature) => void) => {\n clickHandlersRef.current.add(handler);\n return () => {\n clickHandlersRef.current.delete(handler);\n };\n };\n\n const onMapLoad = (handler: () => void) => {\n loadHandlersRef.current.add(handler);\n return () => {\n loadHandlersRef.current.delete(handler);\n };\n };\n\n const onMapMoveEnd = (handler: () => void) => {\n moveEndHandlersRef.current.add(handler);\n return () => {\n moveEndHandlersRef.current.delete(handler);\n };\n };\n\n // ONCE registration methods\n const onceMapClick = (handler: (feature: clickedMetaFeature) => void) => {\n clickOnceHandlersRef.current.add(handler);\n };\n\n\n return {\n onMapClick,\n onMapLoad,\n onMapMoveEnd,\n onceMapClick,\n isReady: mapCoreReady,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -25,12 +25,12 @@ export function useStampRally() {
25
25
  if (map.hasImage(id)) return resolve();
26
26
  map.loadImage(url, (error, image) => {
27
27
  if (error || !image) {
28
- console.error(`Error loading image '${id}' from ${url}:`, error);
28
+ console.error("Error loading image '".concat(id, "' from ").concat(url, ":"), error);
29
29
  reject(error);
30
30
  return;
31
31
  }
32
32
  map.addImage(id, image);
33
- console.log(`Loaded image: ${id}`);
33
+ console.log("Loaded image: ".concat(id));
34
34
  resolve();
35
35
  });
36
36
  });
@@ -40,7 +40,7 @@ export function useStampRally() {
40
40
  name,
41
41
  url
42
42
  } = _ref;
43
- const imgName = name == 'stamp_locked' ? name : `stamp-${name}`;
43
+ const imgName = name == 'stamp_locked' ? name : "stamp-".concat(name);
44
44
  return loadImageAsync(map, imgName, url);
45
45
  })).then(() => {
46
46
  if (map.getSource('Stamp Rally')) return;
@@ -73,12 +73,13 @@ export function useStampRally() {
73
73
  * @param stamps - Array of stamps.
74
74
  */
75
75
  const showStamps = stamps => {
76
+ var _map$getSource;
76
77
  if (!map) {
77
78
  console.error('Map instance not available for displaying stamps');
78
79
  return;
79
80
  }
80
81
  const pointFeatures = getStampFeatures(stamps);
81
- map.getSource('Stamp Rally')?.setData({
82
+ (_map$getSource = map.getSource('Stamp Rally')) === null || _map$getSource === void 0 || _map$getSource.setData({
82
83
  type: 'FeatureCollection',
83
84
  features: pointFeatures
84
85
  });
@@ -88,11 +89,12 @@ export function useStampRally() {
88
89
  * Hide stamp rally from the map.
89
90
  */
90
91
  const hideStamps = () => {
92
+ var _map$getSource2;
91
93
  if (!map) {
92
94
  console.error('Map instance not available for displaying stamps');
93
95
  return;
94
96
  }
95
- map.getSource('Stamp Rally')?.setData({
97
+ (_map$getSource2 = map.getSource('Stamp Rally')) === null || _map$getSource2 === void 0 || _map$getSource2.setData({
96
98
  type: 'FeatureCollection',
97
99
  features: []
98
100
  });