@mwater/visualization 5.4.1 → 5.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +12 -20
- package/lib/dashboards/DashboardComponent.js +109 -69
- 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/languages.js +6 -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/Quickfilter.d.ts +2 -0
- package/lib/quickfilter/QuickfiltersComponent.d.ts +2 -0
- package/lib/quickfilter/QuickfiltersComponent.js +9 -7
- package/lib/quickfilter/QuickfiltersDesignComponent.d.ts +5 -30
- package/lib/quickfilter/QuickfiltersDesignComponent.js +56 -63
- 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 +189 -125
- 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/languages.ts +6 -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/Quickfilter.ts +3 -0
- package/src/quickfilter/QuickfiltersComponent.ts +13 -7
- package/src/quickfilter/QuickfiltersDesignComponent.tsx +127 -128
- 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
|
@@ -5,318 +5,317 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const lodash_1 = __importDefault(require("lodash"));
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const react_2 = require("react");
|
|
9
|
+
const GridComponent_1 = require("@mwater/react-library/lib/GridComponent");
|
|
10
10
|
const expressions_1 = require("@mwater/expressions");
|
|
11
11
|
const ExprCellComponent_1 = __importDefault(require("./ExprCellComponent"));
|
|
12
|
-
const EditExprCellComponent_1 = __importDefault(require("./EditExprCellComponent"));
|
|
13
12
|
const immer_1 = __importDefault(require("immer"));
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
componentWillReceiveProps(nextProps) {
|
|
32
|
-
// If design or filters changed, delete all rows
|
|
33
|
-
// TODO won't this reload on column resize?
|
|
34
|
-
if (!lodash_1.default.isEqual(nextProps.design, this.props.design) || !lodash_1.default.isEqual(nextProps.filters, this.props.filters) || nextProps.refreshKey !== this.props.refreshKey) {
|
|
35
|
-
this.setState({ rows: [], entirelyLoaded: false });
|
|
13
|
+
const CellEditor_1 = require("./CellEditor");
|
|
14
|
+
const useStableCallback_1 = require("@mwater/react-library/lib/useStableCallback");
|
|
15
|
+
const valueFormatter_1 = require("../valueFormatter");
|
|
16
|
+
const valueFormatter_2 = require("../valueFormatter");
|
|
17
|
+
/** Datagrid view component. It does not show any quick filters, but only the grid itself. */
|
|
18
|
+
const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
19
|
+
const [rows, setRows] = (0, react_2.useState)([]);
|
|
20
|
+
const [entirelyLoaded, setEntirelyLoaded] = (0, react_2.useState)(false);
|
|
21
|
+
const loadStateRef = (0, react_2.useRef)(null);
|
|
22
|
+
// Get row header width based on selection and showRowNumbers
|
|
23
|
+
const rowHeaderWidth = props.selectedRows
|
|
24
|
+
? (props.design.showRowNumbers ? 70 : 30) // With selection: 70 for both, 30 for just checkbox
|
|
25
|
+
: (props.design.showRowNumbers ? 50 : 20); // Without selection: 50 for numbers, 20 for neither
|
|
26
|
+
const handleRowSelect = (0, react_2.useCallback)((rowId) => {
|
|
27
|
+
if (props.onSelectedRowsChange) {
|
|
28
|
+
props.onSelectedRowsChange(props.selectedRows.toggle(rowId));
|
|
36
29
|
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
30
|
+
}, [props.selectedRows, props.onSelectedRowsChange]);
|
|
31
|
+
const handleSelectAll = (0, react_2.useCallback)(() => {
|
|
32
|
+
if (props.onSelectedRowsChange) {
|
|
33
|
+
props.onSelectedRowsChange(props.selectedRows.all());
|
|
34
|
+
}
|
|
35
|
+
}, [props.selectedRows, props.onSelectedRowsChange]);
|
|
36
|
+
const handleSelectNone = (0, react_2.useCallback)(() => {
|
|
37
|
+
if (props.onSelectedRowsChange) {
|
|
38
|
+
props.onSelectedRowsChange(props.selectedRows.none());
|
|
39
|
+
}
|
|
40
|
+
}, [props.selectedRows, props.onSelectedRowsChange]);
|
|
41
|
+
const handleSelectInvert = (0, react_2.useCallback)(() => {
|
|
42
|
+
if (props.onSelectedRowsChange) {
|
|
43
|
+
props.onSelectedRowsChange(props.selectedRows.invert());
|
|
44
|
+
}
|
|
45
|
+
}, [props.selectedRows, props.onSelectedRowsChange]);
|
|
46
|
+
/** Render top left corner with optional selection dropdown */
|
|
47
|
+
const renderTopLeft = (0, react_2.useCallback)(() => {
|
|
48
|
+
if (!props.selectedRows) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (!props.onSelectedRowsChange) {
|
|
52
|
+
return (react_1.default.createElement("div", { style: { padding: 8, textAlign: "right" } },
|
|
53
|
+
react_1.default.createElement("input", { type: "checkbox", checked: false, readOnly: true })));
|
|
54
|
+
}
|
|
55
|
+
return (react_1.default.createElement("div", { className: "dropdown", style: { marginTop: 6 } },
|
|
56
|
+
react_1.default.createElement("div", { style: { textAlign: "center" }, className: "dropdown-toggle", "data-bs-toggle": "dropdown" },
|
|
57
|
+
react_1.default.createElement("input", { type: "checkbox", checked: false, readOnly: true, style: { marginTop: 7 } })),
|
|
58
|
+
react_1.default.createElement("ul", { className: "dropdown-menu" },
|
|
59
|
+
react_1.default.createElement("li", null,
|
|
60
|
+
react_1.default.createElement("a", { className: "dropdown-item", onClick: handleSelectAll }, T `All`)),
|
|
61
|
+
react_1.default.createElement("li", null,
|
|
62
|
+
react_1.default.createElement("a", { className: "dropdown-item", onClick: handleSelectNone }, T `None`)),
|
|
63
|
+
react_1.default.createElement("li", null,
|
|
64
|
+
react_1.default.createElement("a", { className: "dropdown-item", onClick: handleSelectInvert }, T `Invert`)))));
|
|
65
|
+
}, [props.selectedRows, props.onSelectedRowsChange, handleSelectAll, handleSelectNone, handleSelectInvert]);
|
|
66
|
+
/** Render row headers with optional selection checkboxes */
|
|
67
|
+
const renderRowHeader = (0, react_2.useCallback)((options) => {
|
|
68
|
+
const rowHeaderStyle = {
|
|
69
|
+
width: options.width,
|
|
70
|
+
height: options.height,
|
|
71
|
+
display: "flex",
|
|
72
|
+
alignItems: "center",
|
|
73
|
+
overflow: "hidden",
|
|
74
|
+
textOverflow: "ellipsis",
|
|
75
|
+
whiteSpace: "nowrap",
|
|
76
|
+
padding: "0 8px"
|
|
77
|
+
};
|
|
78
|
+
const rowId = options.row < rows.length ? rows[options.row].id : null;
|
|
79
|
+
const isSelected = rowId != null && props.selectedRows ? props.selectedRows.isSelected(rowId) : false;
|
|
80
|
+
const isSubtable = options.row < rows.length ? rows[options.row].subtable >= 0 : false;
|
|
81
|
+
return (react_1.default.createElement("div", { style: rowHeaderStyle },
|
|
82
|
+
props.selectedRows && !isSubtable && (react_1.default.createElement("input", { type: "checkbox", style: { marginRight: 4 }, checked: isSelected, onChange: rowId != null && props.onSelectedRowsChange ? () => handleRowSelect(rowId) : undefined, readOnly: !props.onSelectedRowsChange })),
|
|
83
|
+
props.design.showRowNumbers ? (react_1.default.createElement("div", { style: { flex: 1, textAlign: "right" } }, options.row + 1)) : null));
|
|
84
|
+
}, [rows, props.selectedRows, props.onSelectedRowsChange, props.design.showRowNumbers, handleRowSelect]);
|
|
85
|
+
const loadMoreRows = (0, useStableCallback_1.useStableCallback)((callback) => {
|
|
41
86
|
const loadState = {
|
|
42
|
-
design:
|
|
43
|
-
offset:
|
|
44
|
-
limit:
|
|
45
|
-
filters:
|
|
87
|
+
design: props.design,
|
|
88
|
+
offset: rows.length,
|
|
89
|
+
limit: props.pageSize || 100,
|
|
90
|
+
filters: props.filters
|
|
46
91
|
};
|
|
47
|
-
|
|
48
|
-
if (lodash_1.default.isEqual(loadState, this.loadState)) {
|
|
92
|
+
if (lodash_1.default.isEqual(loadState, loadStateRef.current)) {
|
|
49
93
|
return;
|
|
50
94
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// Perform the actual load
|
|
54
|
-
this.props.datagridDataSource.getRows(loadState.design, loadState.offset, loadState.limit, loadState.filters, (error, newRows) => {
|
|
95
|
+
loadStateRef.current = loadState;
|
|
96
|
+
props.datagridDataSource.getRows(loadState.design, loadState.offset, loadState.limit, loadState.filters, (error, newRows) => {
|
|
55
97
|
if (error) {
|
|
56
98
|
console.error(error);
|
|
57
99
|
alert(T `Error loading data`);
|
|
58
100
|
return;
|
|
59
101
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const rows = this.state.rows.concat(newRows);
|
|
66
|
-
return this.setState({ rows, entirelyLoaded: newRows.length < this.props.pageSize });
|
|
102
|
+
if (lodash_1.default.isEqual(loadState, loadStateRef.current)) {
|
|
103
|
+
loadStateRef.current = null;
|
|
104
|
+
setRows(prev => [...prev, ...newRows]);
|
|
105
|
+
setEntirelyLoaded(newRows.length < (props.pageSize || 100));
|
|
106
|
+
callback?.();
|
|
67
107
|
}
|
|
68
108
|
});
|
|
109
|
+
});
|
|
110
|
+
function reload() {
|
|
111
|
+
console.log("reload");
|
|
112
|
+
setRows([]);
|
|
113
|
+
setEntirelyLoaded(false);
|
|
69
114
|
}
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
lodash_1.default.pullAt(newRows, rowIndex);
|
|
77
|
-
this.setState({ rows: newRows });
|
|
78
|
-
callback();
|
|
115
|
+
// Reset rows when design, filters or refreshKey changes
|
|
116
|
+
(0, react_2.useEffect)(() => {
|
|
117
|
+
reload();
|
|
118
|
+
}, [getDatagridReloadKey(props.design), JSON.stringify(props.filters), props.refreshKey]);
|
|
119
|
+
function getRows() {
|
|
120
|
+
return rows;
|
|
79
121
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
* caused the row to be excluded by the filter. Always replace
|
|
83
|
-
* it where it was, unless it has disappeared from view in which case the row
|
|
84
|
-
* is removed.
|
|
85
|
-
*/
|
|
86
|
-
reloadRow(rowIndex, rowId, callback) {
|
|
87
|
-
// Create new filters that only include one row
|
|
88
|
-
const filters = (0, immer_1.default)(this.props.filters || [], draft => {
|
|
122
|
+
function reloadRow(rowIndex, rowId, callback) {
|
|
123
|
+
const filters = (0, immer_1.default)(props.filters || [], draft => {
|
|
89
124
|
draft.push({
|
|
90
|
-
table:
|
|
125
|
+
table: props.design.table,
|
|
91
126
|
jsonql: {
|
|
92
127
|
type: "op",
|
|
93
128
|
op: "=",
|
|
94
129
|
exprs: [
|
|
95
|
-
{ type: "field", tableAlias: "{alias}", column:
|
|
130
|
+
{ type: "field", tableAlias: "{alias}", column: props.schema.getTable(props.design.table)?.primaryKey },
|
|
96
131
|
{ type: "literal", value: rowId }
|
|
97
132
|
]
|
|
98
133
|
}
|
|
99
134
|
});
|
|
100
135
|
});
|
|
101
|
-
|
|
136
|
+
props.datagridDataSource.getRows(props.design, 0, 1, filters, (error, newRows) => {
|
|
102
137
|
if (error) {
|
|
103
138
|
console.error(error);
|
|
104
139
|
alert(T `Error loading data`);
|
|
105
140
|
callback();
|
|
106
141
|
return;
|
|
107
142
|
}
|
|
108
|
-
|
|
109
|
-
if (
|
|
110
|
-
draft[rowIndex] =
|
|
143
|
+
setRows(currentRows => (0, immer_1.default)(currentRows, draft => {
|
|
144
|
+
if (newRows[0]) {
|
|
145
|
+
draft[rowIndex] = newRows[0];
|
|
111
146
|
}
|
|
112
147
|
else {
|
|
113
|
-
// If row missing, remove it from list
|
|
114
148
|
draft.splice(rowIndex, 1);
|
|
115
149
|
}
|
|
116
|
-
});
|
|
117
|
-
this.setState({ rows: newRows });
|
|
150
|
+
}));
|
|
118
151
|
callback();
|
|
119
152
|
});
|
|
120
153
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
154
|
+
function deleteRow(rowIndex, callback) {
|
|
155
|
+
const newRows = rows.slice();
|
|
156
|
+
newRows.splice(rowIndex, 1);
|
|
157
|
+
setRows(newRows);
|
|
158
|
+
callback();
|
|
159
|
+
}
|
|
160
|
+
// Expose methods via ref
|
|
161
|
+
(0, react_2.useImperativeHandle)(ref, () => ({
|
|
162
|
+
getRows: getRows,
|
|
163
|
+
getEntirelyLoaded: () => entirelyLoaded,
|
|
164
|
+
reload: reload,
|
|
165
|
+
reloadRow: reloadRow,
|
|
166
|
+
deleteRow: deleteRow,
|
|
167
|
+
loadMoreRows: loadMoreRows
|
|
168
|
+
}), [rows, entirelyLoaded, reload, reloadRow, deleteRow, loadMoreRows]);
|
|
169
|
+
const handleColWidthsChange = (0, useStableCallback_1.useStableCallback)((colWidths) => {
|
|
170
|
+
const columns = props.design.columns.map((col, index) => ({
|
|
171
|
+
...col,
|
|
172
|
+
width: colWidths[index]
|
|
173
|
+
}));
|
|
174
|
+
props.onDesignChange?.({ ...props.design, columns });
|
|
175
|
+
});
|
|
176
|
+
const updateCellValue = (0, useStableCallback_1.useStableCallback)(async (value, rowIndex, colIndex) => {
|
|
177
|
+
try {
|
|
178
|
+
const rowId = rows[rowIndex].id;
|
|
179
|
+
const { expr } = props.design.columns[colIndex];
|
|
180
|
+
await props.updateExprValues(props.design.table, [{ primaryKey: rowId, expr, value }]);
|
|
181
|
+
await new Promise(resolve => {
|
|
182
|
+
reloadRow(rowIndex, rowId, resolve);
|
|
183
|
+
});
|
|
184
|
+
return true;
|
|
136
185
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
186
|
+
catch (error) {
|
|
187
|
+
alert(T `Error saving data`);
|
|
188
|
+
console.error(error);
|
|
189
|
+
return false;
|
|
140
190
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
191
|
+
});
|
|
192
|
+
const handleRowDoubleClick = (0, useStableCallback_1.useStableCallback)((rowIndex) => {
|
|
193
|
+
if (props.onRowDoubleClick != null && rows[rowIndex]?.id) {
|
|
194
|
+
props.onRowDoubleClick(props.design.table, rows[rowIndex].id, rowIndex);
|
|
195
|
+
return true;
|
|
145
196
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
197
|
+
return false;
|
|
198
|
+
});
|
|
199
|
+
const handleRowClick = (0, useStableCallback_1.useStableCallback)((rowIndex) => {
|
|
200
|
+
if (props.onRowClick != null && rows[rowIndex]?.id) {
|
|
201
|
+
props.onRowClick(props.design.table, rows[rowIndex].id, rowIndex);
|
|
202
|
+
return true;
|
|
149
203
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
204
|
+
return false;
|
|
205
|
+
});
|
|
206
|
+
const handleCopy = (0, useStableCallback_1.useStableCallback)((rowIndex, colIndex) => {
|
|
207
|
+
const row = rows[rowIndex];
|
|
208
|
+
const col = props.design.columns[colIndex];
|
|
209
|
+
const value = row[`c${colIndex}`];
|
|
210
|
+
// Format value as text using ExprCellComponent logic
|
|
211
|
+
const exprUtils = new expressions_1.ExprUtils(props.schema);
|
|
212
|
+
const exprType = exprUtils.getExprType(col.expr);
|
|
213
|
+
if (!exprType) {
|
|
156
214
|
return;
|
|
157
215
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
return;
|
|
216
|
+
let formattedValue = value;
|
|
217
|
+
// Parse JSON values
|
|
218
|
+
if (["image", "imagelist", "geometry", "text[]"].includes(exprType) && lodash_1.default.isString(value)) {
|
|
219
|
+
formattedValue = JSON.parse(value);
|
|
163
220
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
// Start editing
|
|
168
|
-
this.setState({ editingCell: { rowIndex, columnIndex, rowId } });
|
|
169
|
-
}
|
|
170
|
-
}).catch(error => {
|
|
171
|
-
console.error(error);
|
|
172
|
-
});
|
|
173
|
-
};
|
|
174
|
-
// Called to save
|
|
175
|
-
handleSaveEdit = () => {
|
|
176
|
-
// Ignore if not changed
|
|
177
|
-
if (!this.editCellComp || !this.editCellComp.hasChanged()) {
|
|
178
|
-
this.setState({ editingCell: null, savingCell: false });
|
|
179
|
-
return;
|
|
221
|
+
// Format based on type
|
|
222
|
+
if ((0, valueFormatter_2.canFormatType)(exprType)) {
|
|
223
|
+
formattedValue = (0, valueFormatter_1.formatValue)(exprType, formattedValue, col.format);
|
|
180
224
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const value = this.editCellComp.getValue();
|
|
184
|
-
this.setState({ savingCell: true }, () => {
|
|
185
|
-
this.props.updateExprValues(this.props.design.table, [{ primaryKey: rowId, expr, value }])
|
|
186
|
-
.then(() => {
|
|
187
|
-
// Reload row
|
|
188
|
-
this.reloadRow(this.state.editingCell.rowIndex, rowId, () => {
|
|
189
|
-
this.setState({ editingCell: null, savingCell: false });
|
|
190
|
-
});
|
|
191
|
-
}).catch(error => {
|
|
192
|
-
alert(T `Error saving data`);
|
|
193
|
-
console.error(error);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
};
|
|
197
|
-
handleCancelEdit = () => {
|
|
198
|
-
this.setState({ editingCell: null, savingCell: false });
|
|
199
|
-
};
|
|
200
|
-
// Called with current ref edit. Save
|
|
201
|
-
refEditCell = (comp) => {
|
|
202
|
-
this.editCellComp = comp;
|
|
203
|
-
};
|
|
204
|
-
handleRowDoubleClick = (ev, rowIndex) => {
|
|
205
|
-
if (this.props.onRowDoubleClick != null && this.state.rows[rowIndex]?.id) {
|
|
206
|
-
this.props.onRowDoubleClick(this.props.design.table, this.state.rows[rowIndex].id, rowIndex);
|
|
225
|
+
else {
|
|
226
|
+
formattedValue = exprUtils.stringifyExprLiteral(col.expr, formattedValue, props.design.locale);
|
|
207
227
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
228
|
+
navigator.clipboard.writeText(formattedValue || "");
|
|
229
|
+
});
|
|
230
|
+
const renderCell = (0, useStableCallback_1.useStableCallback)((options) => {
|
|
231
|
+
if (options.row >= rows.length) {
|
|
232
|
+
lodash_1.default.defer(() => loadMoreRows());
|
|
233
|
+
return react_1.default.createElement("div", { style: { padding: 8 } },
|
|
234
|
+
react_1.default.createElement("i", { className: "fa fa-spinner fa-spin text-muted" }));
|
|
212
235
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
renderCell = (column, columnIndex, exprType, cellProps) => {
|
|
216
|
-
// If rendering placeholder row
|
|
217
|
-
if (cellProps.rowIndex >= this.state.rows.length) {
|
|
218
|
-
// Load next tick as cannot update while rendering
|
|
219
|
-
lodash_1.default.defer(() => {
|
|
220
|
-
this.loadMoreRows();
|
|
221
|
-
});
|
|
222
|
-
return R(fixed_data_table_2_1.Cell, cellProps, R("i", { className: "fa fa-spinner fa-spin" }));
|
|
236
|
+
if (options.col === -1) {
|
|
237
|
+
return (react_1.default.createElement("div", { style: { padding: 8, textAlign: "right" } }, options.row + 1));
|
|
223
238
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
}, cellProps.rowIndex + 1);
|
|
239
|
+
const column = props.design.columns[options.col];
|
|
240
|
+
const exprUtils = new expressions_1.ExprUtils(props.schema);
|
|
241
|
+
const exprType = exprUtils.getExprType(column.expr);
|
|
242
|
+
const value = rows[options.row][`c${options.col}`];
|
|
243
|
+
if (column.type === "expr" && exprType) {
|
|
244
|
+
const muted = !column.subtable && rows[options.row].subtable >= 0;
|
|
245
|
+
return react_1.default.createElement("div", { style: { width: options.width, height: options.height } },
|
|
246
|
+
react_1.default.createElement(ExprCellComponent_1.default, { schema: props.schema, dataSource: props.dataSource, locale: props.design.locale, width: options.width, height: options.height, value: value, expr: column.expr, format: column.format, exprType: exprType, muted: muted }));
|
|
234
247
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
if (
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
locale: this.props.design.locale,
|
|
249
|
-
width: cellProps.width,
|
|
250
|
-
height: cellProps.height,
|
|
251
|
-
value,
|
|
252
|
-
expr: column.expr,
|
|
253
|
-
onSave: this.handleSaveEdit,
|
|
254
|
-
onCancel: this.handleCancelEdit
|
|
255
|
-
});
|
|
248
|
+
return null;
|
|
249
|
+
});
|
|
250
|
+
const renderColHeader = (0, useStableCallback_1.useStableCallback)((options) => {
|
|
251
|
+
if (options.col === -1) {
|
|
252
|
+
return (react_1.default.createElement("div", { style: {
|
|
253
|
+
padding: 5,
|
|
254
|
+
textAlign: "right",
|
|
255
|
+
fontWeight: "bold",
|
|
256
|
+
height: "100%",
|
|
257
|
+
display: "flex",
|
|
258
|
+
alignItems: "center",
|
|
259
|
+
justifyContent: "flex-end"
|
|
260
|
+
} }, "#"));
|
|
256
261
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
onClick: this.handleCellClick.bind(null, cellProps.rowIndex, columnIndex)
|
|
272
|
-
});
|
|
262
|
+
const column = props.design.columns[options.col];
|
|
263
|
+
const exprUtils = new expressions_1.ExprUtils(props.schema);
|
|
264
|
+
return (react_1.default.createElement("div", { style: {
|
|
265
|
+
padding: 5,
|
|
266
|
+
whiteSpace: "nowrap",
|
|
267
|
+
fontWeight: "bold",
|
|
268
|
+
height: "100%",
|
|
269
|
+
display: "flex",
|
|
270
|
+
alignItems: "center"
|
|
271
|
+
} }, column.label || exprUtils.summarizeExpr(column.expr, props.design.locale)));
|
|
272
|
+
});
|
|
273
|
+
const renderCellEditor = (0, useStableCallback_1.useStableCallback)((options) => {
|
|
274
|
+
if (options.row >= rows.length) {
|
|
275
|
+
return react_1.default.createElement("div", null);
|
|
273
276
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
const
|
|
279
|
-
|
|
280
|
-
const
|
|
281
|
-
return
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
cell: this.renderCell.bind(null, column, columnIndex, exprType),
|
|
287
|
-
columnKey: column.id,
|
|
288
|
-
isResizable: this.props.onDesignChange != null
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
// Render all columns
|
|
292
|
-
renderColumns() {
|
|
293
|
-
const columns = lodash_1.default.map(this.props.design.columns, (column, columnIndex) => this.renderColumn(column, columnIndex));
|
|
294
|
-
if (this.props.design.showRowNumbers) {
|
|
295
|
-
columns.unshift(this.renderColumn({
|
|
296
|
-
label: "#",
|
|
297
|
-
width: 50
|
|
298
|
-
}, -1));
|
|
277
|
+
const column = props.design.columns[options.col];
|
|
278
|
+
const value = rows[options.row][`c${options.col}`];
|
|
279
|
+
const expr = column.expr;
|
|
280
|
+
const exprUtils = new expressions_1.ExprUtils(props.schema);
|
|
281
|
+
const exprType = exprUtils.getExprType(expr);
|
|
282
|
+
const enumValues = exprUtils.getExprEnumValues(expr) ?? undefined;
|
|
283
|
+
const idTable = exprUtils.getExprIdTable(expr) ?? undefined;
|
|
284
|
+
return (react_1.default.createElement(CellEditor_1.CellEditor, { type: exprType, enumValues: enumValues, idTable: idTable, schema: props.schema, dataSource: props.dataSource, initialValue: value, updateCellValue: value => updateCellValue(value, options.row, options.col), editorOptions: options }));
|
|
285
|
+
});
|
|
286
|
+
const canEdit = (0, useStableCallback_1.useStableCallback)(async (options) => {
|
|
287
|
+
if (options.col === -1) {
|
|
288
|
+
return false;
|
|
299
289
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
let rowsCount = this.state.rows.length;
|
|
304
|
-
// Add loading row if not entirely loaded
|
|
305
|
-
if (!this.state.entirelyLoaded) {
|
|
306
|
-
rowsCount += 1;
|
|
290
|
+
const rowId = rows[options.row].id;
|
|
291
|
+
if (rowId == null) {
|
|
292
|
+
return false;
|
|
307
293
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
294
|
+
if (!props.canEditExpr) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
const column = props.design.columns[options.col];
|
|
298
|
+
const exprType = new expressions_1.ExprUtils(props.schema).getExprType(column.expr);
|
|
299
|
+
if (!(0, CellEditor_1.canEditType)(exprType)) {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
return props.canEditExpr(props.design.table, rowId, column.expr);
|
|
303
|
+
});
|
|
304
|
+
let numRows = rows.length;
|
|
305
|
+
if (!entirelyLoaded) {
|
|
306
|
+
numRows += 1;
|
|
320
307
|
}
|
|
321
|
-
|
|
308
|
+
const colWidths = props.design.columns.map(col => col.width || 200);
|
|
309
|
+
return (react_1.default.createElement(GridComponent_1.GridComponent, { width: props.width, height: props.height, numRows: numRows, colWidths: colWidths, colHeaderHeight: 40, rowHeight: 40, renderCell: renderCell, renderColHeader: renderColHeader, renderCellEditor: renderCellEditor, canEdit: canEdit, onColWidthsChange: handleColWidthsChange, onRowDoubleClick: handleRowDoubleClick, onRowClick: handleRowClick, rowHeaderWidth: rowHeaderWidth, renderRowHeader: renderRowHeader, renderTopLeft: renderTopLeft, onCopy: handleCopy }));
|
|
310
|
+
});
|
|
322
311
|
exports.default = DatagridViewComponent;
|
|
312
|
+
/** Get a unique key for a datagrid design, ignoring column widths which don't affect data */
|
|
313
|
+
function getDatagridReloadKey(design) {
|
|
314
|
+
// Create copy without column widths
|
|
315
|
+
const designWithoutWidths = (0, immer_1.default)(design, draft => {
|
|
316
|
+
for (const column of draft.columns) {
|
|
317
|
+
column.width = 0;
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
return JSON.stringify(designWithoutWidths);
|
|
321
|
+
}
|
|
@@ -48,7 +48,7 @@ class DirectDatagridDataSource {
|
|
|
48
48
|
limit,
|
|
49
49
|
extraFilters: filters
|
|
50
50
|
});
|
|
51
|
-
|
|
51
|
+
this.options.dataSource.performQuery(query, callback);
|
|
52
52
|
}
|
|
53
53
|
countRows(design, filters, callback) {
|
|
54
54
|
const queryBuilder = new DatagridQueryBuilder_1.default(this.options.schema);
|
|
@@ -70,8 +70,7 @@ class DirectDatagridDataSource {
|
|
|
70
70
|
}
|
|
71
71
|
]
|
|
72
72
|
};
|
|
73
|
-
|
|
74
|
-
return this.options.dataSource.performQuery(countQuery, (error, rows) => {
|
|
73
|
+
this.options.dataSource.performQuery(countQuery, (error, rows) => {
|
|
75
74
|
callback(error, rows?.[0]?.cnt);
|
|
76
75
|
});
|
|
77
76
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { DataSource, LiteralType, Schema } from "@mwater/expressions";
|
|
3
|
-
import { Cell } from "fixed-data-table-2";
|
|
2
|
+
import { DataSource, Expr, LiteralType, Schema } from "@mwater/expressions";
|
|
4
3
|
export interface ExprCellComponentProps {
|
|
5
4
|
/** schema to use */
|
|
6
5
|
schema: Schema;
|
|
@@ -14,21 +13,15 @@ export interface ExprCellComponentProps {
|
|
|
14
13
|
width: number;
|
|
15
14
|
height: number;
|
|
16
15
|
value?: any;
|
|
17
|
-
expr?:
|
|
16
|
+
expr?: Expr;
|
|
18
17
|
/** True to show muted */
|
|
19
18
|
muted?: boolean;
|
|
20
|
-
|
|
19
|
+
/** Called when clicked */
|
|
20
|
+
onClick?: () => void;
|
|
21
|
+
/** Called when double clicked */
|
|
22
|
+
onDoubleClick?: () => void;
|
|
21
23
|
}
|
|
22
24
|
export default class ExprCellComponent extends React.Component<ExprCellComponentProps> {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
href: string;
|
|
26
|
-
key: any;
|
|
27
|
-
target: string;
|
|
28
|
-
style: {
|
|
29
|
-
paddingLeft: number;
|
|
30
|
-
paddingRight: number;
|
|
31
|
-
};
|
|
32
|
-
}, HTMLElement>;
|
|
33
|
-
render(): React.CElement<import("fixed-data-table-2").CellProps, Cell>;
|
|
25
|
+
renderImage(id: string): React.JSX.Element;
|
|
26
|
+
render(): React.JSX.Element;
|
|
34
27
|
}
|