@reltio/components 1.4.2006 → 1.4.2008

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 (83) hide show
  1. package/Drawer/Drawer.test.js +1 -0
  2. package/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +1 -2
  3. package/HierarchyNodeTitle/useEntityDetails.test.js +3 -2
  4. package/LineChart/LineChart.test.js +1 -0
  5. package/MapChart/components/Legend/styles.d.ts +1 -1
  6. package/ProfileResizablePanes/styles.d.ts +1 -1
  7. package/ReactSortableTree/ReactSortableTree.test.js +3 -1
  8. package/ReltioMap/ReltioMap.d.ts +15 -11
  9. package/ReltioMap/ReltioMap.js +49 -39
  10. package/ReltioMap/ReltioMap.spec.js +232 -116
  11. package/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.d.ts +11 -0
  12. package/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.js +58 -0
  13. package/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.d.ts +8 -0
  14. package/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.js +18 -0
  15. package/ReltioMap/components/ClusteredMarkers/index.d.ts +1 -0
  16. package/ReltioMap/components/ClusteredMarkers/index.js +1 -0
  17. package/ReltioMap/components/DrawingManager/DrawingManager.d.ts +2 -0
  18. package/ReltioMap/components/DrawingManager/DrawingManager.js +5 -0
  19. package/ReltioMap/components/DrawingManager/index.d.ts +1 -0
  20. package/ReltioMap/components/DrawingManager/index.js +1 -0
  21. package/ReltioMap/components/DrawingManager/useDrawingManager.d.ts +7 -0
  22. package/ReltioMap/components/DrawingManager/useDrawingManager.js +36 -0
  23. package/ReltioMap/components/EntityMarker/EntityMarker.d.ts +8 -7
  24. package/ReltioMap/components/EntityMarker/EntityMarker.js +23 -23
  25. package/ReltioMap/components/EntityMarker/EntityMarker.spec.js +151 -66
  26. package/ReltioMap/components/Polygon/Polygon.d.ts +7 -0
  27. package/ReltioMap/components/Polygon/Polygon.js +8 -0
  28. package/ReltioMap/components/Polygon/index.d.ts +1 -0
  29. package/ReltioMap/components/Polygon/index.js +1 -0
  30. package/ReltioMap/components/Polygon/usePolygon.d.ts +10 -0
  31. package/ReltioMap/components/Polygon/usePolygon.js +35 -0
  32. package/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.d.ts +2 -1
  33. package/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.js +6 -5
  34. package/ReltioMap/components/TopRightMapControls/TopRightMapControls.d.ts +2 -1
  35. package/ReltioMap/components/TopRightMapControls/TopRightMapControls.js +3 -2
  36. package/ReltioMap/components/TopRightMapControls/styles.js +1 -1
  37. package/ReltioMap/helpers.d.ts +3 -2
  38. package/ReltioMap/types.d.ts +6 -3
  39. package/cjs/Drawer/Drawer.test.js +1 -0
  40. package/cjs/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +1 -2
  41. package/cjs/HierarchyNodeTitle/useEntityDetails.test.js +3 -2
  42. package/cjs/LineChart/LineChart.test.js +1 -0
  43. package/cjs/MapChart/components/Legend/styles.d.ts +1 -1
  44. package/cjs/ProfileResizablePanes/styles.d.ts +1 -1
  45. package/cjs/ReactSortableTree/ReactSortableTree.test.js +3 -1
  46. package/cjs/ReltioMap/ReltioMap.d.ts +15 -11
  47. package/cjs/ReltioMap/ReltioMap.js +48 -38
  48. package/cjs/ReltioMap/ReltioMap.spec.js +230 -114
  49. package/cjs/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.d.ts +11 -0
  50. package/cjs/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.js +84 -0
  51. package/cjs/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.d.ts +8 -0
  52. package/cjs/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.js +21 -0
  53. package/cjs/ReltioMap/components/ClusteredMarkers/index.d.ts +1 -0
  54. package/cjs/ReltioMap/components/ClusteredMarkers/index.js +5 -0
  55. package/cjs/ReltioMap/components/DrawingManager/DrawingManager.d.ts +2 -0
  56. package/cjs/ReltioMap/components/DrawingManager/DrawingManager.js +9 -0
  57. package/cjs/ReltioMap/components/DrawingManager/index.d.ts +1 -0
  58. package/cjs/ReltioMap/components/DrawingManager/index.js +5 -0
  59. package/cjs/ReltioMap/components/DrawingManager/useDrawingManager.d.ts +7 -0
  60. package/cjs/ReltioMap/components/DrawingManager/useDrawingManager.js +40 -0
  61. package/cjs/ReltioMap/components/EntityMarker/EntityMarker.d.ts +8 -7
  62. package/cjs/ReltioMap/components/EntityMarker/EntityMarker.js +22 -22
  63. package/cjs/ReltioMap/components/EntityMarker/EntityMarker.spec.js +151 -66
  64. package/cjs/ReltioMap/components/Polygon/Polygon.d.ts +7 -0
  65. package/cjs/ReltioMap/components/Polygon/Polygon.js +11 -0
  66. package/cjs/ReltioMap/components/Polygon/index.d.ts +1 -0
  67. package/cjs/ReltioMap/components/Polygon/index.js +5 -0
  68. package/cjs/ReltioMap/components/Polygon/usePolygon.d.ts +10 -0
  69. package/cjs/ReltioMap/components/Polygon/usePolygon.js +39 -0
  70. package/cjs/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.d.ts +2 -1
  71. package/cjs/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.js +6 -5
  72. package/cjs/ReltioMap/components/TopRightMapControls/TopRightMapControls.d.ts +2 -1
  73. package/cjs/ReltioMap/components/TopRightMapControls/TopRightMapControls.js +3 -2
  74. package/cjs/ReltioMap/components/TopRightMapControls/styles.js +1 -1
  75. package/cjs/ReltioMap/helpers.d.ts +3 -2
  76. package/cjs/ReltioMap/types.d.ts +6 -3
  77. package/cjs/features/graph/DataModelGraph/hooks/useFakeCenterNode.test.js +1 -0
  78. package/cjs/hooks/useMarkers/referenceHelpers.js +25 -2
  79. package/cjs/hooks/useMarkers/referenceHelpers.test.js +10 -1
  80. package/features/graph/DataModelGraph/hooks/useFakeCenterNode.test.js +1 -0
  81. package/hooks/useMarkers/referenceHelpers.js +25 -2
  82. package/hooks/useMarkers/referenceHelpers.test.js +10 -1
  83. package/package.json +3 -2
