@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.
- package/Drawer/Drawer.test.js +1 -0
- package/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +1 -2
- package/HierarchyNodeTitle/useEntityDetails.test.js +3 -2
- package/LineChart/LineChart.test.js +1 -0
- package/MapChart/components/Legend/styles.d.ts +1 -1
- package/ProfileResizablePanes/styles.d.ts +1 -1
- package/ReactSortableTree/ReactSortableTree.test.js +3 -1
- package/ReltioMap/ReltioMap.d.ts +15 -11
- package/ReltioMap/ReltioMap.js +49 -39
- package/ReltioMap/ReltioMap.spec.js +232 -116
- package/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.d.ts +11 -0
- package/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.js +58 -0
- package/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.d.ts +8 -0
- package/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.js +18 -0
- package/ReltioMap/components/ClusteredMarkers/index.d.ts +1 -0
- package/ReltioMap/components/ClusteredMarkers/index.js +1 -0
- package/ReltioMap/components/DrawingManager/DrawingManager.d.ts +2 -0
- package/ReltioMap/components/DrawingManager/DrawingManager.js +5 -0
- package/ReltioMap/components/DrawingManager/index.d.ts +1 -0
- package/ReltioMap/components/DrawingManager/index.js +1 -0
- package/ReltioMap/components/DrawingManager/useDrawingManager.d.ts +7 -0
- package/ReltioMap/components/DrawingManager/useDrawingManager.js +36 -0
- package/ReltioMap/components/EntityMarker/EntityMarker.d.ts +8 -7
- package/ReltioMap/components/EntityMarker/EntityMarker.js +23 -23
- package/ReltioMap/components/EntityMarker/EntityMarker.spec.js +151 -66
- package/ReltioMap/components/Polygon/Polygon.d.ts +7 -0
- package/ReltioMap/components/Polygon/Polygon.js +8 -0
- package/ReltioMap/components/Polygon/index.d.ts +1 -0
- package/ReltioMap/components/Polygon/index.js +1 -0
- package/ReltioMap/components/Polygon/usePolygon.d.ts +10 -0
- package/ReltioMap/components/Polygon/usePolygon.js +35 -0
- package/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.d.ts +2 -1
- package/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.js +6 -5
- package/ReltioMap/components/TopRightMapControls/TopRightMapControls.d.ts +2 -1
- package/ReltioMap/components/TopRightMapControls/TopRightMapControls.js +3 -2
- package/ReltioMap/components/TopRightMapControls/styles.js +1 -1
- package/ReltioMap/helpers.d.ts +3 -2
- package/ReltioMap/types.d.ts +6 -3
- package/cjs/Drawer/Drawer.test.js +1 -0
- package/cjs/EditModeAttributesView/IntegrationEditModeAttributesView.test.js +1 -2
- package/cjs/HierarchyNodeTitle/useEntityDetails.test.js +3 -2
- package/cjs/LineChart/LineChart.test.js +1 -0
- package/cjs/MapChart/components/Legend/styles.d.ts +1 -1
- package/cjs/ProfileResizablePanes/styles.d.ts +1 -1
- package/cjs/ReactSortableTree/ReactSortableTree.test.js +3 -1
- package/cjs/ReltioMap/ReltioMap.d.ts +15 -11
- package/cjs/ReltioMap/ReltioMap.js +48 -38
- package/cjs/ReltioMap/ReltioMap.spec.js +230 -114
- package/cjs/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.d.ts +11 -0
- package/cjs/ReltioMap/components/ClusteredMarkers/ClusteredMarkers.js +84 -0
- package/cjs/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.d.ts +8 -0
- package/cjs/ReltioMap/components/ClusteredMarkers/CustomClusterRenderer.js +21 -0
- package/cjs/ReltioMap/components/ClusteredMarkers/index.d.ts +1 -0
- package/cjs/ReltioMap/components/ClusteredMarkers/index.js +5 -0
- package/cjs/ReltioMap/components/DrawingManager/DrawingManager.d.ts +2 -0
- package/cjs/ReltioMap/components/DrawingManager/DrawingManager.js +9 -0
- package/cjs/ReltioMap/components/DrawingManager/index.d.ts +1 -0
- package/cjs/ReltioMap/components/DrawingManager/index.js +5 -0
- package/cjs/ReltioMap/components/DrawingManager/useDrawingManager.d.ts +7 -0
- package/cjs/ReltioMap/components/DrawingManager/useDrawingManager.js +40 -0
- package/cjs/ReltioMap/components/EntityMarker/EntityMarker.d.ts +8 -7
- package/cjs/ReltioMap/components/EntityMarker/EntityMarker.js +22 -22
- package/cjs/ReltioMap/components/EntityMarker/EntityMarker.spec.js +151 -66
- package/cjs/ReltioMap/components/Polygon/Polygon.d.ts +7 -0
- package/cjs/ReltioMap/components/Polygon/Polygon.js +11 -0
- package/cjs/ReltioMap/components/Polygon/index.d.ts +1 -0
- package/cjs/ReltioMap/components/Polygon/index.js +5 -0
- package/cjs/ReltioMap/components/Polygon/usePolygon.d.ts +10 -0
- package/cjs/ReltioMap/components/Polygon/usePolygon.js +39 -0
- package/cjs/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.d.ts +2 -1
- package/cjs/ReltioMap/components/TopCenterMapControls/TopCenterMapControls.js +6 -5
- package/cjs/ReltioMap/components/TopRightMapControls/TopRightMapControls.d.ts +2 -1
- package/cjs/ReltioMap/components/TopRightMapControls/TopRightMapControls.js +3 -2
- package/cjs/ReltioMap/components/TopRightMapControls/styles.js +1 -1
- package/cjs/ReltioMap/helpers.d.ts +3 -2
- package/cjs/ReltioMap/types.d.ts +6 -3
- package/cjs/features/graph/DataModelGraph/hooks/useFakeCenterNode.test.js +1 -0
- package/cjs/hooks/useMarkers/referenceHelpers.js +25 -2
- package/cjs/hooks/useMarkers/referenceHelpers.test.js +10 -1
- package/features/graph/DataModelGraph/hooks/useFakeCenterNode.test.js +1 -0
- package/hooks/useMarkers/referenceHelpers.js +25 -2
- package/hooks/useMarkers/referenceHelpers.test.js +10 -1
- package/package.json +3 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type DrawingManagerProps = {
|
|
2
|
+
drawingMode: google.maps.drawing.OverlayType;
|
|
3
|
+
onPolygonComplete?: (polygon: google.maps.Polygon) => void;
|
|
4
|
+
onCircleComplete?: (circle: google.maps.Circle) => void;
|
|
5
|
+
options: google.maps.drawing.DrawingManagerOptions;
|
|
6
|
+
};
|
|
7
|
+
export declare const useDrawingManager: ({ drawingMode, onPolygonComplete, onCircleComplete, options }: DrawingManagerProps) => google.maps.drawing.DrawingManager;
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.useDrawingManager = void 0;
|
|
15
|
+
var react_google_maps_1 = require("@vis.gl/react-google-maps");
|
|
16
|
+
var react_1 = require("react");
|
|
17
|
+
var useDrawingManager = function (_a) {
|
|
18
|
+
var drawingMode = _a.drawingMode, onPolygonComplete = _a.onPolygonComplete, onCircleComplete = _a.onCircleComplete, options = _a.options;
|
|
19
|
+
var map = (0, react_google_maps_1.useMap)();
|
|
20
|
+
var drawing = (0, react_google_maps_1.useMapsLibrary)('drawing');
|
|
21
|
+
var _b = (0, react_1.useState)(null), drawingManager = _b[0], setDrawingManager = _b[1];
|
|
22
|
+
(0, react_1.useEffect)(function () {
|
|
23
|
+
if (!map || !drawing)
|
|
24
|
+
return;
|
|
25
|
+
var newDrawingManager = new drawing.DrawingManager(__assign({ map: map, drawingMode: drawingMode }, options));
|
|
26
|
+
if (onPolygonComplete) {
|
|
27
|
+
newDrawingManager.addListener('polygoncomplete', onPolygonComplete);
|
|
28
|
+
}
|
|
29
|
+
if (onCircleComplete) {
|
|
30
|
+
newDrawingManager.addListener('circlecomplete', onCircleComplete);
|
|
31
|
+
}
|
|
32
|
+
setDrawingManager(newDrawingManager);
|
|
33
|
+
return function () {
|
|
34
|
+
google.maps.event.clearInstanceListeners(newDrawingManager);
|
|
35
|
+
newDrawingManager.setMap(null);
|
|
36
|
+
};
|
|
37
|
+
}, [drawing, map, options, drawingMode, onPolygonComplete, onCircleComplete]);
|
|
38
|
+
return drawingManager;
|
|
39
|
+
};
|
|
40
|
+
exports.useDrawingManager = useDrawingManager;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import React, { ComponentProps } from 'react';
|
|
2
|
+
import { AdvancedMarker } from '@vis.gl/react-google-maps';
|
|
3
|
+
import { GeoPoint } from '@reltio/mdm-sdk';
|
|
4
4
|
type Props = {
|
|
5
|
-
marker:
|
|
6
|
-
onClick: (marker:
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
marker: GeoPoint;
|
|
6
|
+
onClick: (marker: GeoPoint) => void;
|
|
7
|
+
clusterer?: (advancedMarker: google.maps.marker.AdvancedMarkerElement | null, id: string) => void;
|
|
8
|
+
} & Omit<ComponentProps<typeof AdvancedMarker>, 'onClick' | 'position' | 'onMouseEnter' | 'onMouseLeave'>;
|
|
9
|
+
declare const _default: React.MemoExoticComponent<({ marker, onClick, clusterer, ...otherProps }: Props) => React.JSX.Element>;
|
|
9
10
|
export default _default;
|
|
@@ -47,7 +47,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
var react_1 = __importStar(require("react"));
|
|
49
49
|
var ramda_1 = require("ramda");
|
|
50
|
-
var
|
|
50
|
+
var react_google_maps_1 = require("@vis.gl/react-google-maps");
|
|
51
51
|
var ProfileCard_1 = require("../../../ProfileCard");
|
|
52
52
|
var Popper_1 = require("../../../Popper");
|
|
53
53
|
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
@@ -56,39 +56,39 @@ var marker_inline_svg_1 = require("./icons/marker.inline.svg");
|
|
|
56
56
|
var marker_hover_inline_svg_1 = require("./icons/marker-hover.inline.svg");
|
|
57
57
|
var styles_1 = require("./styles");
|
|
58
58
|
var HIDE_DEBOUNCE_INTERVAL = 50;
|
|
59
|
-
var MARKER_WIDTH = 22;
|
|
60
59
|
var MARKER_HEIGHT = 32;
|
|
61
60
|
var MARKER_CARD_MARGIN = 8;
|
|
62
61
|
var hoveredMarkerIcon = (0, mdm_sdk_1.svg2Url)(marker_hover_inline_svg_1.HOVERED_MARKER);
|
|
63
62
|
var markerIcon = (0, mdm_sdk_1.svg2Url)(marker_inline_svg_1.MARKER);
|
|
64
63
|
var EntityMarker = function (_a) {
|
|
65
|
-
var
|
|
64
|
+
var _b;
|
|
65
|
+
var marker = _a.marker, onClick = _a.onClick, clusterer = _a.clusterer, otherProps = __rest(_a, ["marker", "onClick", "clusterer"]);
|
|
66
66
|
var styles = (0, styles_1.useStyles)();
|
|
67
|
-
var
|
|
68
|
-
var _b = (0, react_1.useState)(false), hovered = _b[0], setHovered = _b[1];
|
|
67
|
+
var _c = (0, react_1.useState)(false), hovered = _c[0], setHovered = _c[1];
|
|
69
68
|
var activeEntityUri = (0, react_1.useContext)(EntityMarkerContext_1.EntityMarkerContext).activeEntityUri;
|
|
70
69
|
var isActive = (0, ramda_1.pathEq)(['entity', 'uri'], activeEntityUri, marker);
|
|
71
|
-
var position = { lat: marker.point.lat, lng: marker.point.lng };
|
|
70
|
+
var position = (0, react_1.useMemo)(function () { return ({ lat: marker.point.lat, lng: marker.point.lng }); }, [marker.point]);
|
|
72
71
|
var setHoveredDebounced = (0, react_1.useCallback)((0, mdm_sdk_1.debounce)(setHovered, HIDE_DEBOUNCE_INTERVAL), []);
|
|
73
72
|
var onMouseOver = (0, react_1.useCallback)(function () { return setHoveredDebounced(true); }, [setHoveredDebounced]);
|
|
74
73
|
var onMouseOut = (0, react_1.useCallback)(function () { return setHoveredDebounced(false); }, [setHoveredDebounced]);
|
|
75
74
|
var handleClick = (0, react_1.useCallback)(function () { return onClick(marker); }, [onClick, marker]);
|
|
75
|
+
var advancedMarkerRef = (0, react_1.useRef)(null);
|
|
76
|
+
var ref = (0, react_1.useCallback)(function (advancedMarker) {
|
|
77
|
+
clusterer === null || clusterer === void 0 ? void 0 : clusterer(advancedMarker, marker.id);
|
|
78
|
+
advancedMarkerRef.current = advancedMarker;
|
|
79
|
+
}, [clusterer, marker.id]);
|
|
80
|
+
var anchorEl = (_b = advancedMarkerRef.current) === null || _b === void 0 ? void 0 : _b.element;
|
|
76
81
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
77
|
-
react_1.default.createElement(Popper_1.Popper, { anchorEl:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
closeBoxURL: '',
|
|
89
|
-
enableEventPropagation: true,
|
|
90
|
-
disableAutoPan: true
|
|
91
|
-
}, position: position },
|
|
92
|
-
react_1.default.createElement("span", { ref: popperAnchor }))));
|
|
82
|
+
anchorEl && (react_1.default.createElement(Popper_1.Popper, { anchorEl: anchorEl, open: hovered, className: styles.popper, modal: false, placement: "top", modifiers: [
|
|
83
|
+
{
|
|
84
|
+
name: 'offset',
|
|
85
|
+
options: {
|
|
86
|
+
offset: [0, MARKER_HEIGHT + MARKER_CARD_MARGIN]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
] },
|
|
90
|
+
react_1.default.createElement(ProfileCard_1.ProfileCard, { entity: marker.entity, onMouseOver: onMouseOver, onMouseOut: onMouseOut }))),
|
|
91
|
+
react_1.default.createElement(react_google_maps_1.AdvancedMarker, __assign({ ref: ref, position: position, onClick: handleClick, onMouseEnter: onMouseOver, onMouseLeave: onMouseOut }, otherProps),
|
|
92
|
+
react_1.default.createElement("img", { "data-reltio-id": "marker-icon", src: hovered || isActive ? hoveredMarkerIcon : markerIcon }))));
|
|
93
93
|
};
|
|
94
94
|
exports.default = (0, react_1.memo)(EntityMarker);
|
|
@@ -10,82 +10,167 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
13
49
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
51
|
};
|
|
16
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
53
|
var react_1 = __importDefault(require("react"));
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var Popper_1 = require("../../../Popper");
|
|
54
|
+
var react_2 = require("@testing-library/react");
|
|
55
|
+
var user_event_1 = __importDefault(require("@testing-library/user-event"));
|
|
56
|
+
var mdm_sdk_1 = require("@reltio/mdm-sdk");
|
|
22
57
|
var EntityMarker_1 = __importDefault(require("./EntityMarker"));
|
|
23
|
-
var marker_inline_svg_1 = require("./icons/marker.inline.svg");
|
|
24
|
-
var marker_hover_inline_svg_1 = require("./icons/marker-hover.inline.svg");
|
|
25
|
-
var googleMock_test_data_1 = require("../../googleMock.test-data");
|
|
26
58
|
var EntityMarkerContext_1 = require("../../../contexts/EntityMarkerContext");
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
jest.mock('@
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
|
|
59
|
+
var marker_hover_inline_svg_1 = require("./icons/marker-hover.inline.svg");
|
|
60
|
+
var marker_inline_svg_1 = require("./icons/marker.inline.svg");
|
|
61
|
+
var MdmModuleContext_1 = require("../../../contexts/MdmModuleContext");
|
|
62
|
+
jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { debounce: jest.fn(function (fn, _delay) { return jest.requireActual('@reltio/mdm-sdk').debounce(fn, 0); }) })); });
|
|
63
|
+
jest.mock('@vis.gl/react-google-maps', function () {
|
|
64
|
+
// The only reason why all the mock stuff inlcuding 'requre' inside the jest.mock is that
|
|
65
|
+
// mocks with forwardRef doesn't work outside (in beforeEach/beforeAll)
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
67
|
+
var React = require('react');
|
|
68
|
+
var forwardRef = React.forwardRef, useRef = React.useRef, useImperativeHandle = React.useImperativeHandle;
|
|
69
|
+
// eslint-disable-next-line react/prop-types
|
|
70
|
+
var AdvancedMarker = forwardRef(function (_a, ref) {
|
|
71
|
+
var children = _a.children, onClick = _a.onClick, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave;
|
|
72
|
+
var divRef = useRef(null);
|
|
73
|
+
useImperativeHandle(ref, function () { return ({
|
|
74
|
+
element: divRef.current
|
|
75
|
+
}); });
|
|
76
|
+
return (React.createElement("div", { ref: divRef, onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave }, children));
|
|
77
|
+
});
|
|
78
|
+
AdvancedMarker.displayName = 'AdvancedMarker';
|
|
79
|
+
return __assign(__assign({}, jest.requireActual('@vis.gl/react-google-maps')), { AdvancedMarker: AdvancedMarker });
|
|
80
|
+
});
|
|
81
|
+
var hoveredMarkerIcon = (0, mdm_sdk_1.svg2Url)(marker_hover_inline_svg_1.HOVERED_MARKER);
|
|
82
|
+
var markerIcon = (0, mdm_sdk_1.svg2Url)(marker_inline_svg_1.MARKER);
|
|
83
|
+
describe('EntityMarker', function () {
|
|
84
|
+
var mockMarker = {
|
|
85
|
+
id: 'someId',
|
|
86
|
+
label: 'Entity 123',
|
|
87
|
+
point: { lat: 10, lng: 20 },
|
|
88
|
+
entity: { uri: 'entities/123', label: 'Entity label 123', type: 'hcp' }
|
|
38
89
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
expect(infoBox.length).toBe(1);
|
|
55
|
-
expect(infoBox.prop('options').disableAutoPan).toBe(true);
|
|
56
|
-
expect(infoBox.prop('position')).toEqual(markerProp.point);
|
|
90
|
+
var mockOnClick = jest.fn();
|
|
91
|
+
var metadata = { entityTypes: [], relationTypes: [] };
|
|
92
|
+
var defaultProps = { marker: mockMarker, onClick: mockOnClick };
|
|
93
|
+
var setUp = function (props, contextValue) {
|
|
94
|
+
if (props === void 0) { props = defaultProps; }
|
|
95
|
+
if (contextValue === void 0) { contextValue = {}; }
|
|
96
|
+
var Providers = function (_a) {
|
|
97
|
+
var children = _a.children;
|
|
98
|
+
return (react_1.default.createElement(MdmModuleContext_1.MdmModuleProvider, { values: { metadata: metadata } }, children));
|
|
99
|
+
};
|
|
100
|
+
return (0, react_2.render)(react_1.default.createElement(EntityMarkerContext_1.EntityMarkerContext.Provider, { value: contextValue },
|
|
101
|
+
react_1.default.createElement(EntityMarker_1.default, __assign({}, props))), { wrapper: Providers });
|
|
102
|
+
};
|
|
103
|
+
afterEach(function () {
|
|
104
|
+
jest.clearAllMocks();
|
|
57
105
|
});
|
|
58
|
-
it('should
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
(0, test_utils_1.rerenderWrapper)(component);
|
|
64
|
-
expect(component.find(Popper_1.Popper).prop('open')).toBe(true);
|
|
65
|
-
expect(component.find(api_1.Marker).prop('icon')).toMatchObject({
|
|
66
|
-
url: hoveredMarkerUrl
|
|
106
|
+
it('should render correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
107
|
+
return __generator(this, function (_a) {
|
|
108
|
+
setUp();
|
|
109
|
+
expect(react_2.screen.getByTestId('marker-icon')).toHaveAttribute('src', markerIcon);
|
|
110
|
+
return [2 /*return*/];
|
|
67
111
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
112
|
+
}); });
|
|
113
|
+
it('should call onClick when marker is clicked', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
114
|
+
return __generator(this, function (_a) {
|
|
115
|
+
switch (_a.label) {
|
|
116
|
+
case 0:
|
|
117
|
+
setUp();
|
|
118
|
+
return [4 /*yield*/, user_event_1.default.click(react_2.screen.getByTestId('marker-icon'))];
|
|
119
|
+
case 1:
|
|
120
|
+
_a.sent();
|
|
121
|
+
expect(mockOnClick).toHaveBeenCalledWith(mockMarker);
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
}
|
|
73
124
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
125
|
+
}); });
|
|
126
|
+
it('should show ProfileCard on mouse enter and hide on mouse leave', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
|
+
var _a;
|
|
128
|
+
return __generator(this, function (_b) {
|
|
129
|
+
switch (_b.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
setUp();
|
|
132
|
+
return [4 /*yield*/, user_event_1.default.hover(react_2.screen.getByTestId('marker-icon'))];
|
|
133
|
+
case 1:
|
|
134
|
+
_b.sent();
|
|
135
|
+
_a = expect;
|
|
136
|
+
return [4 /*yield*/, react_2.screen.findByText(mockMarker.entity.label)];
|
|
137
|
+
case 2:
|
|
138
|
+
_a.apply(void 0, [_b.sent()]).toBeInTheDocument();
|
|
139
|
+
return [4 /*yield*/, user_event_1.default.unhover(react_2.screen.getByTestId('marker-icon'))];
|
|
140
|
+
case 3:
|
|
141
|
+
_b.sent();
|
|
142
|
+
expect(react_2.screen.queryByText(mockMarker.entity.label)).not.toBeInTheDocument();
|
|
143
|
+
return [2 /*return*/];
|
|
144
|
+
}
|
|
89
145
|
});
|
|
90
|
-
});
|
|
146
|
+
}); });
|
|
147
|
+
it('should use hovered marker icon when hovered', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
148
|
+
return __generator(this, function (_a) {
|
|
149
|
+
switch (_a.label) {
|
|
150
|
+
case 0:
|
|
151
|
+
setUp();
|
|
152
|
+
return [4 /*yield*/, user_event_1.default.hover(react_2.screen.getByTestId('marker-icon'))];
|
|
153
|
+
case 1:
|
|
154
|
+
_a.sent();
|
|
155
|
+
expect(react_2.screen.getByTestId('marker-icon')).toHaveAttribute('src', hoveredMarkerIcon);
|
|
156
|
+
return [2 /*return*/];
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}); });
|
|
160
|
+
it('should use active marker icon when marker is active', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
161
|
+
return __generator(this, function (_a) {
|
|
162
|
+
setUp(undefined, { activeEntityUri: mockMarker.entity.uri });
|
|
163
|
+
expect(react_2.screen.getByTestId('marker-icon')).toHaveAttribute('src', hoveredMarkerIcon);
|
|
164
|
+
return [2 /*return*/];
|
|
165
|
+
});
|
|
166
|
+
}); });
|
|
167
|
+
it('should call clusterer with advancedMarker and marker id', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
168
|
+
var clusterer;
|
|
169
|
+
return __generator(this, function (_a) {
|
|
170
|
+
clusterer = jest.fn();
|
|
171
|
+
setUp(__assign(__assign({}, defaultProps), { clusterer: clusterer }));
|
|
172
|
+
expect(clusterer).toHaveBeenCalledWith(expect.objectContaining({ element: expect.any(HTMLElement) }), mockMarker.id);
|
|
173
|
+
return [2 /*return*/];
|
|
174
|
+
});
|
|
175
|
+
}); });
|
|
91
176
|
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const Polygon: import("react").ForwardRefExoticComponent<{
|
|
2
|
+
options: google.maps.PolygonOptions;
|
|
3
|
+
} & {
|
|
4
|
+
onInit?: (polygon: google.maps.Polygon) => void;
|
|
5
|
+
onDragEnd?: (e: google.maps.MapMouseEvent) => void;
|
|
6
|
+
onMouseUp?: (e: google.maps.MapMouseEvent) => void;
|
|
7
|
+
} & import("react").RefAttributes<google.maps.Polygon>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Polygon = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var usePolygon_1 = require("./usePolygon");
|
|
6
|
+
exports.Polygon = (0, react_1.forwardRef)(function (props, ref) {
|
|
7
|
+
var polygon = (0, usePolygon_1.usePolygon)(props);
|
|
8
|
+
(0, react_1.useImperativeHandle)(ref, function () { return polygon; }, []);
|
|
9
|
+
return null;
|
|
10
|
+
});
|
|
11
|
+
exports.Polygon.displayName = 'Polygon';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Polygon } from './Polygon';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type PolygonEventProps = {
|
|
2
|
+
onInit?: (polygon: google.maps.Polygon) => void;
|
|
3
|
+
onDragEnd?: (e: google.maps.MapMouseEvent) => void;
|
|
4
|
+
onMouseUp?: (e: google.maps.MapMouseEvent) => void;
|
|
5
|
+
};
|
|
6
|
+
export type PolygonProps = {
|
|
7
|
+
options: google.maps.PolygonOptions;
|
|
8
|
+
} & PolygonEventProps;
|
|
9
|
+
export declare const usePolygon: (props: PolygonProps) => google.maps.Polygon;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.usePolygon = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var react_google_maps_1 = require("@vis.gl/react-google-maps");
|
|
6
|
+
var usePolygon = function (props) {
|
|
7
|
+
var onInit = props.onInit, onDragEnd = props.onDragEnd, onMouseUp = props.onMouseUp, options = props.options;
|
|
8
|
+
var polygon = (0, react_1.useMemo)(function () { return new google.maps.Polygon(); }, []);
|
|
9
|
+
(0, react_1.useEffect)(function () {
|
|
10
|
+
polygon.setOptions(options);
|
|
11
|
+
}, [polygon, options]);
|
|
12
|
+
var map = (0, react_google_maps_1.useMap)();
|
|
13
|
+
(0, react_1.useEffect)(function () {
|
|
14
|
+
if (!map)
|
|
15
|
+
return;
|
|
16
|
+
polygon.setMap(map);
|
|
17
|
+
if (onInit) {
|
|
18
|
+
onInit(polygon);
|
|
19
|
+
}
|
|
20
|
+
return function () {
|
|
21
|
+
polygon.setMap(null);
|
|
22
|
+
};
|
|
23
|
+
}, [map]);
|
|
24
|
+
(0, react_1.useEffect)(function () {
|
|
25
|
+
if (!polygon)
|
|
26
|
+
return;
|
|
27
|
+
if (onDragEnd) {
|
|
28
|
+
google.maps.event.addListener(polygon, 'dragend', onDragEnd);
|
|
29
|
+
}
|
|
30
|
+
if (onMouseUp) {
|
|
31
|
+
google.maps.event.addListener(polygon, 'mouseup', onMouseUp);
|
|
32
|
+
}
|
|
33
|
+
return function () {
|
|
34
|
+
google.maps.event.clearInstanceListeners(polygon);
|
|
35
|
+
};
|
|
36
|
+
}, [polygon, onDragEnd, onMouseUp]);
|
|
37
|
+
return polygon;
|
|
38
|
+
};
|
|
39
|
+
exports.usePolygon = usePolygon;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
type Props = {
|
|
3
|
+
className?: string;
|
|
3
4
|
isSearchOnMapMove: boolean;
|
|
4
5
|
onChangeIsSearchOnMapMove: (value: boolean) => void;
|
|
5
6
|
};
|
|
6
|
-
export declare const TopCenterMapControls: ({ isSearchOnMapMove, onChangeIsSearchOnMapMove }: Props) => React.JSX.Element;
|
|
7
|
+
export declare const TopCenterMapControls: ({ className, isSearchOnMapMove, onChangeIsSearchOnMapMove }: Props) => React.JSX.Element;
|
|
7
8
|
export {};
|
|
@@ -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(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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) },
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
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:
|
|
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;
|
package/cjs/ReltioMap/types.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Marker } from '@googlemaps/markerclusterer';
|
|
2
2
|
export type DrawingMode = 'circle' | 'polygon';
|
|
3
3
|
export type DrawingModes = DrawingMode[];
|
|
4
|
-
export type
|
|
5
|
-
|
|
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;
|