@reltio/components 1.4.1432 → 1.4.1433
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.
- package/cjs/components/ReltioMap/hooks/useFitMapBounds.d.ts +6 -0
- package/cjs/components/ReltioMap/hooks/useFitMapBounds.js +28 -0
- package/cjs/components/ReltioMap/index.js +46 -59
- package/esm/components/ReltioMap/hooks/useFitMapBounds.d.ts +6 -0
- package/esm/components/ReltioMap/hooks/useFitMapBounds.js +24 -0
- package/esm/components/ReltioMap/index.js +47 -60
- package/package.json +3 -3
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFitMapBounds = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var hooks_1 = require("../../../hooks");
|
|
6
|
+
var helpers_1 = require("../helpers");
|
|
7
|
+
var useFitMapBounds = function (_a) {
|
|
8
|
+
var markers = _a.markers, activeOverlay = _a.activeOverlay, isSearchOnMapMove = _a.isSearchOnMapMove, map = _a.map;
|
|
9
|
+
var apiIsLoaded = Boolean(map && window.google);
|
|
10
|
+
var prevMarkers = (0, hooks_1.usePrevious)(markers);
|
|
11
|
+
var prevActiveOverlay = (0, hooks_1.usePrevious)(activeOverlay);
|
|
12
|
+
var prevApiIsLoaded = (0, hooks_1.usePrevious)(apiIsLoaded);
|
|
13
|
+
(0, react_1.useEffect)(function () {
|
|
14
|
+
var activeOverlayChanged = prevActiveOverlay !== activeOverlay;
|
|
15
|
+
var markersChanged = prevMarkers !== markers;
|
|
16
|
+
var apiIsLoadedChanged = prevApiIsLoaded !== apiIsLoaded;
|
|
17
|
+
var shouldUseFitMapBoundsForOverlay = apiIsLoaded && activeOverlay && (activeOverlayChanged || apiIsLoadedChanged);
|
|
18
|
+
var shouldUseFitMapBoundsForMarkers = apiIsLoaded && !isSearchOnMapMove && markers.length && (markersChanged || apiIsLoadedChanged);
|
|
19
|
+
if (shouldUseFitMapBoundsForMarkers) {
|
|
20
|
+
(0, helpers_1.fitMapBoundsForMarkers)(markers, map, activeOverlay);
|
|
21
|
+
}
|
|
22
|
+
else if (shouldUseFitMapBoundsForOverlay) {
|
|
23
|
+
(0, helpers_1.fitMapBoundsForOverlay)(map, activeOverlay);
|
|
24
|
+
}
|
|
25
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
|
+
}, [apiIsLoaded, markers, activeOverlay]);
|
|
27
|
+
};
|
|
28
|
+
exports.useFitMapBounds = useFitMapBounds;
|
|
@@ -47,39 +47,24 @@ var TopCenterMapControls_1 = require("./MapControls/TopCenterMapControls/TopCent
|
|
|
47
47
|
var helpers_1 = require("./helpers");
|
|
48
48
|
var EntityMarker_1 = __importDefault(require("./EntityMarker/EntityMarker"));
|
|
49
49
|
var constants_1 = require("../../constants");
|
|
50
|
+
var useFitMapBounds_1 = require("./hooks/useFitMapBounds");
|
|
50
51
|
var styles_1 = require("./styles");
|
|
51
|
-
var hooks_1 = require("../../hooks");
|
|
52
52
|
var ON_MAP_MOVE_DEBOUNCE_INTERVAL = 1000;
|
|
53
53
|
var libraries = ['drawing'];
|
|
54
|
-
var useFitMapBounds = function (_a) {
|
|
55
|
-
var markers = _a.markers, activeOverlay = _a.activeOverlay, isSearchOnMapMove = _a.isSearchOnMapMove, map = _a.map;
|
|
56
|
-
var prevMarkers = (0, hooks_1.usePrevious)(markers);
|
|
57
|
-
var prevActiveOverlay = (0, hooks_1.usePrevious)(activeOverlay);
|
|
58
|
-
var apiIsLoaded = map && window.google;
|
|
59
|
-
(0, react_1.useEffect)(function () {
|
|
60
|
-
if (apiIsLoaded && !isSearchOnMapMove && markers.length && markers !== prevMarkers) {
|
|
61
|
-
(0, helpers_1.fitMapBoundsForMarkers)(markers, map, activeOverlay);
|
|
62
|
-
}
|
|
63
|
-
else if (apiIsLoaded && activeOverlay && activeOverlay !== prevActiveOverlay) {
|
|
64
|
-
(0, helpers_1.fitMapBoundsForOverlay)(map, activeOverlay);
|
|
65
|
-
}
|
|
66
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
67
|
-
}, [map, markers, activeOverlay]);
|
|
68
|
-
};
|
|
69
54
|
var ReltioMap = function (_a) {
|
|
70
|
-
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,
|
|
55
|
+
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, onMapBoundsChanged = _a.onMapBoundsChanged, onOverlayUpdated = _a.onOverlayUpdated, onMarkerClicked = _a.onMarkerClicked;
|
|
71
56
|
var styles = (0, styles_1.useStyles)();
|
|
72
|
-
var
|
|
57
|
+
var _f = (0, api_1.useJsApiLoader)({
|
|
73
58
|
googleMapsApiKey: mapKey,
|
|
74
59
|
libraries: libraries
|
|
75
|
-
}), isLoaded =
|
|
60
|
+
}), isLoaded = _f.isLoaded, loadError = _f.loadError;
|
|
76
61
|
var mapMoveEndTimer = (0, react_1.useRef)(null);
|
|
77
|
-
var
|
|
78
|
-
var
|
|
79
|
-
var
|
|
80
|
-
useFitMapBounds({ markers: markers, activeOverlay: activeOverlay, map: map, isSearchOnMapMove: isSearchOnMapMove });
|
|
81
|
-
var allOverlayOptions = (0, react_1.useMemo)(function () { return (__assign(__assign({}, constants_1.DEFAULT_OVERLAY_OPTIONS),
|
|
82
|
-
var googleMapOptions = (0, react_1.useMemo)(function () { return (__assign(__assign({}, constants_1.DEFAULT_GOOGLE_MAP_OPTIONS),
|
|
62
|
+
var _g = (0, react_1.useState)(null), map = _g[0], setMap = _g[1];
|
|
63
|
+
var _h = (0, react_1.useState)(null), polygon = _h[0], setPolygon = _h[1];
|
|
64
|
+
var _j = (0, react_1.useState)(null), drawingMode = _j[0], setDrawingMode = _j[1];
|
|
65
|
+
(0, useFitMapBounds_1.useFitMapBounds)({ markers: markers, activeOverlay: activeOverlay, map: map, isSearchOnMapMove: isSearchOnMapMove });
|
|
66
|
+
var allOverlayOptions = (0, react_1.useMemo)(function () { return (__assign(__assign({}, constants_1.DEFAULT_OVERLAY_OPTIONS), overlayOptions)); }, [overlayOptions]);
|
|
67
|
+
var googleMapOptions = (0, react_1.useMemo)(function () { return (__assign(__assign({}, constants_1.DEFAULT_GOOGLE_MAP_OPTIONS), mapOptions)); }, [mapOptions]);
|
|
83
68
|
var handleChangeIsSearchOnMapMove = (0, react_1.useCallback)(function (isSearchOnMapMove) {
|
|
84
69
|
onMapBoundsChanged(isSearchOnMapMove ? (0, helpers_1.getMapBoundsPolygon)(map) : null);
|
|
85
70
|
setDrawingMode(null);
|
|
@@ -89,39 +74,39 @@ var ReltioMap = function (_a) {
|
|
|
89
74
|
clearTimeout(mapMoveEndTimer.current);
|
|
90
75
|
}, []);
|
|
91
76
|
var handleMapMoveEnd = (0, react_1.useCallback)(function () {
|
|
92
|
-
if (isSearchOnMapMove)
|
|
93
|
-
|
|
94
|
-
|
|
77
|
+
if (!isSearchOnMapMove)
|
|
78
|
+
return;
|
|
79
|
+
onMapBoundsChanged((0, helpers_1.getMapBoundsPolygon)(map));
|
|
95
80
|
}, [isSearchOnMapMove, map, onMapBoundsChanged]);
|
|
96
81
|
var handleMapIdle = (0, react_1.useCallback)(function () {
|
|
97
|
-
if (isSearchOnMapMove)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
82
|
+
if (!isSearchOnMapMove)
|
|
83
|
+
return;
|
|
84
|
+
clearTimeout(mapMoveEndTimer.current);
|
|
85
|
+
mapMoveEndTimer.current = setTimeout(handleMapMoveEnd, ON_MAP_MOVE_DEBOUNCE_INTERVAL);
|
|
101
86
|
}, [handleMapMoveEnd, isSearchOnMapMove]);
|
|
102
87
|
var handleOverlayChange = (0, react_1.useCallback)(function (e, propOverlay) {
|
|
103
88
|
var _a;
|
|
104
|
-
var
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
89
|
+
var _b;
|
|
90
|
+
var polygonStateOverlay = polygon && { type: constants_1.MAP_DRAWING_MODES.POLYGON, overlay: polygon };
|
|
91
|
+
var stateOverlay = propOverlay || polygonStateOverlay;
|
|
92
|
+
if ((0, ramda_1.isEmpty)(stateOverlay) || !onOverlayUpdated)
|
|
93
|
+
return;
|
|
94
|
+
var overlay = stateOverlay.overlay, type = stateOverlay.type;
|
|
95
|
+
var getPolygonLatLngCoordinates = function () {
|
|
96
|
+
return overlay
|
|
97
|
+
.getPath()
|
|
98
|
+
.getArray()
|
|
99
|
+
.map(function (latlng) { return [latlng.lat(), latlng.lng()]; });
|
|
100
|
+
};
|
|
101
|
+
var getCircleParameters = function () { return ({ radius: overlay.getRadius() / 1000, center: overlay.getCenter() }); };
|
|
102
|
+
var typeActions = (_a = {},
|
|
103
|
+
_a[constants_1.MAP_DRAWING_MODES.POLYGON] = getPolygonLatLngCoordinates,
|
|
104
|
+
_a[constants_1.MAP_DRAWING_MODES.CIRCLE] = getCircleParameters,
|
|
105
|
+
_a);
|
|
106
|
+
var data = (_b = typeActions[type]) === null || _b === void 0 ? void 0 : _b.call(typeActions);
|
|
107
|
+
if (!data)
|
|
108
|
+
return;
|
|
109
|
+
onOverlayUpdated({ data: data, type: type });
|
|
125
110
|
}, [onOverlayUpdated, polygon]);
|
|
126
111
|
var handleOverlayComplete = (0, react_1.useCallback)(function (type) { return function (overlay) {
|
|
127
112
|
handleOverlayChange(null, { type: type, overlay: overlay });
|
|
@@ -145,16 +130,18 @@ var ReltioMap = function (_a) {
|
|
|
145
130
|
if (!isLoaded) {
|
|
146
131
|
return loadingElement;
|
|
147
132
|
}
|
|
133
|
+
var shouldRenderDrawingManager = isSearchEnabled && Boolean(drawingModes.length);
|
|
134
|
+
var shouldRenderRightMapControls = map && isSearchEnabled && Boolean(drawingModes.length);
|
|
135
|
+
var shouldRenderCenterMapControls = map && isSearchEnabled;
|
|
136
|
+
var shouldRenderPolygon = !(0, helpers_1.getDrawingMode)(drawingMode) && activeOverlay && (0, ramda_1.propEq)('type', constants_1.MAP_DRAWING_MODES.POLYGON, activeOverlay);
|
|
148
137
|
return (react_1.default.createElement(api_1.GoogleMap, { mapTypeId: window.google.maps.MapTypeId.ROADMAP, options: googleMapOptions, onLoad: setMap, zoom: defaultZoom, center: defaultCenter, onZoomChanged: handleMapMoveStart, onDragStart: handleMapMoveStart, onIdle: handleMapIdle, mapContainerClassName: mapContainerClassName },
|
|
149
|
-
|
|
138
|
+
shouldRenderRightMapControls && (react_1.default.createElement(MapControlContrainer_1.MapControlContainer, { className: styles.mapControlContainer, position: window.google.maps.ControlPosition.TOP_RIGHT, map: map },
|
|
150
139
|
react_1.default.createElement(TopRightMapControls_1.TopRightMapControls, { hasActiveOverlay: !!activeOverlay, drawingModes: drawingModes, drawingMode: drawingMode, onDrawingModeChanged: setDrawingMode, onClearOverlay: handleClearOverlay }))),
|
|
151
|
-
|
|
140
|
+
shouldRenderCenterMapControls && (react_1.default.createElement(MapControlContrainer_1.MapControlContainer, { className: styles.mapControlContainer, position: window.google.maps.ControlPosition.TOP_CENTER, map: map },
|
|
152
141
|
react_1.default.createElement(TopCenterMapControls_1.TopCenterMapControls, { onChangeIsSearchOnMapMove: handleChangeIsSearchOnMapMove, isSearchOnMapMove: isSearchOnMapMove }))),
|
|
153
142
|
markerClusterer ? renderMarkerClusterer(markerClustererOptions) : renderMarkers(),
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
(0, ramda_1.propEq)('type', constants_1.MAP_DRAWING_MODES.POLYGON, activeOverlay) && (react_1.default.createElement(api_1.Polygon, { onLoad: setPolygon, path: activeOverlay.path, editable: true, options: allOverlayOptions, onMouseUp: handleOverlayChange, onDragEnd: handleOverlayChange })),
|
|
157
|
-
isSearchEnabled && Boolean(drawingModes.length) && (react_1.default.createElement(api_1.DrawingManager, { onPolygonComplete: handleOverlayComplete(constants_1.MAP_DRAWING_MODES.POLYGON), onCircleComplete: handleOverlayComplete(constants_1.MAP_DRAWING_MODES.CIRCLE), drawingMode: (0, helpers_1.getDrawingMode)(drawingMode), options: {
|
|
143
|
+
shouldRenderPolygon && (react_1.default.createElement(api_1.Polygon, { onLoad: setPolygon, path: activeOverlay.path, editable: true, options: allOverlayOptions, onMouseUp: handleOverlayChange, onDragEnd: handleOverlayChange })),
|
|
144
|
+
shouldRenderDrawingManager && (react_1.default.createElement(api_1.DrawingManager, { onPolygonComplete: handleOverlayComplete(constants_1.MAP_DRAWING_MODES.POLYGON), onCircleComplete: handleOverlayComplete(constants_1.MAP_DRAWING_MODES.CIRCLE), drawingMode: (0, helpers_1.getDrawingMode)(drawingMode), options: {
|
|
158
145
|
drawingControl: false,
|
|
159
146
|
circleOptions: allOverlayOptions,
|
|
160
147
|
polygonOptions: allOverlayOptions
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { usePrevious } from '../../../hooks';
|
|
3
|
+
import { fitMapBoundsForMarkers, fitMapBoundsForOverlay } from '../helpers';
|
|
4
|
+
export var useFitMapBounds = function (_a) {
|
|
5
|
+
var markers = _a.markers, activeOverlay = _a.activeOverlay, isSearchOnMapMove = _a.isSearchOnMapMove, map = _a.map;
|
|
6
|
+
var apiIsLoaded = Boolean(map && window.google);
|
|
7
|
+
var prevMarkers = usePrevious(markers);
|
|
8
|
+
var prevActiveOverlay = usePrevious(activeOverlay);
|
|
9
|
+
var prevApiIsLoaded = usePrevious(apiIsLoaded);
|
|
10
|
+
useEffect(function () {
|
|
11
|
+
var activeOverlayChanged = prevActiveOverlay !== activeOverlay;
|
|
12
|
+
var markersChanged = prevMarkers !== markers;
|
|
13
|
+
var apiIsLoadedChanged = prevApiIsLoaded !== apiIsLoaded;
|
|
14
|
+
var shouldUseFitMapBoundsForOverlay = apiIsLoaded && activeOverlay && (activeOverlayChanged || apiIsLoadedChanged);
|
|
15
|
+
var shouldUseFitMapBoundsForMarkers = apiIsLoaded && !isSearchOnMapMove && markers.length && (markersChanged || apiIsLoadedChanged);
|
|
16
|
+
if (shouldUseFitMapBoundsForMarkers) {
|
|
17
|
+
fitMapBoundsForMarkers(markers, map, activeOverlay);
|
|
18
|
+
}
|
|
19
|
+
else if (shouldUseFitMapBoundsForOverlay) {
|
|
20
|
+
fitMapBoundsForOverlay(map, activeOverlay);
|
|
21
|
+
}
|
|
22
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
+
}, [apiIsLoaded, markers, activeOverlay]);
|
|
24
|
+
};
|
|
@@ -9,48 +9,33 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import React, { useCallback,
|
|
12
|
+
import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|
13
13
|
import { propEq, isEmpty, prop } from 'ramda';
|
|
14
14
|
import { GoogleMap, useJsApiLoader, Polygon, DrawingManager, MarkerClusterer } from '@react-google-maps/api';
|
|
15
15
|
import { MapControlContainer } from './MapControls/MapControlContainer/MapControlContrainer';
|
|
16
16
|
import { TopRightMapControls } from './MapControls/TopRightMapControls/TopRightMapControls';
|
|
17
17
|
import { TopCenterMapControls } from './MapControls/TopCenterMapControls/TopCenterMapControls';
|
|
18
|
-
import { getMapBoundsPolygon, getDrawingMode
|
|
18
|
+
import { getMapBoundsPolygon, getDrawingMode } from './helpers';
|
|
19
19
|
import EntityMarker from './EntityMarker/EntityMarker';
|
|
20
20
|
import { DEFAULT_GOOGLE_MAP_OPTIONS, DEFAULT_OVERLAY_OPTIONS, MAP_DRAWING_MODES } from '../../constants';
|
|
21
|
+
import { useFitMapBounds } from './hooks/useFitMapBounds';
|
|
21
22
|
import { useStyles } from './styles';
|
|
22
|
-
import { usePrevious } from '../../hooks';
|
|
23
23
|
var ON_MAP_MOVE_DEBOUNCE_INTERVAL = 1000;
|
|
24
24
|
var libraries = ['drawing'];
|
|
25
|
-
var useFitMapBounds = function (_a) {
|
|
26
|
-
var markers = _a.markers, activeOverlay = _a.activeOverlay, isSearchOnMapMove = _a.isSearchOnMapMove, map = _a.map;
|
|
27
|
-
var prevMarkers = usePrevious(markers);
|
|
28
|
-
var prevActiveOverlay = usePrevious(activeOverlay);
|
|
29
|
-
var apiIsLoaded = map && window.google;
|
|
30
|
-
useEffect(function () {
|
|
31
|
-
if (apiIsLoaded && !isSearchOnMapMove && markers.length && markers !== prevMarkers) {
|
|
32
|
-
fitMapBoundsForMarkers(markers, map, activeOverlay);
|
|
33
|
-
}
|
|
34
|
-
else if (apiIsLoaded && activeOverlay && activeOverlay !== prevActiveOverlay) {
|
|
35
|
-
fitMapBoundsForOverlay(map, activeOverlay);
|
|
36
|
-
}
|
|
37
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
38
|
-
}, [map, markers, activeOverlay]);
|
|
39
|
-
};
|
|
40
25
|
export var ReltioMap = function (_a) {
|
|
41
|
-
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,
|
|
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, onMapBoundsChanged = _a.onMapBoundsChanged, onOverlayUpdated = _a.onOverlayUpdated, onMarkerClicked = _a.onMarkerClicked;
|
|
42
27
|
var styles = useStyles();
|
|
43
|
-
var
|
|
28
|
+
var _f = useJsApiLoader({
|
|
44
29
|
googleMapsApiKey: mapKey,
|
|
45
30
|
libraries: libraries
|
|
46
|
-
}), isLoaded =
|
|
31
|
+
}), isLoaded = _f.isLoaded, loadError = _f.loadError;
|
|
47
32
|
var mapMoveEndTimer = useRef(null);
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
33
|
+
var _g = useState(null), map = _g[0], setMap = _g[1];
|
|
34
|
+
var _h = useState(null), polygon = _h[0], setPolygon = _h[1];
|
|
35
|
+
var _j = useState(null), drawingMode = _j[0], setDrawingMode = _j[1];
|
|
51
36
|
useFitMapBounds({ markers: markers, activeOverlay: activeOverlay, map: map, isSearchOnMapMove: isSearchOnMapMove });
|
|
52
|
-
var allOverlayOptions = useMemo(function () { return (__assign(__assign({}, DEFAULT_OVERLAY_OPTIONS),
|
|
53
|
-
var googleMapOptions = useMemo(function () { return (__assign(__assign({}, DEFAULT_GOOGLE_MAP_OPTIONS),
|
|
37
|
+
var allOverlayOptions = useMemo(function () { return (__assign(__assign({}, DEFAULT_OVERLAY_OPTIONS), overlayOptions)); }, [overlayOptions]);
|
|
38
|
+
var googleMapOptions = useMemo(function () { return (__assign(__assign({}, DEFAULT_GOOGLE_MAP_OPTIONS), mapOptions)); }, [mapOptions]);
|
|
54
39
|
var handleChangeIsSearchOnMapMove = useCallback(function (isSearchOnMapMove) {
|
|
55
40
|
onMapBoundsChanged(isSearchOnMapMove ? getMapBoundsPolygon(map) : null);
|
|
56
41
|
setDrawingMode(null);
|
|
@@ -60,39 +45,39 @@ export var ReltioMap = function (_a) {
|
|
|
60
45
|
clearTimeout(mapMoveEndTimer.current);
|
|
61
46
|
}, []);
|
|
62
47
|
var handleMapMoveEnd = useCallback(function () {
|
|
63
|
-
if (isSearchOnMapMove)
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
if (!isSearchOnMapMove)
|
|
49
|
+
return;
|
|
50
|
+
onMapBoundsChanged(getMapBoundsPolygon(map));
|
|
66
51
|
}, [isSearchOnMapMove, map, onMapBoundsChanged]);
|
|
67
52
|
var handleMapIdle = useCallback(function () {
|
|
68
|
-
if (isSearchOnMapMove)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
53
|
+
if (!isSearchOnMapMove)
|
|
54
|
+
return;
|
|
55
|
+
clearTimeout(mapMoveEndTimer.current);
|
|
56
|
+
mapMoveEndTimer.current = setTimeout(handleMapMoveEnd, ON_MAP_MOVE_DEBOUNCE_INTERVAL);
|
|
72
57
|
}, [handleMapMoveEnd, isSearchOnMapMove]);
|
|
73
58
|
var handleOverlayChange = useCallback(function (e, propOverlay) {
|
|
74
59
|
var _a;
|
|
75
|
-
var
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
60
|
+
var _b;
|
|
61
|
+
var polygonStateOverlay = polygon && { type: MAP_DRAWING_MODES.POLYGON, overlay: polygon };
|
|
62
|
+
var stateOverlay = propOverlay || polygonStateOverlay;
|
|
63
|
+
if (isEmpty(stateOverlay) || !onOverlayUpdated)
|
|
64
|
+
return;
|
|
65
|
+
var overlay = stateOverlay.overlay, type = stateOverlay.type;
|
|
66
|
+
var getPolygonLatLngCoordinates = function () {
|
|
67
|
+
return overlay
|
|
68
|
+
.getPath()
|
|
69
|
+
.getArray()
|
|
70
|
+
.map(function (latlng) { return [latlng.lat(), latlng.lng()]; });
|
|
71
|
+
};
|
|
72
|
+
var getCircleParameters = function () { return ({ radius: overlay.getRadius() / 1000, center: overlay.getCenter() }); };
|
|
73
|
+
var typeActions = (_a = {},
|
|
74
|
+
_a[MAP_DRAWING_MODES.POLYGON] = getPolygonLatLngCoordinates,
|
|
75
|
+
_a[MAP_DRAWING_MODES.CIRCLE] = getCircleParameters,
|
|
76
|
+
_a);
|
|
77
|
+
var data = (_b = typeActions[type]) === null || _b === void 0 ? void 0 : _b.call(typeActions);
|
|
78
|
+
if (!data)
|
|
79
|
+
return;
|
|
80
|
+
onOverlayUpdated({ data: data, type: type });
|
|
96
81
|
}, [onOverlayUpdated, polygon]);
|
|
97
82
|
var handleOverlayComplete = useCallback(function (type) { return function (overlay) {
|
|
98
83
|
handleOverlayChange(null, { type: type, overlay: overlay });
|
|
@@ -116,16 +101,18 @@ export var ReltioMap = function (_a) {
|
|
|
116
101
|
if (!isLoaded) {
|
|
117
102
|
return loadingElement;
|
|
118
103
|
}
|
|
104
|
+
var shouldRenderDrawingManager = isSearchEnabled && Boolean(drawingModes.length);
|
|
105
|
+
var shouldRenderRightMapControls = map && isSearchEnabled && Boolean(drawingModes.length);
|
|
106
|
+
var shouldRenderCenterMapControls = map && isSearchEnabled;
|
|
107
|
+
var shouldRenderPolygon = !getDrawingMode(drawingMode) && activeOverlay && propEq('type', MAP_DRAWING_MODES.POLYGON, activeOverlay);
|
|
119
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 },
|
|
120
|
-
|
|
109
|
+
shouldRenderRightMapControls && (React.createElement(MapControlContainer, { className: styles.mapControlContainer, position: window.google.maps.ControlPosition.TOP_RIGHT, map: map },
|
|
121
110
|
React.createElement(TopRightMapControls, { hasActiveOverlay: !!activeOverlay, drawingModes: drawingModes, drawingMode: drawingMode, onDrawingModeChanged: setDrawingMode, onClearOverlay: handleClearOverlay }))),
|
|
122
|
-
|
|
111
|
+
shouldRenderCenterMapControls && (React.createElement(MapControlContainer, { className: styles.mapControlContainer, position: window.google.maps.ControlPosition.TOP_CENTER, map: map },
|
|
123
112
|
React.createElement(TopCenterMapControls, { onChangeIsSearchOnMapMove: handleChangeIsSearchOnMapMove, isSearchOnMapMove: isSearchOnMapMove }))),
|
|
124
113
|
markerClusterer ? renderMarkerClusterer(markerClustererOptions) : renderMarkers(),
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
propEq('type', MAP_DRAWING_MODES.POLYGON, activeOverlay) && (React.createElement(Polygon, { onLoad: setPolygon, path: activeOverlay.path, editable: true, options: allOverlayOptions, onMouseUp: handleOverlayChange, onDragEnd: handleOverlayChange })),
|
|
128
|
-
isSearchEnabled && Boolean(drawingModes.length) && (React.createElement(DrawingManager, { onPolygonComplete: handleOverlayComplete(MAP_DRAWING_MODES.POLYGON), onCircleComplete: handleOverlayComplete(MAP_DRAWING_MODES.CIRCLE), drawingMode: getDrawingMode(drawingMode), options: {
|
|
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: {
|
|
129
116
|
drawingControl: false,
|
|
130
117
|
circleOptions: allOverlayOptions,
|
|
131
118
|
polygonOptions: allOverlayOptions
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reltio/components",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1433",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE FILE",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@date-io/moment": "^1.3.5",
|
|
9
9
|
"@react-google-maps/api": "2.7.0",
|
|
10
|
-
"@reltio/mdm-module": "^1.4.
|
|
11
|
-
"@reltio/mdm-sdk": "^1.4.
|
|
10
|
+
"@reltio/mdm-module": "^1.4.1433",
|
|
11
|
+
"@reltio/mdm-sdk": "^1.4.1433",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"d3-cloud": "^1.2.5",
|
|
14
14
|
"d3-geo": "^2.0.1",
|