@@ -69,6 +69,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
69
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
70
  }
71
71
  };
72
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
73
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
74
+ if (ar || !(i in from)) {
75
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
76
+ ar[i] = from[i];
77
+ }
78
+ }
79
+ return to.concat(ar || Array.prototype.slice.call(from));
80
+ };
72
81
  var __importDefault = (this && this.__importDefault) || function (mod) {
73
82
  return (mod && mod.__esModule) ? mod : { "default": mod };
74
83
  };
@@ -78,22 +87,20 @@ var react_2 = require("@testing-library/react");
78
87
  var user_event_1 = __importDefault(require("@testing-library/user-event"));
79
88
  var ramda_1 = require("ramda");
80
89
  var jest_mocks_1 = require("@googlemaps/jest-mocks");
81
- var api_1 = require("@react-google-maps/api");
82
90
  var constants_1 = require("../constants");
83
91
  var helpers = __importStar(require("./helpers"));
84
92
  var ReltioMap_1 = require("./ReltioMap");
85
- jest.mock('@react-google-maps/api', function () { return (__assign(__assign({}, jest.requireActual('@react-google-maps/api')), { useJsApiLoader: jest.fn() })); });
86
- jest.mock('./components/MapControlContainer', function () { return ({
87
- MapControlContainer: function (_a) {
93
+ jest.mock('@vis.gl/react-google-maps', function () { return (__assign(__assign({}, jest.requireActual('@vis.gl/react-google-maps')), { MapControl: function (_a) {
88
94
  var children = _a.children;
89
95
  return react_1.default.createElement(react_1.default.Fragment, null, children);
90
- }
91
- }); });
96
+ } })); });
92
97
  describe('ReltioMap tests', function () {
93
98
  var defaultProps = {
94
99
  onOverlayUpdated: jest.fn(),
95
100
  onMarkerClicked: jest.fn(),
96
101
  isSearchEnabled: true,
102
+ defaultZoom: 10,
103
+ defaultCenter: { lat: 1, lng: 1 },
97
104
  mapKey: 'mapKey',
98
105
  loadingElement: react_1.default.createElement("div", null, "loading element")
99
106
  };
@@ -103,15 +110,30 @@ describe('ReltioMap tests', function () {
103
110
  return __assign(__assign({}, (0, react_2.render)(react_1.default.createElement(ReltioMap_1.ReltioMap, __assign({}, props)))), { user: user });
104
111
  };
105
112
  var drawingManagerInstance;
113
+ var drawingManagerConstructorSpy = jest.fn();
106
114
  beforeAll(function () {
107
115
  (0, jest_mocks_1.initialize)();
116
+ var OriginalMap = google.maps.Map;
117
+ jest.spyOn(google.maps, 'Map').mockImplementation(function () {
118
+ var args = [];
119
+ for (var _i = 0; _i < arguments.length; _i++) {
120
+ args[_i] = arguments[_i];
121
+ }
122
+ return new (OriginalMap.bind.apply(OriginalMap, __spreadArray([void 0], args, false)))();
123
+ });
108
124
  global.google.maps.drawing.DrawingManager = /** @class */ (function () {
109
125
  function DrawingManager() {
126
+ var args = [];
127
+ for (var _i = 0; _i < arguments.length; _i++) {
128
+ args[_i] = arguments[_i];
129
+ }
130
+ this.addListener = jest.fn();
110
131
  this.getDrawingMode = jest.fn();
111
132
  this.getMap = jest.fn();
112
133
  this.setDrawingMode = jest.fn();
113
134
  this.setMap = jest.fn();
114
135
  this.setOptions = jest.fn();
136
+ drawingManagerConstructorSpy.apply(void 0, args);
115
137
  drawingManagerInstance = this;
116
138
  }
117
139
  return DrawingManager;
@@ -132,71 +154,101 @@ describe('ReltioMap tests', function () {
132
154
  });
133
155
  beforeEach(function () {
134
156
  drawingManagerInstance = null;
135
- api_1.useJsApiLoader.mockReturnValue({ isLoaded: true, loadError: null });
136
157
  });
137
158
  afterEach(function () {
138
159
  jest.clearAllMocks();
139
160
  jest_mocks_1.mockInstances.clearAll();
140
161
  });
141
162
  var getEventHandler = function (target, event) {
142
- return (0, ramda_1.findLast)(function (_a) {
163
+ var _a, _b;
164
+ return ((_a = (0, ramda_1.findLast)(function (_a) {
143
165
  var instance = _a[0], googleEventName = _a[1];
144
166
  return instance === target && googleEventName === event;
145
- }, global.google.maps.event.addListener.mock.calls)[2];
167
+ }, global.google.maps.event.addListener.mock.calls)) === null || _a === void 0 ? void 0 : _a[2]) || ((_b = (0, ramda_1.findLast)(function (_a) {
168
+ var name = _a[0];
169
+ return name === event;
170
+ }, target.addListener.mock.calls)) === null || _b === void 0 ? void 0 : _b[1]);
146
171
  };
147
172
  var getLastInstance = function (instance) { return (0, ramda_1.last)(jest_mocks_1.mockInstances.get(instance)); };
148
173
  describe('general behaviour', function () {
149
174
  it('should render map controls', function () { return __awaiter(void 0, void 0, void 0, function () {
150
- return __generator(this, function (_a) {
151
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON] }));
152
- expect(react_2.screen.getByLabelText('Draw area')).toBeInTheDocument();
153
- expect(react_2.screen.getByText('Search as I move the map')).toBeInTheDocument();
154
- return [2 /*return*/];
175
+ var _a;
176
+ return __generator(this, function (_b) {
177
+ switch (_b.label) {
178
+ case 0:
179
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON] }));
180
+ _a = expect;
181
+ return [4 /*yield*/, react_2.screen.findByLabelText('Draw area')];
182
+ case 1:
183
+ _a.apply(void 0, [_b.sent()]).toBeInTheDocument();
184
+ expect(react_2.screen.getByText('Search as I move the map')).toBeInTheDocument();
185
+ return [2 /*return*/];
186
+ }
155
187
  });
156
188
  }); });
157
189
  it('should combine mapOptions', function () { return __awaiter(void 0, void 0, void 0, function () {
158
- var mapOptions, mapMock;
190
+ var mapOptions;
159
191
  return __generator(this, function (_a) {
160
- mapOptions = { mapTypeControl: true };
161
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], mapOptions: mapOptions }));
162
- mapMock = getLastInstance(jest_mocks_1.Map);
163
- expect(mapMock.setOptions).toHaveBeenCalledWith({
164
- fullscreenControl: false,
165
- mapTypeControl: true,
166
- streetViewControl: false
167
- });
168
- return [2 /*return*/];
192
+ switch (_a.label) {
193
+ case 0:
194
+ mapOptions = { mapTypeControl: true };
195
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], mapOptions: mapOptions }));
196
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
197
+ expect(google.maps.Map).toHaveBeenCalledWith(expect.any(HTMLElement), expect.objectContaining({
198
+ fullscreenControl: false,
199
+ mapTypeControl: true,
200
+ streetViewControl: false
201
+ }));
202
+ })];
203
+ case 1:
204
+ _a.sent();
205
+ return [2 /*return*/];
206
+ }
169
207
  });
