@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
@@ -2,5 +2,5 @@ type StylesProps = {
2
2
  colors: string[];
3
3
  width: number;
4
4
  };
5
- export declare const useStyles: (props: StylesProps) => import("@mui/styles").ClassNameMap<"alignBottom" | "legendContainer" | "alignTop" | "legendBar" | "legendLabel">;
5
+ export declare const useStyles: (props: StylesProps) => import("@mui/styles").ClassNameMap<"legendContainer" | "alignTop" | "alignBottom" | "legendBar" | "legendLabel">;
6
6
  export {};
@@ -1 +1 @@
1
- export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"pane" | "resizablePanesWrapper">;
1
+ export declare const useStyles: (props?: any) => import("@mui/styles").ClassNameMap<"resizablePanesWrapper" | "pane">;
@@ -1,12 +1,13 @@
1
1
  import React from 'react';
2
- import { GoogleMapProps, MarkerClustererProps } from '@react-google-maps/api';
3
- import { DrawingModes, EntityMarker as Marker, MapBounds, Overlay, OverlayPath } from './types';
4
- type MarkerClustererOptions = MarkerClustererProps['options'];
2
+ import { GeoPoint } from '@reltio/mdm-sdk';
3
+ import { DrawingModes, MapBounds, Overlay, ClusteredMarkersOptions, DrawingMode } from './types';
5
4
  type Props = {
6
- markers?: Marker[];
5
+ markers?: GeoPoint[];
7
6
  mapKey: string;
8
- defaultZoom?: GoogleMapProps['zoom'];
9
- defaultCenter?: GoogleMapProps['center'];
7
+ /** A map ID is required to use Advanced Markers. https://developers.google.com/maps/documentation/javascript/advanced-markers/overview */
8
+ mapId?: string;
9
+ defaultZoom?: number;
10
+ defaultCenter?: google.maps.LatLngLiteral;
10
11
  loadingElement: React.ReactElement;
11
12
  isSearchOnMapMove?: boolean;
12
13
  isSearchEnabled?: boolean;
@@ -14,15 +15,18 @@ type Props = {
14
15
  overlayOptions?: google.maps.PolygonOptions | google.maps.CircleOptions;
15
16
  drawingModes?: DrawingModes;
16
17
  markerClusterer?: boolean;
17
- markerClustererOptions?: MarkerClustererOptions;
18
+ markerClustererOptions?: ClusteredMarkersOptions;
18
19
  mapOptions?: google.maps.MapOptions;
19
20
  mapContainerClassName?: string;
20
21
  onMapBoundsChanged?: (value: MapBounds | null) => void;
21
22
  onOverlayUpdated?: (value: {
22
- data: OverlayPath;
23
- type: string;
23
+ data: number[][] | {
24
+ radius: number;
25
+ center: google.maps.LatLng;
26
+ };
27
+ type: DrawingMode;
24
28
  }) => void;
25
- onMarkerClicked?: (value: Marker) => void;
29
+ onMarkerClicked?: (value: GeoPoint) => void;
26
30
  };
27
- export declare const ReltioMap: ({ markers, mapKey, defaultZoom, defaultCenter, loadingElement, isSearchOnMapMove, isSearchEnabled, activeOverlay, overlayOptions, drawingModes, markerClusterer, markerClustererOptions, mapOptions, mapContainerClassName, onMapBoundsChanged, onOverlayUpdated, onMarkerClicked }: Props) => React.JSX.Element;
31
+ export declare const ReltioMap: ({ mapKey, ...restProps }: Props) => React.JSX.Element;
28
32
  export {};
@@ -9,33 +9,54 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import React, { useCallback, useMemo, useRef, useState } from 'react';
13
- import { propEq, isEmpty, prop, identity } from 'ramda';
14
- import { GoogleMap, useJsApiLoader, Polygon, DrawingManager, MarkerClusterer } from '@react-google-maps/api';
15
- import { EntityMarker } from './components/EntityMarker';
16
- import { MapControlContainer } from './components/MapControlContainer';
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import React, { memo, useCallback, useMemo, useRef, useState } from 'react';
24
+ import { propEq, isEmpty, identity } from 'ramda';
25
+ import { APIProvider, ControlPosition, Map, MapControl, useApiIsLoaded, useMap } from '@vis.gl/react-google-maps';
17
26
  import { TopRightMapControls } from './components/TopRightMapControls';
18
27
  import { TopCenterMapControls } from './components/TopCenterMapControls';
19
28
  import { getMapBoundsPolygon, getDrawingMode } from './helpers';
20
29
  import { DEFAULT_GOOGLE_MAP_OPTIONS, DEFAULT_OVERLAY_OPTIONS, MAP_DRAWING_MODES } from '../constants';
21
30
  import { useFitMapBounds } from './useFitMapBounds';
22
31
  import { useStyles } from './styles';
32
+ import { ClusteredMarkers } from './components/ClusteredMarkers';
33
+ import { Polygon } from './components/Polygon';
34
+ import { DrawingManager } from './components/DrawingManager';
23
35
  var ON_MAP_MOVE_DEBOUNCE_INTERVAL = 1000;
24
36
  var libraries = ['drawing'];
25
37
  export var ReltioMap = function (_a) {
26
- var _b = _a.markers, markers = _b === void 0 ? [] : _b, mapKey = _a.mapKey, defaultZoom = _a.defaultZoom, defaultCenter = _a.defaultCenter, loadingElement = _a.loadingElement, isSearchOnMapMove = _a.isSearchOnMapMove, isSearchEnabled = _a.isSearchEnabled, activeOverlay = _a.activeOverlay, _c = _a.overlayOptions, overlayOptions = _c === void 0 ? {} : _c, _d = _a.drawingModes, drawingModes = _d === void 0 ? [] : _d, markerClusterer = _a.markerClusterer, markerClustererOptions = _a.markerClustererOptions, _e = _a.mapOptions, mapOptions = _e === void 0 ? {} : _e, mapContainerClassName = _a.mapContainerClassName, _f = _a.onMapBoundsChanged, onMapBoundsChanged = _f === void 0 ? identity : _f, _g = _a.onOverlayUpdated, onOverlayUpdated = _g === void 0 ? identity : _g, _h = _a.onMarkerClicked, onMarkerClicked = _h === void 0 ? identity : _h;
38
+ var mapKey = _a.mapKey, restProps = __rest(_a, ["mapKey"]);
39
+ return (React.createElement(APIProvider, { apiKey: mapKey, libraries: libraries },
40
+ React.createElement(InternalReltioMap, __assign({}, restProps))));
41
+ };
42
+ var emptyObject = {};
43
+ var emptyArray = [];
44
+ var InternalReltioMap = memo(function (_a) {
45
+ var mapId = _a.mapId, _b = _a.markers, markers = _b === void 0 ? emptyArray : _b, defaultZoom = _a.defaultZoom, defaultCenter = _a.defaultCenter, loadingElement = _a.loadingElement, isSearchOnMapMove = _a.isSearchOnMapMove, isSearchEnabled = _a.isSearchEnabled, activeOverlay = _a.activeOverlay, _c = _a.overlayOptions, overlayOptions = _c === void 0 ? emptyObject : _c, _d = _a.drawingModes, drawingModes = _d === void 0 ? emptyArray : _d, markerClusterer = _a.markerClusterer, markerClustererOptions = _a.markerClustererOptions, _f = _a.mapOptions, mapOptions = _f === void 0 ? emptyObject : _f, mapContainerClassName = _a.mapContainerClassName, _g = _a.onMapBoundsChanged, onMapBoundsChanged = _g === void 0 ? identity : _g, _h = _a.onOverlayUpdated, onOverlayUpdated = _h === void 0 ? identity : _h, _j = _a.onMarkerClicked, onMarkerClicked = _j === void 0 ? identity : _j;
27
46
  var styles = useStyles();
28
- var _j = useJsApiLoader({
29
- googleMapsApiKey: mapKey,
30
- libraries: libraries
31
- }), isLoaded = _j.isLoaded, loadError = _j.loadError;
32
47
  var mapMoveEndTimer = useRef(null);
33
- var _k = useState(null), map = _k[0], setMap = _k[1];
34
- var _l = useState(null), polygon = _l[0], setPolygon = _l[1];
35
- var _m = useState(null), drawingMode = _m[0], setDrawingMode = _m[1];
48
+ var isLoaded = useApiIsLoaded();
49
+ var map = useMap();
50
+ var _k = useState(null), polygon = _k[0], setPolygon = _k[1];
51
+ var _l = useState(null), drawingMode = _l[0], setDrawingMode = _l[1];
36
52
  useFitMapBounds({ markers: markers, activeOverlay: activeOverlay, map: map, isSearchOnMapMove: isSearchOnMapMove });
37
53
  var allOverlayOptions = useMemo(function () { return (__assign(__assign({}, DEFAULT_OVERLAY_OPTIONS), overlayOptions)); }, [overlayOptions]);
38
54
  var googleMapOptions = useMemo(function () { return (__assign(__assign({}, DEFAULT_GOOGLE_MAP_OPTIONS), mapOptions)); }, [mapOptions]);
55
+ var drawingManagerOptions = useMemo(function () { return ({
56
+ drawingControl: false,
57
+ polygonOptions: allOverlayOptions
58
+ }); }, [allOverlayOptions]);
59
+ var polygonOptions = useMemo(function () { return (__assign({ paths: activeOverlay === null || activeOverlay === void 0 ? void 0 : activeOverlay.path, editable: true }, allOverlayOptions)); }, [activeOverlay, allOverlayOptions]);
39
60
  var handleChangeIsSearchOnMapMove = useCallback(function (isSearchOnMapMove) {
40
61
  onMapBoundsChanged(isSearchOnMapMove ? getMapBoundsPolygon(map) : null);
41
62
  setDrawingMode(null);
@@ -55,7 +76,7 @@ export var ReltioMap = function (_a) {
55
76
  clearTimeout(mapMoveEndTimer.current);
56
77
  mapMoveEndTimer.current = setTimeout(handleMapMoveEnd, ON_MAP_MOVE_DEBOUNCE_INTERVAL);
57
78
  }, [handleMapMoveEnd, isSearchOnMapMove]);
58
- var handleOverlayChange = useCallback(function (e, propOverlay) {
79
+ var handleOverlayChange = useCallback(function (_e, propOverlay) {
59
80
  var _a;
60
81
  var _b;
61
82
  var polygonStateOverlay = polygon && { type: MAP_DRAWING_MODES.POLYGON, overlay: polygon };
@@ -69,7 +90,10 @@ export var ReltioMap = function (_a) {
69
90
  .getArray()
70
91
  .map(function (latlng) { return [latlng.lat(), latlng.lng()]; });
71
92
  };
72
- var getCircleParameters = function () { return ({ radius: overlay.getRadius() / 1000, center: overlay.getCenter() }); };
93
+ var getCircleParameters = function () { return ({
94
+ radius: overlay.getRadius() / 1000,
95
+ center: overlay.getCenter()
96
+ }); };
73
97
  var typeActions = (_a = {},
74
98
  _a[MAP_DRAWING_MODES.POLYGON] = getPolygonLatLngCoordinates,
75
99
  _a[MAP_DRAWING_MODES.CIRCLE] = getCircleParameters,
@@ -87,17 +111,6 @@ export var ReltioMap = function (_a) {
87
111
  var handleClearOverlay = useCallback(function () {
88
112
  onOverlayUpdated(null);
89
113
  }, [onOverlayUpdated]);
90
- var renderMarkers = function (clusterer) {
91
- return markers
92
- .filter(prop('point'))
93
- .map(function (marker) { return (React.createElement(EntityMarker, { key: marker.id, marker: marker, clusterer: clusterer, onClick: onMarkerClicked })); });
94
- };
95
- var renderMarkerClusterer = function (options) {
96
- return React.createElement(MarkerClusterer, { options: options }, renderMarkers);
97
- };
98
- if (loadError) {
99
- return null;
100
- }
101
114
  if (!isLoaded) {
102
115
  return loadingElement;
103
116
  }
@@ -105,16 +118,13 @@ export var ReltioMap = function (_a) {
105
118
  var shouldRenderRightMapControls = map && isSearchEnabled && Boolean(drawingModes.length);
106
119
  var shouldRenderCenterMapControls = map && isSearchEnabled;
107
120
  var shouldRenderPolygon = !getDrawingMode(drawingMode) && activeOverlay && propEq('type', MAP_DRAWING_MODES.POLYGON, activeOverlay);
108
- return (React.createElement(GoogleMap, { mapTypeId: window.google.maps.MapTypeId.ROADMAP, options: googleMapOptions, onLoad: setMap, zoom: defaultZoom, center: defaultCenter, onZoomChanged: handleMapMoveStart, onDragStart: handleMapMoveStart, onIdle: handleMapIdle, mapContainerClassName: mapContainerClassName },
109
- shouldRenderRightMapControls && (React.createElement(MapControlContainer, { className: styles.mapControlContainer, position: window.google.maps.ControlPosition.TOP_RIGHT, map: map },
110
- React.createElement(TopRightMapControls, { hasActiveOverlay: !!activeOverlay, drawingModes: drawingModes, drawingMode: drawingMode, onDrawingModeChanged: setDrawingMode, onClearOverlay: handleClearOverlay }))),
111
- shouldRenderCenterMapControls && (React.createElement(MapControlContainer, { className: styles.mapControlContainer, position: window.google.maps.ControlPosition.TOP_CENTER, map: map },
112
- React.createElement(TopCenterMapControls, { onChangeIsSearchOnMapMove: handleChangeIsSearchOnMapMove, isSearchOnMapMove: isSearchOnMapMove }))),
113
- markerClusterer ? renderMarkerClusterer(markerClustererOptions) : renderMarkers(),
114
- shouldRenderPolygon && (React.createElement(Polygon, { onLoad: setPolygon, path: activeOverlay.path, editable: true, options: allOverlayOptions, onMouseUp: handleOverlayChange, onDragEnd: handleOverlayChange })),
115
- shouldRenderDrawingManager && (React.createElement(DrawingManager, { onPolygonComplete: handleOverlayComplete(MAP_DRAWING_MODES.POLYGON), onCircleComplete: handleOverlayComplete(MAP_DRAWING_MODES.CIRCLE), drawingMode: getDrawingMode(drawingMode), options: {
116
- drawingControl: false,
117
- circleOptions: allOverlayOptions,
118
- polygonOptions: allOverlayOptions
119
- } }))));
120
- };
121
+ return (React.createElement(Map, __assign({ mapId: mapId || 'mapId' }, googleMapOptions, { defaultZoom: defaultZoom, defaultCenter: defaultCenter, onZoomChanged: handleMapMoveStart, onDragstart: handleMapMoveStart, onIdle: handleMapIdle, className: mapContainerClassName }),
122
+ shouldRenderRightMapControls && (React.createElement(MapControl, { position: ControlPosition.TOP_RIGHT },
123
+ React.createElement(TopRightMapControls, { className: styles.mapControlContainer, hasActiveOverlay: !!activeOverlay, drawingModes: drawingModes, drawingMode: drawingMode, onDrawingModeChanged: setDrawingMode, onClearOverlay: handleClearOverlay }))),
124
+ shouldRenderCenterMapControls && (React.createElement(MapControl, { position: ControlPosition.TOP_CENTER },
125
+ React.createElement(TopCenterMapControls, { className: styles.mapControlContainer, onChangeIsSearchOnMapMove: handleChangeIsSearchOnMapMove, isSearchOnMapMove: isSearchOnMapMove }))),
126
+ React.createElement(ClusteredMarkers, { entityMarkers: markers, enabledClustering: markerClusterer, options: markerClustererOptions, onMarkerClick: onMarkerClicked }),
127
+ shouldRenderPolygon && (React.createElement(Polygon, { onInit: setPolygon, options: polygonOptions, onMouseUp: handleOverlayChange, onDragEnd: handleOverlayChange })),
128
+ shouldRenderDrawingManager && (React.createElement(DrawingManager, { onPolygonComplete: handleOverlayComplete(MAP_DRAWING_MODES.POLYGON), onCircleComplete: handleOverlayComplete(MAP_DRAWING_MODES.CIRCLE), drawingMode: getDrawingMode(drawingMode), options: drawingManagerOptions }))));
129
+ });
130
+ InternalReltioMap.displayName = 'InternalReltioMap';