@mwater/visualization 5.5.0 → 5.6.0
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/lib/MWaterContextComponent.d.ts +1 -1
- package/lib/MWaterGlobalFiltersComponent.d.ts +2 -2
- package/lib/MWaterGlobalFiltersComponent.js +11 -20
- package/lib/MWaterLoaderComponent.d.ts +4 -13
- package/lib/MWaterLoaderComponent.js +2 -11
- package/lib/UndoStack.d.ts +2 -1
- package/lib/UndoStack.js +12 -6
- package/lib/dashboards/DashboardComponent.js +5 -4
- package/lib/dashboards/DashboardDesign.d.ts +1 -1
- package/lib/dashboards/ServerDashboardDataSource.js +0 -10
- package/lib/dashboards/SettingsModalComponent.js +1 -1
- package/lib/datagrids/DatagridComponent.js +22 -2
- package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -3
- package/lib/datagrids/DatagridDesignerComponent.js +108 -120
- package/lib/datagrids/DatagridViewComponent.js +3 -2
- package/lib/datagrids/OrderBysDesignerComponent.d.ts +7 -7
- package/lib/datagrids/OrderBysDesignerComponent.js +19 -28
- package/lib/index.css +45 -2
- package/lib/index.d.ts +5 -5
- package/lib/index.js +2 -3
- package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +8 -1
- package/lib/layouts/blocks/BlocksDisplayComponent.js +46 -4
- package/lib/maps/BufferLayer.js +12 -0
- package/lib/maps/BufferLayerDesign.d.ts +1 -1
- package/lib/maps/BufferLayerDesignerComponent.js +2 -2
- package/lib/maps/ChoroplethLayer.js +12 -0
- package/lib/maps/ChoroplethLayerDesign.d.ts +5 -2
- package/lib/maps/ChoroplethLayerDesigner.d.ts +10 -32
- package/lib/maps/ChoroplethLayerDesigner.js +58 -89
- package/lib/maps/DirectMapDataSource.js +0 -10
- package/lib/maps/EditHoverOver.d.ts +4 -3
- package/lib/maps/EditHoverOver.js +3 -3
- package/lib/maps/HoverContent.js +1 -1
- package/lib/maps/LeafletMapComponent.js +10 -19
- package/lib/maps/MapComponent.js +0 -1
- package/lib/maps/MapUtils.js +10 -1
- package/lib/maps/MarkersLayer.js +18 -2
- package/lib/maps/MarkersLayerDesign.d.ts +1 -1
- package/lib/maps/MarkersLayerDesignerComponent.d.ts +12 -41
- package/lib/maps/MarkersLayerDesignerComponent.js +81 -111
- package/lib/maps/ServerMapDataSource.js +0 -10
- package/lib/maps/VectorMapViewComponent.js +1 -9
- package/lib/maps/symbols/font-awesome/asterisk.png +0 -0
- package/lib/maps/symbols/font-awesome/ban.png +0 -0
- package/lib/maps/symbols/font-awesome/beer.png +0 -0
- package/lib/maps/symbols/font-awesome/bell.png +0 -0
- package/lib/maps/symbols/font-awesome/bolt.png +0 -0
- package/lib/maps/symbols/font-awesome/building.png +0 -0
- package/lib/maps/symbols/font-awesome/bullseye.png +0 -0
- package/lib/maps/symbols/font-awesome/bus.png +0 -0
- package/lib/maps/symbols/font-awesome/caret-up.png +0 -0
- package/lib/maps/symbols/font-awesome/certificate.png +0 -0
- package/lib/maps/symbols/font-awesome/check-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/check.png +0 -0
- package/lib/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
- package/lib/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
- package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
- package/lib/maps/symbols/font-awesome/cloud.png +0 -0
- package/lib/maps/symbols/font-awesome/comment.png +0 -0
- package/lib/maps/symbols/font-awesome/crosshairs.png +0 -0
- package/lib/maps/symbols/font-awesome/dot-circle-o.png +0 -0
- package/lib/maps/symbols/font-awesome/exclamation-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
- package/lib/maps/symbols/font-awesome/female.png +0 -0
- package/lib/maps/symbols/font-awesome/file.png +0 -0
- package/lib/maps/symbols/font-awesome/flag.png +0 -0
- package/lib/maps/symbols/font-awesome/flask.png +0 -0
- package/lib/maps/symbols/font-awesome/h-square.png +0 -0
- package/lib/maps/symbols/font-awesome/home.png +0 -0
- package/lib/maps/symbols/font-awesome/info-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/male.png +0 -0
- package/lib/maps/symbols/font-awesome/medkit.png +0 -0
- package/lib/maps/symbols/font-awesome/mobile.png +0 -0
- package/lib/maps/symbols/font-awesome/plus-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/plus-square.png +0 -0
- package/lib/maps/symbols/font-awesome/plus.png +0 -0
- package/lib/maps/symbols/font-awesome/square.png +0 -0
- package/lib/maps/symbols/font-awesome/star.png +0 -0
- package/lib/maps/symbols/font-awesome/thumbs-down.png +0 -0
- package/lib/maps/symbols/font-awesome/thumbs-up.png +0 -0
- package/lib/maps/symbols/font-awesome/ticket.png +0 -0
- package/lib/maps/symbols/font-awesome/times-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/times.png +0 -0
- package/lib/maps/symbols/font-awesome/tint.png +0 -0
- package/lib/maps/symbols/font-awesome/tree.png +0 -0
- package/lib/maps/symbols/font-awesome/university.png +0 -0
- package/lib/maps/symbols/font-awesome/usd.png +0 -0
- package/lib/maps/symbols/font-awesome/user.png +0 -0
- package/lib/maps/symbols/font-awesome/users.png +0 -0
- package/lib/maps/symbols/font-awesome/wheelchair.png +0 -0
- package/lib/maps/symbols/sdf-ize.sh +93 -0
- package/lib/maps/vectorMaps.d.ts +1 -0
- package/lib/maps/vectorMaps.js +20 -36
- package/lib/mwater_table_selection/IndicatorsListComponent.d.ts +4 -2
- package/lib/mwater_table_selection/IndicatorsListComponent.js +103 -34
- package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.d.ts +18 -0
- package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.js +80 -0
- package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.d.ts +26 -0
- package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.js +237 -51
- package/lib/mwater_table_selection/MWaterTableSelectComponent.d.ts +2 -2
- package/lib/mwater_table_selection/MWaterTableSelectComponent.js +9 -4
- package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.d.ts +19 -0
- package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.js +111 -0
- package/lib/quickfilter/QuickfiltersComponent.d.ts +3 -102
- package/lib/quickfilter/QuickfiltersComponent.js +53 -110
- package/lib/quickfilter/TextLiteralComponent.d.ts +23 -47
- package/lib/quickfilter/TextLiteralComponent.js +85 -82
- package/lib/widgets/MapWidget.js +4 -2
- package/lib/widgets/text/ExprItemEditorComponent.d.ts +3 -8
- package/lib/widgets/text/ExprItemEditorComponent.js +36 -33
- package/lib/widgets/text/ExprUpdateModalComponent.d.ts +1 -0
- package/package.json +2 -3
- package/src/MWaterContextComponent.tsx +1 -1
- package/src/{MWaterGlobalFiltersComponent.ts → MWaterGlobalFiltersComponent.tsx} +32 -33
- package/src/{MWaterLoaderComponent.ts → MWaterLoaderComponent.tsx} +17 -18
- package/src/UndoStack.ts +14 -6
- package/src/dashboards/DashboardComponent.tsx +5 -4
- package/src/dashboards/DashboardDesign.ts +1 -1
- package/src/dashboards/ServerDashboardDataSource.ts +0 -12
- package/src/dashboards/SettingsModalComponent.tsx +1 -1
- package/src/datagrids/DatagridComponent.tsx +30 -2
- package/src/datagrids/DatagridDesignerComponent.tsx +241 -229
- package/src/datagrids/DatagridViewComponent.tsx +3 -2
- package/src/datagrids/OrderBysDesignerComponent.tsx +61 -70
- package/src/index.css +45 -2
- package/src/index.ts +5 -11
- package/src/layouts/blocks/BlocksDisplayComponent.tsx +60 -5
- package/src/maps/BufferLayer.ts +14 -1
- package/src/maps/BufferLayerDesign.ts +1 -1
- package/src/maps/BufferLayerDesignerComponent.tsx +2 -1
- package/src/maps/ChoroplethLayer.ts +20 -7
- package/src/maps/ChoroplethLayerDesign.ts +5 -2
- package/src/maps/ChoroplethLayerDesigner.tsx +169 -165
- package/src/maps/DirectMapDataSource.ts +0 -12
- package/src/maps/EditHoverOver.tsx +9 -5
- package/src/maps/HoverContent.tsx +1 -1
- package/src/maps/LeafletMapComponent.tsx +10 -19
- package/src/maps/MapComponent.ts +0 -1
- package/src/maps/MapUtils.ts +13 -1
- package/src/maps/MarkersLayer.ts +22 -5
- package/src/maps/MarkersLayerDesign.ts +1 -1
- package/src/maps/MarkersLayerDesignerComponent.tsx +360 -0
- package/src/maps/ServerMapDataSource.ts +0 -12
- package/src/maps/VectorMapViewComponent.tsx +2 -13
- package/src/maps/symbols/font-awesome/asterisk.png +0 -0
- package/src/maps/symbols/font-awesome/ban.png +0 -0
- package/src/maps/symbols/font-awesome/beer.png +0 -0
- package/src/maps/symbols/font-awesome/bell.png +0 -0
- package/src/maps/symbols/font-awesome/bolt.png +0 -0
- package/src/maps/symbols/font-awesome/building.png +0 -0
- package/src/maps/symbols/font-awesome/bullseye.png +0 -0
- package/src/maps/symbols/font-awesome/bus.png +0 -0
- package/src/maps/symbols/font-awesome/caret-up.png +0 -0
- package/src/maps/symbols/font-awesome/certificate.png +0 -0
- package/src/maps/symbols/font-awesome/check-circle.png +0 -0
- package/src/maps/symbols/font-awesome/check.png +0 -0
- package/src/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
- package/src/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
- package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
- package/src/maps/symbols/font-awesome/cloud.png +0 -0
- package/src/maps/symbols/font-awesome/comment.png +0 -0
- package/src/maps/symbols/font-awesome/crosshairs.png +0 -0
- package/src/maps/symbols/font-awesome/dot-circle-o.png +0 -0
- package/src/maps/symbols/font-awesome/exclamation-circle.png +0 -0
- package/src/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
- package/src/maps/symbols/font-awesome/female.png +0 -0
- package/src/maps/symbols/font-awesome/file.png +0 -0
- package/src/maps/symbols/font-awesome/flag.png +0 -0
- package/src/maps/symbols/font-awesome/flask.png +0 -0
- package/src/maps/symbols/font-awesome/h-square.png +0 -0
- package/src/maps/symbols/font-awesome/home.png +0 -0
- package/src/maps/symbols/font-awesome/info-circle.png +0 -0
- package/src/maps/symbols/font-awesome/male.png +0 -0
- package/src/maps/symbols/font-awesome/medkit.png +0 -0
- package/src/maps/symbols/font-awesome/mobile.png +0 -0
- package/src/maps/symbols/font-awesome/plus-circle.png +0 -0
- package/src/maps/symbols/font-awesome/plus-square.png +0 -0
- package/src/maps/symbols/font-awesome/plus.png +0 -0
- package/src/maps/symbols/font-awesome/square.png +0 -0
- package/src/maps/symbols/font-awesome/star.png +0 -0
- package/src/maps/symbols/font-awesome/thumbs-down.png +0 -0
- package/src/maps/symbols/font-awesome/thumbs-up.png +0 -0
- package/src/maps/symbols/font-awesome/ticket.png +0 -0
- package/src/maps/symbols/font-awesome/times-circle.png +0 -0
- package/src/maps/symbols/font-awesome/times.png +0 -0
- package/src/maps/symbols/font-awesome/tint.png +0 -0
- package/src/maps/symbols/font-awesome/tree.png +0 -0
- package/src/maps/symbols/font-awesome/university.png +0 -0
- package/src/maps/symbols/font-awesome/usd.png +0 -0
- package/src/maps/symbols/font-awesome/user.png +0 -0
- package/src/maps/symbols/font-awesome/users.png +0 -0
- package/src/maps/symbols/font-awesome/wheelchair.png +0 -0
- package/src/maps/symbols/sdf-ize.sh +93 -0
- package/src/maps/vectorMaps.tsx +20 -44
- package/src/mwater_table_selection/IndicatorsListComponent.tsx +165 -37
- package/src/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.tsx +111 -0
- package/src/mwater_table_selection/MWaterCompleteTableSelectComponent.tsx +373 -37
- package/src/mwater_table_selection/MWaterTableSelectComponent.tsx +12 -8
- package/src/mwater_table_selection/MWaterWorkflowsSelectComponent.tsx +159 -0
- package/src/quickfilter/{QuickfiltersComponent.ts → QuickfiltersComponent.tsx} +165 -158
- package/src/quickfilter/TextLiteralComponent.tsx +197 -0
- package/src/widgets/MapWidget.tsx +9 -1
- package/src/widgets/text/ExprItemEditorComponent.tsx +83 -77
- package/src/widgets/text/ExprUpdateModalComponent.tsx +1 -0
- package/test/UndoStackTests.ts +52 -1
- package/.storybook/config.js +0 -7
- package/.storybook/head.html +0 -3
- package/.storybook/webpack.config.js +0 -15
- package/src/maps/BingLayer.ts +0 -146
- package/src/maps/MarkersLayerDesignerComponent.ts +0 -374
- package/src/quickfilter/TextLiteralComponent.ts +0 -165
- package/stories/UpdateableComponent.js +0 -29
- package/stories/consoles.js +0 -202
- package/stories/dashboards.js +0 -217
- package/stories/datagridDesign.js +0 -114
- package/stories/datagrids.js +0 -69
- package/stories/dates.js +0 -80
- package/stories/exprcomponent.js +0 -43
- package/stories/index.js +0 -18
- package/stories/leaflet.js +0 -59
- package/stories/maps.js +0 -24
- package/stories/pivotChart.js +0 -235
|
@@ -42,6 +42,27 @@ const layoutOptions_1 = require("../../dashboards/layoutOptions");
|
|
|
42
42
|
that can be used to drag new items into the layout. Palette is only displayed if onItemsChange is not null
|
|
43
43
|
*/
|
|
44
44
|
class BlocksDisplayComponent extends react_1.default.Component {
|
|
45
|
+
state = {
|
|
46
|
+
isPaletteVisible: false,
|
|
47
|
+
isManuallyHidden: false
|
|
48
|
+
};
|
|
49
|
+
componentDidUpdate(prevProps) {
|
|
50
|
+
// If editing state changes (onItemsChange becomes available/unavailable)
|
|
51
|
+
if (prevProps.onItemsChange !== this.props.onItemsChange) {
|
|
52
|
+
if (this.props.onItemsChange && !this.state.isManuallyHidden) {
|
|
53
|
+
this.setState({ isPaletteVisible: true });
|
|
54
|
+
}
|
|
55
|
+
else if (!this.props.onItemsChange) {
|
|
56
|
+
this.setState({ isPaletteVisible: false, isManuallyHidden: false });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
handlePaletteToggle = () => {
|
|
61
|
+
this.setState(prevState => ({
|
|
62
|
+
isPaletteVisible: !prevState.isPaletteVisible,
|
|
63
|
+
isManuallyHidden: !prevState.isManuallyHidden
|
|
64
|
+
}));
|
|
65
|
+
};
|
|
45
66
|
handleBlockDrop = (sourceBlock, targetBlock, side) => {
|
|
46
67
|
// Remove source from items
|
|
47
68
|
let items = blockUtils.removeBlock(this.props.items, sourceBlock);
|
|
@@ -121,8 +142,28 @@ class BlocksDisplayComponent extends react_1.default.Component {
|
|
|
121
142
|
});
|
|
122
143
|
}
|
|
123
144
|
renderPalette() {
|
|
124
|
-
return (react_1.default.createElement("div", { key: "palette", style: {
|
|
145
|
+
return (react_1.default.createElement("div", { key: "palette", style: {
|
|
146
|
+
width: 141,
|
|
147
|
+
height: "100%",
|
|
148
|
+
position: "absolute",
|
|
149
|
+
top: 0,
|
|
150
|
+
left: 0,
|
|
151
|
+
transition: "transform 0.3s ease-in-out",
|
|
152
|
+
transform: this.state.isPaletteVisible ? "translateX(0)" : "translateX(-100%)"
|
|
153
|
+
} },
|
|
125
154
|
react_1.default.createElement("div", { className: "mwater-visualization-palette", style: { height: "100%" } },
|
|
155
|
+
react_1.default.createElement("div", { style: {
|
|
156
|
+
position: "absolute",
|
|
157
|
+
right: -14,
|
|
158
|
+
top: 0,
|
|
159
|
+
background: "#363b3e",
|
|
160
|
+
color: "white",
|
|
161
|
+
padding: "5px 3px 5px 5px",
|
|
162
|
+
cursor: "pointer",
|
|
163
|
+
borderRadius: "0 3px 3px 0",
|
|
164
|
+
zIndex: 1001
|
|
165
|
+
}, onClick: this.handlePaletteToggle },
|
|
166
|
+
react_1.default.createElement("i", { className: `fa fa-chevron-${this.state.isPaletteVisible ? 'left' : 'right'}` })),
|
|
126
167
|
react_1.default.createElement(PaletteItemComponent_1.default, { createItem: this.createBlockItem({ type: "widget", widgetType: "Text", design: { style: "title" } }), title: react_1.default.createElement("i", { className: "fa fa-font" }), subtitle: T `Title` }),
|
|
127
168
|
react_1.default.createElement(PaletteItemComponent_1.default, { createItem: this.createBlockItem({ type: "widget", widgetType: "Text", design: {} }), title: react_1.default.createElement("i", { className: "fa fa-align-left" }), subtitle: T `Text` }),
|
|
128
169
|
react_1.default.createElement(PaletteItemComponent_1.default, { createItem: this.createBlockItem({ type: "widget", aspectRatio: 1.4, widgetType: "Image", design: {} }), title: react_1.default.createElement("i", { className: "fa fa-picture-o" }), subtitle: T `Image` }),
|
|
@@ -178,15 +219,16 @@ class BlocksDisplayComponent extends react_1.default.Component {
|
|
|
178
219
|
innerParentStyle = {};
|
|
179
220
|
innerParentStyle.maxWidth = layoutOptions.maximumWidth || undefined;
|
|
180
221
|
return (react_1.default.createElement(layoutOptions_1.DashboardStyleWrapper, { style: { width: "100%", height: "100%", overflow: "hidden", position: "relative" }, layoutOptions: layoutOptions },
|
|
181
|
-
this.renderPalette(),
|
|
222
|
+
react_1.default.createElement("div", { className: "mwater-visualization-palette-container" }, this.renderPalette()),
|
|
182
223
|
react_1.default.createElement("div", { style: {
|
|
183
224
|
position: "absolute",
|
|
184
|
-
left: 141,
|
|
225
|
+
left: this.state.isPaletteVisible ? 141 : 0,
|
|
185
226
|
top: 0,
|
|
186
227
|
bottom: 0,
|
|
187
228
|
right: 0,
|
|
188
229
|
overflowX: "auto",
|
|
189
|
-
overflowY: "scroll"
|
|
230
|
+
overflowY: "scroll",
|
|
231
|
+
transition: "left 0.3s ease-in-out"
|
|
190
232
|
}, className: `mwater-visualization-block-parent-outer mwater-visualization-block-editing` },
|
|
191
233
|
react_1.default.createElement("div", { key: "inner", className: `mwater-visualization-block-parent-inner mwater-visualization-block-parent-inner-${this.props.style || "default"}`, style: innerParentStyle }, this.renderBlock(this.props.items, false, 0)))));
|
|
192
234
|
}
|
package/lib/maps/BufferLayer.js
CHANGED
|
@@ -777,6 +777,18 @@ marker-fill: ` +
|
|
|
777
777
|
aggrNeed: "none"
|
|
778
778
|
});
|
|
779
779
|
draft.filter = exprCleaner.cleanExpr(design.filter || null, { table: design.table });
|
|
780
|
+
// Clean hover over expressions
|
|
781
|
+
if (design.table && design.hoverOver && design.hoverOver.items) {
|
|
782
|
+
for (let i = 0; i < design.hoverOver.items.length; i++) {
|
|
783
|
+
const item = design.hoverOver.items[i];
|
|
784
|
+
if (item.value) {
|
|
785
|
+
draft.hoverOver.items[i].value = exprCleaner.cleanExpr(item.value || null, {
|
|
786
|
+
table: design.table,
|
|
787
|
+
aggrStatuses: ["individual", "literal"]
|
|
788
|
+
});
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
780
792
|
});
|
|
781
793
|
return design;
|
|
782
794
|
}
|
|
@@ -39,7 +39,7 @@ const ZoomLevelsComponent_1 = __importDefault(require("./ZoomLevelsComponent"));
|
|
|
39
39
|
const PopupFilterJoinsUtils = __importStar(require("./PopupFilterJoinsUtils"));
|
|
40
40
|
const bootstrap_1 = require("@mwater/react-library/lib/bootstrap");
|
|
41
41
|
const vectorMaps_1 = require("./vectorMaps");
|
|
42
|
-
const EditHoverOver_1 =
|
|
42
|
+
const EditHoverOver_1 = require("./EditHoverOver");
|
|
43
43
|
class BufferLayerDesignerComponent extends react_1.default.Component {
|
|
44
44
|
handleTableChange = (table) => {
|
|
45
45
|
this.props.onDesignChange({ ...this.props.design, table });
|
|
@@ -164,7 +164,7 @@ class BufferLayerDesignerComponent extends react_1.default.Component {
|
|
|
164
164
|
if (!this.props.design.table) {
|
|
165
165
|
return null;
|
|
166
166
|
}
|
|
167
|
-
return (react_1.default.createElement(EditHoverOver_1.
|
|
167
|
+
return (react_1.default.createElement(EditHoverOver_1.EditHoverOver, { design: this.props.design, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, idTable: this.props.design.table, defaultPopupFilterJoins: PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table), aggrStatuses: ["individual", "literal"] }));
|
|
168
168
|
}
|
|
169
169
|
render() {
|
|
170
170
|
return (react_1.default.createElement("div", null,
|
|
@@ -1434,6 +1434,18 @@ class ChoroplethLayer extends Layer_1.default {
|
|
|
1434
1434
|
else {
|
|
1435
1435
|
delete draft.filter;
|
|
1436
1436
|
}
|
|
1437
|
+
// Clean hover over expressions only for indirect mode with a valid table
|
|
1438
|
+
if (design.table && design.regionMode === "indirect" && design.hoverOver && design.hoverOver.items) {
|
|
1439
|
+
for (let i = 0; i < design.hoverOver.items.length; i++) {
|
|
1440
|
+
const item = design.hoverOver.items[i];
|
|
1441
|
+
if (item.value) {
|
|
1442
|
+
draft.hoverOver.items[i].value = exprCleaner.cleanExpr(item.value || null, {
|
|
1443
|
+
table: design.table,
|
|
1444
|
+
aggrStatuses: ["individual", "literal", "aggregate"]
|
|
1445
|
+
});
|
|
1446
|
+
}
|
|
1447
|
+
}
|
|
1448
|
+
}
|
|
1437
1449
|
if (design.detailLevel == null) {
|
|
1438
1450
|
draft.detailLevel = 0;
|
|
1439
1451
|
}
|
|
@@ -50,8 +50,11 @@ export default interface ChoroplethLayerDesign {
|
|
|
50
50
|
};
|
|
51
51
|
/** customizable filtering for popup. See PopupFilterJoins.md. Only when region mode is "indirect" */
|
|
52
52
|
popupFilterJoins: PopupFilterJoins;
|
|
53
|
-
/** Hover over items to display when hovering over a region. Only when region mode is "indirect"
|
|
54
|
-
|
|
53
|
+
/** Hover over items to display when hovering over a region. Only when region mode is "indirect".
|
|
54
|
+
* This is an aggregate hover over, but can contain individual items. If so, only the first row
|
|
55
|
+
* of the resulting query will be displayed.
|
|
56
|
+
*/
|
|
57
|
+
hoverOver?: {
|
|
55
58
|
items: HoverOverItem[];
|
|
56
59
|
};
|
|
57
60
|
/** minimum zoom level */
|
|
@@ -2,9 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { Schema, DataSource, Expr } from "@mwater/expressions";
|
|
3
3
|
import ChoroplethLayerDesign from "./ChoroplethLayerDesign";
|
|
4
4
|
import { JsonQLFilter } from "../index";
|
|
5
|
-
import EditPopupComponent from "./EditPopupComponent";
|
|
6
5
|
import { Axis } from "../axes/Axis";
|
|
7
|
-
import ScopeAndDetailLevelComponent from "./ScopeAndDetailLevelComponent";
|
|
8
6
|
export default class ChoroplethLayerDesigner extends React.Component<{
|
|
9
7
|
schema: Schema;
|
|
10
8
|
dataSource: DataSource;
|
|
@@ -30,34 +28,14 @@ export default class ChoroplethLayerDesigner extends React.Component<{
|
|
|
30
28
|
renderTable(): React.JSX.Element | null;
|
|
31
29
|
renderRegionsTable(): React.JSX.Element;
|
|
32
30
|
renderAdminRegionExpr(): React.JSX.Element | null;
|
|
33
|
-
renderScopeAndDetailLevel(): React.
|
|
34
|
-
renderDisplayNames(): React.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}, HTMLElement>;
|
|
44
|
-
renderBorderColor(): React.DetailedReactHTMLElement<{
|
|
45
|
-
className: string;
|
|
46
|
-
}, HTMLElement>;
|
|
47
|
-
renderFilter(): React.DetailedReactHTMLElement<{
|
|
48
|
-
className: string;
|
|
49
|
-
}, HTMLElement> | null;
|
|
50
|
-
renderPopup(): React.CElement<any, EditPopupComponent> | null;
|
|
51
|
-
renderHoverOver(): React.FunctionComponentElement<{
|
|
52
|
-
design: ChoroplethLayerDesign;
|
|
53
|
-
onDesignChange: (design: ChoroplethLayerDesign) => void;
|
|
54
|
-
schema: Schema;
|
|
55
|
-
dataSource: DataSource;
|
|
56
|
-
table: string;
|
|
57
|
-
idTable: string;
|
|
58
|
-
defaultPopupFilterJoins: {
|
|
59
|
-
[tableId: string]: Expr;
|
|
60
|
-
};
|
|
61
|
-
}> | null;
|
|
62
|
-
render(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
31
|
+
renderScopeAndDetailLevel(): React.JSX.Element;
|
|
32
|
+
renderDisplayNames(): React.JSX.Element;
|
|
33
|
+
renderColor(): React.JSX.Element | null;
|
|
34
|
+
renderColorAxis(): React.JSX.Element | null | undefined;
|
|
35
|
+
renderFillOpacity(): React.JSX.Element;
|
|
36
|
+
renderBorderColor(): React.JSX.Element;
|
|
37
|
+
renderFilter(): React.JSX.Element | null;
|
|
38
|
+
renderPopup(): React.JSX.Element | null;
|
|
39
|
+
renderHoverOver(): React.JSX.Element | null;
|
|
40
|
+
render(): React.JSX.Element;
|
|
63
41
|
}
|
|
@@ -28,7 +28,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
const lodash_1 = __importDefault(require("lodash"));
|
|
30
30
|
const react_1 = __importDefault(require("react"));
|
|
31
|
-
const R = react_1.default.createElement;
|
|
32
31
|
const immer_1 = require("immer");
|
|
33
32
|
const expressions_ui_1 = require("@mwater/expressions-ui");
|
|
34
33
|
const expressions_1 = require("@mwater/expressions");
|
|
@@ -41,7 +40,7 @@ const ZoomLevelsComponent_1 = __importDefault(require("./ZoomLevelsComponent"));
|
|
|
41
40
|
const ui = __importStar(require("@mwater/react-library/lib/bootstrap"));
|
|
42
41
|
const AdminScopeAndDetailLevelComponent_1 = __importDefault(require("./AdminScopeAndDetailLevelComponent"));
|
|
43
42
|
const ScopeAndDetailLevelComponent_1 = __importDefault(require("./ScopeAndDetailLevelComponent"));
|
|
44
|
-
const EditHoverOver_1 =
|
|
43
|
+
const EditHoverOver_1 = require("./EditHoverOver");
|
|
45
44
|
// Designer for a choropleth layer
|
|
46
45
|
class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
47
46
|
update(mutation) {
|
|
@@ -151,7 +150,8 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
151
150
|
react_1.default.createElement(expressions_ui_2.TableSelectComponent, { schema: this.props.schema, value: this.props.design.table, onChange: this.handleTableChange, filter: this.props.design.filter, onFilterChange: this.handleFilterChange })));
|
|
152
151
|
}
|
|
153
152
|
renderRegionsTable() {
|
|
154
|
-
|
|
153
|
+
// Regions tables are either "regions." or "regions_<name>" with a shape column
|
|
154
|
+
let options = lodash_1.default.map(lodash_1.default.filter(this.props.schema.getTables(), table => table.id.startsWith("regions.") || (table.id.startsWith("regions_") && this.props.schema.getColumn(table.id, "shape") != null)), table => ({ value: table.id, label: expressions_1.ExprUtils.localizeString(table.name) }));
|
|
155
155
|
const regionsTable = this.props.design.regionsTable || "admin_regions";
|
|
156
156
|
return (react_1.default.createElement("div", { className: "mb-3" },
|
|
157
157
|
react_1.default.createElement("label", { className: "text-muted" }, T `Regions Type`),
|
|
@@ -182,39 +182,27 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
182
182
|
renderScopeAndDetailLevel() {
|
|
183
183
|
const regionsTable = this.props.design.regionsTable || "admin_regions";
|
|
184
184
|
if (regionsTable === "admin_regions") {
|
|
185
|
-
return
|
|
186
|
-
schema: this.props.schema,
|
|
187
|
-
dataSource: this.props.dataSource,
|
|
188
|
-
scope: this.props.design.scope,
|
|
189
|
-
scopeLevel: this.props.design.scopeLevel || 0,
|
|
190
|
-
detailLevel: this.props.design.detailLevel,
|
|
191
|
-
onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange
|
|
192
|
-
});
|
|
185
|
+
return react_1.default.createElement(AdminScopeAndDetailLevelComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, scope: this.props.design.scope, scopeLevel: this.props.design.scopeLevel || 0, detailLevel: this.props.design.detailLevel, onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange });
|
|
193
186
|
}
|
|
194
187
|
else {
|
|
195
|
-
return
|
|
196
|
-
schema: this.props.schema,
|
|
197
|
-
dataSource: this.props.dataSource,
|
|
198
|
-
scope: this.props.design.scope,
|
|
199
|
-
scopeLevel: this.props.design.scopeLevel,
|
|
200
|
-
detailLevel: this.props.design.detailLevel,
|
|
201
|
-
onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange,
|
|
202
|
-
regionsTable
|
|
203
|
-
});
|
|
188
|
+
return react_1.default.createElement(ScopeAndDetailLevelComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, scope: this.props.design.scope, scopeLevel: this.props.design.scopeLevel, detailLevel: this.props.design.detailLevel, onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange, regionsTable: regionsTable });
|
|
204
189
|
}
|
|
205
190
|
}
|
|
206
191
|
renderDisplayNames() {
|
|
207
|
-
return
|
|
192
|
+
return (react_1.default.createElement("div", { className: "mb-3" },
|
|
193
|
+
react_1.default.createElement(ui.Checkbox, { value: this.props.design.displayNames, onChange: value => this.handleDisplayNamesChange(value) }, T `Display Region Names`)));
|
|
208
194
|
}
|
|
209
195
|
renderColor() {
|
|
210
196
|
// Only if plain
|
|
211
197
|
if (this.props.design.regionMode !== "plain") {
|
|
212
198
|
return null;
|
|
213
199
|
}
|
|
214
|
-
return
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
200
|
+
return (react_1.default.createElement("div", { className: "mb-3" },
|
|
201
|
+
react_1.default.createElement("label", { className: "text-muted" },
|
|
202
|
+
react_1.default.createElement("span", { className: "fas fa-tint" }),
|
|
203
|
+
T `Fill Color`),
|
|
204
|
+
react_1.default.createElement("div", null,
|
|
205
|
+
react_1.default.createElement(ColorComponent_1.default, { color: this.props.design.color, onChange: this.handleColorChange }))));
|
|
218
206
|
}
|
|
219
207
|
renderColorAxis() {
|
|
220
208
|
// Not applicable if in plain mode, or if in indirect mode with no table
|
|
@@ -235,19 +223,12 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
235
223
|
}
|
|
236
224
|
}
|
|
237
225
|
const table = this.props.design.table;
|
|
238
|
-
return
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
value: this.props.design.axes.color,
|
|
245
|
-
defaultColor: this.props.design.color,
|
|
246
|
-
showColorMap: true,
|
|
247
|
-
onChange: this.handleColorAxisChange,
|
|
248
|
-
allowExcludedValues: true,
|
|
249
|
-
filters: filters
|
|
250
|
-
})));
|
|
226
|
+
return (react_1.default.createElement("div", null,
|
|
227
|
+
react_1.default.createElement("div", { className: "mb-3" },
|
|
228
|
+
react_1.default.createElement("label", { className: "text-muted" },
|
|
229
|
+
react_1.default.createElement("span", { className: "fas fa-tint" }),
|
|
230
|
+
T `Color By Data`),
|
|
231
|
+
react_1.default.createElement(AxisComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, types: ["text", "enum", "boolean", "date"], aggrNeed: "required", value: this.props.design.axes.color, defaultColor: this.props.design.color, showColorMap: true, onChange: this.handleColorAxisChange, allowExcludedValues: true, filters: filters }))));
|
|
251
232
|
}
|
|
252
233
|
else {
|
|
253
234
|
// direct mode
|
|
@@ -275,19 +256,12 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
275
256
|
}
|
|
276
257
|
});
|
|
277
258
|
}
|
|
278
|
-
return
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
value: this.props.design.axes.color,
|
|
285
|
-
defaultColor: this.props.design.color,
|
|
286
|
-
showColorMap: true,
|
|
287
|
-
onChange: this.handleColorAxisChange,
|
|
288
|
-
allowExcludedValues: true,
|
|
289
|
-
filters: filters
|
|
290
|
-
})));
|
|
259
|
+
return (react_1.default.createElement("div", null,
|
|
260
|
+
react_1.default.createElement("div", { className: "mb-3" },
|
|
261
|
+
react_1.default.createElement("label", { className: "text-muted" },
|
|
262
|
+
react_1.default.createElement("span", { className: "fas fa-tint" }),
|
|
263
|
+
T `Color By Data`),
|
|
264
|
+
react_1.default.createElement(AxisComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: regionsTable, types: ["text", "enum", "boolean", "date"], aggrNeed: "none", value: this.props.design.axes.color, defaultColor: this.props.design.color, showColorMap: true, onChange: this.handleColorAxisChange, allowExcludedValues: true, filters: filters }))));
|
|
291
265
|
}
|
|
292
266
|
}
|
|
293
267
|
// renderLabelAxis: ->
|
|
@@ -309,33 +283,30 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
309
283
|
// showColorMap: true
|
|
310
284
|
// onChange: @handleColorAxisChange)
|
|
311
285
|
renderFillOpacity() {
|
|
312
|
-
return
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
step: 1,
|
|
316
|
-
tipTransitionName: "rc-slider-tooltip-zoom-down",
|
|
317
|
-
value: Math.round(this.props.design.fillOpacity * this.props.design.fillOpacity * 100),
|
|
318
|
-
onChange: (val) => this.handleFillOpacityChange(Math.sqrt(val / 100))
|
|
319
|
-
}));
|
|
286
|
+
return (react_1.default.createElement("div", { className: "mb-3" },
|
|
287
|
+
react_1.default.createElement("label", { className: "text-muted" }, T `Fill Opacity: ${(this.props.design.fillOpacity * this.props.design.fillOpacity * 100).toFixed(0)}%`),
|
|
288
|
+
": ",
|
|
289
|
+
react_1.default.createElement(rc_slider_1.default, { min: 0, max: 100, step: 1, tipTransitionName: "rc-slider-tooltip-zoom-down", value: Math.round(this.props.design.fillOpacity * this.props.design.fillOpacity * 100), onChange: (val) => this.handleFillOpacityChange(Math.sqrt(val / 100)) })));
|
|
320
290
|
}
|
|
321
291
|
renderBorderColor() {
|
|
322
|
-
return
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
292
|
+
return (react_1.default.createElement("div", { className: "mb-3" },
|
|
293
|
+
react_1.default.createElement("label", { className: "text-muted" },
|
|
294
|
+
react_1.default.createElement("span", { className: "fas fa-tint" }),
|
|
295
|
+
T `Border Color`),
|
|
296
|
+
react_1.default.createElement("div", null,
|
|
297
|
+
react_1.default.createElement(ColorComponent_1.default, { color: this.props.design.borderColor || "#000", onChange: this.handleBorderColorChange }))));
|
|
326
298
|
}
|
|
327
299
|
renderFilter() {
|
|
328
300
|
// If not in indirect mode with table, hide
|
|
329
301
|
if (this.props.design.regionMode !== "indirect" || !this.props.design.table) {
|
|
330
302
|
return null;
|
|
331
303
|
}
|
|
332
|
-
return
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
})));
|
|
304
|
+
return (react_1.default.createElement("div", { className: "mb-3" },
|
|
305
|
+
react_1.default.createElement("label", { className: "text-muted" },
|
|
306
|
+
react_1.default.createElement("span", { className: "fas fa-filter" }),
|
|
307
|
+
T `Filters`),
|
|
308
|
+
react_1.default.createElement("div", { style: { marginLeft: 8 } },
|
|
309
|
+
react_1.default.createElement(expressions_ui_1.FilterExprComponent, { schema: this.props.schema, dataSource: this.props.dataSource, onChange: this.handleFilterChange, table: this.props.design.table, value: this.props.design.filter }))));
|
|
339
310
|
}
|
|
340
311
|
renderPopup() {
|
|
341
312
|
// If not in indirect mode with table, hide
|
|
@@ -347,15 +318,7 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
347
318
|
if (this.props.design.adminRegionExpr) {
|
|
348
319
|
defaultPopupFilterJoins[this.props.design.table] = this.props.design.adminRegionExpr;
|
|
349
320
|
}
|
|
350
|
-
return
|
|
351
|
-
design: this.props.design,
|
|
352
|
-
onDesignChange: this.props.onDesignChange,
|
|
353
|
-
schema: this.props.schema,
|
|
354
|
-
dataSource: this.props.dataSource,
|
|
355
|
-
table: this.props.design.table,
|
|
356
|
-
idTable: regionsTable,
|
|
357
|
-
defaultPopupFilterJoins
|
|
358
|
-
});
|
|
321
|
+
return react_1.default.createElement(EditPopupComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, idTable: regionsTable, defaultPopupFilterJoins: defaultPopupFilterJoins });
|
|
359
322
|
}
|
|
360
323
|
renderHoverOver() {
|
|
361
324
|
// If not in indirect mode with table, hide
|
|
@@ -367,18 +330,24 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
|
|
|
367
330
|
if (this.props.design.adminRegionExpr) {
|
|
368
331
|
defaultPopupFilterJoins[this.props.design.table] = this.props.design.adminRegionExpr;
|
|
369
332
|
}
|
|
370
|
-
return
|
|
371
|
-
design: this.props.design,
|
|
372
|
-
onDesignChange: this.props.onDesignChange,
|
|
373
|
-
schema: this.props.schema,
|
|
374
|
-
dataSource: this.props.dataSource,
|
|
375
|
-
table: this.props.design.table,
|
|
376
|
-
idTable: regionsTable,
|
|
377
|
-
defaultPopupFilterJoins
|
|
378
|
-
});
|
|
333
|
+
return react_1.default.createElement(EditHoverOver_1.EditHoverOver, { design: this.props.design, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, idTable: regionsTable, defaultPopupFilterJoins: defaultPopupFilterJoins, aggrStatuses: ["individual", "aggregate", "literal"] });
|
|
379
334
|
}
|
|
380
335
|
render() {
|
|
381
|
-
return
|
|
336
|
+
return (react_1.default.createElement("div", null,
|
|
337
|
+
this.renderRegionMode(),
|
|
338
|
+
this.renderRegionsTable(),
|
|
339
|
+
this.renderTable(),
|
|
340
|
+
this.renderAdminRegionExpr(),
|
|
341
|
+
this.renderScopeAndDetailLevel(),
|
|
342
|
+
this.renderDisplayNames(),
|
|
343
|
+
this.renderColor(),
|
|
344
|
+
this.renderColorAxis(),
|
|
345
|
+
this.renderFillOpacity(),
|
|
346
|
+
this.renderBorderColor(),
|
|
347
|
+
this.renderFilter(),
|
|
348
|
+
this.renderPopup(),
|
|
349
|
+
this.renderHoverOver(),
|
|
350
|
+
react_1.default.createElement(ZoomLevelsComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange })));
|
|
382
351
|
}
|
|
383
352
|
}
|
|
384
353
|
exports.default = ChoroplethLayerDesigner;
|
|
@@ -227,22 +227,12 @@ class DirectLayerDataSource {
|
|
|
227
227
|
query.cacheExpiry = cacheExpiry;
|
|
228
228
|
}
|
|
229
229
|
let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?` + querystring_1.default.stringify(query);
|
|
230
|
-
// Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
|
|
231
|
-
// Used to speed queries
|
|
232
|
-
if (url.match(/^https:\/\/api\.mwater\.co\//)) {
|
|
233
|
-
url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
|
|
234
|
-
}
|
|
235
230
|
return url;
|
|
236
231
|
}
|
|
237
232
|
// Create query string
|
|
238
233
|
createLegacyUrl(design, extension, filters) {
|
|
239
234
|
let where;
|
|
240
235
|
let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?type=${design.type}&radius=1000`;
|
|
241
|
-
// Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
|
|
242
|
-
// Used to speed queries
|
|
243
|
-
if (url.match(/^https:\/\/api\.mwater\.co\//)) {
|
|
244
|
-
url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
|
|
245
|
-
}
|
|
246
236
|
if (this.options.client) {
|
|
247
237
|
url += `&client=${this.options.client}`;
|
|
248
238
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataSource, Schema } from "@mwater/expressions";
|
|
1
|
+
import { AggrStatus, DataSource, Schema } from "@mwater/expressions";
|
|
2
2
|
import React from "react";
|
|
3
3
|
export interface EditHoverOverProps {
|
|
4
4
|
/** Schema to use */
|
|
@@ -13,6 +13,7 @@ export interface EditHoverOverProps {
|
|
|
13
13
|
/** Table of the row that join is to. Usually same as table except for choropleth maps */
|
|
14
14
|
idTable: string;
|
|
15
15
|
defaultPopupFilterJoins: any;
|
|
16
|
+
/** Aggr statuses to allow in hover over expressions */
|
|
17
|
+
aggrStatuses: AggrStatus[];
|
|
16
18
|
}
|
|
17
|
-
declare function EditHoverOver(props: EditHoverOverProps): React.JSX.Element;
|
|
18
|
-
export default EditHoverOver;
|
|
19
|
+
export declare function EditHoverOver(props: EditHoverOverProps): React.JSX.Element;
|
|
@@ -26,6 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.EditHoverOver = EditHoverOver;
|
|
29
30
|
const lodash_1 = require("lodash");
|
|
30
31
|
const expressions_1 = require("@mwater/expressions");
|
|
31
32
|
const expressions_ui_1 = require("@mwater/expressions-ui");
|
|
@@ -84,7 +85,7 @@ function EditHoverOver(props) {
|
|
|
84
85
|
react_1.default.createElement("th", null, T `Value`),
|
|
85
86
|
react_1.default.createElement("th", { style: { width: "1%", whiteSpace: "nowrap" } }, T `Format`),
|
|
86
87
|
react_1.default.createElement("th", { style: { width: "1%", whiteSpace: "nowrap" } }))),
|
|
87
|
-
react_1.default.createElement("tbody", null, draftItems?.map((item) => (react_1.default.createElement(HoverOverItemEditor, { key: item.id, schema: schema, dataSource: dataSource, table: table, onItemChange: handleItemChange, onItemDelete: handleItemDelete, item: item })))))),
|
|
88
|
+
react_1.default.createElement("tbody", null, draftItems?.map((item) => (react_1.default.createElement(HoverOverItemEditor, { key: item.id, schema: schema, dataSource: dataSource, table: table, onItemChange: handleItemChange, onItemDelete: handleItemDelete, item: item, aggrStatuses: props.aggrStatuses })))))),
|
|
88
89
|
react_1.default.createElement("button", { className: "btn btn-link", onClick: handleAddItem },
|
|
89
90
|
react_1.default.createElement("span", { className: "fas fa-plus me-1" }),
|
|
90
91
|
T `Add Item`)))));
|
|
@@ -110,10 +111,9 @@ function HoverOverItemEditor(props) {
|
|
|
110
111
|
react_1.default.createElement("td", { className: "align-middle" },
|
|
111
112
|
react_1.default.createElement(ui.TextInput, { value: item.label, onChange: value => onItemChange({ ...item, label: value }) })),
|
|
112
113
|
react_1.default.createElement("td", { className: "align-middle" },
|
|
113
|
-
react_1.default.createElement(expressions_ui_1.ExprComponent, { schema: schema, dataSource: dataSource, table: table, types: ["text", "number", "enum", "boolean", "date", "datetime", "id"], onChange: expr => onItemChange({ ...item, value: expr }), value: item.value ?? null, aggrStatuses:
|
|
114
|
+
react_1.default.createElement(expressions_ui_1.ExprComponent, { schema: schema, dataSource: dataSource, table: table, types: ["text", "number", "enum", "boolean", "date", "datetime", "id"], onChange: expr => onItemChange({ ...item, value: expr }), value: item.value ?? null, aggrStatuses: props.aggrStatuses })),
|
|
114
115
|
react_1.default.createElement("td", { className: "align-middle", style: { width: "1%", whiteSpace: "nowrap" } }, renderFormat()),
|
|
115
116
|
react_1.default.createElement("td", { className: "align-middle", style: { width: "1%", whiteSpace: "nowrap" } },
|
|
116
117
|
react_1.default.createElement("button", { className: "btn btn-link", onClick: () => onItemDelete(item) },
|
|
117
118
|
react_1.default.createElement("span", { className: "fa fa-close" })))));
|
|
118
119
|
}
|
|
119
|
-
exports.default = EditHoverOver;
|
package/lib/maps/HoverContent.js
CHANGED
|
@@ -53,7 +53,7 @@ const HoverContent = (props) => {
|
|
|
53
53
|
if (error) {
|
|
54
54
|
return react_1.default.createElement("div", { className: "text-danger" }, error);
|
|
55
55
|
}
|
|
56
|
-
return (react_1.default.createElement("div", { className: "
|
|
56
|
+
return (react_1.default.createElement("div", { className: "mwater-visualization-map-hover-content" }, props.items.map((item) => {
|
|
57
57
|
let value = values[item.id];
|
|
58
58
|
if (value != null && item.value) {
|
|
59
59
|
// Get expression type
|
|
@@ -32,7 +32,6 @@ const react_1 = __importStar(require("react"));
|
|
|
32
32
|
const react_dom_1 = __importDefault(require("react-dom"));
|
|
33
33
|
const LeafletLoading_1 = __importDefault(require("./LeafletLoading"));
|
|
34
34
|
const leaflet_1 = __importDefault(require("leaflet"));
|
|
35
|
-
let BingLayer = require("./BingLayer");
|
|
36
35
|
let UtfGridLayer = require("./UtfGridLayer");
|
|
37
36
|
const R = react_1.default.createElement;
|
|
38
37
|
const marker_icon_2x_png_1 = __importDefault(require("./marker-icon-2x.png"));
|
|
@@ -266,34 +265,26 @@ class LeafletMapComponent extends react_1.Component {
|
|
|
266
265
|
}
|
|
267
266
|
switch (this.props.baseLayerId) {
|
|
268
267
|
case "bing_road":
|
|
269
|
-
this.baseLayer =
|
|
270
|
-
|
|
268
|
+
this.baseLayer = leaflet_1.default.tileLayer('https://tiles.stadiamaps.com/tiles/osm_bright/{z}/{x}/{y}{r}.png?api_key=835a418e-91f9-4eb8-9856-0883c3656c9d', {
|
|
269
|
+
maxZoom: 20,
|
|
270
|
+
attribution: '© <a href="https://stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a>',
|
|
271
271
|
});
|
|
272
272
|
break;
|
|
273
|
-
// @baseLayer = L.tileLayer('https://{s}.api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', {
|
|
274
|
-
// attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
275
|
-
// tileSize: 512,
|
|
276
|
-
// maxZoom: 21,
|
|
277
|
-
// maxNativeZoom: 19,
|
|
278
|
-
// subdomains: ["a", "b"],
|
|
279
|
-
// zoomOffset: -1,
|
|
280
|
-
// id: 'mapbox/streets-v11',
|
|
281
|
-
// accessToken: 'pk.eyJ1IjoiZ3Jhc3NpY2siLCJhIjoiY2ozMzU1N3ZoMDA3ZDJxbzh0aTRtOTRoeSJ9.fFWBZ88vbdezyhfw-I-fag'
|
|
282
|
-
// })
|
|
283
273
|
case "bing_aerial":
|
|
284
|
-
this.baseLayer =
|
|
285
|
-
|
|
274
|
+
this.baseLayer = leaflet_1.default.tileLayer('https://tiles.stadiamaps.com/tiles/alidade_satellite/{z}/{x}/{y}.jpg?api_key=835a418e-91f9-4eb8-9856-0883c3656c9d', {
|
|
275
|
+
maxZoom: 20,
|
|
276
|
+
attribution: '© CNES, Distribution Airbus DS, © Airbus DS, © PlanetObserver (Contains Copernicus Data) | © <a href="https://stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a>',
|
|
286
277
|
});
|
|
287
278
|
break;
|
|
288
279
|
case "cartodb_positron":
|
|
289
|
-
this.baseLayer = leaflet_1.default.tileLayer("https://
|
|
290
|
-
attribution: '© <a href="
|
|
280
|
+
this.baseLayer = leaflet_1.default.tileLayer("https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png?api_key=835a418e-91f9-4eb8-9856-0883c3656c9d", {
|
|
281
|
+
attribution: '© <a href="https://stadiamaps.com/" target="_blank">Stadia Maps</a>, © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a>',
|
|
291
282
|
maxZoom: 21
|
|
292
283
|
});
|
|
293
284
|
break;
|
|
294
285
|
case "cartodb_dark_matter":
|
|
295
|
-
this.baseLayer = leaflet_1.default.tileLayer("https://
|
|
296
|
-
attribution: '© <a href="
|
|
286
|
+
this.baseLayer = leaflet_1.default.tileLayer("https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}{r}.png?api_key=835a418e-91f9-4eb8-9856-0883c3656c9d", {
|
|
287
|
+
attribution: '© <a href="https://stadiamaps.com/" target="_blank">Stadia Maps</a>, © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a>',
|
|
297
288
|
maxZoom: 21
|
|
298
289
|
});
|
|
299
290
|
break;
|
package/lib/maps/MapComponent.js
CHANGED