170
208
  }); });
171
- it('should not render map controls', function () {
172
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], isSearchEnabled: false }));
173
- expect(react_2.screen.queryByLabelText('Draw area')).not.toBeInTheDocument();
174
- expect(react_2.screen.queryByText('Search as I move the map')).not.toBeInTheDocument();
175
- });
176
- it('should render markers correctly', function () {
177
- var markers = [
178
- {
179
- point: { lat: 1, lng: 1 },
180
- visible: true,
181
- id: '123',
182
- entity: { uri: 'testUri', type: 'testType' },
183
- label: 'testMarker'
209
+ it('should not render map controls', function () { return __awaiter(void 0, void 0, void 0, function () {
210
+ return __generator(this, function (_a) {
211
+ switch (_a.label) {
212
+ case 0:
213
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], isSearchEnabled: false }));
214
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
215
+ expect(react_2.screen.queryByLabelText('Draw area')).not.toBeInTheDocument();
216
+ })];
217
+ case 1:
218
+ _a.sent();
219
+ expect(react_2.screen.queryByText('Search as I move the map')).not.toBeInTheDocument();
220
+ return [2 /*return*/];
184
221
  }
185
- ];
186
- var onMarkerClick = jest.fn();
187
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], onMarkerClicked: onMarkerClick, markers: markers }));
188
- var markerMock = getLastInstance(jest_mocks_1.Marker);
189
- getEventHandler(markerMock, 'click')();
190
- expect(markerMock.setIcon).toHaveBeenCalled();
191
- expect(onMarkerClick).toHaveBeenCalled();
192
- });
193
- it('should call useJsApiLoader with right params', function () {
194
- setUpRTL(__assign({}, defaultProps));
195
- expect(api_1.useJsApiLoader).toHaveBeenCalledWith({
196
- googleMapsApiKey: 'mapKey',
197
- libraries: ['drawing']
198
222
  });
199
- });
223
+ }); });
224
+ it('should render markers correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
225
+ var markers, onMarkerClick, markerMock;
226
+ return __generator(this, function (_a) {
227
+ switch (_a.label) {
228
+ case 0:
229
+ markers = [
230
+ {
231
+ point: { lat: 1, lng: 1 },
232
+ visible: true,
233
+ id: '123',
234
+ entity: { uri: 'testUri', type: 'testType' },
235
+ label: 'testMarker'
236
+ }
237
+ ];
238
+ onMarkerClick = jest.fn();
239
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], onMarkerClicked: onMarkerClick, markers: markers }));
240
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
241
+ markerMock = getLastInstance(jest_mocks_1.AdvancedMarkerElement);
242
+ expect(markerMock).toBeDefined();
243
+ })];
244
+ case 1:
245
+ _a.sent();
246
+ getEventHandler(markerMock, 'click')();
247
+ expect(onMarkerClick).toHaveBeenCalled();
248
+ return [2 /*return*/];
249
+ }
250
+ });
251
+ }); });
200
252
  });
