@mwater/visualization 5.4.1 → 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 +1 -1
- 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/PivotChartLayoutComponent.js +1 -1
- 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 +2 -2
- 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
|
@@ -10,8 +10,10 @@ const ExprInsertModalComponent_1 = __importDefault(require("./ExprInsertModalCom
|
|
|
10
10
|
const ExprUpdateModalComponent_1 = __importDefault(require("./ExprUpdateModalComponent"));
|
|
11
11
|
const ExprItemsHtmlConverter_1 = __importDefault(require("../../richtext/ExprItemsHtmlConverter"));
|
|
12
12
|
const expressions_ui_1 = require("@mwater/expressions-ui");
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Text component which is provided with the data it needs, rather than loading it.
|
|
15
|
+
* Used by TextWidgetComponent and also by other components that embed text fields
|
|
16
|
+
*/
|
|
15
17
|
class TextComponent extends react_1.default.Component {
|
|
16
18
|
static contextType = expressions_ui_1.LocaleContext;
|
|
17
19
|
exprInsertModal = null;
|
|
@@ -19,7 +21,7 @@ class TextComponent extends react_1.default.Component {
|
|
|
19
21
|
editor = null;
|
|
20
22
|
createItemsHtmlConverter() {
|
|
21
23
|
return new ExprItemsHtmlConverter_1.default(this.props.schema, this.props.onDesignChange != null, this.props.exprValues,
|
|
22
|
-
// Display summaries if in design
|
|
24
|
+
// Display summaries if in design mode and singleRowTable is set
|
|
23
25
|
this.props.onDesignChange != null && this.props.singleRowTable != null,
|
|
24
26
|
// Only replace named strings if not editing
|
|
25
27
|
this.props.onDesignChange == null ? this.props.namedStrings : undefined, this.context);
|
|
@@ -45,22 +47,23 @@ class TextComponent extends react_1.default.Component {
|
|
|
45
47
|
}
|
|
46
48
|
});
|
|
47
49
|
const items = replaceItemInItems(this.props.design.items || [], item);
|
|
48
|
-
|
|
50
|
+
this.props.onDesignChange({ ...this.props.design, items });
|
|
49
51
|
}
|
|
50
52
|
handleItemClick = (item) => {
|
|
51
|
-
|
|
53
|
+
this.exprUpdateModal.open(item, (item) => {
|
|
52
54
|
// Replace in items
|
|
53
|
-
|
|
55
|
+
this.replaceItem(item);
|
|
54
56
|
});
|
|
55
57
|
};
|
|
56
58
|
handleAddExpr = (ev) => {
|
|
57
59
|
ev.preventDefault();
|
|
58
|
-
|
|
60
|
+
this.exprInsertModal.open();
|
|
59
61
|
};
|
|
60
62
|
renderExtraPaletteButtons() {
|
|
61
63
|
return (react_1.default.createElement("div", { key: "expr", className: "mwater-visualization-text-palette-item", onMouseDown: this.handleAddExpr },
|
|
62
64
|
react_1.default.createElement("i", { className: "fa fa-plus" }),
|
|
63
|
-
|
|
65
|
+
" ",
|
|
66
|
+
T `Expression`));
|
|
64
67
|
}
|
|
65
68
|
renderModals() {
|
|
66
69
|
return [
|
|
@@ -11,8 +11,8 @@ export default class TextWidget extends Widget {
|
|
|
11
11
|
dataSource: DataSource;
|
|
12
12
|
widgetDataSource: import("../WidgetDataSource").WidgetDataSource;
|
|
13
13
|
filters: JsonQLFilter[];
|
|
14
|
-
design:
|
|
15
|
-
onDesignChange: ((design:
|
|
14
|
+
design: any;
|
|
15
|
+
onDesignChange: ((design: any) => void) | null | undefined;
|
|
16
16
|
width: number | undefined;
|
|
17
17
|
height: number | undefined;
|
|
18
18
|
singleRowTable: string | undefined;
|
|
@@ -21,10 +21,13 @@ export default class TextWidget extends Widget {
|
|
|
21
21
|
} | undefined;
|
|
22
22
|
ref: ((widget: any) => void) | undefined;
|
|
23
23
|
refreshKey: any;
|
|
24
|
+
locale: string;
|
|
25
|
+
translate: (input: string) => string;
|
|
24
26
|
}, any>;
|
|
25
27
|
getData(design: any, schema: Schema, dataSource: DataSource, filters: JsonQLFilter[], callback: any): any;
|
|
26
28
|
isAutoHeight(): boolean;
|
|
27
|
-
getExprItems(items
|
|
29
|
+
getExprItems(items?: HtmlItem[]): HtmlItemExpr[];
|
|
28
30
|
getFilterableTables(design: TextWidgetDesign | undefined, schema: Schema): string[];
|
|
29
31
|
getTOCEntries(design: any, namedStrings: any): any;
|
|
32
|
+
getTranslatableStrings(design: TextWidgetDesign, schema: Schema): string[];
|
|
30
33
|
}
|
|
@@ -12,6 +12,7 @@ const expressions_2 = require("@mwater/expressions");
|
|
|
12
12
|
const expressions_3 = require("@mwater/expressions");
|
|
13
13
|
const expressions_4 = require("@mwater/expressions");
|
|
14
14
|
const Widget_1 = __importDefault(require("../Widget"));
|
|
15
|
+
const ExprItemsTranslator_1 = require("../../richtext/ExprItemsTranslator");
|
|
15
16
|
class TextWidget extends Widget_1.default {
|
|
16
17
|
// Creates a React element that is a view of the widget
|
|
17
18
|
// options:
|
|
@@ -42,7 +43,9 @@ class TextWidget extends Widget_1.default {
|
|
|
42
43
|
singleRowTable: options.singleRowTable,
|
|
43
44
|
namedStrings: options.namedStrings,
|
|
44
45
|
ref: options.widgetRef,
|
|
45
|
-
refreshKey: options.refreshKey
|
|
46
|
+
refreshKey: options.refreshKey,
|
|
47
|
+
locale: options.locale,
|
|
48
|
+
translate: options.translate
|
|
46
49
|
});
|
|
47
50
|
}
|
|
48
51
|
// Get the data that the widget needs. This will be called on the server, typically.
|
|
@@ -243,5 +246,8 @@ class TextWidget extends Widget_1.default {
|
|
|
243
246
|
findRecursive(design.items);
|
|
244
247
|
return entries;
|
|
245
248
|
}
|
|
249
|
+
getTranslatableStrings(design, schema) {
|
|
250
|
+
return (0, ExprItemsTranslator_1.getHtmlItemsStrings)(design.items || []);
|
|
251
|
+
}
|
|
246
252
|
}
|
|
247
253
|
exports.default = TextWidget;
|
|
@@ -19,6 +19,10 @@ export interface TextWidgetComponentProps {
|
|
|
19
19
|
namedStrings?: any;
|
|
20
20
|
/** A key that changes when the widget should be refreshed */
|
|
21
21
|
refreshKey?: any;
|
|
22
|
+
/** Locale to use for display */
|
|
23
|
+
locale: string;
|
|
24
|
+
/** Translate function to use for display. Returns same string when editing. */
|
|
25
|
+
translate: (input: string) => string;
|
|
22
26
|
}
|
|
23
27
|
export default class TextWidgetComponent extends AsyncLoadComponent<TextWidgetComponentProps, {
|
|
24
28
|
loading: boolean;
|
|
@@ -13,6 +13,7 @@ const ActionCancelModalComponent_1 = __importDefault(require("@mwater/react-libr
|
|
|
13
13
|
const bootstrap_1 = require("@mwater/react-library/lib/bootstrap");
|
|
14
14
|
const ColorComponent_1 = __importDefault(require("../../ColorComponent"));
|
|
15
15
|
const bootstrap_2 = require("@mwater/react-library/lib/bootstrap");
|
|
16
|
+
const ExprItemsTranslator_1 = require("../../richtext/ExprItemsTranslator");
|
|
16
17
|
// Widget which displays styled text with embedded expressions
|
|
17
18
|
class TextWidgetComponent extends AsyncLoadComponent_1.default {
|
|
18
19
|
divComp;
|
|
@@ -123,7 +124,12 @@ class TextWidgetComponent extends AsyncLoadComponent_1.default {
|
|
|
123
124
|
// If loading, don't display old values
|
|
124
125
|
const exprValues = !this.state.loading ? this.state.exprValues : {};
|
|
125
126
|
const padding = this.props.design.padding ?? 0;
|
|
126
|
-
|
|
127
|
+
// Translate items if needed
|
|
128
|
+
const translatedDesign = this.props.onDesignChange ? this.props.design : {
|
|
129
|
+
...this.props.design,
|
|
130
|
+
items: (0, ExprItemsTranslator_1.translateHtmlItems)(this.props.design.items || [], this.props.translate)
|
|
131
|
+
};
|
|
132
|
+
return (react_1.default.createElement(TextComponent_1.default, { design: translatedDesign, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, exprValues: exprValues, width: this.props.width ? this.props.width - padding * 2 : undefined, height: this.props.height ? this.props.height - padding * 2 : undefined, singleRowTable: this.props.singleRowTable, namedStrings: this.props.namedStrings, locale: this.props.locale }));
|
|
127
133
|
}
|
|
128
134
|
render() {
|
|
129
135
|
const borderStyle = this.props.design.borderThickness && this.props.design.borderColor
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { HtmlItem } from "../../richtext/ItemsHtmlConverter";
|
|
3
|
-
export type TextWidgetItem = HtmlItem | HtmlItemExpr;
|
|
1
|
+
import { HtmlItemOrExpr } from "../../richtext/ExprItemsHtmlConverter";
|
|
4
2
|
export interface TextWidgetDesign {
|
|
5
3
|
/** Text widget stores its content as array of items. See ItemsHtmlConverter TODO */
|
|
6
|
-
items
|
|
4
|
+
items?: HtmlItemOrExpr[];
|
|
7
5
|
/** "title" for title block. default is "default" */
|
|
8
6
|
style?: "title" | "default" | "header" | "footer";
|
|
9
7
|
/** Background color of the text widget (optional) */
|
|
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isEmptyTextWidgetDesign = isEmptyTextWidgetDesign;
|
|
4
4
|
/** Returns true if the text widget design is empty. */
|
|
5
5
|
function isEmptyTextWidgetDesign(design) {
|
|
6
|
-
return design == null || design.items.length === 0;
|
|
6
|
+
return design == null || (design.items != null && design.items.length === 0);
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mwater/visualization",
|
|
3
|
-
"version": "5.4.
|
|
3
|
+
"version": "5.4.2",
|
|
4
4
|
"description": "Visualization library",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"test": "
|
|
8
|
-
"test-browser": "
|
|
9
|
-
"watch": "
|
|
7
|
+
"test": "./node_modules/build-library/test-cli",
|
|
8
|
+
"test-browser": "./node_modules/build-library/test-browser",
|
|
9
|
+
"watch": "./node_modules/build-library/watch",
|
|
10
10
|
"build": "rsync -av --exclude '*.ts' --exclude '*.tsx' src/ lib/ ; tsc -p tsconfig.build.json",
|
|
11
11
|
"prepublish": "npm run build"
|
|
12
12
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"async": "^1.2.1",
|
|
30
30
|
"async-latest": "^1.0.0",
|
|
31
31
|
"backbone": "~1.1.2",
|
|
32
|
-
"billboard.js": "3.
|
|
32
|
+
"billboard.js": "3.14.0",
|
|
33
33
|
"canonical-json": "0.0.4",
|
|
34
34
|
"classnames": "^2.3.1",
|
|
35
35
|
"color": "^3.2.1",
|
|
@@ -41,9 +41,8 @@
|
|
|
41
41
|
"d3-tip": "^0.9.0",
|
|
42
42
|
"dayjs": "^1.11.10",
|
|
43
43
|
"dompurify": "^1.0.11",
|
|
44
|
-
"ez-localize": "^2.
|
|
44
|
+
"ez-localize": "^2.13.0",
|
|
45
45
|
"file-saver": "^2.0.5",
|
|
46
|
-
"fixed-data-table-2": "^1.2.15",
|
|
47
46
|
"immer": "^8.0.0",
|
|
48
47
|
"immutable-setter": "^1.1.1",
|
|
49
48
|
"jquery": "^3.6.3",
|
|
@@ -85,7 +84,7 @@
|
|
|
85
84
|
"@types/d3": "^5.16.4",
|
|
86
85
|
"@types/d3-format": "^1.4.1",
|
|
87
86
|
"@types/dompurify": "0.0.32",
|
|
88
|
-
"@types/
|
|
87
|
+
"@types/file-saver": "^2.0.7",
|
|
89
88
|
"@types/jquery": "^3.5.5",
|
|
90
89
|
"@types/leaflet": "^1.7.9",
|
|
91
90
|
"@types/lodash": "^3.10.3",
|
package/src/ColorComponent.tsx
CHANGED
|
@@ -64,8 +64,7 @@ export default class ColorComponent extends React.Component<ColorComponentProps,
|
|
|
64
64
|
<div style={popupPosition}>
|
|
65
65
|
{!this.props.disableReset && (
|
|
66
66
|
<button type="button" className="btn btn-link btn-sm" onClick={this.handleReset}>
|
|
67
|
-
<i className="fa fa-undo" />
|
|
68
|
-
{T` Reset Color`}
|
|
67
|
+
<i className="fa fa-undo" /> {T`Reset Color`}
|
|
69
68
|
</button>
|
|
70
69
|
)}
|
|
71
70
|
<button type="button" className="btn btn-link btn-sm" onClick={this.handleAdvanced}>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Immutable selection class for selecting ids */
|
|
2
|
+
export default class IdSelection {
|
|
3
|
+
ids: { [id: string]: true }
|
|
4
|
+
inverted: boolean
|
|
5
|
+
|
|
6
|
+
// ids is map of ids to true, inverted is boolean
|
|
7
|
+
constructor(ids = {}, inverted = false) {
|
|
8
|
+
this.ids = ids
|
|
9
|
+
this.inverted = inverted
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
isSelected(id: string) {
|
|
13
|
+
if (this.ids[id]) {
|
|
14
|
+
return !this.inverted
|
|
15
|
+
}
|
|
16
|
+
return this.inverted
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
isNone() {
|
|
20
|
+
return Object.keys(this.ids).length === 0 && !this.inverted
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
all() {
|
|
24
|
+
return new IdSelection({}, true)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
none() {
|
|
28
|
+
return new IdSelection({}, false)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
invert() {
|
|
32
|
+
return new IdSelection(this.ids, !this.inverted)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
add(id: string) {
|
|
36
|
+
if (this.inverted) {
|
|
37
|
+
const newIds = { ...this.ids }
|
|
38
|
+
delete newIds[id]
|
|
39
|
+
return new IdSelection(newIds, true)
|
|
40
|
+
} else {
|
|
41
|
+
return new IdSelection({ ...this.ids, [id]: true }, false)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
remove(id: string) {
|
|
46
|
+
if (!this.inverted) {
|
|
47
|
+
const newIds = { ...this.ids }
|
|
48
|
+
delete newIds[id]
|
|
49
|
+
return new IdSelection(newIds, false)
|
|
50
|
+
} else {
|
|
51
|
+
return new IdSelection({ ...this.ids, [id]: true }, true)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
toggle(id: string) {
|
|
56
|
+
if (this.isSelected(id)) {
|
|
57
|
+
return this.remove(id)
|
|
58
|
+
} else {
|
|
59
|
+
return this.add(id)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -124,10 +124,11 @@ export default class MWaterAddRelatedIndicatorComponent extends React.Component<
|
|
|
124
124
|
{ style: { paddingLeft: 5 }, className: "text-muted" },
|
|
125
125
|
T`Other Available Indicators. Click to enable. `,
|
|
126
126
|
R("i", { className: "fa fa-check-circle" }),
|
|
127
|
-
|
|
127
|
+
" = ",
|
|
128
|
+
T`recommended`,
|
|
128
129
|
|
|
129
130
|
!this.state.indicators
|
|
130
|
-
? R("div", { className: "text-muted" }, R("i", { className: "fa fa-spin fa-spinner" }), T`
|
|
131
|
+
? R("div", { className: "text-muted" }, R("i", { className: "fa fa-spin fa-spinner" }), " ", T`Loading...`)
|
|
131
132
|
: undefined,
|
|
132
133
|
|
|
133
134
|
R(
|
|
@@ -12,7 +12,6 @@ import { MWaterCustomTablesetListComponent } from "./MWaterCustomTablesetListCom
|
|
|
12
12
|
import { MWaterMetricsTableListComponent } from "./MWaterMetricsTableListComponent"
|
|
13
13
|
import { Form } from "@mwater/forms"
|
|
14
14
|
import { MWaterAssetSystemsListComponent } from "./MWaterAssetSystemsListComponent"
|
|
15
|
-
import { LocaleContext } from "@mwater/expressions-ui"
|
|
16
15
|
|
|
17
16
|
const sitesOrder: { [table: string]: number } = {
|
|
18
17
|
"entities.water_point": 1,
|
|
@@ -52,8 +51,6 @@ interface MWaterCompleteTableSelectComponentProps {
|
|
|
52
51
|
export default class MWaterCompleteTableSelectComponent extends React.Component<MWaterCompleteTableSelectComponentProps, {
|
|
53
52
|
showLegacyAssets: boolean
|
|
54
53
|
}> {
|
|
55
|
-
static contextType = LocaleContext
|
|
56
|
-
|
|
57
54
|
constructor(props: MWaterCompleteTableSelectComponentProps) {
|
|
58
55
|
super(props)
|
|
59
56
|
|
|
@@ -104,8 +101,8 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
104
101
|
_.map(types, (tableId) => {
|
|
105
102
|
table = this.props.schema.getTable(tableId)!
|
|
106
103
|
return {
|
|
107
|
-
name: ExprUtils.localizeString(table.name,
|
|
108
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
104
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
105
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
109
106
|
onClick: this.props.onChange.bind(null, table.id)
|
|
110
107
|
}
|
|
111
108
|
})
|
|
@@ -159,8 +156,8 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
159
156
|
return R(uiComponents.OptionListComponent, {
|
|
160
157
|
items: _.map(sweetSenseTables, (table) => {
|
|
161
158
|
return {
|
|
162
|
-
name: ExprUtils.localizeString(table.name,
|
|
163
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
159
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
160
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
164
161
|
onClick: this.props.onChange.bind(null, table.id)
|
|
165
162
|
}
|
|
166
163
|
})
|
|
@@ -177,7 +174,7 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
177
174
|
extraTables: this.props.extraTables,
|
|
178
175
|
onExtraTableAdd: this.handleExtraTableAdd,
|
|
179
176
|
onExtraTableRemove: this.handleExtraTableRemove,
|
|
180
|
-
locale:
|
|
177
|
+
locale: T.locale
|
|
181
178
|
})
|
|
182
179
|
}
|
|
183
180
|
|
|
@@ -191,7 +188,7 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
191
188
|
extraTables: this.props.extraTables,
|
|
192
189
|
onExtraTableAdd: this.handleExtraTableAdd,
|
|
193
190
|
onExtraTableRemove: this.handleExtraTableRemove,
|
|
194
|
-
locale:
|
|
191
|
+
locale: T.locale
|
|
195
192
|
})
|
|
196
193
|
}
|
|
197
194
|
|
|
@@ -208,8 +205,8 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
208
205
|
continue
|
|
209
206
|
}
|
|
210
207
|
items.push({
|
|
211
|
-
name: ExprUtils.localizeString(table.name,
|
|
212
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
208
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
209
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
213
210
|
onClick: this.props.onChange.bind(null, table.id)
|
|
214
211
|
})
|
|
215
212
|
}
|
|
@@ -236,7 +233,7 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
236
233
|
extraTables: this.props.extraTables,
|
|
237
234
|
onExtraTableAdd: this.handleExtraTableAdd,
|
|
238
235
|
onExtraTableRemove: this.handleExtraTableRemove,
|
|
239
|
-
locale:
|
|
236
|
+
locale: T.locale
|
|
240
237
|
})
|
|
241
238
|
}
|
|
242
239
|
|
|
@@ -294,8 +291,8 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
294
291
|
return R(uiComponents.OptionListComponent, {
|
|
295
292
|
items: _.map(otherTables, (table) => {
|
|
296
293
|
return {
|
|
297
|
-
name: ExprUtils.localizeString(table.name,
|
|
298
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
294
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
295
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
299
296
|
onClick: this.props.onChange.bind(null, table.id)
|
|
300
297
|
}
|
|
301
298
|
})
|
|
@@ -320,25 +317,25 @@ export default class MWaterCompleteTableSelectComponent extends React.Component<
|
|
|
320
317
|
const sweetSenseTables = this.getSweetSenseTables()
|
|
321
318
|
|
|
322
319
|
const tabs: TabbedComponentTab[] = [
|
|
323
|
-
{ id: "sites", label: [R("i", { className: "fa fa-map-marker" }), T`
|
|
324
|
-
{ id: "forms", label: [R("i", { className: "fa fa-th-list" }), T`
|
|
320
|
+
{ id: "sites", label: [R("i", { className: "fa fa-map-marker" }), " ", T`Sites`], elem: this.renderSites() },
|
|
321
|
+
{ id: "forms", label: [R("i", { className: "fa fa-th-list" }), " ", T`Surveys`], elem: this.renderForms() },
|
|
325
322
|
{
|
|
326
323
|
id: "indicators",
|
|
327
|
-
label: [R("i", { className: "fa fa-check-circle" }), T`
|
|
324
|
+
label: [R("i", { className: "fa fa-check-circle" }), " ", T`Indicators`],
|
|
328
325
|
elem: this.renderIndicators()
|
|
329
326
|
},
|
|
330
327
|
{
|
|
331
328
|
id: "issues",
|
|
332
|
-
label: [R("i", { className: "fa fa-exclamation-circle" }), T`
|
|
329
|
+
label: [R("i", { className: "fa fa-exclamation-circle" }), " ", T`Issues`],
|
|
333
330
|
elem: this.renderIssues()
|
|
334
331
|
},
|
|
335
|
-
{ id: "tablesets", label: [R("i", { className: "fa fa-table" }), T`
|
|
336
|
-
{ id: "metrics", label: [R("i", { className: "fa fa-line-chart" }), T`
|
|
337
|
-
{ id: "assets", label: [R("i", { className: "fas fa-map-pin" }), T`
|
|
332
|
+
{ id: "tablesets", label: [R("i", { className: "fa fa-table" }), " ", T`Tables`], elem: this.renderTablesets() },
|
|
333
|
+
{ id: "metrics", label: [R("i", { className: "fa fa-line-chart" }), " ", T`Metrics`], elem: this.renderMetrics() },
|
|
334
|
+
{ id: "assets", label: [R("i", { className: "fas fa-map-pin" }), " ", T`Assets`], elem: this.renderAssets() }
|
|
338
335
|
]
|
|
339
336
|
|
|
340
337
|
if (sweetSenseTables.length > 0) {
|
|
341
|
-
tabs.push({ id: "sensors", label: T`
|
|
338
|
+
tabs.push({ id: "sensors", label: T`Sensors`, elem: this.renderSweetSense() })
|
|
342
339
|
}
|
|
343
340
|
|
|
344
341
|
tabs.push({ id: "other", label: T`Advanced`, elem: this.renderOther() })
|
|
@@ -383,8 +380,6 @@ interface FormsListComponentState {
|
|
|
383
380
|
|
|
384
381
|
// Searchable list of forms
|
|
385
382
|
class FormsListComponent extends React.Component<FormsListComponentProps, FormsListComponentState> {
|
|
386
|
-
static contextType = LocaleContext
|
|
387
|
-
|
|
388
383
|
constructor(props: any) {
|
|
389
384
|
super(props)
|
|
390
385
|
this.state = {
|
|
@@ -447,7 +442,7 @@ class FormsListComponent extends React.Component<FormsListComponentProps, FormsL
|
|
|
447
442
|
confirm(
|
|
448
443
|
T`Remove ${ExprUtils.localizeString(
|
|
449
444
|
table.name,
|
|
450
|
-
|
|
445
|
+
T.locale
|
|
451
446
|
)}? Any widgets that depend on it will no longer work properly.`
|
|
452
447
|
)
|
|
453
448
|
) {
|
|
@@ -496,8 +491,8 @@ class FormsListComponent extends React.Component<FormsListComponentProps, FormsL
|
|
|
496
491
|
? R(uiComponents.OptionListComponent, {
|
|
497
492
|
items: _.map(tables, (table) => {
|
|
498
493
|
return {
|
|
499
|
-
name: ExprUtils.localizeString(table.name,
|
|
500
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
494
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
495
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
501
496
|
onClick: this.props.onChange.bind(null, table.id),
|
|
502
497
|
onRemove: this.handleTableRemove.bind(null, table)
|
|
503
498
|
}
|
|
@@ -562,7 +557,6 @@ interface IndicatorsListComponentState {
|
|
|
562
557
|
|
|
563
558
|
// Searchable list of indicators
|
|
564
559
|
class IndicatorsListComponent extends React.Component<IndicatorsListComponentProps, IndicatorsListComponentState> {
|
|
565
|
-
static contextType = LocaleContext
|
|
566
560
|
addIndicatorConfirmPopup: AddIndicatorConfirmPopupComponent | null
|
|
567
561
|
|
|
568
562
|
constructor(props: any) {
|
|
@@ -590,7 +584,7 @@ class IndicatorsListComponent extends React.Component<IndicatorsListComponentPro
|
|
|
590
584
|
[
|
|
591
585
|
(indicator: any) => ((this.props.extraTables || []).includes("indicator_values:" + indicator._id) ? 0 : 1),
|
|
592
586
|
(indicator: any) => (indicator.design.recommended ? 0 : 1),
|
|
593
|
-
(indicator: any) => ExprUtils.localizeString(indicator.design.name,
|
|
587
|
+
(indicator: any) => ExprUtils.localizeString(indicator.design.name, T.locale)
|
|
594
588
|
],
|
|
595
589
|
["asc", "asc", "asc"]
|
|
596
590
|
)
|
|
@@ -598,8 +592,8 @@ class IndicatorsListComponent extends React.Component<IndicatorsListComponentPro
|
|
|
598
592
|
return this.setState({
|
|
599
593
|
indicators: _.map(indicators, (indicator) => ({
|
|
600
594
|
id: indicator._id,
|
|
601
|
-
name: ExprUtils.localizeString(indicator.design.name,
|
|
602
|
-
desc: ExprUtils.localizeString(indicator.design.desc,
|
|
595
|
+
name: ExprUtils.localizeString(indicator.design.name, T.locale),
|
|
596
|
+
desc: ExprUtils.localizeString(indicator.design.desc, T.locale)
|
|
603
597
|
}))
|
|
604
598
|
})
|
|
605
599
|
}).fail((xhr: any) => {
|
|
@@ -612,7 +606,7 @@ class IndicatorsListComponent extends React.Component<IndicatorsListComponentPro
|
|
|
612
606
|
confirm(
|
|
613
607
|
T`Remove ${ExprUtils.localizeString(
|
|
614
608
|
table.name,
|
|
615
|
-
|
|
609
|
+
T.locale
|
|
616
610
|
)}? Any widgets that depend on it will no longer work properly.`
|
|
617
611
|
)
|
|
618
612
|
) {
|
|
@@ -679,8 +673,8 @@ class IndicatorsListComponent extends React.Component<IndicatorsListComponentPro
|
|
|
679
673
|
? R(uiComponents.OptionListComponent, {
|
|
680
674
|
items: _.map(tables, (table) => {
|
|
681
675
|
return {
|
|
682
|
-
name: ExprUtils.localizeString(table.name,
|
|
683
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
676
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
677
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
684
678
|
onClick: this.handleSelect.bind(null, table.id),
|
|
685
679
|
onRemove: this.handleTableRemove.bind(null, table)
|
|
686
680
|
}
|
|
@@ -738,8 +732,6 @@ class AddIndicatorConfirmPopupComponent extends React.Component<
|
|
|
738
732
|
AddIndicatorConfirmPopupComponentProps,
|
|
739
733
|
AddIndicatorConfirmPopupComponentState
|
|
740
734
|
> {
|
|
741
|
-
static contextType = LocaleContext
|
|
742
|
-
|
|
743
735
|
constructor(props: any) {
|
|
744
736
|
super(props)
|
|
745
737
|
this.state = {
|
|
@@ -781,8 +773,8 @@ are certain that you want to use the raw indicator table`
|
|
|
781
773
|
|
|
782
774
|
R(uiComponents.OptionListComponent, {
|
|
783
775
|
items: _.map(entityColumns, (entityColumn) => ({
|
|
784
|
-
name: ExprUtils.localizeString(entityColumn.name,
|
|
785
|
-
desc: ExprUtils.localizeString(entityColumn.desc,
|
|
776
|
+
name: ExprUtils.localizeString(entityColumn.name, T.locale),
|
|
777
|
+
desc: ExprUtils.localizeString(entityColumn.desc, T.locale),
|
|
786
778
|
onClick: () => {
|
|
787
779
|
// Select table
|
|
788
780
|
this.props.onChange(entityColumn.join!.toTable)
|
|
@@ -845,8 +837,6 @@ interface IssuesListComponentState {
|
|
|
845
837
|
|
|
846
838
|
// Searchable list of issue types
|
|
847
839
|
class IssuesListComponent extends React.Component<IssuesListComponentProps, IssuesListComponentState> {
|
|
848
|
-
static contextType = LocaleContext
|
|
849
|
-
|
|
850
840
|
constructor(props: any) {
|
|
851
841
|
super(props)
|
|
852
842
|
this.state = {
|
|
@@ -869,7 +859,7 @@ class IssuesListComponent extends React.Component<IssuesListComponentProps, Issu
|
|
|
869
859
|
[
|
|
870
860
|
(issueType) => ((this.props.extraTables || []).includes("issues:" + issueType._id) ? 0 : 1),
|
|
871
861
|
(issueType) => (issueType.created.by === this.props.user ? 0 : 1),
|
|
872
|
-
(issueType) => ExprUtils.localizeString(issueType.name,
|
|
862
|
+
(issueType) => ExprUtils.localizeString(issueType.name, T.locale)
|
|
873
863
|
],
|
|
874
864
|
["asc", "asc", "asc"]
|
|
875
865
|
)
|
|
@@ -877,8 +867,8 @@ class IssuesListComponent extends React.Component<IssuesListComponentProps, Issu
|
|
|
877
867
|
return this.setState({
|
|
878
868
|
issueTypes: _.map(issueTypes, (issueType) => ({
|
|
879
869
|
id: issueType._id,
|
|
880
|
-
name: ExprUtils.localizeString(issueType.name,
|
|
881
|
-
desc: ExprUtils.localizeString(issueType.desc,
|
|
870
|
+
name: ExprUtils.localizeString(issueType.name, T.locale),
|
|
871
|
+
desc: ExprUtils.localizeString(issueType.desc, T.locale)
|
|
882
872
|
}))
|
|
883
873
|
})
|
|
884
874
|
}).fail((xhr: any) => {
|
|
@@ -891,7 +881,7 @@ class IssuesListComponent extends React.Component<IssuesListComponentProps, Issu
|
|
|
891
881
|
confirm(
|
|
892
882
|
T`Remove ${ExprUtils.localizeString(
|
|
893
883
|
table.name,
|
|
894
|
-
|
|
884
|
+
T.locale
|
|
895
885
|
)}? Any widgets that depend on it will no longer work properly.`
|
|
896
886
|
)
|
|
897
887
|
) {
|
|
@@ -940,8 +930,8 @@ class IssuesListComponent extends React.Component<IssuesListComponentProps, Issu
|
|
|
940
930
|
? R(uiComponents.OptionListComponent, {
|
|
941
931
|
items: _.map(tables, (table) => {
|
|
942
932
|
return {
|
|
943
|
-
name: ExprUtils.localizeString(table.name,
|
|
944
|
-
desc: ExprUtils.localizeString(table.desc,
|
|
933
|
+
name: ExprUtils.localizeString(table.name, T.locale),
|
|
934
|
+
desc: ExprUtils.localizeString(table.desc, T.locale),
|
|
945
935
|
onClick: this.props.onChange.bind(null, table.id),
|
|
946
936
|
onRemove: this.handleTableRemove.bind(null, table)
|
|
947
937
|
}
|
|
@@ -8,34 +8,36 @@ import LoadingComponent from "@mwater/react-library/lib/LoadingComponent"
|
|
|
8
8
|
import mWaterLoader from "./mWaterLoader"
|
|
9
9
|
import MWaterContextComponent, { AddLayerElementFactory } from "./MWaterContextComponent"
|
|
10
10
|
|
|
11
|
+
export interface MWaterLoaderComponentProps {
|
|
12
|
+
apiUrl: string
|
|
13
|
+
client?: string
|
|
14
|
+
share?: string
|
|
15
|
+
/** user id of logged in user */
|
|
16
|
+
user?: string
|
|
17
|
+
/** Load schema as a specific user (for shared dashboards, etc) */
|
|
18
|
+
asUser?: string
|
|
19
|
+
/** Extra tables to load in schema. Forms are not loaded by default as they are too many */
|
|
20
|
+
extraTables?: string[]
|
|
21
|
+
/** Called when extra tables are changed and schema will be reloaded */
|
|
22
|
+
onExtraTablesChange?: (extraTables: string[]) => void
|
|
23
|
+
/** Locales of the schema to load. Default is all. */
|
|
24
|
+
locales?: string[]
|
|
25
|
+
/** Override default add layer component. See AddLayerComponent for details */
|
|
26
|
+
addLayerElementFactory?: AddLayerElementFactory
|
|
27
|
+
children: (error: any, config?: { schema: Schema; dataSource: DataSource }) => ReactElement<any>
|
|
28
|
+
/** Custom error formatter that returns React node or string, gets passed the error response from server */
|
|
29
|
+
errorFormatter?: (data: any, defaultError: string) => string
|
|
30
|
+
/** Origin of usage. e.g. "dashboards:43445364..." */
|
|
31
|
+
origin?: string
|
|
32
|
+
}
|
|
33
|
+
|
|
11
34
|
/**
|
|
12
35
|
* Loads an mWater schema from the server and creates child with schema and dataSource
|
|
13
36
|
* Also creates context to allow selecting of a table in an mWater-friendly way
|
|
14
37
|
* and several other context items
|
|
15
38
|
*/
|
|
16
39
|
export default class MWaterLoaderComponent extends AsyncLoadComponent<
|
|
17
|
-
|
|
18
|
-
apiUrl: string
|
|
19
|
-
client?: string
|
|
20
|
-
share?: string
|
|
21
|
-
/** user id of logged in user */
|
|
22
|
-
user?: string
|
|
23
|
-
/** Load schema as a specific user (for shared dashboards, etc) */
|
|
24
|
-
asUser?: string
|
|
25
|
-
/** Extra tables to load in schema. Forms are not loaded by default as they are too many */
|
|
26
|
-
extraTables?: string[]
|
|
27
|
-
/** Called when extra tables are changed and schema will be reloaded */
|
|
28
|
-
onExtraTablesChange?: (extraTables: string[]) => void
|
|
29
|
-
/** Locales of the schema to load. Default is all. */
|
|
30
|
-
locales?: string[]
|
|
31
|
-
/** Override default add layer component. See AddLayerComponent for details */
|
|
32
|
-
addLayerElementFactory?: AddLayerElementFactory
|
|
33
|
-
children: (error: any, config?: { schema: Schema; dataSource: DataSource }) => ReactElement<any>
|
|
34
|
-
/** Custom error formatter that returns React node or string, gets passed the error response from server */
|
|
35
|
-
errorFormatter?: (data: any, defaultError: string) => string
|
|
36
|
-
/** Origin of usage. e.g. "dashboards:43445364..." */
|
|
37
|
-
origin?: string
|
|
38
|
-
},
|
|
40
|
+
MWaterLoaderComponentProps,
|
|
39
41
|
{
|
|
40
42
|
error: any
|
|
41
43
|
schema: Schema | null
|
|
@@ -45,7 +47,7 @@ export default class MWaterLoaderComponent extends AsyncLoadComponent<
|
|
|
45
47
|
> {
|
|
46
48
|
mounted: boolean
|
|
47
49
|
|
|
48
|
-
constructor(props:
|
|
50
|
+
constructor(props: MWaterLoaderComponentProps) {
|
|
49
51
|
super(props)
|
|
50
52
|
this.state = {
|
|
51
53
|
error: null,
|
|
@@ -58,7 +60,7 @@ export default class MWaterLoaderComponent extends AsyncLoadComponent<
|
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
// Override to determine if a load is needed. Not called on mounting
|
|
61
|
-
isLoadNeeded(newProps:
|
|
63
|
+
isLoadNeeded(newProps: MWaterLoaderComponentProps, oldProps: MWaterLoaderComponentProps) {
|
|
62
64
|
return !_.isEqual(
|
|
63
65
|
_.pick(newProps, "apiUrl", "client", "user", "share", "asUser", "extraTables", "locales"),
|
|
64
66
|
_.pick(oldProps, "apiUrl", "client", "user", "share", "asUser", "extraTables", "locales")
|
|
@@ -66,9 +68,9 @@ export default class MWaterLoaderComponent extends AsyncLoadComponent<
|
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
// Call callback with state changes
|
|
69
|
-
load(props:
|
|
71
|
+
load(props: MWaterLoaderComponentProps, prevProps: MWaterLoaderComponentProps, callback: any) {
|
|
70
72
|
// Load schema and data source
|
|
71
|
-
|
|
73
|
+
mWaterLoader(
|
|
72
74
|
{
|
|
73
75
|
apiUrl: props.apiUrl,
|
|
74
76
|
client: props.client,
|