@mwater/visualization 5.4.0 → 5.4.2
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/ColorComponent.js +2 -1
- package/lib/IdSelection.d.ts +16 -0
- package/lib/IdSelection.js +59 -0
- package/lib/MWaterAddRelatedIndicatorComponent.js +2 -2
- package/lib/MWaterCompleteTableSelectComponent.d.ts +3 -8
- package/lib/MWaterCompleteTableSelectComponent.js +36 -42
- package/lib/MWaterLoaderComponent.d.ts +11 -10
- package/lib/MWaterLoaderComponent.js +1 -1
- package/lib/MWaterResponsesFilterComponent.js +1 -1
- package/lib/MWaterTableSelectComponent.d.ts +0 -1
- package/lib/MWaterTableSelectComponent.js +4 -6
- package/lib/autotranslate.d.ts +20 -0
- package/lib/autotranslate.js +122 -0
- package/lib/axes/AxisBuilder.js +3 -3
- package/lib/axes/AxisColorEditorComponent.js +4 -0
- package/lib/axes/AxisComponent.d.ts +8 -12
- package/lib/axes/AxisComponent.js +32 -80
- package/lib/axes/CategoryMapComponent.js +4 -4
- package/lib/axes/RangesComponent.js +2 -2
- package/lib/dashboards/DashboardComponent.d.ts +6 -0
- package/lib/dashboards/DashboardComponent.js +44 -12
- package/lib/dashboards/DashboardDesign.d.ts +11 -2
- package/lib/dashboards/DashboardUtils.d.ts +5 -0
- package/lib/dashboards/DashboardUtils.js +30 -0
- package/lib/dashboards/DashboardViewComponent.d.ts +2 -0
- package/lib/dashboards/DashboardViewComponent.js +16 -3
- package/lib/dashboards/ServerDashboardDataSource.js +2 -1
- package/lib/dashboards/SettingsModalComponent.d.ts +1 -1
- package/lib/dashboards/SettingsModalComponent.js +256 -19
- package/lib/dashboards/WidgetComponent.d.ts +6 -3
- package/lib/dashboards/WidgetComponent.js +3 -1
- package/lib/datagrids/CellEditor.d.ts +19 -0
- package/lib/datagrids/CellEditor.js +223 -0
- package/lib/datagrids/DatagridComponent.d.ts +18 -87
- package/lib/datagrids/DatagridComponent.js +304 -222
- package/lib/datagrids/DatagridViewComponent.d.ts +15 -53
- package/lib/datagrids/DatagridViewComponent.js +256 -257
- package/lib/datagrids/DirectDatagridDataSource.js +2 -3
- package/lib/datagrids/ExprCellComponent.d.ts +8 -15
- package/lib/datagrids/ExprCellComponent.js +11 -15
- package/lib/datagrids/FindReplaceModalComponent.d.ts +4 -6
- package/lib/datagrids/FindReplaceModalComponent.js +38 -75
- package/lib/index.css +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/layouts/blocks/HorizontalBlockComponent.js +2 -2
- package/lib/mWaterLoader.d.ts +1 -1
- package/lib/maps/BufferLayer.d.ts +7 -5
- package/lib/maps/BufferLayer.js +69 -48
- package/lib/maps/BufferLayerDesign.d.ts +21 -14
- package/lib/maps/BufferLayerDesignerComponent.d.ts +16 -31
- package/lib/maps/BufferLayerDesignerComponent.js +68 -102
- package/lib/maps/ChoroplethLayer.d.ts +5 -4
- package/lib/maps/ChoroplethLayer.js +32 -9
- package/lib/maps/ChoroplethLayerDesign.d.ts +6 -2
- package/lib/maps/ChoroplethLayerDesigner.js +4 -2
- package/lib/maps/ClusterLayer.d.ts +3 -4
- package/lib/maps/ClusterLayer.js +2 -1
- package/lib/maps/DetailLevelSelectComponent.js +1 -1
- package/lib/maps/DirectMapDataSource.js +2 -1
- package/lib/maps/EditPopupComponent.js +5 -3
- package/lib/maps/GridLayer.d.ts +3 -4
- package/lib/maps/GridLayer.js +2 -1
- package/lib/maps/GridLayerDesigner.js +5 -3
- package/lib/maps/HoverContent.d.ts +11 -3
- package/lib/maps/HoverContent.js +25 -9
- package/lib/maps/Layer.d.ts +24 -3
- package/lib/maps/Layer.js +5 -1
- package/lib/maps/LayerFactory.js +0 -8
- package/lib/maps/LayerLegendComponent.js +0 -1
- package/lib/maps/LayerSwitcherComponent.d.ts +1 -0
- package/lib/maps/LayerSwitcherComponent.js +1 -1
- package/lib/maps/LeafletMapComponent.js +3 -1
- package/lib/maps/LegendComponent.d.ts +1 -0
- package/lib/maps/LegendComponent.js +9 -1
- package/lib/maps/MWaterServerLayer.d.ts +2 -2
- package/lib/maps/MWaterServerLayer.js +2 -2
- package/lib/maps/MapComponent.js +3 -3
- package/lib/maps/MapDesign.d.ts +2 -0
- package/lib/maps/MapDesignerComponent.d.ts +4 -3
- package/lib/maps/MapDesignerComponent.js +68 -74
- package/lib/maps/MapLayerViewDesignerComponent.js +2 -2
- package/lib/maps/MapUtils.d.ts +4 -0
- package/lib/maps/MapUtils.js +19 -0
- package/lib/maps/MapViewComponent.d.ts +8 -3
- package/lib/maps/MarkersLayer.d.ts +5 -4
- package/lib/maps/MarkersLayer.js +33 -7
- package/lib/maps/MarkersLayerDesign.d.ts +19 -16
- package/lib/maps/PopupFilterJoinsUtils.d.ts +6 -3
- package/lib/maps/PopupFilterJoinsUtils.js +0 -6
- package/lib/maps/RasterMapViewComponent.d.ts +3 -31
- package/lib/maps/RasterMapViewComponent.js +7 -2
- package/lib/maps/ServerMapDataSource.js +2 -1
- package/lib/maps/SwitchableTileUrlLayer.d.ts +3 -3
- package/lib/maps/SwitchableTileUrlLayer.js +2 -1
- package/lib/maps/TileUrlLayer.d.ts +4 -5
- package/lib/maps/TileUrlLayer.js +2 -1
- package/lib/maps/VectorMapViewComponent.d.ts +5 -37
- package/lib/maps/VectorMapViewComponent.js +19 -8
- package/lib/maps/maps.d.ts +3 -0
- package/lib/quickfilter/QuickfiltersComponent.d.ts +2 -0
- package/lib/quickfilter/QuickfiltersComponent.js +9 -7
- package/lib/quickfilter/QuickfiltersDesignComponent.d.ts +1 -1
- package/lib/quickfilter/QuickfiltersDesignComponent.js +19 -35
- package/lib/richtext/ExprItemsHtmlConverter.d.ts +5 -2
- package/lib/richtext/ExprItemsHtmlConverter.js +4 -4
- package/lib/richtext/ExprItemsTranslator.d.ts +5 -0
- package/lib/richtext/ExprItemsTranslator.js +149 -0
- package/lib/richtext/ItemsHtmlConverter.d.ts +1 -1
- package/lib/richtext/ItemsHtmlConverter.js +31 -15
- package/lib/wellknown.js +12 -9
- package/lib/widgets/IFrameWidget.d.ts +4 -4
- package/lib/widgets/ImageWidget.d.ts +7 -4
- package/lib/widgets/ImageWidget.js +9 -1
- package/lib/widgets/ImageWidgetComponent.d.ts +1 -0
- package/lib/widgets/ImageWidgetComponent.js +1 -1
- package/lib/widgets/MapWidget.d.ts +5 -48
- package/lib/widgets/MapWidget.js +26 -63
- package/lib/widgets/MarkdownWidget.d.ts +3 -0
- package/lib/widgets/MarkdownWidget.js +3 -0
- package/lib/widgets/TOCWidget.d.ts +15 -27
- package/lib/widgets/TOCWidget.js +107 -183
- package/lib/widgets/Widget.d.ts +18 -7
- package/lib/widgets/Widget.js +4 -0
- package/lib/widgets/WidgetScopesViewComponent.js +1 -1
- package/lib/widgets/charts/Chart.d.ts +10 -1
- package/lib/widgets/charts/Chart.js +22 -11
- package/lib/widgets/charts/ChartViewComponent.d.ts +4 -0
- package/lib/widgets/charts/ChartViewComponent.js +6 -3
- package/lib/widgets/charts/ChartWidget.d.ts +2 -0
- package/lib/widgets/charts/ChartWidget.js +9 -1
- package/lib/widgets/charts/ChartWidgetComponent.d.ts +4 -0
- package/lib/widgets/charts/ChartWidgetComponent.js +2 -2
- package/lib/widgets/charts/calendar/CalendarChart.d.ts +1 -0
- package/lib/widgets/charts/calendar/CalendarChart.js +26 -0
- package/lib/widgets/charts/calendar/CalendarChartViewComponent.js +3 -1
- package/lib/widgets/charts/imagemosaic/ImageMosaicChart.d.ts +1 -0
- package/lib/widgets/charts/imagemosaic/ImageMosaicChart.js +8 -0
- package/lib/widgets/charts/layered/LayeredChart.d.ts +2 -0
- package/lib/widgets/charts/layered/LayeredChart.js +63 -3
- package/lib/widgets/charts/layered/LayeredChartCompiler.d.ts +1 -1
- package/lib/widgets/charts/layered/LayeredChartCompiler.js +3 -3
- package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +2 -2
- package/lib/widgets/charts/layered/LayeredChartViewComponent.js +8 -3
- package/lib/widgets/charts/pivot/PivotChart.d.ts +1 -0
- package/lib/widgets/charts/pivot/PivotChart.js +63 -0
- package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +1 -0
- package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +1 -1
- package/lib/widgets/charts/pivot/SegmentDesignerComponent.d.ts +6 -0
- package/lib/widgets/charts/pivot/SegmentDesignerComponent.js +7 -4
- package/lib/widgets/charts/table/OrderingsComponent.js +1 -1
- package/lib/widgets/charts/table/TableChart.d.ts +1 -0
- package/lib/widgets/charts/table/TableChart.js +15 -0
- package/lib/widgets/text/TextComponent.d.ts +11 -4
- package/lib/widgets/text/TextComponent.js +11 -8
- package/lib/widgets/text/TextWidget.d.ts +6 -3
- package/lib/widgets/text/TextWidget.js +7 -1
- package/lib/widgets/text/TextWidgetComponent.d.ts +4 -0
- package/lib/widgets/text/TextWidgetComponent.js +7 -1
- package/lib/widgets/text/TextWidgetDesign.d.ts +2 -4
- package/lib/widgets/text/TextWidgetDesign.js +1 -1
- package/package.json +7 -8
- package/src/ColorComponent.tsx +1 -2
- package/src/IdSelection.ts +62 -0
- package/src/MWaterAddRelatedIndicatorComponent.ts +3 -2
- package/src/MWaterCompleteTableSelectComponent.tsx +36 -46
- package/src/MWaterLoaderComponent.ts +28 -26
- package/src/MWaterResponsesFilterComponent.ts +5 -2
- package/src/MWaterTableSelectComponent.tsx +5 -9
- package/src/autotranslate.ts +141 -0
- package/src/axes/AxisBuilder.ts +3 -3
- package/src/axes/AxisColorEditorComponent.tsx +5 -0
- package/src/axes/{AxisComponent.ts → AxisComponent.tsx} +106 -106
- package/src/axes/CategoryMapComponent.ts +4 -4
- package/src/axes/RangesComponent.ts +3 -2
- package/src/dashboards/DashboardComponent.tsx +79 -14
- package/src/dashboards/DashboardDesign.ts +9 -2
- package/src/dashboards/DashboardUtils.ts +39 -0
- package/src/dashboards/DashboardViewComponent.tsx +22 -3
- package/src/dashboards/ServerDashboardDataSource.ts +2 -1
- package/src/dashboards/SettingsModalComponent.tsx +450 -35
- package/src/dashboards/WidgetComponent.tsx +12 -6
- package/src/datagrids/CellEditor.tsx +354 -0
- package/src/datagrids/DatagridComponent.tsx +646 -0
- package/src/datagrids/DatagridViewComponent.tsx +539 -0
- package/src/datagrids/DirectDatagridDataSource.ts +2 -3
- package/src/datagrids/{ExprCellComponent.ts → ExprCellComponent.tsx} +28 -23
- package/src/datagrids/{FindReplaceModalComponent.ts → FindReplaceModalComponent.tsx} +109 -122
- package/src/index.css +1 -1
- package/src/index.ts +0 -1
- package/src/layouts/blocks/HorizontalBlockComponent.ts +2 -2
- package/src/mWaterLoader.ts +1 -1
- package/src/maps/BufferLayer.ts +83 -60
- package/src/maps/BufferLayerDesign.ts +20 -14
- package/src/maps/BufferLayerDesignerComponent.tsx +309 -0
- package/src/maps/ChoroplethLayer.ts +40 -19
- package/src/maps/ChoroplethLayerDesign.ts +4 -2
- package/src/maps/ChoroplethLayerDesigner.tsx +4 -2
- package/src/maps/ClusterLayer.ts +4 -10
- package/src/maps/DetailLevelSelectComponent.ts +1 -1
- package/src/maps/DirectMapDataSource.ts +2 -1
- package/src/maps/EditPopupComponent.ts +7 -3
- package/src/maps/GridLayer.ts +4 -10
- package/src/maps/GridLayerDesigner.tsx +5 -3
- package/src/maps/HoverContent.tsx +40 -16
- package/src/maps/Layer.ts +28 -10
- package/src/maps/LayerFactory.ts +0 -8
- package/src/maps/LayerLegendComponent.ts +2 -4
- package/src/maps/LayerSwitcherComponent.tsx +6 -2
- package/src/maps/LeafletMapComponent.tsx +3 -1
- package/src/maps/LegendComponent.tsx +10 -1
- package/src/maps/MWaterServerLayer.ts +3 -3
- package/src/maps/MapComponent.ts +3 -3
- package/src/maps/MapDesign.ts +3 -0
- package/src/maps/MapDesignerComponent.tsx +165 -162
- package/src/maps/MapLayerViewDesignerComponent.ts +2 -2
- package/src/maps/MapUtils.ts +24 -0
- package/src/maps/MapViewComponent.tsx +11 -3
- package/src/maps/MarkersLayer.ts +44 -18
- package/src/maps/MarkersLayerDesign.ts +19 -16
- package/src/maps/PopupFilterJoinsUtils.ts +6 -2
- package/src/maps/RasterMapViewComponent.ts +9 -45
- package/src/maps/ServerMapDataSource.ts +2 -2
- package/src/maps/SwitchableTileUrlLayer.tsx +4 -10
- package/src/maps/TileUrlLayer.tsx +4 -10
- package/src/maps/VectorMapViewComponent.tsx +28 -55
- package/src/maps/maps.ts +3 -0
- package/src/quickfilter/QuickfiltersComponent.ts +13 -7
- package/src/quickfilter/QuickfiltersDesignComponent.tsx +56 -74
- package/src/richtext/ExprItemsHtmlConverter.ts +9 -5
- package/src/richtext/ExprItemsTranslator.ts +176 -0
- package/src/richtext/ItemsHtmlConverter.ts +33 -18
- package/src/wellknown.ts +33 -30
- package/src/widgets/ImageWidget.ts +10 -1
- package/src/widgets/ImageWidgetComponent.ts +3 -2
- package/src/widgets/{MapWidget.ts → MapWidget.tsx} +90 -101
- package/src/widgets/MarkdownWidget.ts +3 -0
- package/src/widgets/TOCWidget.tsx +281 -0
- package/src/widgets/Widget.ts +25 -5
- package/src/widgets/WidgetScopesViewComponent.ts +2 -1
- package/src/widgets/charts/Chart.ts +31 -12
- package/src/widgets/charts/ChartViewComponent.ts +13 -3
- package/src/widgets/charts/ChartWidget.ts +11 -1
- package/src/widgets/charts/ChartWidgetComponent.tsx +9 -1
- package/src/widgets/charts/calendar/CalendarChart.ts +29 -0
- package/src/widgets/charts/calendar/CalendarChartViewComponent.tsx +3 -1
- package/src/widgets/charts/imagemosaic/ImageMosaicChart.ts +9 -0
- package/src/widgets/charts/layered/LayeredChart.ts +71 -3
- package/src/widgets/charts/layered/LayeredChartCompiler.ts +4 -4
- package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +4 -2
- package/src/widgets/charts/layered/LayeredChartViewComponent.ts +10 -4
- package/src/widgets/charts/pivot/PivotChart.ts +73 -0
- package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +1 -1
- package/src/widgets/charts/pivot/SegmentDesignerComponent.tsx +6 -4
- package/src/widgets/charts/table/OrderingsComponent.tsx +2 -1
- package/src/widgets/charts/table/TableChart.ts +17 -0
- package/src/widgets/text/TextComponent.tsx +22 -12
- package/src/widgets/text/TextWidget.ts +9 -2
- package/src/widgets/text/TextWidgetComponent.tsx +16 -1
- package/src/widgets/text/TextWidgetDesign.ts +4 -7
- package/test/IdSelectionTests.ts +54 -0
- package/test/LayeredChartCompilerTests.ts +0 -2
- package/test/richtext/ExprItemsTranslatorTests.ts +144 -0
- package/test/wellknownTests.ts +144 -0
- package/src/datagrids/DatagridComponent.ts +0 -478
- package/src/datagrids/DatagridViewComponent.ts +0 -464
- package/src/datagrids/EditExprCellComponent.tsx +0 -305
- package/src/datagrids/README.md +0 -3
- package/src/maps/BufferLayerDesignerComponent.ts +0 -311
- package/src/widgets/TOCWidget.ts +0 -326
- package/test/LegoLayoutEngineTests.ts +0 -69
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import _ from "lodash"
|
|
2
|
+
import React from "react"
|
|
3
|
+
|
|
4
|
+
import { ExprComponent, FilterExprComponent } from "@mwater/expressions-ui"
|
|
5
|
+
import { DataSource, Expr, OpExpr, Schema } from "@mwater/expressions"
|
|
6
|
+
import { ExprCompiler } from "@mwater/expressions"
|
|
7
|
+
import AxisComponent from "../axes/AxisComponent"
|
|
8
|
+
import ColorComponent from "../ColorComponent"
|
|
9
|
+
import { TableSelectComponent } from "@mwater/expressions-ui"
|
|
10
|
+
import { default as Rcslider } from "rc-slider"
|
|
11
|
+
import EditPopupComponent from "./EditPopupComponent"
|
|
12
|
+
import ZoomLevelsComponent from "./ZoomLevelsComponent"
|
|
13
|
+
import * as PopupFilterJoinsUtils from "./PopupFilterJoinsUtils"
|
|
14
|
+
import { Checkbox } from "@mwater/react-library/lib/bootstrap"
|
|
15
|
+
import { BufferLayerDesign } from "./BufferLayerDesign"
|
|
16
|
+
import { JsonQLFilter } from "../JsonQLFilter"
|
|
17
|
+
import { areVectorMapsEnabled } from "./vectorMaps"
|
|
18
|
+
import EditHoverOver from "./EditHoverOver"
|
|
19
|
+
|
|
20
|
+
export interface BufferLayerDesignerComponentProps {
|
|
21
|
+
/** Schema to use */
|
|
22
|
+
schema: Schema
|
|
23
|
+
dataSource: DataSource
|
|
24
|
+
/** Design of the design */
|
|
25
|
+
design: BufferLayerDesign
|
|
26
|
+
/** Called with new design */
|
|
27
|
+
onDesignChange: (design: BufferLayerDesign) => void
|
|
28
|
+
filters?: JsonQLFilter[]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default class BufferLayerDesignerComponent extends React.Component<BufferLayerDesignerComponentProps> {
|
|
32
|
+
handleTableChange = (table: string) => {
|
|
33
|
+
this.props.onDesignChange({ ...this.props.design, table })
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
handleRadiusExprChange = (expr: Expr) => {
|
|
37
|
+
const radius = expr?.type === "literal" ? expr.value : null
|
|
38
|
+
this.props.onDesignChange({ ...this.props.design, radiusExpr: expr, radius })
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
handleGeometryAxisChange = (axis: any) => {
|
|
42
|
+
this.props.onDesignChange({ ...this.props.design, axes: { ...this.props.design.axes, geometry: axis } })
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
handleFilterChange = (filter: Expr) => {
|
|
46
|
+
this.props.onDesignChange({ ...this.props.design, filter })
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
handleColorChange = (color: string) => {
|
|
50
|
+
this.props.onDesignChange({ ...this.props.design, color })
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
handleColorAxisChange = (axis: any) => {
|
|
54
|
+
this.props.onDesignChange({ ...this.props.design, axes: { ...this.props.design.axes, color: axis } })
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
handleFillOpacityChange = (fillOpacity: number) => {
|
|
58
|
+
this.props.onDesignChange({ ...this.props.design, fillOpacity: fillOpacity / 100 })
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
handleUnionShapesChange = (unionShapes: boolean) => {
|
|
62
|
+
this.props.onDesignChange({ ...this.props.design, unionShapes })
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
renderTable() {
|
|
66
|
+
return (
|
|
67
|
+
<div className="mb-3">
|
|
68
|
+
<label className="text-muted"><i className="fa fa-database" /> {T`Data Source`}</label>
|
|
69
|
+
<div style={{ marginLeft: 10 }}>
|
|
70
|
+
<TableSelectComponent
|
|
71
|
+
schema={this.props.schema}
|
|
72
|
+
value={this.props.design.table}
|
|
73
|
+
onChange={this.handleTableChange}
|
|
74
|
+
filter={this.props.design.filter}
|
|
75
|
+
onFilterChange={this.handleFilterChange}
|
|
76
|
+
/>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
renderGeometryAxis() {
|
|
83
|
+
if (!this.props.design.table) {
|
|
84
|
+
return
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const title = (
|
|
88
|
+
<span>
|
|
89
|
+
<span className="fas fa-map-marker-alt" /> {T`Circle Centers`}
|
|
90
|
+
</span>
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
const filters = _.clone(this.props.filters) || []
|
|
94
|
+
|
|
95
|
+
if (this.props.design.filter != null) {
|
|
96
|
+
const exprCompiler = new ExprCompiler(this.props.schema)
|
|
97
|
+
const jsonql = exprCompiler.compileExpr({ expr: this.props.design.filter, tableAlias: "{alias}" })
|
|
98
|
+
if (jsonql) {
|
|
99
|
+
filters.push({ table: (this.props.design.filter as OpExpr).table!, jsonql })
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return (
|
|
104
|
+
<div className="mb-3">
|
|
105
|
+
<label className="text-muted">{title}</label>
|
|
106
|
+
<div style={{ marginLeft: 10 }}>
|
|
107
|
+
<AxisComponent
|
|
108
|
+
schema={this.props.schema}
|
|
109
|
+
dataSource={this.props.dataSource}
|
|
110
|
+
table={this.props.design.table}
|
|
111
|
+
types={["geometry"]}
|
|
112
|
+
aggrNeed="none"
|
|
113
|
+
value={this.props.design.axes.geometry}
|
|
114
|
+
onChange={this.handleGeometryAxisChange}
|
|
115
|
+
filters={filters}
|
|
116
|
+
/>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
renderRadius() {
|
|
123
|
+
const radiusExpr = this.props.design.radiusExpr ?? { type: "literal", valueType: "number", value: this.props.design.radius }
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<div className="mb-3">
|
|
127
|
+
<label className="text-muted">{T`Radius (meters)`}</label>:
|
|
128
|
+
<ExprComponent
|
|
129
|
+
schema={this.props.schema}
|
|
130
|
+
value={radiusExpr}
|
|
131
|
+
onChange={this.handleRadiusExprChange}
|
|
132
|
+
dataSource={this.props.dataSource}
|
|
133
|
+
table={this.props.design.table}
|
|
134
|
+
types={["number"]}
|
|
135
|
+
/>
|
|
136
|
+
</div>
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
renderUnionShapes() {
|
|
141
|
+
// Only implemented for vector maps
|
|
142
|
+
if (!areVectorMapsEnabled()) {
|
|
143
|
+
return null
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<div className="mb-3">
|
|
148
|
+
<Checkbox
|
|
149
|
+
value={this.props.design.unionShapes}
|
|
150
|
+
onChange={this.handleUnionShapesChange}
|
|
151
|
+
>
|
|
152
|
+
{T`Combine circles (advanced)`}
|
|
153
|
+
</Checkbox>
|
|
154
|
+
</div>
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
renderColor() {
|
|
159
|
+
if (!this.props.design.axes.geometry) {
|
|
160
|
+
return
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const filters = _.clone(this.props.filters) || []
|
|
164
|
+
|
|
165
|
+
if (this.props.design.filter != null) {
|
|
166
|
+
const exprCompiler = new ExprCompiler(this.props.schema)
|
|
167
|
+
const jsonql = exprCompiler.compileExpr({ expr: this.props.design.filter, tableAlias: "{alias}" })
|
|
168
|
+
if (jsonql) {
|
|
169
|
+
filters.push({ table: (this.props.design.filter as OpExpr).table!, jsonql })
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return (
|
|
174
|
+
<div>
|
|
175
|
+
{!this.props.design.axes.color && (
|
|
176
|
+
<div className="mb-3">
|
|
177
|
+
<label className="text-muted">
|
|
178
|
+
<span className="fas fa-tint" />{T`Circle Color`}
|
|
179
|
+
</label>
|
|
180
|
+
<div>
|
|
181
|
+
<ColorComponent
|
|
182
|
+
color={this.props.design.color}
|
|
183
|
+
onChange={this.handleColorChange}
|
|
184
|
+
/>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
)}
|
|
188
|
+
|
|
189
|
+
<div className="mb-3">
|
|
190
|
+
<label className="text-muted">
|
|
191
|
+
<span className="fas fa-tint" />{T`Color By Data`}
|
|
192
|
+
</label>
|
|
193
|
+
<AxisComponent
|
|
194
|
+
schema={this.props.schema}
|
|
195
|
+
dataSource={this.props.dataSource}
|
|
196
|
+
table={this.props.design.table}
|
|
197
|
+
types={["text", "enum", "boolean", "date"]}
|
|
198
|
+
aggrNeed="none"
|
|
199
|
+
value={this.props.design.axes.color}
|
|
200
|
+
defaultColor={this.props.design.color}
|
|
201
|
+
showColorMap={true}
|
|
202
|
+
onChange={this.handleColorAxisChange}
|
|
203
|
+
allowExcludedValues={true}
|
|
204
|
+
reorderable={true}
|
|
205
|
+
filters={filters}
|
|
206
|
+
/>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
renderFillOpacity() {
|
|
213
|
+
return (
|
|
214
|
+
<div className="mb-3">
|
|
215
|
+
<label className="text-muted">{T`Circle Opacity (%)`}</label>:
|
|
216
|
+
<Rcslider
|
|
217
|
+
min={0}
|
|
218
|
+
max={100}
|
|
219
|
+
step={1}
|
|
220
|
+
tipTransitionName="rc-slider-tooltip-zoom-down"
|
|
221
|
+
value={this.props.design.fillOpacity * 100}
|
|
222
|
+
onChange={this.handleFillOpacityChange}
|
|
223
|
+
/>
|
|
224
|
+
</div>
|
|
225
|
+
)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
renderFilter() {
|
|
229
|
+
// If no data, hide
|
|
230
|
+
if (!this.props.design.axes.geometry) {
|
|
231
|
+
return null
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return (
|
|
235
|
+
<div className="mb-3">
|
|
236
|
+
<label className="text-muted">
|
|
237
|
+
<span className="fas fa-filter" />{T`Filters`}
|
|
238
|
+
</label>
|
|
239
|
+
<div style={{ marginLeft: 8 }}>
|
|
240
|
+
<FilterExprComponent
|
|
241
|
+
schema={this.props.schema}
|
|
242
|
+
dataSource={this.props.dataSource}
|
|
243
|
+
onChange={this.handleFilterChange}
|
|
244
|
+
table={this.props.design.table}
|
|
245
|
+
value={this.props.design.filter}
|
|
246
|
+
/>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
renderPopup() {
|
|
253
|
+
if (!this.props.design.table) {
|
|
254
|
+
return null
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return (
|
|
258
|
+
<EditPopupComponent
|
|
259
|
+
design={this.props.design}
|
|
260
|
+
onDesignChange={this.props.onDesignChange}
|
|
261
|
+
schema={this.props.schema}
|
|
262
|
+
dataSource={this.props.dataSource}
|
|
263
|
+
table={this.props.design.table}
|
|
264
|
+
idTable={this.props.design.table}
|
|
265
|
+
defaultPopupFilterJoins={PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table)}
|
|
266
|
+
/>
|
|
267
|
+
)
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
renderHoverOver() {
|
|
271
|
+
if (!this.props.design.table) {
|
|
272
|
+
return null
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return (
|
|
276
|
+
<EditHoverOver
|
|
277
|
+
design={this.props.design}
|
|
278
|
+
onDesignChange={this.props.onDesignChange}
|
|
279
|
+
schema={this.props.schema}
|
|
280
|
+
dataSource={this.props.dataSource}
|
|
281
|
+
table={this.props.design.table}
|
|
282
|
+
idTable={this.props.design.table}
|
|
283
|
+
defaultPopupFilterJoins={PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table)}
|
|
284
|
+
/>
|
|
285
|
+
)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
render() {
|
|
289
|
+
return (
|
|
290
|
+
<div>
|
|
291
|
+
{this.renderTable()}
|
|
292
|
+
{this.renderGeometryAxis()}
|
|
293
|
+
{this.renderRadius()}
|
|
294
|
+
{this.renderUnionShapes()}
|
|
295
|
+
{this.renderColor()}
|
|
296
|
+
{this.renderFillOpacity()}
|
|
297
|
+
{this.renderFilter()}
|
|
298
|
+
{this.renderPopup()}
|
|
299
|
+
{this.renderHoverOver()}
|
|
300
|
+
{this.props.design.table && (
|
|
301
|
+
<ZoomLevelsComponent
|
|
302
|
+
design={this.props.design}
|
|
303
|
+
onDesignChange={this.props.onDesignChange}
|
|
304
|
+
/>
|
|
305
|
+
)}
|
|
306
|
+
</div>
|
|
307
|
+
)
|
|
308
|
+
}
|
|
309
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import _ from "lodash"
|
|
2
|
-
import React from "react"
|
|
2
|
+
import React, { ReactNode } from "react"
|
|
3
3
|
|
|
4
4
|
import { original, produce } from "immer"
|
|
5
5
|
|
|
6
|
-
import Layer, { OnGridClickOptions, OnGridHoverOptions, VectorTileDef } from "./Layer"
|
|
6
|
+
import Layer, { OnGridClickOptions, OnGridHoverOptions, VectorTileDef, LegendOptions } from "./Layer"
|
|
7
7
|
import {
|
|
8
8
|
ExprUtils,
|
|
9
9
|
ExprCompiler,
|
|
@@ -26,6 +26,9 @@ import * as PopupFilterJoinsUtils from "./PopupFilterJoinsUtils"
|
|
|
26
26
|
import { LayerSpecification } from "maplibre-gl"
|
|
27
27
|
import HoverContent from "./HoverContent"
|
|
28
28
|
import { getDefaultLayoutOptions } from "../dashboards/layoutOptions"
|
|
29
|
+
import Widget from "../widgets/Widget"
|
|
30
|
+
import BlocksLayoutManager from "../layouts/blocks/BlocksLayoutManager"
|
|
31
|
+
import { getTranslatableStringsFromLayoutManager } from "../dashboards/DashboardUtils"
|
|
29
32
|
|
|
30
33
|
export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
|
|
31
34
|
/** Gets the type of layer definition */
|
|
@@ -1336,7 +1339,7 @@ export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
|
|
|
1336
1339
|
items: clickOptions.design.popup.items,
|
|
1337
1340
|
layoutOptions: getDefaultLayoutOptions("default"),
|
|
1338
1341
|
renderWidget: (options: any) => {
|
|
1339
|
-
const widget = WidgetFactory.createWidget(options.type)
|
|
1342
|
+
const widget = WidgetFactory.createWidget(options.type) as Widget
|
|
1340
1343
|
|
|
1341
1344
|
// Create filters for single row
|
|
1342
1345
|
const filters = clickOptions.filters.concat(popupFilters)
|
|
@@ -1354,10 +1357,10 @@ export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
|
|
|
1354
1357
|
design: options.design,
|
|
1355
1358
|
scope: null,
|
|
1356
1359
|
filters,
|
|
1357
|
-
onScopeChange: null,
|
|
1358
|
-
onDesignChange: null,
|
|
1359
1360
|
width: options.width,
|
|
1360
|
-
height: options.height
|
|
1361
|
+
height: options.height,
|
|
1362
|
+
locale: clickOptions.locale,
|
|
1363
|
+
translate: clickOptions.translate
|
|
1361
1364
|
})
|
|
1362
1365
|
}
|
|
1363
1366
|
})
|
|
@@ -1414,8 +1417,11 @@ export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
|
|
|
1414
1417
|
key: ev.data.id,
|
|
1415
1418
|
schema: hoverOptions.schema,
|
|
1416
1419
|
dataSource: hoverOptions.dataSource,
|
|
1417
|
-
|
|
1418
|
-
|
|
1420
|
+
table,
|
|
1421
|
+
items: hoverOptions.design.hoverOver.items,
|
|
1422
|
+
filters: popupFilters,
|
|
1423
|
+
locale: hoverOptions.locale,
|
|
1424
|
+
translate: hoverOptions.translate
|
|
1419
1425
|
})
|
|
1420
1426
|
}
|
|
1421
1427
|
|
|
@@ -1489,17 +1495,8 @@ export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
|
|
|
1489
1495
|
|
|
1490
1496
|
// Get the legend to be optionally displayed on the map. Returns
|
|
1491
1497
|
// a React element
|
|
1492
|
-
getLegend(
|
|
1493
|
-
design
|
|
1494
|
-
schema: Schema,
|
|
1495
|
-
name: string,
|
|
1496
|
-
dataSource: DataSource,
|
|
1497
|
-
locale: string,
|
|
1498
|
-
filters: JsonQLFilter[]
|
|
1499
|
-
) {
|
|
1500
|
-
if (filters == null) {
|
|
1501
|
-
filters = []
|
|
1502
|
-
}
|
|
1498
|
+
getLegend(options: LegendOptions<ChoroplethLayerDesign>): ReactNode {
|
|
1499
|
+
const { design, schema, name, dataSource, locale, filters } = options
|
|
1503
1500
|
const _filters = filters.slice()
|
|
1504
1501
|
if (design.filter != null) {
|
|
1505
1502
|
const exprCompiler = new ExprCompiler(schema)
|
|
@@ -1710,4 +1707,28 @@ export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
|
|
|
1710
1707
|
}
|
|
1711
1708
|
})
|
|
1712
1709
|
}
|
|
1710
|
+
|
|
1711
|
+
/** Get strings to be translated */
|
|
1712
|
+
getTranslatableStrings(design: ChoroplethLayerDesign, schema: Schema): string[] {
|
|
1713
|
+
const strings: string[] = []
|
|
1714
|
+
|
|
1715
|
+
// Add strings from hoverOver items
|
|
1716
|
+
if (design.hoverOver && design.hoverOver.items) {
|
|
1717
|
+
for (const item of design.hoverOver.items) {
|
|
1718
|
+
if (item.label) {
|
|
1719
|
+
strings.push(item.label)
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1724
|
+
// Add strings from popup items using a layout manager approach
|
|
1725
|
+
if (design.popup && design.popup.items) {
|
|
1726
|
+
const layoutManager = new BlocksLayoutManager()
|
|
1727
|
+
const popupStrings = getTranslatableStringsFromLayoutManager(layoutManager, design.popup.items, schema)
|
|
1728
|
+
strings.push(...popupStrings)
|
|
1729
|
+
}
|
|
1730
|
+
|
|
1731
|
+
// Remove duplicates
|
|
1732
|
+
return _.uniq(strings)
|
|
1733
|
+
}
|
|
1713
1734
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Expr } from "@mwater/expressions"
|
|
2
2
|
import { Axis } from "../axes/Axis"
|
|
3
3
|
import { HoverOverItem } from "./maps"
|
|
4
|
+
import { LayoutBlock } from "../layouts/blocks/blockUtils"
|
|
5
|
+
import { PopupFilterJoins } from "./PopupFilterJoinsUtils"
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Layer that is composed of regions colored. Now extended to any other regions as well, so name
|
|
@@ -58,12 +60,12 @@ export default interface ChoroplethLayerDesign {
|
|
|
58
60
|
displayNames: boolean
|
|
59
61
|
|
|
60
62
|
/** contains items: which is BlocksLayoutManager items. Will be displayed when the region is clicked. Only when region mode is "indirect" */
|
|
61
|
-
popup:
|
|
63
|
+
popup: { items: LayoutBlock }
|
|
62
64
|
|
|
63
65
|
hoverOver: { items: HoverOverItem[] }
|
|
64
66
|
|
|
65
67
|
/** customizable filtering for popup. See PopupFilterJoins.md. Only when region mode is "indirect" */
|
|
66
|
-
popupFilterJoins:
|
|
68
|
+
popupFilterJoins: PopupFilterJoins
|
|
67
69
|
|
|
68
70
|
/** minimum zoom level */
|
|
69
71
|
minZoom?: number
|
|
@@ -173,7 +173,8 @@ export default class ChoroplethLayerDesigner extends React.Component<{
|
|
|
173
173
|
<div className="mb-3">
|
|
174
174
|
<label className="text-muted">
|
|
175
175
|
<i className="fa fa-database" />
|
|
176
|
-
{
|
|
176
|
+
{" "}
|
|
177
|
+
{T`Data Source`}
|
|
177
178
|
</label>
|
|
178
179
|
<TableSelectComponent
|
|
179
180
|
schema={this.props.schema}
|
|
@@ -230,7 +231,8 @@ export default class ChoroplethLayerDesigner extends React.Component<{
|
|
|
230
231
|
<div className="mb-3">
|
|
231
232
|
<label className="text-muted">
|
|
232
233
|
<i className="fas fa-map-marker-alt" />
|
|
233
|
-
{
|
|
234
|
+
{" "}
|
|
235
|
+
{T`Location`}
|
|
234
236
|
</label>
|
|
235
237
|
<div style={{ marginLeft: 8 }}>
|
|
236
238
|
<ExprComponent
|
package/src/maps/ClusterLayer.ts
CHANGED
|
@@ -2,11 +2,11 @@ import produce, { original } from "immer"
|
|
|
2
2
|
import { JsonQLExpr, JsonQLQuery, JsonQLScalar } from "@mwater/jsonql"
|
|
3
3
|
import _ from "lodash"
|
|
4
4
|
import { DataSource, ExprCleaner, ExprCompiler, ExprValidator, injectTableAlias, Schema } from "@mwater/expressions"
|
|
5
|
-
import React from "react"
|
|
5
|
+
import React, { ReactNode } from "react"
|
|
6
6
|
import { JsonQLFilter } from "../JsonQLFilter"
|
|
7
7
|
import AxisBuilder from "../axes/AxisBuilder"
|
|
8
8
|
import { ClusterLayerDesign } from "./ClusterLayerDesign"
|
|
9
|
-
import Layer, { VectorTileDef } from "./Layer"
|
|
9
|
+
import Layer, { LegendOptions, VectorTileDef } from "./Layer"
|
|
10
10
|
import LayerLegendComponent from "./LayerLegendComponent"
|
|
11
11
|
import { LayerSpecification } from "maplibre-gl"
|
|
12
12
|
|
|
@@ -705,14 +705,8 @@ export default class ClusterLayer extends Layer<ClusterLayerDesign> {
|
|
|
705
705
|
|
|
706
706
|
// Get the legend to be optionally displayed on the map. Returns
|
|
707
707
|
// a React element
|
|
708
|
-
getLegend(
|
|
709
|
-
design
|
|
710
|
-
schema: Schema,
|
|
711
|
-
name: string,
|
|
712
|
-
dataSource: DataSource,
|
|
713
|
-
locale: string,
|
|
714
|
-
filters: JsonQLFilter[] = []
|
|
715
|
-
) {
|
|
708
|
+
getLegend(options: LegendOptions<ClusterLayerDesign>): ReactNode {
|
|
709
|
+
const { design, schema, name, dataSource, locale, filters } = options
|
|
716
710
|
const _filters = filters.slice()
|
|
717
711
|
if (design.filter != null) {
|
|
718
712
|
const exprCompiler = new ExprCompiler(schema)
|
|
@@ -113,7 +113,7 @@ export default class DetailLevelSelectComponent extends React.Component<
|
|
|
113
113
|
onChange: (opt: any) => this.props.onChange(opt.value)
|
|
114
114
|
})
|
|
115
115
|
} else {
|
|
116
|
-
return R("div", { className: "text-muted" }, R("i", { className: "fa fa-spinner fa-spin" }), T`
|
|
116
|
+
return R("div", { className: "text-muted" }, R("i", { className: "fa fa-spinner fa-spin" }), " ", T`Loading...`)
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -161,7 +161,8 @@ async function getVectorTileFromDirectRequest(options: {
|
|
|
161
161
|
}
|
|
162
162
|
const { token, expires } = await response.json()
|
|
163
163
|
|
|
164
|
-
|
|
164
|
+
// Client isn't necessary, but allows tracking of usage easier
|
|
165
|
+
return { url: apiUrl + `vector_tiles/tiles/{z}/{x}/{y}?token=${token}&client=${client ?? ""}`, expires }
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
/**
|
|
@@ -56,7 +56,8 @@ export default class EditPopupComponent extends React.Component<EditPopupCompone
|
|
|
56
56
|
"a",
|
|
57
57
|
{ className: "btn btn-link", onClick: () => this.setState({ editing: true }) },
|
|
58
58
|
R("i", { className: "fa fa-pencil" }),
|
|
59
|
-
|
|
59
|
+
" ",
|
|
60
|
+
T`Customize Popup`
|
|
60
61
|
),
|
|
61
62
|
|
|
62
63
|
this.props.design.popup
|
|
@@ -64,7 +65,8 @@ export default class EditPopupComponent extends React.Component<EditPopupCompone
|
|
|
64
65
|
"a",
|
|
65
66
|
{ className: "btn btn-link", onClick: this.handleRemovePopup },
|
|
66
67
|
R("i", { className: "fa fa-times" }),
|
|
67
|
-
|
|
68
|
+
" ",
|
|
69
|
+
T`Remove Popup`
|
|
68
70
|
)
|
|
69
71
|
: undefined,
|
|
70
72
|
|
|
@@ -107,10 +109,12 @@ export default class EditPopupComponent extends React.Component<EditPopupCompone
|
|
|
107
109
|
design: options.design,
|
|
108
110
|
scope: null,
|
|
109
111
|
filters: [],
|
|
110
|
-
onScopeChange: () => {},
|
|
111
112
|
onDesignChange: options.onDesignChange,
|
|
112
113
|
width: options.width,
|
|
113
114
|
height: options.height,
|
|
115
|
+
// TODO: fix
|
|
116
|
+
locale: "en",
|
|
117
|
+
translate: (input: string) => input,
|
|
114
118
|
singleRowTable: this.props.table
|
|
115
119
|
})
|
|
116
120
|
}
|
package/src/maps/GridLayer.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _ from "lodash"
|
|
2
|
-
import React from "react"
|
|
2
|
+
import React, { ReactNode } from "react"
|
|
3
3
|
|
|
4
|
-
import Layer, { VectorTileDef } from "./Layer"
|
|
4
|
+
import Layer, { LegendOptions, VectorTileDef } from "./Layer"
|
|
5
5
|
import {
|
|
6
6
|
ExprUtils,
|
|
7
7
|
ExprCompiler,
|
|
@@ -625,14 +625,8 @@ export default class GridLayer extends Layer<GridLayerDesign> {
|
|
|
625
625
|
|
|
626
626
|
/** Get the legend to be optionally displayed on the map. Returns
|
|
627
627
|
* a React element */
|
|
628
|
-
getLegend(
|
|
629
|
-
design
|
|
630
|
-
schema: Schema,
|
|
631
|
-
name: string,
|
|
632
|
-
dataSource: DataSource,
|
|
633
|
-
locale: string,
|
|
634
|
-
filters: JsonQLFilter[]
|
|
635
|
-
) {
|
|
628
|
+
getLegend(options: LegendOptions<GridLayerDesign>): ReactNode {
|
|
629
|
+
const { design, schema, name, dataSource, locale, filters } = options
|
|
636
630
|
const axisBuilder = new AxisBuilder({ schema })
|
|
637
631
|
|
|
638
632
|
return React.createElement(LayerLegendComponent, {
|
|
@@ -146,7 +146,8 @@ export default class GridLayerDesigner extends React.Component<{
|
|
|
146
146
|
<div className="mb-3">
|
|
147
147
|
<label className="text-muted">
|
|
148
148
|
<i className="fa fa-database" />
|
|
149
|
-
{
|
|
149
|
+
{" "}
|
|
150
|
+
{T`Data Source`}
|
|
150
151
|
</label>
|
|
151
152
|
<TableSelectComponent
|
|
152
153
|
schema={this.props.schema}
|
|
@@ -169,7 +170,8 @@ export default class GridLayerDesigner extends React.Component<{
|
|
|
169
170
|
<div className="mb-3">
|
|
170
171
|
<label className="text-muted">
|
|
171
172
|
<i className="fas fa-map-marker-alt" />
|
|
172
|
-
{
|
|
173
|
+
{" "}
|
|
174
|
+
{T`Location`}
|
|
173
175
|
</label>
|
|
174
176
|
<div style={{ marginLeft: 8 }}>
|
|
175
177
|
<ExprComponent
|
|
@@ -272,7 +274,7 @@ export default class GridLayerDesigner extends React.Component<{
|
|
|
272
274
|
return R(
|
|
273
275
|
"div",
|
|
274
276
|
{ className: "mb-3" },
|
|
275
|
-
R("label", { className: "text-muted" }, R("span", { className: "fas fa-filter" }), T`
|
|
277
|
+
R("label", { className: "text-muted" }, R("span", { className: "fas fa-filter" }), " ", T`Filters`),
|
|
276
278
|
R(
|
|
277
279
|
"div",
|
|
278
280
|
{ style: { marginLeft: 8 } },
|