201
253
  describe('fitting bounds behavior', function () {
202
254
  it('should fit map bounds correctly if markers loaded later than map', function () {
@@ -365,7 +417,7 @@ describe('ReltioMap tests', function () {
365
417
  };
366
418
  _a = setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay })), user = _a.user, rerender = _a.rerender;
367
419
  polygon = getLastInstance(jest_mocks_1.Polygon);
368
- expect(polygon.setPath).toHaveBeenCalledWith(activeOverlay.path);
420
+ expect(polygon.setOptions).toHaveBeenCalledWith(expect.objectContaining({ paths: activeOverlay.path }));
369
421
  newProps = __assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: null });
370
422
  rerender(react_1.default.createElement(ReltioMap_1.ReltioMap, __assign({}, newProps)));
371
423
  return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Draw area'))];
@@ -376,56 +428,100 @@ describe('ReltioMap tests', function () {
376
428
  }
377
429
  });
378
430
  }); });
379
- it('should not render Polygon if "activeOverlay" prop is circle', function () {
380
- var activeOverlay = {
381
- type: constants_1.MAP_DRAWING_MODES.CIRCLE,
382
- path: [{ lat: 1, lng: 1 }]
383
- };
384
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay }));
385
- expect(jest_mocks_1.mockInstances.get(jest_mocks_1.Polygon)).toHaveLength(0);
386
- });
387
- it('should call props.onOverlayUpdated on polygon mouse up', function () {
388
- var activeOverlay = {
389
- type: constants_1.MAP_DRAWING_MODES.POLYGON,
390
- path: [
391
- { lat: 1, lng: 1 },
392
- { lat: 2, lng: 2 }
393
- ]
394
- };
395
- var onOverlayUpdated = jest.fn();
396
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay, onOverlayUpdated: onOverlayUpdated }));
397
- var polygon = getLastInstance(jest_mocks_1.Polygon);
398
- getEventHandler(polygon, 'mouseup')();
399
- expect(onOverlayUpdated).toHaveBeenCalledWith({
400
- type: constants_1.MAP_DRAWING_MODES.POLYGON,
401
- data: []
431
+ it('should not render Polygon if "activeOverlay" prop is circle', function () { return __awaiter(void 0, void 0, void 0, function () {
432
+ var activeOverlay;
433
+ return __generator(this, function (_a) {
434
+ switch (_a.label) {
435
+ case 0:
436
+ activeOverlay = {
437
+ type: constants_1.MAP_DRAWING_MODES.CIRCLE,
438
+ path: [{ lat: 1, lng: 1 }]
439
+ };
440
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay }));
441
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
442
+ expect(jest_mocks_1.mockInstances.get(jest_mocks_1.Polygon)).toHaveLength(0);
443
+ })];
444
+ case 1:
445
+ _a.sent();
446
+ return [2 /*return*/];
447
+ }
402
448
  });
