@reltio/components 1.4.2006 → 1.4.2007

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 (71) hide show
  1. package/MapChart/components/Legend/styles.d.ts +1 -1
  2. package/ProfileResizablePanes/styles.d.ts +1 -1
  3. package/ReltioMap/ReltioMap.d.ts +15 -11
  4. package/ReltioMap/ReltioMap.js +49 -39
  5. package/ReltioMap/ReltioMap.spec.js +232 -116
  6. package/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.d.ts +11 -0
  7. package/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.js +58 -0
  8. package/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.d.ts +8 -0
  9. package/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.js +18 -0
  10. package/ReltioMap/components/ClusteredMarkers/index.d.ts +1 -0
  11. package/ReltioMap/components/ClusteredMarkers/index.js +1 -0
  12. package/ReltioMap/components/DrawingManager/DrawingManager.d.ts +2 -0
  13. package/ReltioMap/components/DrawingManager/DrawingManager.js +5 -0
  14. package/ReltioMap/components/DrawingManager/index.d.ts +1 -0
  15. package/ReltioMap/components/DrawingManager/index.js +1 -0
  16. package/ReltioMap/components/DrawingManager/useDrawingManager.d.ts +7 -0
  17. package/ReltioMap/components/DrawingManager/useDrawingManager.js +36 -0
  18. package/ReltioMap/components/EntityMarker/EntityMarker.d.ts +8 -7
  19. package/ReltioMap/components/EntityMarker/EntityMarker.js +23 -23
  20. package/ReltioMap/components/EntityMarker/EntityMarker.spec.js +151 -66
  21. package/ReltioMap/components/Polygon/Polygon.d.ts +7 -0
  22. package/ReltioMap/components/Polygon/Polygon.js +8 -0
  23. package/ReltioMap/components/Polygon/index.d.ts +1 -0
  24. package/ReltioMap/components/Polygon/index.js +1 -0
  25. package/ReltioMap/components/Polygon/usePolygon.d.ts +10 -0
  26. package/ReltioMap/components/Polygon/usePolygon.js +35 -0
  27. package/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.d.ts +2 -1
  28. package/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.js +6 -5
  29. package/ReltioMap/components/TopRightMapControls/TopRightMapControls.d.ts +2 -1
  30. package/ReltioMap/components/TopRightMapControls/TopRightMapControls.js +3 -2
  31. package/ReltioMap/components/TopRightMapControls/styles.js +1 -1
  32. package/ReltioMap/helpers.d.ts +3 -2
  33. package/ReltioMap/types.d.ts +6 -3
  34. package/cjs/MapChart/components/Legend/styles.d.ts +1 -1
  35. package/cjs/ProfileResizablePanes/styles.d.ts +1 -1
  36. package/cjs/ReltioMap/ReltioMap.d.ts +15 -11
  37. package/cjs/ReltioMap/ReltioMap.js +48 -38
  38. package/cjs/ReltioMap/ReltioMap.spec.js +230 -114
  39. package/cjs/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.d.ts +11 -0
  40. package/cjs/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.js +84 -0
  41. package/cjs/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.d.ts +8 -0
  42. package/cjs/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.js +21 -0
  43. package/cjs/ReltioMap/components/ClusteredMarkers/index.d.ts +1 -0
  44. package/cjs/ReltioMap/components/ClusteredMarkers/index.js +5 -0
  45. package/cjs/ReltioMap/components/DrawingManager/DrawingManager.d.ts +2 -0
  46. package/cjs/ReltioMap/components/DrawingManager/DrawingManager.js +9 -0
  47. package/cjs/ReltioMap/components/DrawingManager/index.d.ts +1 -0
  48. package/cjs/ReltioMap/components/DrawingManager/index.js +5 -0
  49. package/cjs/ReltioMap/components/DrawingManager/useDrawingManager.d.ts +7 -0
  50. package/cjs/ReltioMap/components/DrawingManager/useDrawingManager.js +40 -0
  51. package/cjs/ReltioMap/components/EntityMarker/EntityMarker.d.ts +8 -7
  52. package/cjs/ReltioMap/components/EntityMarker/EntityMarker.js +22 -22
  53. package/cjs/ReltioMap/components/EntityMarker/EntityMarker.spec.js +151 -66
  54. package/cjs/ReltioMap/components/Polygon/Polygon.d.ts +7 -0
  55. package/cjs/ReltioMap/components/Polygon/Polygon.js +11 -0
  56. package/cjs/ReltioMap/components/Polygon/index.d.ts +1 -0
  57. package/cjs/ReltioMap/components/Polygon/index.js +5 -0
  58. package/cjs/ReltioMap/components/Polygon/usePolygon.d.ts +10 -0
  59. package/cjs/ReltioMap/components/Polygon/usePolygon.js +39 -0
  60. package/cjs/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.d.ts +2 -1
  61. package/cjs/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.js +6 -5
  62. package/cjs/ReltioMap/components/TopRightMapControls/TopRightMapControls.d.ts +2 -1
  63. package/cjs/ReltioMap/components/TopRightMapControls/TopRightMapControls.js +3 -2
  64. package/cjs/ReltioMap/components/TopRightMapControls/styles.js +1 -1
  65. package/cjs/ReltioMap/helpers.d.ts +3 -2
  66. package/cjs/ReltioMap/types.d.ts +6 -3
  67. package/cjs/hooks/useMarkers/referenceHelpers.js +25 -2
  68. package/cjs/hooks/useMarkers/referenceHelpers.test.js +10 -1
  69. package/hooks/useMarkers/referenceHelpers.js +25 -2
  70. package/hooks/useMarkers/referenceHelpers.test.js +10 -1
  71. package/package.json +3 -2
