@mwater/visualization 5.5.0 → 5.6.1
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 -2
- package/lib/MWaterContextComponent.d.ts +1 -1
- package/lib/MWaterGlobalFiltersComponent.d.ts +2 -2
- package/lib/MWaterGlobalFiltersComponent.js +11 -20
- package/lib/MWaterLoaderComponent.d.ts +4 -13
- package/lib/MWaterLoaderComponent.js +2 -11
- package/lib/TranslationsTabComponent.d.ts +34 -0
- package/lib/TranslationsTabComponent.js +256 -0
- package/lib/UndoStack.d.ts +2 -1
- package/lib/UndoStack.js +12 -6
- package/lib/dashboards/DashboardComponent.js +6 -5
- package/lib/dashboards/DashboardDesign.d.ts +1 -1
- package/lib/dashboards/ServerDashboardDataSource.d.ts +0 -1
- package/lib/dashboards/ServerDashboardDataSource.js +0 -25
- package/lib/dashboards/SettingsModalComponent.js +9 -233
- package/lib/datagrids/DatagridComponent.js +27 -2
- package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -3
- package/lib/datagrids/DatagridDesignerComponent.js +108 -120
- package/lib/datagrids/DatagridViewComponent.js +33 -6
- package/lib/datagrids/OrderBysDesignerComponent.d.ts +7 -7
- package/lib/datagrids/OrderBysDesignerComponent.js +19 -28
- package/lib/index.css +45 -2
- package/lib/index.d.ts +5 -5
- package/lib/index.js +2 -3
- package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +8 -1
- package/lib/layouts/blocks/BlocksDisplayComponent.js +46 -4
- package/lib/maps/BufferLayer.d.ts +0 -13
- package/lib/maps/BufferLayer.js +24 -237
- package/lib/maps/BufferLayerDesign.d.ts +1 -1
- package/lib/maps/BufferLayerDesignerComponent.d.ts +1 -1
- package/lib/maps/BufferLayerDesignerComponent.js +2 -7
- package/lib/maps/ChoroplethLayer.d.ts +1 -16
- package/lib/maps/ChoroplethLayer.js +25 -358
- package/lib/maps/ChoroplethLayerDesign.d.ts +5 -2
- package/lib/maps/ChoroplethLayerDesigner.d.ts +10 -32
- package/lib/maps/ChoroplethLayerDesigner.js +58 -89
- package/lib/maps/ClusterLayer.d.ts +0 -9
- package/lib/maps/ClusterLayer.js +0 -250
- package/lib/maps/DirectMapDataSource.js +1 -48
- package/lib/maps/EditHoverOver.d.ts +4 -3
- package/lib/maps/EditHoverOver.js +3 -3
- package/lib/maps/GridLayer.d.ts +0 -15
- package/lib/maps/GridLayer.js +0 -212
- package/lib/maps/HoverContent.js +1 -1
- package/lib/maps/Layer.d.ts +1 -26
- package/lib/maps/Layer.js +0 -13
- package/lib/maps/LeafletMapComponent.js +10 -19
- package/lib/maps/MapComponent.d.ts +19 -35
- package/lib/maps/MapComponent.js +135 -77
- package/lib/maps/MapControlComponent.d.ts +4 -5
- package/lib/maps/MapControlComponent.js +5 -12
- package/lib/maps/MapDesign.d.ts +8 -0
- package/lib/maps/MapDesignerComponent.d.ts +2 -0
- package/lib/maps/MapDesignerComponent.js +7 -2
- package/lib/maps/MapLayerDataSource.d.ts +0 -4
- package/lib/maps/MapLayerViewDesignerComponent.d.ts +3 -1
- package/lib/maps/MapLayerViewDesignerComponent.js +5 -1
- package/lib/maps/MapLayersDesignerComponent.d.ts +2 -0
- package/lib/maps/MapLayersDesignerComponent.js +2 -1
- package/lib/maps/MapTranslationsTab.d.ts +15 -0
- package/lib/maps/MapTranslationsTab.js +47 -0
- package/lib/maps/MapUtils.d.ts +11 -0
- package/lib/maps/MapUtils.js +57 -1
- package/lib/maps/MapViewComponent.d.ts +1 -1
- package/lib/maps/MapViewComponent.js +1 -8
- package/lib/maps/MarkersLayer.d.ts +1 -14
- package/lib/maps/MarkersLayer.js +89 -254
- package/lib/maps/MarkersLayerDesign.d.ts +5 -1
- package/lib/maps/MarkersLayerDesignerComponent.d.ts +32 -57
- package/lib/maps/MarkersLayerDesignerComponent.js +158 -134
- package/lib/maps/ServerMapDataSource.d.ts +0 -1
- package/lib/maps/ServerMapDataSource.js +0 -25
- package/lib/maps/SwitchableTileUrlLayer.d.ts +0 -2
- package/lib/maps/SwitchableTileUrlLayer.js +0 -9
- package/lib/maps/TileUrlLayer.d.ts +0 -1
- package/lib/maps/TileUrlLayer.js +0 -5
- package/lib/maps/VectorMapViewComponent.js +13 -10
- package/lib/maps/symbols/font-awesome/asterisk.png +0 -0
- package/lib/maps/symbols/font-awesome/ban.png +0 -0
- package/lib/maps/symbols/font-awesome/beer.png +0 -0
- package/lib/maps/symbols/font-awesome/bell.png +0 -0
- package/lib/maps/symbols/font-awesome/bolt.png +0 -0
- package/lib/maps/symbols/font-awesome/building.png +0 -0
- package/lib/maps/symbols/font-awesome/bullseye.png +0 -0
- package/lib/maps/symbols/font-awesome/bus.png +0 -0
- package/lib/maps/symbols/font-awesome/caret-up.png +0 -0
- package/lib/maps/symbols/font-awesome/certificate.png +0 -0
- package/lib/maps/symbols/font-awesome/check-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/check.png +0 -0
- package/lib/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
- package/lib/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
- package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
- package/lib/maps/symbols/font-awesome/cloud.png +0 -0
- package/lib/maps/symbols/font-awesome/comment.png +0 -0
- package/lib/maps/symbols/font-awesome/crosshairs.png +0 -0
- package/lib/maps/symbols/font-awesome/dot-circle-o.png +0 -0
- package/lib/maps/symbols/font-awesome/exclamation-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
- package/lib/maps/symbols/font-awesome/female.png +0 -0
- package/lib/maps/symbols/font-awesome/file.png +0 -0
- package/lib/maps/symbols/font-awesome/flag.png +0 -0
- package/lib/maps/symbols/font-awesome/flask.png +0 -0
- package/lib/maps/symbols/font-awesome/h-square.png +0 -0
- package/lib/maps/symbols/font-awesome/home.png +0 -0
- package/lib/maps/symbols/font-awesome/info-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/male.png +0 -0
- package/lib/maps/symbols/font-awesome/medkit.png +0 -0
- package/lib/maps/symbols/font-awesome/mobile.png +0 -0
- package/lib/maps/symbols/font-awesome/plus-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/plus-square.png +0 -0
- package/lib/maps/symbols/font-awesome/plus.png +0 -0
- package/lib/maps/symbols/font-awesome/square.png +0 -0
- package/lib/maps/symbols/font-awesome/star.png +0 -0
- package/lib/maps/symbols/font-awesome/thumbs-down.png +0 -0
- package/lib/maps/symbols/font-awesome/thumbs-up.png +0 -0
- package/lib/maps/symbols/font-awesome/ticket.png +0 -0
- package/lib/maps/symbols/font-awesome/times-circle.png +0 -0
- package/lib/maps/symbols/font-awesome/times.png +0 -0
- package/lib/maps/symbols/font-awesome/tint.png +0 -0
- package/lib/maps/symbols/font-awesome/tree.png +0 -0
- package/lib/maps/symbols/font-awesome/university.png +0 -0
- package/lib/maps/symbols/font-awesome/usd.png +0 -0
- package/lib/maps/symbols/font-awesome/user.png +0 -0
- package/lib/maps/symbols/font-awesome/users.png +0 -0
- package/lib/maps/symbols/font-awesome/wheelchair.png +0 -0
- package/lib/maps/symbols/sdf-ize.sh +93 -0
- package/lib/maps/vectorMaps.d.ts +6 -6
- package/lib/maps/vectorMaps.js +33 -45
- package/lib/mwater_table_selection/IndicatorsListComponent.d.ts +4 -2
- package/lib/mwater_table_selection/IndicatorsListComponent.js +103 -34
- package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.d.ts +18 -0
- package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.js +80 -0
- package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.d.ts +26 -0
- package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.js +237 -51
- package/lib/mwater_table_selection/MWaterTableSelectComponent.d.ts +2 -2
- package/lib/mwater_table_selection/MWaterTableSelectComponent.js +9 -4
- package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.d.ts +19 -0
- package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.js +111 -0
- package/lib/quickfilter/QuickfiltersComponent.d.ts +3 -102
- package/lib/quickfilter/QuickfiltersComponent.js +53 -110
- package/lib/quickfilter/TextLiteralComponent.d.ts +23 -47
- package/lib/quickfilter/TextLiteralComponent.js +85 -82
- package/lib/widgets/MapWidget.js +6 -3
- package/lib/widgets/text/ExprItemEditorComponent.d.ts +3 -8
- package/lib/widgets/text/ExprItemEditorComponent.js +36 -33
- package/lib/widgets/text/ExprUpdateModalComponent.d.ts +1 -0
- package/package.json +3 -4
- package/src/ColorComponent.tsx +2 -2
- package/src/MWaterContextComponent.tsx +1 -1
- package/src/{MWaterGlobalFiltersComponent.ts → MWaterGlobalFiltersComponent.tsx} +32 -33
- package/src/{MWaterLoaderComponent.ts → MWaterLoaderComponent.tsx} +17 -18
- package/src/TranslationsTabComponent.tsx +429 -0
- package/src/UndoStack.ts +14 -6
- package/src/dashboards/DashboardComponent.tsx +6 -5
- package/src/dashboards/DashboardDesign.ts +1 -1
- package/src/dashboards/ServerDashboardDataSource.ts +0 -31
- package/src/dashboards/SettingsModalComponent.tsx +27 -383
- package/src/datagrids/DatagridComponent.tsx +36 -2
- package/src/datagrids/DatagridDesignerComponent.tsx +241 -229
- package/src/datagrids/DatagridViewComponent.tsx +44 -7
- package/src/datagrids/OrderBysDesignerComponent.tsx +61 -70
- package/src/index.css +45 -2
- package/src/index.ts +5 -11
- package/src/layouts/blocks/BlocksDisplayComponent.tsx +60 -5
- package/src/maps/BufferLayer.ts +30 -263
- package/src/maps/BufferLayerDesign.ts +1 -1
- package/src/maps/BufferLayerDesignerComponent.tsx +2 -7
- package/src/maps/ChoroplethLayer.ts +30 -394
- package/src/maps/ChoroplethLayerDesign.ts +5 -2
- package/src/maps/ChoroplethLayerDesigner.tsx +169 -165
- package/src/maps/ClusterLayer.ts +0 -274
- package/src/maps/DirectMapDataSource.ts +2 -61
- package/src/maps/EditHoverOver.tsx +9 -5
- package/src/maps/GridLayer.ts +0 -224
- package/src/maps/HoverContent.tsx +1 -1
- package/src/maps/Layer.ts +1 -35
- package/src/maps/LeafletMapComponent.tsx +10 -19
- package/src/maps/MapComponent.tsx +448 -0
- package/src/maps/MapControlComponent.tsx +41 -0
- package/src/maps/MapDesign.ts +6 -0
- package/src/maps/MapDesignerComponent.tsx +18 -1
- package/src/maps/MapLayerDataSource.ts +0 -5
- package/src/maps/MapLayerViewDesignerComponent.ts +9 -2
- package/src/maps/MapLayersDesignerComponent.ts +4 -1
- package/src/maps/MapTranslationsTab.tsx +53 -0
- package/src/maps/MapUtils.ts +61 -1
- package/src/maps/MapViewComponent.tsx +2 -8
- package/src/maps/MarkersLayer.ts +101 -275
- package/src/maps/MarkersLayerDesign.ts +7 -1
- package/src/maps/MarkersLayerDesignerComponent.tsx +436 -0
- package/src/maps/ServerMapDataSource.ts +0 -31
- package/src/maps/SwitchableTileUrlLayer.tsx +0 -11
- package/src/maps/TileUrlLayer.tsx +0 -6
- package/src/maps/VectorMapViewComponent.tsx +15 -15
- package/src/maps/symbols/font-awesome/asterisk.png +0 -0
- package/src/maps/symbols/font-awesome/ban.png +0 -0
- package/src/maps/symbols/font-awesome/beer.png +0 -0
- package/src/maps/symbols/font-awesome/bell.png +0 -0
- package/src/maps/symbols/font-awesome/bolt.png +0 -0
- package/src/maps/symbols/font-awesome/building.png +0 -0
- package/src/maps/symbols/font-awesome/bullseye.png +0 -0
- package/src/maps/symbols/font-awesome/bus.png +0 -0
- package/src/maps/symbols/font-awesome/caret-up.png +0 -0
- package/src/maps/symbols/font-awesome/certificate.png +0 -0
- package/src/maps/symbols/font-awesome/check-circle.png +0 -0
- package/src/maps/symbols/font-awesome/check.png +0 -0
- package/src/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
- package/src/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
- package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
- package/src/maps/symbols/font-awesome/cloud.png +0 -0
- package/src/maps/symbols/font-awesome/comment.png +0 -0
- package/src/maps/symbols/font-awesome/crosshairs.png +0 -0
- package/src/maps/symbols/font-awesome/dot-circle-o.png +0 -0
- package/src/maps/symbols/font-awesome/exclamation-circle.png +0 -0
- package/src/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
- package/src/maps/symbols/font-awesome/female.png +0 -0
- package/src/maps/symbols/font-awesome/file.png +0 -0
- package/src/maps/symbols/font-awesome/flag.png +0 -0
- package/src/maps/symbols/font-awesome/flask.png +0 -0
- package/src/maps/symbols/font-awesome/h-square.png +0 -0
- package/src/maps/symbols/font-awesome/home.png +0 -0
- package/src/maps/symbols/font-awesome/info-circle.png +0 -0
- package/src/maps/symbols/font-awesome/male.png +0 -0
- package/src/maps/symbols/font-awesome/medkit.png +0 -0
- package/src/maps/symbols/font-awesome/mobile.png +0 -0
- package/src/maps/symbols/font-awesome/plus-circle.png +0 -0
- package/src/maps/symbols/font-awesome/plus-square.png +0 -0
- package/src/maps/symbols/font-awesome/plus.png +0 -0
- package/src/maps/symbols/font-awesome/square.png +0 -0
- package/src/maps/symbols/font-awesome/star.png +0 -0
- package/src/maps/symbols/font-awesome/thumbs-down.png +0 -0
- package/src/maps/symbols/font-awesome/thumbs-up.png +0 -0
- package/src/maps/symbols/font-awesome/ticket.png +0 -0
- package/src/maps/symbols/font-awesome/times-circle.png +0 -0
- package/src/maps/symbols/font-awesome/times.png +0 -0
- package/src/maps/symbols/font-awesome/tint.png +0 -0
- package/src/maps/symbols/font-awesome/tree.png +0 -0
- package/src/maps/symbols/font-awesome/university.png +0 -0
- package/src/maps/symbols/font-awesome/usd.png +0 -0
- package/src/maps/symbols/font-awesome/user.png +0 -0
- package/src/maps/symbols/font-awesome/users.png +0 -0
- package/src/maps/symbols/font-awesome/wheelchair.png +0 -0
- package/src/maps/symbols/sdf-ize.sh +93 -0
- package/src/maps/vectorMaps.tsx +32 -53
- package/src/mwater_table_selection/IndicatorsListComponent.tsx +165 -37
- package/src/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.tsx +111 -0
- package/src/mwater_table_selection/MWaterCompleteTableSelectComponent.tsx +373 -37
- package/src/mwater_table_selection/MWaterTableSelectComponent.tsx +12 -8
- package/src/mwater_table_selection/MWaterWorkflowsSelectComponent.tsx +159 -0
- package/src/quickfilter/{QuickfiltersComponent.ts → QuickfiltersComponent.tsx} +165 -158
- package/src/quickfilter/TextLiteralComponent.tsx +197 -0
- package/src/widgets/MapWidget.tsx +11 -1
- package/src/widgets/text/ExprItemEditorComponent.tsx +83 -77
- package/src/widgets/text/ExprUpdateModalComponent.tsx +1 -0
- package/test/UndoStackTests.ts +52 -1
- package/.storybook/config.js +0 -7
- package/.storybook/head.html +0 -3
- package/.storybook/webpack.config.js +0 -15
- package/src/maps/BingLayer.ts +0 -146
- package/src/maps/MapComponent.ts +0 -312
- package/src/maps/MapControlComponent.ts +0 -46
- package/src/maps/MarkersLayerDesignerComponent.ts +0 -374
- package/src/maps/RasterMapViewComponent.ts +0 -345
- package/src/quickfilter/TextLiteralComponent.ts +0 -165
- package/stories/UpdateableComponent.js +0 -29
- package/stories/consoles.js +0 -202
- package/stories/dashboards.js +0 -217
- package/stories/datagridDesign.js +0 -114
- package/stories/datagrids.js +0 -69
- package/stories/dates.js +0 -80
- package/stories/exprcomponent.js +0 -43
- package/stories/index.js +0 -18
- package/stories/leaflet.js +0 -59
- package/stories/maps.js +0 -24
- package/stories/pivotChart.js +0 -235
|
@@ -28,7 +28,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
const lodash_1 = __importDefault(require("lodash"));
|
|
30
30
|
const react_1 = __importStar(require("react"));
|
|
31
|
-
const R = react_1.default.createElement;
|
|
32
31
|
const react_select_1 = __importDefault(require("react-select"));
|
|
33
32
|
const languages_1 = require("../languages");
|
|
34
33
|
const expressions_1 = require("@mwater/expressions");
|
|
@@ -36,6 +35,7 @@ const expressions_2 = require("@mwater/expressions");
|
|
|
36
35
|
const TabbedComponent_1 = __importDefault(require("@mwater/react-library/lib/TabbedComponent"));
|
|
37
36
|
const expressions_ui_1 = require("@mwater/expressions-ui");
|
|
38
37
|
const expressions_ui_2 = require("@mwater/expressions-ui");
|
|
38
|
+
const SelectExprModalComponent_1 = __importDefault(require("@mwater/expressions-ui/lib/SelectExprModalComponent"));
|
|
39
39
|
const OrderBysDesignerComponent_1 = __importDefault(require("./OrderBysDesignerComponent"));
|
|
40
40
|
const ReorderableListComponent_1 = __importDefault(require("@mwater/react-library/lib/reorderable/ReorderableListComponent"));
|
|
41
41
|
const QuickfiltersDesignComponent_1 = __importDefault(require("../quickfilter/QuickfiltersDesignComponent"));
|
|
@@ -70,80 +70,54 @@ class DatagridDesignerComponent extends react_1.default.Component {
|
|
|
70
70
|
};
|
|
71
71
|
// Render the tabs of the designer
|
|
72
72
|
renderTabs() {
|
|
73
|
-
return
|
|
74
|
-
initialTabId: "columns",
|
|
75
|
-
tabs: [
|
|
73
|
+
return react_1.default.createElement(TabbedComponent_1.default, { initialTabId: "columns", tabs: [
|
|
76
74
|
{
|
|
77
75
|
id: "columns",
|
|
78
76
|
label: T `Columns`,
|
|
79
|
-
elem:
|
|
80
|
-
schema: this.props.schema,
|
|
81
|
-
dataSource: this.props.dataSource,
|
|
82
|
-
table: this.props.design.table,
|
|
83
|
-
columns: this.props.design.columns,
|
|
84
|
-
onColumnsChange: this.handleColumnsChange
|
|
85
|
-
})
|
|
77
|
+
elem: react_1.default.createElement(ColumnsDesignerComponent, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, columns: this.props.design.columns, onColumnsChange: this.handleColumnsChange })
|
|
86
78
|
},
|
|
87
79
|
{
|
|
88
80
|
id: "filter",
|
|
89
81
|
label: T `Filter`,
|
|
90
82
|
// Here because of modal scroll issue
|
|
91
|
-
elem:
|
|
92
|
-
schema: this.props.schema,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
onChange: this.handleGlobalFiltersChange,
|
|
104
|
-
nullIfIrrelevant: true
|
|
105
|
-
}))
|
|
106
|
-
: undefined))
|
|
83
|
+
elem: react_1.default.createElement("div", { style: { marginBottom: 200 } },
|
|
84
|
+
react_1.default.createElement(expressions_ui_2.FilterExprComponent, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, value: this.props.design.filter, onChange: this.handleFilterChange }),
|
|
85
|
+
react_1.default.createElement(MWaterContextComponent_1.GlobalFiltersElementFactoryContext.Consumer, null, (globalFiltersElementFactory) => globalFiltersElementFactory
|
|
86
|
+
? react_1.default.createElement("div", { style: { marginTop: 20 } }, globalFiltersElementFactory({
|
|
87
|
+
schema: this.props.schema,
|
|
88
|
+
dataSource: this.props.dataSource,
|
|
89
|
+
filterableTables: [this.props.design.table],
|
|
90
|
+
globalFilters: this.props.design.globalFilters,
|
|
91
|
+
onChange: this.handleGlobalFiltersChange,
|
|
92
|
+
nullIfIrrelevant: true
|
|
93
|
+
}))
|
|
94
|
+
: undefined))
|
|
107
95
|
},
|
|
108
96
|
{
|
|
109
97
|
id: "order",
|
|
110
98
|
label: T `Sorting`,
|
|
111
|
-
elem:
|
|
112
|
-
schema: this.props.schema,
|
|
113
|
-
dataSource: this.props.dataSource,
|
|
114
|
-
table: this.props.design.table,
|
|
115
|
-
orderBys: this.props.design.orderBys,
|
|
116
|
-
onChange: this.handleOrderBysChange
|
|
117
|
-
}))
|
|
99
|
+
elem: react_1.default.createElement("div", { style: { marginBottom: 200 } },
|
|
100
|
+
react_1.default.createElement(OrderBysDesignerComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, orderBys: this.props.design.orderBys, onChange: this.handleOrderBysChange }))
|
|
118
101
|
},
|
|
119
102
|
{
|
|
120
103
|
id: "quickfilters",
|
|
121
104
|
label: T `Quickfilters`,
|
|
122
|
-
elem:
|
|
123
|
-
design: this.props.design.quickfilters || [],
|
|
124
|
-
onDesignChange: (design) => this.props.onDesignChange((0, update_object_1.default)(this.props.design, { quickfilters: { $set: design } })),
|
|
125
|
-
schema: this.props.schema,
|
|
126
|
-
dataSource: this.props.dataSource,
|
|
127
|
-
tables: [this.props.design.table]
|
|
128
|
-
}))
|
|
105
|
+
elem: react_1.default.createElement("div", { style: { marginBottom: 200 } },
|
|
106
|
+
react_1.default.createElement(QuickfiltersDesignComponent_1.default, { design: this.props.design.quickfilters || [], onDesignChange: (design) => this.props.onDesignChange((0, update_object_1.default)(this.props.design, { quickfilters: { $set: design } })), schema: this.props.schema, dataSource: this.props.dataSource, tables: [this.props.design.table] }))
|
|
129
107
|
},
|
|
130
108
|
{
|
|
131
109
|
id: "options",
|
|
132
110
|
label: T `Options`,
|
|
133
|
-
elem:
|
|
134
|
-
design: this.props.design,
|
|
135
|
-
onDesignChange: this.props.onDesignChange
|
|
136
|
-
}))
|
|
111
|
+
elem: react_1.default.createElement("div", { style: { marginBottom: 200 } },
|
|
112
|
+
react_1.default.createElement(DatagridOptionsComponent, { design: this.props.design, onDesignChange: this.props.onDesignChange }))
|
|
137
113
|
}
|
|
138
|
-
]
|
|
139
|
-
});
|
|
114
|
+
] });
|
|
140
115
|
}
|
|
141
116
|
render() {
|
|
142
|
-
return
|
|
143
|
-
|
|
144
|
-
value: this.props.design.table,
|
|
145
|
-
|
|
146
|
-
}), this.props.design.table ? this.renderTabs() : undefined);
|
|
117
|
+
return react_1.default.createElement("div", null,
|
|
118
|
+
react_1.default.createElement("label", null, T `Data Source:`),
|
|
119
|
+
react_1.default.createElement(expressions_ui_3.TableSelectComponent, { schema: this.props.schema, value: this.props.design.table, onChange: this.handleTableChange }),
|
|
120
|
+
this.props.design.table ? this.renderTabs() : undefined);
|
|
147
121
|
}
|
|
148
122
|
}
|
|
149
123
|
exports.default = DatagridDesignerComponent;
|
|
@@ -163,6 +137,9 @@ function DatagridOptionsComponent(props) {
|
|
|
163
137
|
}
|
|
164
138
|
// Columns list
|
|
165
139
|
class ColumnsDesignerComponent extends react_1.default.Component {
|
|
140
|
+
state = {
|
|
141
|
+
showSelectExprModal: false
|
|
142
|
+
};
|
|
166
143
|
handleColumnChange = (columnIndex, column) => {
|
|
167
144
|
const columns = this.props.columns.slice();
|
|
168
145
|
// Handle remove
|
|
@@ -171,7 +148,7 @@ class ColumnsDesignerComponent extends react_1.default.Component {
|
|
|
171
148
|
}
|
|
172
149
|
else if (lodash_1.default.isArray(column)) {
|
|
173
150
|
// Handle array case
|
|
174
|
-
|
|
151
|
+
columns.splice(columnIndex, 1, ...column);
|
|
175
152
|
}
|
|
176
153
|
else {
|
|
177
154
|
columns[columnIndex] = column;
|
|
@@ -179,9 +156,28 @@ class ColumnsDesignerComponent extends react_1.default.Component {
|
|
|
179
156
|
return this.props.onColumnsChange(columns);
|
|
180
157
|
};
|
|
181
158
|
handleAddColumn = () => {
|
|
159
|
+
this.setState({ showSelectExprModal: true });
|
|
160
|
+
};
|
|
161
|
+
handleExprSelect = (expr) => {
|
|
162
|
+
// Clean the expression first
|
|
163
|
+
const exprCleaner = new expressions_1.ExprCleaner(this.props.schema);
|
|
164
|
+
const cleanedExpr = exprCleaner.cleanExpr(expr, {
|
|
165
|
+
aggrStatuses: ["individual", "literal", "aggregate"]
|
|
166
|
+
});
|
|
167
|
+
const exprUtils = new expressions_1.ExprUtils(this.props.schema);
|
|
182
168
|
const columns = this.props.columns.slice();
|
|
183
|
-
columns.push({
|
|
184
|
-
|
|
169
|
+
columns.push({
|
|
170
|
+
id: (0, uuid_1.default)(),
|
|
171
|
+
type: "expr",
|
|
172
|
+
width: 150,
|
|
173
|
+
expr: cleanedExpr,
|
|
174
|
+
label: exprUtils.summarizeExpr(cleanedExpr).slice(0, 30)
|
|
175
|
+
});
|
|
176
|
+
this.props.onColumnsChange(columns);
|
|
177
|
+
this.setState({ showSelectExprModal: false });
|
|
178
|
+
};
|
|
179
|
+
handleExprCancel = () => {
|
|
180
|
+
this.setState({ showSelectExprModal: false });
|
|
185
181
|
};
|
|
186
182
|
handleAddIdColumn = () => {
|
|
187
183
|
const columns = this.props.columns.slice();
|
|
@@ -206,7 +202,7 @@ class ColumnsDesignerComponent extends react_1.default.Component {
|
|
|
206
202
|
id: (0, uuid_1.default)(),
|
|
207
203
|
width: 150,
|
|
208
204
|
type: "expr",
|
|
209
|
-
label:
|
|
205
|
+
label: undefined, // Use default label instead. # labeledExpr.label
|
|
210
206
|
expr: labeledExpr.expr
|
|
211
207
|
});
|
|
212
208
|
}
|
|
@@ -217,45 +213,39 @@ class ColumnsDesignerComponent extends react_1.default.Component {
|
|
|
217
213
|
return this.props.onColumnsChange([]);
|
|
218
214
|
};
|
|
219
215
|
renderColumn = (column, columnIndex, connectDragSource, connectDragPreview, connectDropTarget) => {
|
|
220
|
-
return
|
|
221
|
-
key: columnIndex,
|
|
222
|
-
schema: this.props.schema,
|
|
223
|
-
table: this.props.table,
|
|
224
|
-
dataSource: this.props.dataSource,
|
|
225
|
-
column,
|
|
226
|
-
onColumnChange: this.handleColumnChange.bind(null, columnIndex),
|
|
227
|
-
connectDragSource,
|
|
228
|
-
connectDragPreview,
|
|
229
|
-
connectDropTarget
|
|
230
|
-
});
|
|
216
|
+
return react_1.default.createElement(ColumnDesignerComponent, { key: columnIndex, schema: this.props.schema, table: this.props.table, dataSource: this.props.dataSource, column: column, onColumnChange: this.handleColumnChange.bind(null, columnIndex), connectDragSource: connectDragSource, connectDragPreview: connectDragPreview, connectDropTarget: connectDropTarget });
|
|
231
217
|
};
|
|
232
218
|
render() {
|
|
233
|
-
return
|
|
234
|
-
key: "
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
219
|
+
return react_1.default.createElement("div", { style: { height: "auto", overflowY: "auto", overflowX: "hidden" } },
|
|
220
|
+
react_1.default.createElement("div", { style: { textAlign: "right" }, key: "options" },
|
|
221
|
+
react_1.default.createElement("button", { key: "addAll", type: "button", className: "btn btn-link btn-sm", onClick: this.handleAddDefaultColumns },
|
|
222
|
+
react_1.default.createElement("span", { className: "fas fa-plus" }),
|
|
223
|
+
" " + T `Add Default Columns`),
|
|
224
|
+
react_1.default.createElement("button", { key: "removeAll", type: "button", className: "btn btn-link btn-sm", onClick: this.handleRemoveAllColumns },
|
|
225
|
+
react_1.default.createElement("span", { className: "fas fa-times" }),
|
|
226
|
+
" " + T `Remove All Columns`)),
|
|
227
|
+
react_1.default.createElement(ReorderableListComponent_1.default, { items: this.props.columns, onReorder: this.props.onColumnsChange, renderItem: this.renderColumn, getItemId: (item) => item.id }),
|
|
228
|
+
react_1.default.createElement("div", { className: "p-2" },
|
|
229
|
+
react_1.default.createElement("button", { key: "add", type: "button", className: "btn btn-link", onClick: this.handleAddColumn },
|
|
230
|
+
react_1.default.createElement("span", { className: "fas fa-plus" }),
|
|
231
|
+
" " + T `Add Column`),
|
|
232
|
+
react_1.default.createElement("button", { key: "add-id", type: "button", className: "btn btn-link", onClick: this.handleAddIdColumn },
|
|
233
|
+
react_1.default.createElement("span", { className: "fas fa-plus" }),
|
|
234
|
+
" " + T `Add Unique Id (advanced)`)),
|
|
235
|
+
this.state.showSelectExprModal && (react_1.default.createElement(SelectExprModalComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.table, value: null, allowCase: true, onSelect: this.handleExprSelect, onCancel: this.handleExprCancel, types: [
|
|
236
|
+
"text",
|
|
237
|
+
"number",
|
|
238
|
+
"enum",
|
|
239
|
+
"enumset",
|
|
240
|
+
"boolean",
|
|
241
|
+
"date",
|
|
242
|
+
"datetime",
|
|
243
|
+
"image",
|
|
244
|
+
"imagelist",
|
|
245
|
+
"text[]",
|
|
246
|
+
"geometry",
|
|
247
|
+
"id"
|
|
248
|
+
], aggrStatuses: ["literal", "individual", "aggregate"] })));
|
|
259
249
|
}
|
|
260
250
|
}
|
|
261
251
|
// Column item
|
|
@@ -317,10 +307,14 @@ class ColumnDesignerComponent extends react_1.default.Component {
|
|
|
317
307
|
const exprType = exprUtils.getExprType(this.props.column.expr);
|
|
318
308
|
switch (exprType) {
|
|
319
309
|
case "enumset":
|
|
320
|
-
return
|
|
310
|
+
return react_1.default.createElement("a", { className: "btn btn-sm btn-link", onClick: this.handleSplitEnumset },
|
|
311
|
+
react_1.default.createElement("i", { className: "fa fa-chain-broken" }),
|
|
312
|
+
" " + T `Split by options`);
|
|
321
313
|
break;
|
|
322
314
|
case "geometry":
|
|
323
|
-
return
|
|
315
|
+
return react_1.default.createElement("a", { className: "btn btn-sm btn-link", onClick: this.handleSplitGeometry },
|
|
316
|
+
react_1.default.createElement("i", { className: "fa fa-chain-broken" }),
|
|
317
|
+
" " + T `Split by lat/lng`);
|
|
324
318
|
break;
|
|
325
319
|
}
|
|
326
320
|
return null;
|
|
@@ -335,12 +329,10 @@ class ColumnDesignerComponent extends react_1.default.Component {
|
|
|
335
329
|
if (!formats) {
|
|
336
330
|
return null;
|
|
337
331
|
}
|
|
338
|
-
return
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
style: { width: "auto", display: "inline-block" },
|
|
342
|
-
onChange: this.handleFormatChange
|
|
343
|
-
}, lodash_1.default.map(formats, (format) => R("option", { key: format.value, value: format.value }, format.label))));
|
|
332
|
+
return react_1.default.createElement("div", { className: "mb-3" },
|
|
333
|
+
react_1.default.createElement("label", { className: "text-muted" }, T `Format`),
|
|
334
|
+
": ",
|
|
335
|
+
react_1.default.createElement("select", { value: this.props.column.format != null ? this.props.column.format : (0, valueFormatter_2.getDefaultFormat)(exprType), className: "form-select", style: { width: "auto", display: "inline-block" }, onChange: this.handleFormatChange }, lodash_1.default.map(formats, (format) => react_1.default.createElement("option", { key: format.value, value: format.value }, format.label))));
|
|
344
336
|
}
|
|
345
337
|
render = () => {
|
|
346
338
|
const exprUtils = new expressions_1.ExprUtils(this.props.schema);
|
|
@@ -368,25 +360,21 @@ class ColumnDesignerComponent extends react_1.default.Component {
|
|
|
368
360
|
const error = exprValidator.validateExpr(this.props.column.expr, {
|
|
369
361
|
aggrStatuses: ["individual", "literal", "aggregate"]
|
|
370
362
|
});
|
|
371
|
-
const elem =
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
react_1.default.createElement("
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
placeholder: exprUtils.summarizeExpr(this.props.column.expr),
|
|
387
|
-
value: this.props.column.label,
|
|
388
|
-
onChange: (ev) => this.handleLabelChange(ev.target.value)
|
|
389
|
-
})), R("div", { className: "col-1" }, R("a", { className: "link-plain", onClick: this.props.onColumnChange.bind(null, null) }, R("span", { className: "fas fa-times" }))));
|
|
363
|
+
const elem = react_1.default.createElement("div", { className: "row" },
|
|
364
|
+
react_1.default.createElement("div", { className: "col-1" }, this.props.connectDragSource(react_1.default.createElement("span", { className: "text-muted fa fa-bars mwater-visualization-cursor-hover" }))),
|
|
365
|
+
react_1.default.createElement("div", { className: "col-6" },
|
|
366
|
+
react_1.default.createElement(expressions_ui_1.ExprComponent, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.table, value: this.props.column.expr, aggrStatuses: ["literal", "individual", "aggregate"], types: allowedTypes, onChange: this.handleExprChange }),
|
|
367
|
+
this.renderSplit(),
|
|
368
|
+
this.renderFormat(),
|
|
369
|
+
error ? react_1.default.createElement("span", { className: "text-danger" },
|
|
370
|
+
react_1.default.createElement("i", { className: "fa fa-exclamation-circle" }),
|
|
371
|
+
" ",
|
|
372
|
+
error) : undefined),
|
|
373
|
+
react_1.default.createElement("div", { className: "col-4" },
|
|
374
|
+
react_1.default.createElement("input", { type: "text", className: "form-control", placeholder: exprUtils.summarizeExpr(this.props.column.expr), value: this.props.column.label, onChange: (ev) => this.handleLabelChange(ev.target.value) })),
|
|
375
|
+
react_1.default.createElement("div", { className: "col-1" },
|
|
376
|
+
react_1.default.createElement("a", { className: "link-plain", onClick: this.props.onColumnChange.bind(null, null) },
|
|
377
|
+
react_1.default.createElement("span", { className: "fas fa-times" }))));
|
|
390
378
|
return this.props.connectDropTarget(this.props.connectDragPreview(elem));
|
|
391
379
|
};
|
|
392
380
|
}
|
|
@@ -19,6 +19,10 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
19
19
|
const [rows, setRows] = (0, react_2.useState)([]);
|
|
20
20
|
const [entirelyLoaded, setEntirelyLoaded] = (0, react_2.useState)(false);
|
|
21
21
|
const loadStateRef = (0, react_2.useRef)(null);
|
|
22
|
+
// Track which design key the current rows were loaded with to avoid rendering stale data
|
|
23
|
+
// with a mismatched column structure (e.g. after column reorder)
|
|
24
|
+
const [loadedDesignKey, setLoadedDesignKey] = (0, react_2.useState)(null);
|
|
25
|
+
const currentDesignKey = getDatagridReloadKey(props.design);
|
|
22
26
|
// Get row header width based on selection and showRowNumbers
|
|
23
27
|
const rowHeaderWidth = props.selectedRows
|
|
24
28
|
? (props.design.showRowNumbers ? 70 : 30) // With selection: 70 for both, 30 for just checkbox
|
|
@@ -75,13 +79,17 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
75
79
|
whiteSpace: "nowrap",
|
|
76
80
|
padding: "0 8px"
|
|
77
81
|
};
|
|
78
|
-
|
|
82
|
+
// If design key doesn't match, rows are stale - show loading state
|
|
83
|
+
if (loadedDesignKey !== currentDesignKey || options.row >= rows.length) {
|
|
84
|
+
return (react_1.default.createElement("div", { style: rowHeaderStyle }, props.design.showRowNumbers ? (react_1.default.createElement("div", { style: { flex: 1, textAlign: "right" } }, options.row + 1)) : null));
|
|
85
|
+
}
|
|
86
|
+
const rowId = rows[options.row].id;
|
|
79
87
|
const isSelected = rowId != null && props.selectedRows ? props.selectedRows.isSelected(rowId) : false;
|
|
80
|
-
const isSubtable =
|
|
88
|
+
const isSubtable = rows[options.row].subtable >= 0;
|
|
81
89
|
return (react_1.default.createElement("div", { style: rowHeaderStyle },
|
|
82
90
|
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
91
|
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]);
|
|
92
|
+
}, [rows, props.selectedRows, props.onSelectedRowsChange, props.design.showRowNumbers, handleRowSelect, loadedDesignKey, currentDesignKey]);
|
|
85
93
|
const loadMoreRows = (0, useStableCallback_1.useStableCallback)((callback) => {
|
|
86
94
|
const loadState = {
|
|
87
95
|
design: props.design,
|
|
@@ -103,14 +111,15 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
103
111
|
loadStateRef.current = null;
|
|
104
112
|
setRows(prev => [...prev, ...newRows]);
|
|
105
113
|
setEntirelyLoaded(newRows.length < (props.pageSize || 100));
|
|
114
|
+
setLoadedDesignKey(getDatagridReloadKey(loadState.design));
|
|
106
115
|
callback?.();
|
|
107
116
|
}
|
|
108
117
|
});
|
|
109
118
|
});
|
|
110
119
|
function reload() {
|
|
111
|
-
console.log("reload");
|
|
112
120
|
setRows([]);
|
|
113
121
|
setEntirelyLoaded(false);
|
|
122
|
+
setLoadedDesignKey(null);
|
|
114
123
|
}
|
|
115
124
|
// Reset rows when design, filters or refreshKey changes
|
|
116
125
|
(0, react_2.useEffect)(() => {
|
|
@@ -204,6 +213,10 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
204
213
|
return false;
|
|
205
214
|
});
|
|
206
215
|
const handleCopy = (0, useStableCallback_1.useStableCallback)((rowIndex, colIndex) => {
|
|
216
|
+
// If design key doesn't match, rows are stale - don't copy
|
|
217
|
+
if (loadedDesignKey !== currentDesignKey || rowIndex >= rows.length) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
207
220
|
const row = rows[rowIndex];
|
|
208
221
|
const col = props.design.columns[colIndex];
|
|
209
222
|
const value = row[`c${colIndex}`];
|
|
@@ -228,6 +241,13 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
228
241
|
navigator.clipboard.writeText(formattedValue || "");
|
|
229
242
|
});
|
|
230
243
|
const renderCell = (0, useStableCallback_1.useStableCallback)((options) => {
|
|
244
|
+
// If rows were loaded with a different design key, show loading state to avoid
|
|
245
|
+
// rendering stale data with mismatched column structure (e.g. after column reorder)
|
|
246
|
+
if (loadedDesignKey !== currentDesignKey) {
|
|
247
|
+
lodash_1.default.defer(() => loadMoreRows());
|
|
248
|
+
return react_1.default.createElement("div", { style: { padding: 8 } },
|
|
249
|
+
react_1.default.createElement("i", { className: "fa fa-spinner fa-spin text-muted" }));
|
|
250
|
+
}
|
|
231
251
|
if (options.row >= rows.length) {
|
|
232
252
|
lodash_1.default.defer(() => loadMoreRows());
|
|
233
253
|
return react_1.default.createElement("div", { style: { padding: 8 } },
|
|
@@ -267,11 +287,14 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
267
287
|
fontWeight: "bold",
|
|
268
288
|
height: "100%",
|
|
269
289
|
display: "flex",
|
|
270
|
-
alignItems: "center"
|
|
290
|
+
alignItems: "center",
|
|
291
|
+
overflow: "hidden",
|
|
292
|
+
width: options.width
|
|
271
293
|
} }, column.label || exprUtils.summarizeExpr(column.expr, props.design.locale)));
|
|
272
294
|
});
|
|
273
295
|
const renderCellEditor = (0, useStableCallback_1.useStableCallback)((options) => {
|
|
274
|
-
|
|
296
|
+
// If design key doesn't match, rows are stale - don't render editor
|
|
297
|
+
if (loadedDesignKey !== currentDesignKey || options.row >= rows.length) {
|
|
275
298
|
return react_1.default.createElement("div", null);
|
|
276
299
|
}
|
|
277
300
|
const column = props.design.columns[options.col];
|
|
@@ -287,6 +310,10 @@ const DatagridViewComponent = (0, react_2.forwardRef)((props, ref) => {
|
|
|
287
310
|
if (options.col === -1) {
|
|
288
311
|
return false;
|
|
289
312
|
}
|
|
313
|
+
// If design key doesn't match, rows are stale - don't allow edit
|
|
314
|
+
if (loadedDesignKey !== currentDesignKey || options.row >= rows.length) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
290
317
|
const rowId = rows[options.row].id;
|
|
291
318
|
if (rowId == null) {
|
|
292
319
|
return false;
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { DataSource, Schema } from "@mwater/expressions";
|
|
3
|
+
import { DatagridDesignOrderBy } from "./DatagridDesign";
|
|
3
4
|
export interface OrderBysDesignerComponentProps {
|
|
4
5
|
/** schema to use */
|
|
5
6
|
schema: Schema;
|
|
6
7
|
/** dataSource to use */
|
|
7
8
|
dataSource: DataSource;
|
|
8
9
|
table: string;
|
|
9
|
-
|
|
10
|
-
orderBys: any;
|
|
10
|
+
orderBys: DatagridDesignOrderBy[];
|
|
11
11
|
/** Called when columns changes */
|
|
12
|
-
onChange:
|
|
12
|
+
onChange: (orderBys: DatagridDesignOrderBy[]) => void;
|
|
13
13
|
}
|
|
14
14
|
export default class OrderBysDesignerComponent extends React.Component<OrderBysDesignerComponentProps> {
|
|
15
15
|
static defaultProps: {
|
|
16
16
|
orderBys: never[];
|
|
17
17
|
};
|
|
18
|
-
handleChange: (index: any, orderBy: any) =>
|
|
19
|
-
handleRemove: (index: any) =>
|
|
20
|
-
handleAdd: () =>
|
|
21
|
-
render(): React.
|
|
18
|
+
handleChange: (index: any, orderBy: any) => void;
|
|
19
|
+
handleRemove: (index: any) => void;
|
|
20
|
+
handleAdd: () => void;
|
|
21
|
+
render(): React.JSX.Element;
|
|
22
22
|
}
|
|
@@ -5,7 +5,6 @@ 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 R = react_1.default.createElement;
|
|
9
8
|
const expressions_ui_1 = require("@mwater/expressions-ui");
|
|
10
9
|
const bootstrap_1 = require("@mwater/react-library/lib/bootstrap");
|
|
11
10
|
// Edits an orderBys which is a list of expressions and directions. See README.md
|
|
@@ -27,22 +26,13 @@ class OrderBysDesignerComponent extends react_1.default.Component {
|
|
|
27
26
|
return this.props.onChange(orderBys);
|
|
28
27
|
};
|
|
29
28
|
render() {
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
key: index,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
onChange: this.handleChange.bind(null, index),
|
|
38
|
-
onRemove: this.handleRemove.bind(null, index)
|
|
39
|
-
});
|
|
40
|
-
}), R("button", {
|
|
41
|
-
key: "add",
|
|
42
|
-
type: "button",
|
|
43
|
-
className: "btn btn-link",
|
|
44
|
-
onClick: this.handleAdd
|
|
45
|
-
}, R("span", { className: "fas fa-plus" }), " " + T `Add Ordering`));
|
|
29
|
+
return (react_1.default.createElement("div", null,
|
|
30
|
+
lodash_1.default.map(this.props.orderBys, (orderBy, index) => {
|
|
31
|
+
return react_1.default.createElement(OrderByDesignerComponent, { key: index, schema: this.props.schema, table: this.props.table, dataSource: this.props.dataSource, orderBy: orderBy, onChange: this.handleChange.bind(null, index), onRemove: this.handleRemove.bind(null, index) });
|
|
32
|
+
}),
|
|
33
|
+
react_1.default.createElement("button", { key: "add", type: "button", className: "btn btn-link", onClick: this.handleAdd },
|
|
34
|
+
react_1.default.createElement("span", { className: "fas fa-plus" }),
|
|
35
|
+
" " + T `Add Ordering`)));
|
|
46
36
|
}
|
|
47
37
|
}
|
|
48
38
|
exports.default = OrderBysDesignerComponent;
|
|
@@ -50,18 +40,19 @@ class OrderByDesignerComponent extends react_1.default.Component {
|
|
|
50
40
|
handleExprChange = (expr) => {
|
|
51
41
|
return this.props.onChange(lodash_1.default.extend({}, this.props.orderBy, { expr }));
|
|
52
42
|
};
|
|
53
|
-
handleDirectionChange = (
|
|
54
|
-
return this.props.onChange(lodash_1.default.extend({}, this.props.orderBy, { direction
|
|
43
|
+
handleDirectionChange = (direction) => {
|
|
44
|
+
return this.props.onChange(lodash_1.default.extend({}, this.props.orderBy, { direction }));
|
|
55
45
|
};
|
|
56
46
|
render() {
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
47
|
+
return (react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "8px" } },
|
|
48
|
+
react_1.default.createElement("div", { style: { flex: 1 } },
|
|
49
|
+
react_1.default.createElement(expressions_ui_1.ExprComponent, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.table, types: ["text", "number", "boolean", "date", "datetime"], aggrStatuses: ["individual", "literal", "aggregate"], value: this.props.orderBy.expr, onChange: this.handleExprChange })),
|
|
50
|
+
react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "8px" } },
|
|
51
|
+
react_1.default.createElement(bootstrap_1.Toggle, { size: "xs", value: this.props.orderBy.direction, onChange: this.handleDirectionChange, options: [
|
|
52
|
+
{ value: "asc", label: T `Ascending` },
|
|
53
|
+
{ value: "desc", label: T `Descending` }
|
|
54
|
+
] }),
|
|
55
|
+
react_1.default.createElement("button", { className: "btn btn-sm btn-link", type: "button", onClick: this.props.onRemove },
|
|
56
|
+
react_1.default.createElement("span", { className: "fas fa-times" })))));
|
|
66
57
|
}
|
|
67
58
|
}
|
package/lib/index.css
CHANGED
|
@@ -55,6 +55,12 @@ Lato, Lora, Inter, Merriweather, Roboto
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
@media only screen and (max-width: 800px) {
|
|
59
|
+
.hide-800px {
|
|
60
|
+
display: none;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
58
64
|
/* Dashed thresholds */
|
|
59
65
|
.bb-grid line {
|
|
60
66
|
stroke-dasharray: 3;
|
|
@@ -133,6 +139,20 @@ Lato, Lora, Inter, Merriweather, Roboto
|
|
|
133
139
|
visibility: visible;
|
|
134
140
|
}
|
|
135
141
|
|
|
142
|
+
/* Use these to make a grandchild that displays only when parent is hovered */
|
|
143
|
+
.hover-display-parent > * > .hover-display-grandchild {
|
|
144
|
+
visibility: hidden;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.hover-display-parent:hover > * > .hover-display-grandchild {
|
|
148
|
+
visibility: visible;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Use these to set a faint background on hover */
|
|
152
|
+
.hover-grey:hover {
|
|
153
|
+
background-color: #f8f8f8;
|
|
154
|
+
}
|
|
155
|
+
|
|
136
156
|
.bb-title {
|
|
137
157
|
font: 14px sans-serif;
|
|
138
158
|
font-weight: bold;
|
|
@@ -342,6 +362,29 @@ Lato, Lora, Inter, Merriweather, Roboto
|
|
|
342
362
|
background-color: #363b3e;
|
|
343
363
|
padding: 5px;
|
|
344
364
|
padding-top: 6px;
|
|
365
|
+
transform: translateX(-100%);
|
|
366
|
+
animation: slideIn 0.3s ease-in-out;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
@keyframes slideIn {
|
|
370
|
+
from {
|
|
371
|
+
transform: translateX(-100%);
|
|
372
|
+
}
|
|
373
|
+
to {
|
|
374
|
+
transform: translateX(0);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.mwater-visualization-palette-container {
|
|
379
|
+
position: absolute;
|
|
380
|
+
top: 0;
|
|
381
|
+
left: 0;
|
|
382
|
+
height: 100%;
|
|
383
|
+
z-index: 1000;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.mwater-visualization-palette-container:not(.hidden) .mwater-visualization-palette {
|
|
387
|
+
transform: translateX(0);
|
|
345
388
|
}
|
|
346
389
|
|
|
347
390
|
.mwater-visualization-palette-item {
|
|
@@ -543,11 +586,11 @@ Lato, Lora, Inter, Merriweather, Roboto
|
|
|
543
586
|
background-color: rgba(0, 0, 0, 0.075);
|
|
544
587
|
}
|
|
545
588
|
|
|
546
|
-
.
|
|
589
|
+
.mwater-visualization-cursor-hover:hover {
|
|
547
590
|
cursor: move;
|
|
548
591
|
}
|
|
549
592
|
|
|
550
|
-
.
|
|
593
|
+
.mwater-visualization-map-hover-content {
|
|
551
594
|
display: grid;
|
|
552
595
|
grid-template-columns: 1fr 2fr;
|
|
553
596
|
grid-auto-rows: min-content;
|