403
- expect(polygon.setPath).toHaveBeenCalledWith(activeOverlay.path);
404
- });
405
- it('should call props.onOverlayUpdated on polygon drag end', function () {
406
- var activeOverlay = {
407
- type: constants_1.MAP_DRAWING_MODES.POLYGON,
408
- path: [
409
- { lat: 1, lng: 1 },
410
- { lat: 2, lng: 2 }
411
- ]
412
- };
413
- var onOverlayUpdated = jest.fn();
414
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay, onOverlayUpdated: onOverlayUpdated }));
415
- var polygon = getLastInstance(jest_mocks_1.Polygon);
416
- getEventHandler(polygon, 'dragend')();
417
- expect(onOverlayUpdated).toHaveBeenCalledWith({
418
- type: constants_1.MAP_DRAWING_MODES.POLYGON,
419
- data: []
449
+ }); });
450
+ it('should call props.onOverlayUpdated on polygon mouse up', function () { return __awaiter(void 0, void 0, void 0, function () {
451
+ var activeOverlay, onOverlayUpdated, polygon;
452
+ return __generator(this, function (_a) {
453
+ switch (_a.label) {
454
+ case 0:
455
+ activeOverlay = {
456
+ type: constants_1.MAP_DRAWING_MODES.POLYGON,
457
+ path: [
458
+ { lat: 1, lng: 1 },
459
+ { lat: 2, lng: 2 }
460
+ ]
461
+ };
462
+ onOverlayUpdated = jest.fn();
463
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay, onOverlayUpdated: onOverlayUpdated }));
464
+ polygon = getLastInstance(jest_mocks_1.Polygon);
465
+ getEventHandler(polygon, 'mouseup')();
466
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
467
+ expect(onOverlayUpdated).toHaveBeenCalledWith({
468
+ type: constants_1.MAP_DRAWING_MODES.POLYGON,
469
+ data: []
470
+ });
471
+ })];
472
+ case 1:
473
+ _a.sent();
474
+ expect(polygon.setOptions).toHaveBeenCalledWith(expect.objectContaining({ paths: activeOverlay.path }));
475
+ return [2 /*return*/];
476
+ }
420
477
  });