@@ -10,14 +10,15 @@ var FormControlLabel_1 = __importDefault(require("@mui/material/FormControlLabel
10
10
  var Checkbox_1 = __importDefault(require("@mui/material/Checkbox"));
11
11
  var styles_1 = require("./styles");
12
12
  var TopCenterMapControls = function (_a) {
13
- var isSearchOnMapMove = _a.isSearchOnMapMove, onChangeIsSearchOnMapMove = _a.onChangeIsSearchOnMapMove;
13
+ var className = _a.className, isSearchOnMapMove = _a.isSearchOnMapMove, onChangeIsSearchOnMapMove = _a.onChangeIsSearchOnMapMove;
14
14
  var styles = (0, styles_1.useStyles)();
15
15
  var onChange = function (event) {
16
16
  onChangeIsSearchOnMapMove(event.target.checked);
17
17
  };
18
- return (react_1.default.createElement(FormControlLabel_1.default, { classes: {
19
- root: styles.container,
20
- label: styles.label
21
- }, control: react_1.default.createElement(Checkbox_1.default, { checked: isSearchOnMapMove, onChange: onChange, className: styles.checkbox }), label: ui_i18n_1.default.text('Search as I move the map') }));
18
+ return (react_1.default.createElement("div", { className: className },
19
+ react_1.default.createElement(FormControlLabel_1.default, { classes: {
20
+ root: styles.container,
21
+ label: styles.label
22
+ }, control: react_1.default.createElement(Checkbox_1.default, { checked: isSearchOnMapMove, onChange: onChange, className: styles.checkbox }), label: ui_i18n_1.default.text('Search as I move the map') })));
22
23
  };
23
24
  exports.TopCenterMapControls = TopCenterMapControls;
@@ -38,11 +38,12 @@ export declare const ButtonWithTooltip: React.ForwardRefExoticComponent<Omit<{
38
38
  ref?: React.Ref<HTMLButtonElement>;
39
39
  }, "color" | "size" | "disabled" | "tabIndex" | "children" | "sx" | "action" | keyof import("@mui/material/OverridableComponent").CommonProps | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "href" | "startIcon" | "disableElevation" | "endIcon" | "fullWidth" | "variant">, "ref"> & React.RefAttributes<HTMLElement>>;
40
40
  type Props = {
41
+ className?: string;
41
42
  onDrawingModeChanged: (value: DrawingMode | null) => void;
42
43
  drawingMode: DrawingMode | null;
43
44
  drawingModes: DrawingModes;
44
45
  hasActiveOverlay: boolean;
45
46
  onClearOverlay: () => void;
46
47
  };
47
- export declare const TopRightMapControls: ({ drawingMode, drawingModes, hasActiveOverlay, onDrawingModeChanged, onClearOverlay }: Props) => React.JSX.Element;
48
+ export declare const TopRightMapControls: ({ className, drawingMode, drawingModes, hasActiveOverlay, onDrawingModeChanged, onClearOverlay }: Props) => React.JSX.Element;
48
49
  export {};
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TopRightMapControls = exports.ButtonWithTooltip = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
+ var classnames_1 = __importDefault(require("classnames"));
8
9
  var ui_i18n_1 = __importDefault(require("ui-i18n"));
9
10
  var Button_1 = __importDefault(require("@mui/material/Button"));
10
11
  var withTooltip_1 = require("../../../HOCs/withTooltip");
@@ -25,12 +26,12 @@ var getIcon = function (mode) {
25
26
  }
26
27
  };
27
28
  var TopRightMapControls = function (_a) {
28
- var drawingMode = _a.drawingMode, _b = _a.drawingModes, drawingModes = _b === void 0 ? [] : _b, hasActiveOverlay = _a.hasActiveOverlay, onDrawingModeChanged = _a.onDrawingModeChanged, onClearOverlay = _a.onClearOverlay;
29
+ var className = _a.className, drawingMode = _a.drawingMode, _b = _a.drawingModes, drawingModes = _b === void 0 ? [] : _b, hasActiveOverlay = _a.hasActiveOverlay, onDrawingModeChanged = _a.onDrawingModeChanged, onClearOverlay = _a.onClearOverlay;
29
30
  var styles = (0, styles_1.useStyles)();
30
31
  var changeDrawingModeTo = function (drawingMode) { return function () {
31
32
  onDrawingModeChanged(drawingMode);
32
33
  }; };
33
- return (react_1.default.createElement("div", { className: styles.container }, drawingMode || hasActiveOverlay ? (react_1.default.createElement(exports.ButtonWithTooltip, { tooltipTitle: ui_i18n_1.default.text('Clear area'), className: styles.button, onClick: hasActiveOverlay ? onClearOverlay : changeDrawingModeTo(null) },
34
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)(styles.container, className) }, drawingMode || hasActiveOverlay ? (react_1.default.createElement(exports.ButtonWithTooltip, { tooltipTitle: ui_i18n_1.default.text('Clear area'), className: styles.button, onClick: hasActiveOverlay ? onClearOverlay : changeDrawingModeTo(null) },
34
35
  react_1.default.createElement(HighlightOff_1.default, { className: styles.icon }))) : (drawingModes.map(function (mode) {
35
36
  var Icon = getIcon(mode);
36
37
  return (react_1.default.createElement(exports.ButtonWithTooltip, { tooltipTitle: ui_i18n_1.default.text('Draw area'), key: mode, className: styles.button, onClick: changeDrawingModeTo(mode) },
@@ -4,7 +4,7 @@ exports.useStyles = void 0;
4
4
  var styles_1 = require("@mui/styles");
5
5
  exports.useStyles = (0, styles_1.makeStyles)({
6
6
  container: {
7
- margin: '2px',
7
+ padding: '2px',
8
8
  display: 'flex',
9
9
  alignItems: 'center'
10
10
  },
@@ -1,5 +1,6 @@
1
- import { DrawingMode, EntityMarker, Overlay, MapInstance } from './types';
1
+ import { GeoPoint } from '@reltio/mdm-sdk';
2
+ import { DrawingMode, Overlay, MapInstance } from './types';
2
3
  export declare const getMapBoundsPolygon: (map: MapInstance) => any[];
3
4
  export declare const getDrawingMode: (drawingMode: DrawingMode) => google.maps.drawing.OverlayType.CIRCLE | google.maps.drawing.OverlayType.POLYGON;
4
- export declare const fitMapBoundsForMarkers: (markers: EntityMarker[], map: MapInstance, overlay: Overlay) => void;
5
+ export declare const fitMapBoundsForMarkers: (markers: GeoPoint[], map: MapInstance, overlay: Overlay) => void;
5
6
  export declare const fitMapBoundsForOverlay: (map: MapInstance, overlay: Overlay, existingBounds?: any) => void;
@@ -1,8 +1,11 @@
1
- import { GeoPoint } from '@reltio/mdm-sdk';
1
+ import { Marker } from '@googlemaps/markerclusterer';
2
2
  export type DrawingMode = 'circle' | 'polygon';
3
3
  export type DrawingModes = DrawingMode[];
4
- export type EntityMarker = GeoPoint & {
5
- visible?: boolean;
4
+ export type ClusteredMarkersOptions = {
5
+ maxZoom?: number;
6
+ calculator?: (markers: Marker[]) => {
7
+ title: string;
8
+ };
6
9
  };
7
10
  export type OverlayPath = Array<{
8
11
  lat: number;
@@ -60,6 +60,29 @@ exports.getPointsFromReference = void 0;
60
60
  var ramda_1 = require("ramda");
61
61
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
62
62
  var helpers_1 = require("./helpers");
63
+ var createCachedDecodeAddress = function (maxCacheSize) {
64
+ if (maxCacheSize === void 0) { maxCacheSize = 500; }
65
+ var cache = new Map();
66
+ return function (_a) {
67
+ var servicesPath = _a.servicesPath, address = _a.address;
68
+ if (cache.has(address)) {
69
+ var cached = cache.get(address);
70
+ // maintain LRU cache - move recently used item to the end of the queue
71
+ cache.delete(address);
72
+ cache.set(address, cached);
73
+ return cached;
74
+ }
75
+ var promise = (0, mdm_sdk_1.decodeAddress)({ servicesPath: servicesPath, address: address });
76
+ cache.set(address, promise);
77
+ promise.catch(function () { return cache.delete(address); });
78
+ if (cache.size > maxCacheSize) {
79
+ // maintain LRU cache - remove the oldest (first) item
80
+ cache.delete(cache.keys().next().value);
81
+ }
82
+ return promise;
83
+ };
84
+ };
85
+ var cachedDecodeAddress = createCachedDecodeAddress();
63
86
  var getGeoLocation = function (servicesPath, entity, attributes, metadata, refAttribute, name) { return __awaiter(void 0, void 0, void 0, function () {
64
87
  var entityType, results, geoLocation, results, response, _a;
65
88
  var _b;
@@ -98,7 +121,7 @@ var getGeoLocation = function (servicesPath, entity, attributes, metadata, refAt
98
121
  _c.label = 1;
99
122
  case 1:
100
123
  _c.trys.push([1, 3, , 4]);
101
- return [4 /*yield*/, (0, mdm_sdk_1.decodeAddress)({ servicesPath: servicesPath, address: refAttribute.label })];
124
+ return [4 /*yield*/, cachedDecodeAddress({ servicesPath: servicesPath, address: refAttribute.label })];
102
125
  case 2:
103
126
  response = _c.sent();
104
127
  return [2 /*return*/, response.location];
@@ -162,7 +185,7 @@ var getPointsFromReference = function (servicesPath_1, metadata_1) {
162
185
  return getGeoLocation(servicesPath, entity, pointSource, metadata, refAttribute, name)
163
186
  .then(function (points) {
164
187
  if (!points && entity.label) {
165
- return (0, mdm_sdk_1.decodeAddress)({ servicesPath: servicesPath, address: entity.label })
188
+ return cachedDecodeAddress({ servicesPath: servicesPath, address: entity.label })
166
189
  .then(function (response) { return response.location; })
167
190
  .catch(function () { return null; });
168
191
  }
@@ -338,6 +338,15 @@ describe('from reference strategy test', function () {
338
338
  expect(points[0].entity).toEqual(entities[0]);
339
339
  expect(points[0].label).toBe('label');
340
340
  expect(points[0].point).toEqual({ lat: 321, lng: 123 });
341
+ expect(mdm_sdk_1.decodeAddress).toHaveBeenCalledTimes(1);
342
+ return [4 /*yield*/, (0, referenceHelpers_1.getPointsFromReference)(servicesPath, defaultMetadata, entities)];
343
+ case 2:
344
+ points = _a.sent();
345
+ expect(points[0].id).toBe('entities/111');
346
+ expect(points[0].entity).toEqual(entities[0]);
347
+ expect(points[0].label).toBe('label');
348
+ expect(points[0].point).toEqual({ lat: 321, lng: 123 });
349
+ expect(mdm_sdk_1.decodeAddress).toHaveBeenCalledTimes(1);
341
350
  return [2 /*return*/];
342
351
  }
343
352
  });
@@ -479,7 +488,7 @@ describe('from reference strategy test', function () {
479
488
  switch (_a.label) {
480
489
  case 0:
481
490
  metadata = (0, ramda_1.assocPath)(['entityTypes', 0, 'attributes', 0, 'attributes', 0, 'masking'], { regex: '***' }, defaultMetadata);
482
- return [4 /*yield*/, (0, referenceHelpers_1.getPointsFromReference)(servicesPath, metadata, defaultEntities)];
491
+ return [4 /*yield*/, (0, referenceHelpers_1.getPointsFromReference)(servicesPath, metadata, defaultEntities.map(function (entity) { return (__assign(__assign({}, entity), { label: '***' })); }))];
483
492
  case 1:
484
493
  points = _a.sent();
485
494
  expect(points).toEqual([]);
@@ -57,6 +57,29 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
57
57
  import { identity, flatten } from 'ramda';
58
58
  import { decodeAddress, getEntityType, wrapInArrayIfNeeded, hasMaskingByUris } from '@reltio/mdm-sdk';
59
59
  import { getPointsFromAttributes, isSet } from './helpers';
60
+ var createCachedDecodeAddress = function (maxCacheSize) {
61
+ if (maxCacheSize === void 0) { maxCacheSize = 500; }
62
+ var cache = new Map();
63
+ return function (_a) {
64
+ var servicesPath = _a.servicesPath, address = _a.address;
65
+ if (cache.has(address)) {
66
+ var cached = cache.get(address);
67
+ // maintain LRU cache - move recently used item to the end of the queue
68
+ cache.delete(address);
69
+ cache.set(address, cached);
70
+ return cached;
71
+ }
72
+ var promise = decodeAddress({ servicesPath: servicesPath, address: address });
73
+ cache.set(address, promise);
74
+ promise.catch(function () { return cache.delete(address); });
75
+ if (cache.size > maxCacheSize) {
76
+ // maintain LRU cache - remove the oldest (first) item
77
+ cache.delete(cache.keys().next().value);
78
+ }
79
+ return promise;
80
+ };
81
+ };
82
+ var cachedDecodeAddress = createCachedDecodeAddress();
60
83
  var getGeoLocation = function (servicesPath, entity, attributes, metadata, refAttribute, name) { return __awaiter(void 0, void 0, void 0, function () {
61
84
  var entityType, results, geoLocation, results, response, _a;
62
85
  var _b;
@@ -95,7 +118,7 @@ var getGeoLocation = function (servicesPath, entity, attributes, metadata, refAt
95
118
  _c.label = 1;
96
119
  case 1:
97
120
  _c.trys.push([1, 3, , 4]);
98
- return [4 /*yield*/, decodeAddress({ servicesPath: servicesPath, address: refAttribute.label })];
121
+ return [4 /*yield*/, cachedDecodeAddress({ servicesPath: servicesPath, address: refAttribute.label })];
99
122
  case 2:
100
123
  response = _c.sent();
101
124
  return [2 /*return*/, response.location];
@@ -159,7 +182,7 @@ export var getPointsFromReference = function (servicesPath_1, metadata_1) {
159
182
  return getGeoLocation(servicesPath, entity, pointSource, metadata, refAttribute, name)
160
183
  .then(function (points) {
161
184
  if (!points && entity.label) {
162
- return decodeAddress({ servicesPath: servicesPath, address: entity.label })
185
+ return cachedDecodeAddress({ servicesPath: servicesPath, address: entity.label })
163
186
  .then(function (response) { return response.location; })
164
187
  .catch(function () { return null; });
165
188
  }
@@ -336,6 +336,15 @@ describe('from reference strategy test', function () {
336
336
  expect(points[0].entity).toEqual(entities[0]);
337
337
  expect(points[0].label).toBe('label');
338
338
  expect(points[0].point).toEqual({ lat: 321, lng: 123 });
339
+ expect(decodeAddress).toHaveBeenCalledTimes(1);
340
+ return [4 /*yield*/, getPointsFromReference(servicesPath, defaultMetadata, entities)];
341
+ case 2:
342
+ points = _a.sent();
343
+ expect(points[0].id).toBe('entities/111');
344
+ expect(points[0].entity).toEqual(entities[0]);
345
+ expect(points[0].label).toBe('label');
346
+ expect(points[0].point).toEqual({ lat: 321, lng: 123 });
347
+ expect(decodeAddress).toHaveBeenCalledTimes(1);
339
348
  return [2 /*return*/];
340
349
  }
341
350
  });
@@ -477,7 +486,7 @@ describe('from reference strategy test', function () {
477
486
  switch (_a.label) {
478
487
  case 0:
479
488
  metadata = assocPath(['entityTypes', 0, 'attributes', 0, 'attributes', 0, 'masking'], { regex: '***' }, defaultMetadata);
480
- return [4 /*yield*/, getPointsFromReference(servicesPath, metadata, defaultEntities)];
489
+ return [4 /*yield*/, getPointsFromReference(servicesPath, metadata, defaultEntities.map(function (entity) { return (__assign(__assign({}, entity), { label: '***' })); }))];
481
490
  case 1:
482
491
  points = _a.sent();
483
492
  expect(points).toEqual([]);
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.2006",
3
+ "version": "1.4.2007",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
7
7
  "dependencies": {
8
8
  "@fluentui/react-context-selector": "^9.1.26",
9
- "@react-google-maps/api": "2.7.0",
9
+ "@googlemaps/markerclusterer": "^2.5.3",
10
10
  "@react-sigma/core": "3.4.0",
11
11
  "@reltio/mdm-sdk": "^1.4.1893",
12
+ "@vis.gl/react-google-maps": "^1.3.0",
12
13
  "d3-cloud": "^1.2.5",
13
14
  "d3-geo": "^2.0.1",
14
15
  "d3-hierarchy": "^2.0.0",