@map-colonies/react-components 3.11.0 → 3.12.3
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/CHANGELOG.md +290 -234
- package/dist/cesium-map/index.d.ts +1 -0
- package/dist/cesium-map/index.js +1 -0
- package/dist/cesium-map/layers/imagery.layer.js +9 -5
- package/dist/cesium-map/layers-manager.d.ts +10 -2
- package/dist/cesium-map/layers-manager.js +19 -1
- package/dist/cesium-map/map-legend/MapLegend.css +135 -0
- package/dist/cesium-map/map-legend/MapLegend.d.ts +15 -0
- package/dist/cesium-map/map-legend/MapLegend.js +57 -0
- package/dist/cesium-map/map-legend/MapLegendList.d.ts +13 -0
- package/dist/cesium-map/map-legend/MapLegendList.js +43 -0
- package/dist/cesium-map/map-legend/MapLegendSidebar.d.ts +16 -0
- package/dist/cesium-map/map-legend/MapLegendSidebar.js +20 -0
- package/dist/cesium-map/map-legend/MapLegendToggle.d.ts +7 -0
- package/dist/cesium-map/map-legend/MapLegendToggle.js +20 -0
- package/dist/cesium-map/map-legend/index.d.ts +3 -0
- package/dist/cesium-map/map-legend/index.js +14 -0
- package/dist/cesium-map/map.css +6 -1
- package/dist/cesium-map/map.d.ts +14 -1
- package/dist/cesium-map/map.js +53 -21
- package/dist/cesium-map/proxied.types.d.ts +9 -1
- package/dist/cesium-map/proxied.types.js +33 -1
- package/dist/cesium-map/settings/settings.css +5 -2
- package/package.json +3 -3
- package/src/lib/cesium-map/data-sources/drawings.data-source.tsx +0 -1
- package/src/lib/cesium-map/index.ts +1 -0
- package/src/lib/cesium-map/layers/imagery.layer.tsx +12 -7
- package/src/lib/cesium-map/layers-manager.ts +30 -1
- package/src/lib/cesium-map/map-legend/MapLegend.css +135 -0
- package/src/lib/cesium-map/map-legend/MapLegend.tsx +92 -0
- package/src/lib/cesium-map/map-legend/MapLegendList.tsx +47 -0
- package/src/lib/cesium-map/map-legend/MapLegendSidebar.tsx +55 -0
- package/src/lib/cesium-map/map-legend/MapLegendToggle.tsx +31 -0
- package/src/lib/cesium-map/map-legend/index.tsx +3 -0
- package/src/lib/cesium-map/map-legend/legends-sidebar.stories.tsx +201 -0
- package/src/lib/cesium-map/map.css +6 -1
- package/src/lib/cesium-map/map.tsx +85 -20
- package/src/lib/cesium-map/proxied.types.ts +19 -7
- package/src/lib/cesium-map/settings/settings.css +5 -2
- package/src/lib/cesium-map/terrain-providers/terrain-provider-heights-tool.stories.tsx +2 -2
|
@@ -22,16 +22,29 @@ var point_geojson_1 = require("./tools/geojson/point.geojson");
|
|
|
22
22
|
var INC = 1;
|
|
23
23
|
var DEC = -1;
|
|
24
24
|
var LayerManager = /** @class */ (function () {
|
|
25
|
-
function LayerManager(mapViewer) {
|
|
25
|
+
function LayerManager(mapViewer, legendsExtractor, onLayersUpdate) {
|
|
26
|
+
var _this = this;
|
|
26
27
|
this.mapViewer = mapViewer;
|
|
27
28
|
// eslint-disable-next-line
|
|
28
29
|
this.layers = this.mapViewer.imageryLayers._layers;
|
|
30
|
+
this.legendsList = [];
|
|
31
|
+
this.legendsExtractor = legendsExtractor;
|
|
32
|
+
this.layerUpdated = new cesium_1.Event();
|
|
33
|
+
if (onLayersUpdate) {
|
|
34
|
+
this.layerUpdated.addEventListener(onLayersUpdate, this);
|
|
35
|
+
}
|
|
36
|
+
this.mapViewer.imageryLayers.layerRemoved.addEventListener(function () {
|
|
37
|
+
_this.setLegends();
|
|
38
|
+
_this.layerUpdated.raiseEvent();
|
|
39
|
+
});
|
|
29
40
|
}
|
|
30
41
|
/* eslint-disable */
|
|
31
42
|
LayerManager.prototype.addMetaToLayer = function (meta, layerPredicate) {
|
|
32
43
|
var layer = this.layers.find(layerPredicate);
|
|
33
44
|
if (layer) {
|
|
34
45
|
layer.meta = meta;
|
|
46
|
+
this.setLegends();
|
|
47
|
+
this.layerUpdated.raiseEvent();
|
|
35
48
|
}
|
|
36
49
|
};
|
|
37
50
|
/* eslint-enable */
|
|
@@ -192,6 +205,11 @@ var LayerManager = /** @class */ (function () {
|
|
|
192
205
|
return ((_a = layer2.meta) === null || _a === void 0 ? void 0 : _a.zIndex) - ((_b = layer1.meta) === null || _b === void 0 ? void 0 : _b.zIndex);
|
|
193
206
|
});
|
|
194
207
|
};
|
|
208
|
+
LayerManager.prototype.setLegends = function () {
|
|
209
|
+
if (typeof this.legendsExtractor !== 'undefined') {
|
|
210
|
+
this.legendsList = this.legendsExtractor(this.layers);
|
|
211
|
+
}
|
|
212
|
+
};
|
|
195
213
|
LayerManager.prototype.getBaseLayersCount = function () {
|
|
196
214
|
var baseLayers = this.layers.filter(function (layer) {
|
|
197
215
|
var parentId = lodash_1.get(layer.meta, 'parentBasetMapId');
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
.mapLegendSidebarContainer {
|
|
2
|
+
width: 340px;
|
|
3
|
+
height: 100%;
|
|
4
|
+
position: relative;
|
|
5
|
+
overflow-y: auto;
|
|
6
|
+
overflow-x: hidden;
|
|
7
|
+
font-size: 16px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Disable drawer animation */
|
|
11
|
+
|
|
12
|
+
.mapLegendSidebarContainer.mdc-drawer--animate {
|
|
13
|
+
transform: translateX(0) !important;
|
|
14
|
+
transition: none !important;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.mapLegendSidebarContainer.mdc-drawer--dismissible {
|
|
18
|
+
position: relative;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
div.MuiPaper-root {
|
|
22
|
+
transition: none !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.mapLegendCloseBtn {
|
|
26
|
+
position: absolute;
|
|
27
|
+
top: 0;
|
|
28
|
+
right: 0;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
width: 50px;
|
|
31
|
+
height: 50px;
|
|
32
|
+
padding: 20px;
|
|
33
|
+
font-size: 24px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
body[dir='rtl'] .mapLegendCloseBtn {
|
|
37
|
+
right: unset;
|
|
38
|
+
left: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.mapLegendToggleContainer {
|
|
42
|
+
display: flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.mapLegendIcon {
|
|
48
|
+
width: 2.5rem;
|
|
49
|
+
height: 2.5rem;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.sidebarHeaderContainer {
|
|
53
|
+
text-align: center;
|
|
54
|
+
margin-top: 40px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.sidebarTitle {
|
|
58
|
+
font-size: 1.5rem;
|
|
59
|
+
font-weight: bold;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.mapLegend {
|
|
63
|
+
display: flex;
|
|
64
|
+
flex-direction: column;
|
|
65
|
+
align-items: center;
|
|
66
|
+
justify-content: center;
|
|
67
|
+
gap: 4px;
|
|
68
|
+
padding: 10px 14px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.layerNameContainer {
|
|
72
|
+
width: 90%;
|
|
73
|
+
display: flex;
|
|
74
|
+
justify-content: center;
|
|
75
|
+
align-items: center;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.layerName {
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
text-overflow: ellipsis;
|
|
81
|
+
white-space: nowrap;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.legendImg {
|
|
85
|
+
width: 90%;
|
|
86
|
+
height: 150px;
|
|
87
|
+
border: 1px solid black;
|
|
88
|
+
border-radius: 5px;
|
|
89
|
+
object-fit: cover;
|
|
90
|
+
cursor: pointer;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.legendActionsContainer {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: row;
|
|
96
|
+
align-self: center;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.legendAction:not(:last-child)::after {
|
|
100
|
+
content: '|';
|
|
101
|
+
margin: 0px 4px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.mapLegendsList {
|
|
105
|
+
display: flex;
|
|
106
|
+
flex-direction: column;
|
|
107
|
+
padding: 20px 0px;
|
|
108
|
+
width: 100%;
|
|
109
|
+
height: 90%;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.legendAction {
|
|
113
|
+
text-decoration: underline;
|
|
114
|
+
cursor: pointer;
|
|
115
|
+
font-size: 1.1rem;
|
|
116
|
+
transition: all 0.1s ease-in-out;
|
|
117
|
+
width: max-content;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.legendAction:hover {
|
|
121
|
+
filter: brightness(1.2);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.noLegendsContainer {
|
|
125
|
+
width: 100%;
|
|
126
|
+
height: 100%;
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
justify-content: center;
|
|
130
|
+
align-items: center;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.noLegendsMsg {
|
|
134
|
+
text-align: center;
|
|
135
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './MapLegend.css';
|
|
3
|
+
export interface IMapLegend {
|
|
4
|
+
layer?: string;
|
|
5
|
+
legendDoc?: string;
|
|
6
|
+
legendImg?: string;
|
|
7
|
+
legend?: Record<string, unknown>[];
|
|
8
|
+
}
|
|
9
|
+
interface MapLegendProps {
|
|
10
|
+
legend: IMapLegend;
|
|
11
|
+
docText?: string;
|
|
12
|
+
imgText?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const MapLegend: React.FC<MapLegendProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.MapLegend = void 0;
|
|
23
|
+
var react_1 = __importStar(require("react"));
|
|
24
|
+
var react_core_1 = require("@map-colonies/react-core");
|
|
25
|
+
var box_1 = require("../../box");
|
|
26
|
+
require("./MapLegend.css");
|
|
27
|
+
var MapLegend = function (_a) {
|
|
28
|
+
var _b = _a.legend, legendImg = _b.legendImg, legendDoc = _b.legendDoc, layer = _b.layer, docText = _a.docText, imgText = _a.imgText;
|
|
29
|
+
var handleLegendImgOpen = react_1.useCallback(function () {
|
|
30
|
+
// Open image in a new tab.
|
|
31
|
+
window.open(legendImg, '_blank');
|
|
32
|
+
}, [legendImg]);
|
|
33
|
+
var handleLegendDocOpen = react_1.useCallback(function () {
|
|
34
|
+
// Open doc in a new tab.
|
|
35
|
+
window.open(legendDoc, '_blank');
|
|
36
|
+
}, [legendDoc]);
|
|
37
|
+
var renderLayerName = react_1.useCallback(function () {
|
|
38
|
+
var MAX_LAYER_NAME_LENGTH = 15;
|
|
39
|
+
var layerNameContainer = (react_1.default.createElement(box_1.Box, { className: "layerNameContainer" },
|
|
40
|
+
react_1.default.createElement("h3", { style: { maxWidth: MAX_LAYER_NAME_LENGTH + "ch" }, className: "layerName" }, layer)));
|
|
41
|
+
if ((layer !== null && layer !== void 0 ? layer : '').length > MAX_LAYER_NAME_LENGTH) {
|
|
42
|
+
return react_1.default.createElement(react_core_1.Tooltip, { content: layer }, layerNameContainer);
|
|
43
|
+
}
|
|
44
|
+
return layerNameContainer;
|
|
45
|
+
}, [layer]);
|
|
46
|
+
var renderLinks = react_1.useCallback(function () {
|
|
47
|
+
return [
|
|
48
|
+
typeof legendImg === 'string' && (react_1.default.createElement("a", { className: "legendAction", href: legendImg, target: "_blank", rel: "noreferrer" }, imgText)),
|
|
49
|
+
typeof legendDoc === 'string' && (react_1.default.createElement("a", { className: "legendAction", href: legendDoc, target: "_blank", rel: "noreferrer" }, docText)),
|
|
50
|
+
];
|
|
51
|
+
}, [legendImg, imgText, legendDoc, docText]);
|
|
52
|
+
return (react_1.default.createElement(box_1.Box, { className: "mapLegend" },
|
|
53
|
+
renderLayerName(),
|
|
54
|
+
react_1.default.createElement("img", { alt: "Map Legend", className: "legendImg", src: legendImg, onClick: handleLegendImgOpen }),
|
|
55
|
+
react_1.default.createElement(box_1.Box, { className: "legendActionsContainer" }, renderLinks())));
|
|
56
|
+
};
|
|
57
|
+
exports.MapLegend = MapLegend;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IMapLegend } from './MapLegend';
|
|
3
|
+
import './MapLegend.css';
|
|
4
|
+
interface MapLegendListProps {
|
|
5
|
+
legends: IMapLegend[];
|
|
6
|
+
actionsTexts: {
|
|
7
|
+
docText: string;
|
|
8
|
+
imgText: string;
|
|
9
|
+
};
|
|
10
|
+
noLegendsText: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const MapLegendList: React.FC<MapLegendListProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.MapLegendList = void 0;
|
|
23
|
+
var react_1 = __importStar(require("react"));
|
|
24
|
+
var box_1 = require("../../box");
|
|
25
|
+
var MapLegend_1 = require("./MapLegend");
|
|
26
|
+
require("./MapLegend.css");
|
|
27
|
+
var MapLegendList = function (_a) {
|
|
28
|
+
var legends = _a.legends, _b = _a.actionsTexts, docText = _b.docText, imgText = _b.imgText, noLegendsText = _a.noLegendsText;
|
|
29
|
+
var handleNoLegends = react_1.useCallback(function () {
|
|
30
|
+
return (react_1.default.createElement(box_1.Box, { className: "noLegendsContainer" },
|
|
31
|
+
react_1.default.createElement("h2", { className: "noLegendsMsg" }, noLegendsText)));
|
|
32
|
+
}, [noLegendsText]);
|
|
33
|
+
var renderList = react_1.useCallback(function () {
|
|
34
|
+
if (!legends.length) {
|
|
35
|
+
return handleNoLegends();
|
|
36
|
+
}
|
|
37
|
+
return legends.map(function (legend, i) {
|
|
38
|
+
return (react_1.default.createElement(MapLegend_1.MapLegend, { key: legend.layer + "_" + i, legend: legend, docText: docText, imgText: imgText }));
|
|
39
|
+
});
|
|
40
|
+
}, [legends]);
|
|
41
|
+
return react_1.default.createElement(box_1.Box, { className: "mapLegendsList" }, renderList());
|
|
42
|
+
};
|
|
43
|
+
exports.MapLegendList = MapLegendList;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IMapLegend } from './MapLegend';
|
|
3
|
+
import './MapLegend.css';
|
|
4
|
+
interface MapLegendSidebarProps {
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
toggleSidebar: () => void;
|
|
7
|
+
title?: string;
|
|
8
|
+
noLegendsText?: string;
|
|
9
|
+
actionsTexts?: {
|
|
10
|
+
docText: string;
|
|
11
|
+
imgText: string;
|
|
12
|
+
};
|
|
13
|
+
legends?: IMapLegend[];
|
|
14
|
+
}
|
|
15
|
+
export declare const MapLegendSidebar: React.FC<MapLegendSidebarProps>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MapLegendSidebar = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var react_core_1 = require("@map-colonies/react-core");
|
|
9
|
+
var MapLegendList_1 = require("./MapLegendList");
|
|
10
|
+
require("./MapLegend.css");
|
|
11
|
+
var MapLegendSidebar = function (_a) {
|
|
12
|
+
var isOpen = _a.isOpen, toggleSidebar = _a.toggleSidebar, _b = _a.title, title = _b === void 0 ? 'Map Legends' : _b, _c = _a.noLegendsText, noLegendsText = _c === void 0 ? 'No legends to display...' : _c, _d = _a.actionsTexts, actionsTexts = _d === void 0 ? { docText: 'Docs', imgText: 'View Image' } : _d, _e = _a.legends, legends = _e === void 0 ? [] : _e;
|
|
13
|
+
return isOpen ? (react_1.default.createElement(react_core_1.Drawer, { className: "mapLegendSidebarContainer", modal: false, dismissible: true, open: isOpen },
|
|
14
|
+
react_1.default.createElement(react_core_1.DrawerHeader, { className: "sidebarHeaderContainer" },
|
|
15
|
+
react_1.default.createElement(react_core_1.DrawerTitle, { className: "sidebarTitle" }, title)),
|
|
16
|
+
react_1.default.createElement(react_core_1.DrawerContent, { className: "sidebarContent" },
|
|
17
|
+
react_1.default.createElement(react_core_1.Icon, { onClick: toggleSidebar, className: "mapLegendCloseBtn", icon: { icon: 'close', size: 'small' } }),
|
|
18
|
+
react_1.default.createElement(MapLegendList_1.MapLegendList, { noLegendsText: noLegendsText, legends: legends, actionsTexts: actionsTexts })))) : null;
|
|
19
|
+
};
|
|
20
|
+
exports.MapLegendSidebar = MapLegendSidebar;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MapLegendToggle = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var react_core_1 = require("@map-colonies/react-core");
|
|
9
|
+
var box_1 = require("../../box");
|
|
10
|
+
require("./MapLegend.css");
|
|
11
|
+
var legendIcon = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", "enable-background": "new 0 0 24 24", height: "24", width: "24", viewBox: "0 0 612 612" },
|
|
12
|
+
react_1.default.createElement("g", { xmlns: "http://www.w3.org/2000/svg" },
|
|
13
|
+
react_1.default.createElement("path", { d: "M322.4,173.9l-129,16.2l-4.6,21.4l25.3,4.7c16.5,3.9,19.8,9.9,16.2,26.4l-41.5,195.3c-10.9,50.5,5.9,74.3,45.5,74.3 c30.7,0,66.3-14.2,82.5-33.6l4.9-23.4c-11.3,9.9-27.7,13.9-38.6,13.9c-15.5,0-21.1-10.9-17.1-30L322.4,173.9z" }),
|
|
14
|
+
react_1.default.createElement("circle", { cx: "270.1", cy: "56.3", r: "56.3" }))));
|
|
15
|
+
var MapLegendToggle = function (_a) {
|
|
16
|
+
var onClick = _a.onClick;
|
|
17
|
+
return (react_1.default.createElement(box_1.Box, { onClick: onClick, className: "mapLegendToggleContainer" },
|
|
18
|
+
react_1.default.createElement(react_core_1.Icon, { icon: legendIcon, className: "mapLegendIcon" })));
|
|
19
|
+
};
|
|
20
|
+
exports.MapLegendToggle = MapLegendToggle;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./MapLegendToggle"), exports);
|
|
14
|
+
__exportStar(require("./MapLegendSidebar"), exports);
|
package/dist/cesium-map/map.css
CHANGED
|
@@ -40,7 +40,7 @@ body[dir='rtl'] .toolsContainer {
|
|
|
40
40
|
|
|
41
41
|
.sideToolsContainer {
|
|
42
42
|
display: flex;
|
|
43
|
-
flex-direction:
|
|
43
|
+
flex-direction: row;
|
|
44
44
|
gap: 8px;
|
|
45
45
|
z-index: 2000;
|
|
46
46
|
position: absolute;
|
|
@@ -52,3 +52,8 @@ body[dir='rtl'] .sideToolsContainer {
|
|
|
52
52
|
left: 40px;
|
|
53
53
|
right: unset;
|
|
54
54
|
}
|
|
55
|
+
|
|
56
|
+
.viewer {
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: row;
|
|
59
|
+
}
|
package/dist/cesium-map/map.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ import { ViewerProps } from 'resium/dist/types/src/Viewer/Viewer';
|
|
|
3
3
|
import { Viewer as CesiumViewerCls, TerrainProvider } from 'cesium';
|
|
4
4
|
import { Proj } from '../utils/projections';
|
|
5
5
|
import { IBaseMaps } from './settings/settings';
|
|
6
|
-
import
|
|
6
|
+
import { IMapLegend } from './map-legend';
|
|
7
|
+
import LayerManager, { LegendExtractor } from './layers-manager';
|
|
7
8
|
import { CesiumSceneModeEnum } from './map.types';
|
|
8
9
|
import './map.css';
|
|
9
10
|
export declare class CesiumViewer extends CesiumViewerCls {
|
|
@@ -23,6 +24,16 @@ export interface IContextMenuData {
|
|
|
23
24
|
};
|
|
24
25
|
handleClose: () => void;
|
|
25
26
|
}
|
|
27
|
+
interface ILegends {
|
|
28
|
+
legendsList?: IMapLegend[];
|
|
29
|
+
emptyText?: string;
|
|
30
|
+
title?: string;
|
|
31
|
+
actionsTexts?: {
|
|
32
|
+
docText: string;
|
|
33
|
+
imgText: string;
|
|
34
|
+
};
|
|
35
|
+
mapLegendsExtractor?: LegendExtractor;
|
|
36
|
+
}
|
|
26
37
|
export interface CesiumMapProps extends ViewerProps {
|
|
27
38
|
showMousePosition?: boolean;
|
|
28
39
|
showScale?: boolean;
|
|
@@ -41,6 +52,8 @@ export interface CesiumMapProps extends ViewerProps {
|
|
|
41
52
|
width: number;
|
|
42
53
|
dynamicHeightIncrement?: number;
|
|
43
54
|
};
|
|
55
|
+
legends?: ILegends;
|
|
44
56
|
}
|
|
45
57
|
export declare const useCesiumMap: () => CesiumViewer;
|
|
46
58
|
export declare const CesiumMap: React.FC<CesiumMapProps>;
|
|
59
|
+
export {};
|
package/dist/cesium-map/map.js
CHANGED
|
@@ -50,6 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
50
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
51
|
exports.CesiumMap = exports.useCesiumMap = exports.CesiumViewer = void 0;
|
|
52
52
|
var react_1 = __importStar(require("react"));
|
|
53
|
+
var react_dom_1 = require("react-dom");
|
|
53
54
|
var resium_1 = require("resium");
|
|
54
55
|
var cesium_1 = require("cesium");
|
|
55
56
|
var lodash_1 = require("lodash");
|
|
@@ -59,6 +60,7 @@ var projections_1 = require("../utils/projections");
|
|
|
59
60
|
var coordinates_tracker_tool_1 = require("./tools/coordinates-tracker.tool");
|
|
60
61
|
var scale_tracker_tool_1 = require("./tools/scale-tracker.tool");
|
|
61
62
|
var settings_1 = require("./settings/settings");
|
|
63
|
+
var map_legend_1 = require("./map-legend");
|
|
62
64
|
var layers_manager_1 = __importDefault(require("./layers-manager"));
|
|
63
65
|
var map_types_1 = require("./map.types");
|
|
64
66
|
require("./map.css");
|
|
@@ -85,18 +87,20 @@ var useCesiumMap = function () {
|
|
|
85
87
|
};
|
|
86
88
|
exports.useCesiumMap = useCesiumMap;
|
|
87
89
|
var CesiumMap = function (props) {
|
|
88
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
90
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
89
91
|
var ref = react_1.useRef(null);
|
|
90
|
-
var
|
|
91
|
-
var
|
|
92
|
-
var
|
|
93
|
-
var
|
|
94
|
-
var
|
|
95
|
-
var
|
|
96
|
-
var
|
|
97
|
-
var
|
|
98
|
-
var
|
|
99
|
-
var
|
|
92
|
+
var _p = react_1.useState(), mapViewRef = _p[0], setMapViewRef = _p[1];
|
|
93
|
+
var _q = react_1.useState(), projection = _q[0], setProjection = _q[1];
|
|
94
|
+
var _r = react_1.useState(), showMousePosition = _r[0], setShowMousePosition = _r[1];
|
|
95
|
+
var _s = react_1.useState(), showScale = _s[0], setShowScale = _s[1];
|
|
96
|
+
var _t = react_1.useState(), locale = _t[0], setLocale = _t[1];
|
|
97
|
+
var _u = react_1.useState(), cameraState = _u[0], setCameraState = _u[1];
|
|
98
|
+
var _v = react_1.useState(), sceneModes = _v[0], setSceneModes = _v[1];
|
|
99
|
+
var _w = react_1.useState([]), legendsList = _w[0], setLegendsList = _w[1];
|
|
100
|
+
var _x = react_1.useState(), baseMaps = _x[0], setBaseMaps = _x[1];
|
|
101
|
+
var _y = react_1.useState(false), showImageryMenu = _y[0], setShowImageryMenu = _y[1];
|
|
102
|
+
var _z = react_1.useState(undefined), imageryMenuPosition = _z[0], setImageryMenuPosition = _z[1];
|
|
103
|
+
var _0 = react_1.useState(false), isLegendsSidebarOpen = _0[0], setIsLegendsSidebarOpen = _0[1];
|
|
100
104
|
var viewerProps = __assign({ fullscreenButton: true, timeline: false, animation: false, baseLayerPicker: false, geocoder: false, navigationHelpButton: false, homeButton: false, sceneModePicker: false }, props);
|
|
101
105
|
var getImageryMenuStyle = function (x, y, menuWidth, menuHeight, menuDynamicHeightIncrement) {
|
|
102
106
|
var container = mapViewRef.container;
|
|
@@ -114,7 +118,6 @@ var CesiumMap = function (props) {
|
|
|
114
118
|
var _a;
|
|
115
119
|
if (ref.current) {
|
|
116
120
|
var viewer = ref.current.cesiumElement;
|
|
117
|
-
viewer.layersManager = new layers_manager_1.default(viewer);
|
|
118
121
|
if (props.imageryContextMenu) {
|
|
119
122
|
viewer.screenSpaceEventHandler.setInputAction(function (evt) {
|
|
120
123
|
// console.log('RIGHT click', evt.position);
|
|
@@ -126,6 +129,15 @@ var CesiumMap = function (props) {
|
|
|
126
129
|
}
|
|
127
130
|
setMapViewRef((_a = ref.current) === null || _a === void 0 ? void 0 : _a.cesiumElement);
|
|
128
131
|
}, [ref, props.imageryContextMenu]);
|
|
132
|
+
react_1.useEffect(function () {
|
|
133
|
+
var _a;
|
|
134
|
+
if (mapViewRef) {
|
|
135
|
+
mapViewRef.layersManager = new layers_manager_1.default(mapViewRef, (_a = props.legends) === null || _a === void 0 ? void 0 : _a.mapLegendsExtractor, function () {
|
|
136
|
+
var _a;
|
|
137
|
+
setLegendsList((_a = mapViewRef === null || mapViewRef === void 0 ? void 0 : mapViewRef.layersManager) === null || _a === void 0 ? void 0 : _a.legendsList);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}, [mapViewRef]);
|
|
129
141
|
react_1.useEffect(function () {
|
|
130
142
|
var _a;
|
|
131
143
|
setSceneModes((_a = props.sceneModes) !== null && _a !== void 0 ? _a : [
|
|
@@ -243,25 +255,45 @@ var CesiumMap = function (props) {
|
|
|
243
255
|
});
|
|
244
256
|
}
|
|
245
257
|
}, [props.zoom, props.center, mapViewRef]);
|
|
246
|
-
|
|
258
|
+
var bindCustomToolsToViewer = react_1.useCallback(function () {
|
|
259
|
+
return (mapViewRef &&
|
|
260
|
+
react_dom_1.createPortal(react_1.default.createElement(react_1.default.Fragment, null,
|
|
261
|
+
react_1.default.createElement(box_1.Box, { className: "sideToolsContainer" },
|
|
262
|
+
react_1.default.createElement(settings_1.CesiumSettings, { sceneModes: sceneModes, baseMaps: baseMaps, locale: locale }),
|
|
263
|
+
react_1.default.createElement(map_legend_1.MapLegendToggle, { onClick: function () {
|
|
264
|
+
return setIsLegendsSidebarOpen(!isLegendsSidebarOpen);
|
|
265
|
+
} })),
|
|
266
|
+
react_1.default.createElement(box_1.Box, { className: "toolsContainer" },
|
|
267
|
+
showMousePosition === true ? (react_1.default.createElement(coordinates_tracker_tool_1.CoordinatesTrackerTool, { projection: projection })) : (react_1.default.createElement(react_1.default.Fragment, null)),
|
|
268
|
+
showScale === true ? react_1.default.createElement(scale_tracker_tool_1.ScaleTrackerTool, { locale: locale }) : react_1.default.createElement(react_1.default.Fragment, null))), document.querySelector('.cesium-viewer')));
|
|
269
|
+
}, [
|
|
270
|
+
baseMaps,
|
|
271
|
+
locale,
|
|
272
|
+
mapViewRef,
|
|
273
|
+
projection,
|
|
274
|
+
sceneModes,
|
|
275
|
+
showMousePosition,
|
|
276
|
+
showScale,
|
|
277
|
+
isLegendsSidebarOpen,
|
|
278
|
+
]);
|
|
279
|
+
return (react_1.default.createElement(resium_1.Viewer, __assign({ className: "viewer", full: true, ref: ref }, viewerProps),
|
|
247
280
|
react_1.default.createElement(MapViewProvider, { value: mapViewRef },
|
|
281
|
+
react_1.default.createElement(map_legend_1.MapLegendSidebar, { title: (_a = props.legends) === null || _a === void 0 ? void 0 : _a.title, isOpen: isLegendsSidebarOpen, toggleSidebar: function () {
|
|
282
|
+
return setIsLegendsSidebarOpen(!isLegendsSidebarOpen);
|
|
283
|
+
}, noLegendsText: (_b = props.legends) === null || _b === void 0 ? void 0 : _b.emptyText, legends: (_d = (_c = props.legends) === null || _c === void 0 ? void 0 : _c.legendsList) !== null && _d !== void 0 ? _d : legendsList, actionsTexts: (_e = props.legends) === null || _e === void 0 ? void 0 : _e.actionsTexts }),
|
|
248
284
|
props.children,
|
|
249
|
-
|
|
250
|
-
react_1.default.createElement(settings_1.CesiumSettings, { sceneModes: sceneModes, baseMaps: baseMaps, locale: locale })),
|
|
251
|
-
react_1.default.createElement(box_1.Box, { className: "toolsContainer" },
|
|
252
|
-
showMousePosition === true ? (react_1.default.createElement(coordinates_tracker_tool_1.CoordinatesTrackerTool, { projection: projection })) : (react_1.default.createElement(react_1.default.Fragment, null)),
|
|
253
|
-
showScale === true ? react_1.default.createElement(scale_tracker_tool_1.ScaleTrackerTool, { locale: locale }) : react_1.default.createElement(react_1.default.Fragment, null)),
|
|
285
|
+
bindCustomToolsToViewer(),
|
|
254
286
|
props.imageryContextMenu &&
|
|
255
287
|
showImageryMenu &&
|
|
256
288
|
imageryMenuPosition &&
|
|
257
289
|
react_1.default.cloneElement(props.imageryContextMenu, {
|
|
258
|
-
data: (
|
|
290
|
+
data: (_f = mapViewRef === null || mapViewRef === void 0 ? void 0 : mapViewRef.layersManager) === null || _f === void 0 ? void 0 : _f.findLayerByPOI(imageryMenuPosition.x, imageryMenuPosition.y),
|
|
259
291
|
position: {
|
|
260
292
|
x: imageryMenuPosition.x,
|
|
261
293
|
y: imageryMenuPosition.y,
|
|
262
294
|
},
|
|
263
|
-
style: getImageryMenuStyle(imageryMenuPosition.x, imageryMenuPosition.y, (
|
|
264
|
-
size: (
|
|
295
|
+
style: getImageryMenuStyle(imageryMenuPosition.x, imageryMenuPosition.y, (_h = (_g = props.imageryContextMenuSize) === null || _g === void 0 ? void 0 : _g.width) !== null && _h !== void 0 ? _h : DEFAULT_WIDTH, (_k = (_j = props.imageryContextMenuSize) === null || _j === void 0 ? void 0 : _j.height) !== null && _k !== void 0 ? _k : DEFAULT_HEIGHT, (_m = (_l = props.imageryContextMenuSize) === null || _l === void 0 ? void 0 : _l.dynamicHeightIncrement) !== null && _m !== void 0 ? _m : DEFAULT_DYNAMIC_HEIGHT_INCREMENT),
|
|
296
|
+
size: (_o = props.imageryContextMenuSize) !== null && _o !== void 0 ? _o : {
|
|
265
297
|
height: DEFAULT_HEIGHT,
|
|
266
298
|
width: DEFAULT_WIDTH,
|
|
267
299
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BoundingSphere, Cartesian2, Cartesian3, Cartographic, CesiumTerrainProvider, ConstantPositionProperty, ConstantProperty, Ellipsoid, EllipsoidTerrainProvider, GeographicTilingScheme, LabelStyle, PolylineDashMaterialProperty, Rectangle, Resource, VerticalOrigin } from 'cesium';
|
|
2
2
|
export declare class CesiumPolylineDashMaterialProperty extends PolylineDashMaterialProperty {
|
|
3
3
|
}
|
|
4
4
|
export declare class CesiumConstantProperty extends ConstantProperty {
|
|
@@ -17,6 +17,14 @@ export declare class CesiumEllipsoid extends Ellipsoid {
|
|
|
17
17
|
}
|
|
18
18
|
export declare class CesiumGeographicTilingScheme extends GeographicTilingScheme {
|
|
19
19
|
}
|
|
20
|
+
export declare class CesiumRectangle extends Rectangle {
|
|
21
|
+
}
|
|
22
|
+
export declare class CesiumResource extends Resource {
|
|
23
|
+
}
|
|
24
|
+
export declare class CesiumEllipsoidTerrainProvider extends EllipsoidTerrainProvider {
|
|
25
|
+
}
|
|
26
|
+
export declare class CesiumCesiumTerrainProvider extends CesiumTerrainProvider {
|
|
27
|
+
}
|
|
20
28
|
export declare const CesiumVerticalOrigin: typeof VerticalOrigin;
|
|
21
29
|
export declare const CesiumLabelStyle: typeof LabelStyle;
|
|
22
30
|
export { sampleTerrainMostDetailed as cesiumSampleTerrainMostDetailed } from 'cesium';
|
|
@@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
15
15
|
};
|
|
16
16
|
})();
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.cesiumSampleTerrainMostDetailed = exports.CesiumLabelStyle = exports.CesiumVerticalOrigin = exports.CesiumGeographicTilingScheme = exports.CesiumEllipsoid = exports.CesiumBoundingSphere = exports.CesiumCartographic = exports.CesiumCartesian3 = exports.CesiumCartesian2 = exports.CesiumConstantPositionProperty = exports.CesiumConstantProperty = exports.CesiumPolylineDashMaterialProperty = void 0;
|
|
18
|
+
exports.cesiumSampleTerrainMostDetailed = exports.CesiumLabelStyle = exports.CesiumVerticalOrigin = exports.CesiumCesiumTerrainProvider = exports.CesiumEllipsoidTerrainProvider = exports.CesiumResource = exports.CesiumRectangle = exports.CesiumGeographicTilingScheme = exports.CesiumEllipsoid = exports.CesiumBoundingSphere = exports.CesiumCartographic = exports.CesiumCartesian3 = exports.CesiumCartesian2 = exports.CesiumConstantPositionProperty = exports.CesiumConstantProperty = exports.CesiumPolylineDashMaterialProperty = void 0;
|
|
19
19
|
var cesium_1 = require("cesium");
|
|
20
20
|
// PROXIED CLASSES
|
|
21
21
|
var CesiumPolylineDashMaterialProperty = /** @class */ (function (_super) {
|
|
@@ -90,6 +90,38 @@ var CesiumGeographicTilingScheme = /** @class */ (function (_super) {
|
|
|
90
90
|
return CesiumGeographicTilingScheme;
|
|
91
91
|
}(cesium_1.GeographicTilingScheme));
|
|
92
92
|
exports.CesiumGeographicTilingScheme = CesiumGeographicTilingScheme;
|
|
93
|
+
var CesiumRectangle = /** @class */ (function (_super) {
|
|
94
|
+
__extends(CesiumRectangle, _super);
|
|
95
|
+
function CesiumRectangle() {
|
|
96
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
97
|
+
}
|
|
98
|
+
return CesiumRectangle;
|
|
99
|
+
}(cesium_1.Rectangle));
|
|
100
|
+
exports.CesiumRectangle = CesiumRectangle;
|
|
101
|
+
var CesiumResource = /** @class */ (function (_super) {
|
|
102
|
+
__extends(CesiumResource, _super);
|
|
103
|
+
function CesiumResource() {
|
|
104
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
105
|
+
}
|
|
106
|
+
return CesiumResource;
|
|
107
|
+
}(cesium_1.Resource));
|
|
108
|
+
exports.CesiumResource = CesiumResource;
|
|
109
|
+
var CesiumEllipsoidTerrainProvider = /** @class */ (function (_super) {
|
|
110
|
+
__extends(CesiumEllipsoidTerrainProvider, _super);
|
|
111
|
+
function CesiumEllipsoidTerrainProvider() {
|
|
112
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
113
|
+
}
|
|
114
|
+
return CesiumEllipsoidTerrainProvider;
|
|
115
|
+
}(cesium_1.EllipsoidTerrainProvider));
|
|
116
|
+
exports.CesiumEllipsoidTerrainProvider = CesiumEllipsoidTerrainProvider;
|
|
117
|
+
var CesiumCesiumTerrainProvider = /** @class */ (function (_super) {
|
|
118
|
+
__extends(CesiumCesiumTerrainProvider, _super);
|
|
119
|
+
function CesiumCesiumTerrainProvider() {
|
|
120
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
121
|
+
}
|
|
122
|
+
return CesiumCesiumTerrainProvider;
|
|
123
|
+
}(cesium_1.CesiumTerrainProvider));
|
|
124
|
+
exports.CesiumCesiumTerrainProvider = CesiumCesiumTerrainProvider;
|
|
93
125
|
// PROXIED ENUMS
|
|
94
126
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
95
127
|
exports.CesiumVerticalOrigin = cesium_1.VerticalOrigin;
|