421
- expect(polygon.setPath).toHaveBeenCalledWith(activeOverlay.path);
422
- });
478
+ }); });
479
+ it('should call props.onOverlayUpdated on polygon drag end', function () { return __awaiter(void 0, void 0, void 0, function () {
480
+ var activeOverlay, onOverlayUpdated, polygon;
481
+ return __generator(this, function (_a) {
482
+ switch (_a.label) {
483
+ case 0:
484
+ activeOverlay = {
485
+ type: constants_1.MAP_DRAWING_MODES.POLYGON,
486
+ path: [
487
+ { lat: 1, lng: 1 },
488
+ { lat: 2, lng: 2 }
489
+ ]
490
+ };
491
+ onOverlayUpdated = jest.fn();
492
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.POLYGON], activeOverlay: activeOverlay, onOverlayUpdated: onOverlayUpdated }));
493
+ polygon = getLastInstance(jest_mocks_1.Polygon);
494
+ getEventHandler(polygon, 'dragend')();
495
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
496
+ expect(onOverlayUpdated).toHaveBeenCalledWith({
497
+ type: constants_1.MAP_DRAWING_MODES.POLYGON,
498
+ data: []
499
+ });
500
+ })];
501
+ case 1:
502
+ _a.sent();
503
+ expect(polygon.setOptions).toHaveBeenCalledWith(expect.objectContaining({ paths: activeOverlay.path }));
504
+ return [2 /*return*/];
505
+ }
506
+ });
507
+ }); });
423
508
  });
424
509
  describe('drawing behavior', function () {
425
- it("shouldn't be in drawing mode by default", function () {
426
- setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.CIRCLE] }));
427
- expect(drawingManagerInstance.setDrawingMode).not.toHaveBeenCalledWith(constants_1.MAP_DRAWING_MODES.CIRCLE);
428
- });
510
+ it("shouldn't be in drawing mode by default", function () { return __awaiter(void 0, void 0, void 0, function () {
511
+ return __generator(this, function (_a) {
512
+ switch (_a.label) {
513
+ case 0:
514
+ setUpRTL(__assign(__assign({}, defaultProps), { drawingModes: [constants_1.MAP_DRAWING_MODES.CIRCLE] }));
515
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
516
+ expect(drawingManagerInstance).not.toBe(null);
517
+ })];
518
+ case 1:
519
+ _a.sent();
520
+ expect(drawingManagerInstance.setDrawingMode).not.toHaveBeenCalledWith(constants_1.MAP_DRAWING_MODES.CIRCLE);
521
+ return [2 /*return*/];
522
+ }
523
+ });
524
+ }); });
429
525
  it('should change drawing mode on map control action', function () { return __awaiter(void 0, void 0, void 0, function () {
430
526
  var user;
431
527
  return __generator(this, function (_a) {
@@ -435,20 +531,40 @@ describe('ReltioMap tests', function () {
435
531
  return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Draw area'))];
436
532
  case 1:
437
533
  _a.sent();
438
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenCalledWith(constants_1.MAP_DRAWING_MODES.CIRCLE);
534
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: constants_1.MAP_DRAWING_MODES.CIRCLE }));
535
+ return [2 /*return*/];
536
+ }
537
+ });
538
+ }); });
539
+ it("shouldn't render DrawingManager without drawingModes prop", function () { return __awaiter(void 0, void 0, void 0, function () {
540
+ return __generator(this, function (_a) {
541
+ switch (_a.label) {
542
+ case 0:
543
+ setUpRTL(__assign({}, defaultProps));
544
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
545
+ expect(drawingManagerInstance).toBe(null);
546
+ })];
547
+ case 1:
548
+ _a.sent();
549
+ return [2 /*return*/];
550
+ }
551
+ });
552
+ }); });
553
+ it("shouldn't render TopRightMapControls without drawingModes prop", function () { return __awaiter(void 0, void 0, void 0, function () {
554
+ return __generator(this, function (_a) {
555
+ switch (_a.label) {
556
+ case 0:
557
+ setUpRTL(__assign({}, defaultProps));
558
+ return [4 /*yield*/, (0, react_2.waitFor)(function () {
559
+ expect(react_2.screen.queryByLabelText('Draw area')).not.toBeInTheDocument();
560
+ })];
561
+ case 1:
562
+ _a.sent();
563
+ expect(react_2.screen.queryByLabelText('Clear area')).not.toBeInTheDocument();
439
564
  return [2 /*return*/];
440
565
  }
441
566
  });
442
567
  }); });
443
- it("shouldn't render DrawingManager without drawingModes prop", function () {
444
- setUpRTL(__assign({}, defaultProps));
445
- expect(drawingManagerInstance).toBe(null);
446
- });
447
- it("shouldn't render TopRightMapControls without drawingModes prop", function () {
448
- setUpRTL(__assign({}, defaultProps));
449
- expect(react_2.screen.queryByLabelText('Draw area')).not.toBeInTheDocument();
450
- expect(react_2.screen.queryByLabelText('Clear area')).not.toBeInTheDocument();
451
- });
452
568
  it('should call props.onOverlayUpdated after polygon completing', function () { return __awaiter(void 0, void 0, void 0, function () {
453
569
  var onOverlayUpdated, user, overlay;
454
570
  return __generator(this, function (_a) {
@@ -459,7 +575,7 @@ describe('ReltioMap tests', function () {
459
575
  return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Draw area'))];
460
576
  case 1:
461
577
  _a.sent();
462
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenLastCalledWith(constants_1.MAP_DRAWING_MODES.POLYGON);
578
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: constants_1.MAP_DRAWING_MODES.POLYGON }));
463
579
  overlay = {
464
580
  setMap: jest.fn(),
465
581
  getPath: function () { return ({
@@ -480,7 +596,7 @@ describe('ReltioMap tests', function () {
480
596
  ]
481
597
  });
482
598
  expect(overlay.setMap).toHaveBeenCalledWith(null);
483
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenLastCalledWith(null);
599
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: null }));
484
600
  return [2 /*return*/];
485
601
  }
486
602
  });
@@ -502,11 +618,11 @@ describe('ReltioMap tests', function () {
502
618
  return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Draw area'))];
503
619
  case 1:
504
620
  _a.sent();
505
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenLastCalledWith(constants_1.MAP_DRAWING_MODES.POLYGON);
621
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: constants_1.MAP_DRAWING_MODES.POLYGON }));
506
622
  return [4 /*yield*/, user.click(react_2.screen.getByText('Search as I move the map'))];
507
623
  case 2:
508
624
  _a.sent();
509
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenLastCalledWith(null);
625
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: null }));
510
626
  expect(onMapBoundsChanged).toHaveBeenCalledWith(mapBoundsPolygon);
511
627
  return [2 /*return*/];
512
628
  }
@@ -522,14 +638,14 @@ describe('ReltioMap tests', function () {
522
638
  return [4 /*yield*/, user.click(react_2.screen.getByLabelText('Draw area'))];
523
639
  case 1:
524
640
  _a.sent();
525
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenLastCalledWith(constants_1.MAP_DRAWING_MODES.POLYGON);
641
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: constants_1.MAP_DRAWING_MODES.POLYGON }));
526
642
  return [4 /*yield*/, user.click(react_2.screen.getByText('Search as I move the map'))];
527
643
  case 2:
528
644
  _a.sent();
529
645
  return [4 /*yield*/, user.click(react_2.screen.getByText('Search as I move the map'))];
530
646
  case 3:
531
647
  _a.sent();
532
- expect(drawingManagerInstance.setDrawingMode).toHaveBeenLastCalledWith(null);
648
+ expect(drawingManagerConstructorSpy).toHaveBeenCalledWith(expect.objectContaining({ drawingMode: null }));
533
649
  expect(onMapBoundsChanged).toHaveBeenCalledWith(null);
534
650
  return [2 /*return*/];
535
651
  }
@@ -0,0 +1,11 @@
1
+ import { GeoPoint } from '@reltio/mdm-sdk';
2
+ import React from 'react';
3
+ import { ClusteredMarkersOptions } from '../../types';
4
+ type Props = {
5
+ entityMarkers: GeoPoint[];
6
+ enabledClustering: boolean;
7
+ options?: ClusteredMarkersOptions;
8
+ onMarkerClick?: (marker: GeoPoint) => void;
9
+ };
10
+ export declare const ClusteredMarkers: React.MemoExoticComponent<({ entityMarkers, options, enabledClustering, onMarkerClick }: Props) => React.JSX.Element>;
11
+ export {};
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.ClusteredMarkers = void 0;
38
+ var markerclusterer_1 = require("@googlemaps/markerclusterer");
39
+ var react_google_maps_1 = require("@vis.gl/react-google-maps");
40
+ var ramda_1 = require("ramda");
41
+ var react_1 = __importStar(require("react"));
42
+ var EntityMarker_1 = require("../EntityMarker");
43
+ var CustomClusterRenderer_1 = require("./CustomClusterRenderer");
44
+ exports.ClusteredMarkers = (0, react_1.memo)(function (_a) {
45
+ var entityMarkers = _a.entityMarkers, options = _a.options, enabledClustering = _a.enabledClustering, onMarkerClick = _a.onMarkerClick;
46
+ var _b = (0, react_1.useState)({}), markers = _b[0], setMarkers = _b[1];
47
+ var map = (0, react_google_maps_1.useMap)();
48
+ var clusterer = (0, react_1.useMemo)(function () {
49
+ if (!enabledClustering || !map)
50
+ return null;
51
+ return new markerclusterer_1.MarkerClusterer({
52
+ map: map,
53
+ renderer: new CustomClusterRenderer_1.CustomClusterRenderer(options),
54
+ algorithmOptions: { maxZoom: options === null || options === void 0 ? void 0 : options.maxZoom }
55
+ });
56
+ }, [map, options, enabledClustering]);
57
+ (0, react_1.useEffect)(function () {
58
+ return function () {
59
+ clusterer === null || clusterer === void 0 ? void 0 : clusterer.onRemove();
60
+ };
61
+ }, [entityMarkers]);
62
+ (0, react_1.useEffect)(function () {
63
+ if (!clusterer)
64
+ return;
65
+ clusterer.clearMarkers();
66
+ clusterer.addMarkers(Object.values(markers));
67
+ }, [clusterer, markers]);
68
+ var setMarkerRef = (0, react_1.useCallback)(function (marker, key) {
69
+ setMarkers(function (markers) {
70
+ var _a;
71
+ if (marker && !markers[key]) {
72
+ return __assign(__assign({}, markers), (_a = {}, _a[key] = marker, _a));
73
+ }
74
+ else if (!marker && markers[key]) {
75
+ return (0, ramda_1.omit)([key], markers);
76
+ }
77
+ else {
78
+ return markers;
79
+ }
80
+ });
81
+ }, []);
82
+ return (react_1.default.createElement(react_1.default.Fragment, null, entityMarkers.filter((0, ramda_1.prop)('point')).map(function (marker) { return (react_1.default.createElement(EntityMarker_1.EntityMarker, { key: marker.id, marker: marker, clusterer: enabledClustering ? setMarkerRef : undefined, onClick: onMarkerClick })); })));
83
+ });
84
+ exports.ClusteredMarkers.displayName = 'ClusteredMarkers';
@@ -0,0 +1,8 @@
1
+ import { Marker, Renderer, Cluster, ClusterStats } from '@googlemaps/markerclusterer';
2
+ import { ClusteredMarkersOptions } from '../../types';
3
+ export declare class CustomClusterRenderer implements Renderer {
4
+ private options;
5
+ private defaultRenderer;
6
+ constructor(options: ClusteredMarkersOptions);
7
+ render(cluster: Cluster, stats: ClusterStats, map: google.maps.Map): Marker;
8
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomClusterRenderer = void 0;
4
+ var markerclusterer_1 = require("@googlemaps/markerclusterer");
5
+ var CustomClusterRenderer = /** @class */ (function () {
6
+ function CustomClusterRenderer(options) {
7
+ this.options = options;
8
+ this.defaultRenderer = new markerclusterer_1.DefaultRenderer();
9
+ }
10
+ CustomClusterRenderer.prototype.render = function (cluster, stats, map) {
11
+ var _a;
12
+ var element = this.defaultRenderer.render(cluster, stats, map);
13
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.calculator) && element instanceof google.maps.marker.AdvancedMarkerElement) {
14
+ var title = this.options.calculator(cluster.markers).title;
15
+ element.title = title;
16
+ }
17
+ return element;
18
+ };
19
+ return CustomClusterRenderer;
20
+ }());
21
+ exports.CustomClusterRenderer = CustomClusterRenderer;
@@ -0,0 +1 @@
1
+ export { ClusteredMarkers } from './ClusteredMarkers';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClusteredMarkers = void 0;
4
+ var ClusteredMarkers_1 = require("./ClusteredMarkers");
5
+ Object.defineProperty(exports, "ClusteredMarkers", { enumerable: true, get: function () { return ClusteredMarkers_1.ClusteredMarkers; } });
@@ -0,0 +1,2 @@
1
+ import { DrawingManagerProps } from './useDrawingManager';
2
+ export declare const DrawingManager: (props: DrawingManagerProps) => any;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DrawingManager = void 0;
4
+ var useDrawingManager_1 = require("./useDrawingManager");
5
+ var DrawingManager = function (props) {
6
+ (0, useDrawingManager_1.useDrawingManager)(props);
7
+ return null;
8
+ };
9
+ exports.DrawingManager = DrawingManager;
@@ -0,0 +1 @@
1
+ export { DrawingManager } from './DrawingManager';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DrawingManager = void 0;
4
+ var DrawingManager_1 = require("./DrawingManager");
5
+ Object.defineProperty(exports, "DrawingManager", { enumerable: true, get: function () { return DrawingManager_1.DrawingManager; } });