@mwater/visualization 5.4.5 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/lib/MWaterContextComponent.d.ts +1 -1
  2. package/lib/MWaterContextComponent.js +1 -1
  3. package/lib/MWaterGlobalFiltersComponent.d.ts +2 -2
  4. package/lib/MWaterGlobalFiltersComponent.js +11 -20
  5. package/lib/MWaterLoaderComponent.d.ts +5 -14
  6. package/lib/MWaterLoaderComponent.js +2 -11
  7. package/lib/UndoStack.d.ts +2 -1
  8. package/lib/UndoStack.js +12 -6
  9. package/lib/dashboards/DashboardComponent.js +7 -5
  10. package/lib/dashboards/DashboardDesign.d.ts +1 -1
  11. package/lib/dashboards/LayoutOptionsComponent.js +18 -11
  12. package/lib/dashboards/ServerDashboardDataSource.d.ts +10 -1
  13. package/lib/dashboards/ServerDashboardDataSource.js +29 -10
  14. package/lib/dashboards/SettingsModalComponent.js +1 -1
  15. package/lib/dashboards/layoutOptions.d.ts +5 -1
  16. package/lib/datagrids/DatagridComponent.js +23 -3
  17. package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -3
  18. package/lib/datagrids/DatagridDesignerComponent.js +108 -120
  19. package/lib/datagrids/DatagridViewComponent.js +3 -2
  20. package/lib/datagrids/ExprCellComponent.d.ts +1 -0
  21. package/lib/datagrids/ExprCellComponent.js +22 -20
  22. package/lib/datagrids/OrderBysDesignerComponent.d.ts +7 -7
  23. package/lib/datagrids/OrderBysDesignerComponent.js +19 -28
  24. package/lib/index.css +45 -2
  25. package/lib/index.d.ts +5 -5
  26. package/lib/index.js +2 -3
  27. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +8 -1
  28. package/lib/layouts/blocks/BlocksDisplayComponent.js +46 -4
  29. package/lib/maps/BufferLayer.d.ts +18 -0
  30. package/lib/maps/BufferLayer.js +36 -14
  31. package/lib/maps/BufferLayerDesign.d.ts +1 -1
  32. package/lib/maps/BufferLayerDesignerComponent.js +2 -2
  33. package/lib/maps/ChoroplethLayer.d.ts +18 -0
  34. package/lib/maps/ChoroplethLayer.js +46 -25
  35. package/lib/maps/ChoroplethLayerDesign.d.ts +7 -3
  36. package/lib/maps/ChoroplethLayerDesigner.d.ts +10 -22
  37. package/lib/maps/ChoroplethLayerDesigner.js +58 -89
  38. package/lib/maps/DirectMapDataSource.js +17 -10
  39. package/lib/maps/EditHoverOver.d.ts +4 -3
  40. package/lib/maps/EditHoverOver.js +64 -35
  41. package/lib/maps/HoverContent.d.ts +10 -5
  42. package/lib/maps/HoverContent.js +7 -36
  43. package/lib/maps/Layer.d.ts +37 -0
  44. package/lib/maps/Layer.js +30 -4
  45. package/lib/maps/LeafletMapComponent.js +10 -19
  46. package/lib/maps/MWaterServerLayer.d.ts +2 -2
  47. package/lib/maps/MWaterServerLayer.js +6 -6
  48. package/lib/maps/MapComponent.js +0 -1
  49. package/lib/maps/MapLayerDataSource.d.ts +9 -0
  50. package/lib/maps/MapUtils.d.ts +19 -1
  51. package/lib/maps/MapUtils.js +80 -1
  52. package/lib/maps/MarkersLayer.d.ts +18 -0
  53. package/lib/maps/MarkersLayer.js +42 -26
  54. package/lib/maps/MarkersLayerDesign.d.ts +1 -1
  55. package/lib/maps/MarkersLayerDesignerComponent.d.ts +12 -28
  56. package/lib/maps/MarkersLayerDesignerComponent.js +81 -111
  57. package/lib/maps/RasterMapViewComponent.js +1 -1
  58. package/lib/maps/ServerMapDataSource.d.ts +9 -0
  59. package/lib/maps/ServerMapDataSource.js +29 -10
  60. package/lib/maps/VectorMapViewComponent.js +7 -15
  61. package/lib/maps/maps.d.ts +4 -2
  62. package/lib/maps/symbols/font-awesome/asterisk.png +0 -0
  63. package/lib/maps/symbols/font-awesome/ban.png +0 -0
  64. package/lib/maps/symbols/font-awesome/beer.png +0 -0
  65. package/lib/maps/symbols/font-awesome/bell.png +0 -0
  66. package/lib/maps/symbols/font-awesome/bolt.png +0 -0
  67. package/lib/maps/symbols/font-awesome/building.png +0 -0
  68. package/lib/maps/symbols/font-awesome/bullseye.png +0 -0
  69. package/lib/maps/symbols/font-awesome/bus.png +0 -0
  70. package/lib/maps/symbols/font-awesome/caret-up.png +0 -0
  71. package/lib/maps/symbols/font-awesome/certificate.png +0 -0
  72. package/lib/maps/symbols/font-awesome/check-circle.png +0 -0
  73. package/lib/maps/symbols/font-awesome/check.png +0 -0
  74. package/lib/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  75. package/lib/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  76. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  77. package/lib/maps/symbols/font-awesome/cloud.png +0 -0
  78. package/lib/maps/symbols/font-awesome/comment.png +0 -0
  79. package/lib/maps/symbols/font-awesome/crosshairs.png +0 -0
  80. package/lib/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  81. package/lib/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  82. package/lib/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  83. package/lib/maps/symbols/font-awesome/female.png +0 -0
  84. package/lib/maps/symbols/font-awesome/file.png +0 -0
  85. package/lib/maps/symbols/font-awesome/flag.png +0 -0
  86. package/lib/maps/symbols/font-awesome/flask.png +0 -0
  87. package/lib/maps/symbols/font-awesome/h-square.png +0 -0
  88. package/lib/maps/symbols/font-awesome/home.png +0 -0
  89. package/lib/maps/symbols/font-awesome/info-circle.png +0 -0
  90. package/lib/maps/symbols/font-awesome/male.png +0 -0
  91. package/lib/maps/symbols/font-awesome/medkit.png +0 -0
  92. package/lib/maps/symbols/font-awesome/mobile.png +0 -0
  93. package/lib/maps/symbols/font-awesome/plus-circle.png +0 -0
  94. package/lib/maps/symbols/font-awesome/plus-square.png +0 -0
  95. package/lib/maps/symbols/font-awesome/plus.png +0 -0
  96. package/lib/maps/symbols/font-awesome/square.png +0 -0
  97. package/lib/maps/symbols/font-awesome/star.png +0 -0
  98. package/lib/maps/symbols/font-awesome/thumbs-down.png +0 -0
  99. package/lib/maps/symbols/font-awesome/thumbs-up.png +0 -0
  100. package/lib/maps/symbols/font-awesome/ticket.png +0 -0
  101. package/lib/maps/symbols/font-awesome/times-circle.png +0 -0
  102. package/lib/maps/symbols/font-awesome/times.png +0 -0
  103. package/lib/maps/symbols/font-awesome/tint.png +0 -0
  104. package/lib/maps/symbols/font-awesome/tree.png +0 -0
  105. package/lib/maps/symbols/font-awesome/university.png +0 -0
  106. package/lib/maps/symbols/font-awesome/usd.png +0 -0
  107. package/lib/maps/symbols/font-awesome/user.png +0 -0
  108. package/lib/maps/symbols/font-awesome/users.png +0 -0
  109. package/lib/maps/symbols/font-awesome/wheelchair.png +0 -0
  110. package/lib/maps/symbols/sdf-ize.sh +93 -0
  111. package/lib/maps/vectorMaps.d.ts +1 -0
  112. package/lib/maps/vectorMaps.js +20 -36
  113. package/lib/mwater_table_selection/FormsListComponent.d.ts +33 -0
  114. package/lib/mwater_table_selection/FormsListComponent.js +141 -0
  115. package/lib/mwater_table_selection/IndicatorsListComponent.d.ts +49 -0
  116. package/lib/mwater_table_selection/IndicatorsListComponent.js +251 -0
  117. package/lib/mwater_table_selection/IssuesListComponent.d.ts +29 -0
  118. package/lib/mwater_table_selection/IssuesListComponent.js +123 -0
  119. package/lib/mwater_table_selection/MWaterAccountingSystemListComponent.d.ts +20 -0
  120. package/lib/mwater_table_selection/MWaterAccountingSystemListComponent.js +157 -0
  121. package/lib/mwater_table_selection/MWaterAssetSystemsListComponent.d.ts +17 -0
  122. package/lib/mwater_table_selection/MWaterAssetSystemsListComponent.js +79 -0
  123. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.d.ts +18 -0
  124. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.js +80 -0
  125. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.d.ts +63 -0
  126. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.js +461 -0
  127. package/lib/mwater_table_selection/MWaterCustomTablesetListComponent.d.ts +17 -0
  128. package/lib/mwater_table_selection/MWaterCustomTablesetListComponent.js +94 -0
  129. package/lib/mwater_table_selection/MWaterMetricsTableListComponent.d.ts +17 -0
  130. package/lib/mwater_table_selection/MWaterMetricsTableListComponent.js +80 -0
  131. package/lib/mwater_table_selection/MWaterTableSelectComponent.d.ts +32 -0
  132. package/lib/mwater_table_selection/MWaterTableSelectComponent.js +163 -0
  133. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.d.ts +19 -0
  134. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.js +111 -0
  135. package/lib/quickfilter/QuickfiltersComponent.d.ts +3 -102
  136. package/lib/quickfilter/QuickfiltersComponent.js +53 -110
  137. package/lib/quickfilter/TextLiteralComponent.d.ts +23 -47
  138. package/lib/quickfilter/TextLiteralComponent.js +85 -82
  139. package/lib/widgets/MapWidget.js +4 -2
  140. package/lib/widgets/charts/Chart.d.ts +11 -0
  141. package/lib/widgets/charts/Chart.js +15 -0
  142. package/lib/widgets/charts/ChartWidgetComponent.d.ts +1 -0
  143. package/lib/widgets/charts/ChartWidgetComponent.js +27 -1
  144. package/lib/widgets/charts/layered/LayeredChartDesign.d.ts +1 -1
  145. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.d.ts +1 -1
  146. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +5 -12
  147. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.d.ts +43 -57
  148. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.js +113 -110
  149. package/lib/widgets/charts/layered/LayeredChartUtils.d.ts +2 -1
  150. package/lib/widgets/charts/layered/LayeredChartUtils.js +0 -2
  151. package/lib/widgets/charts/pivot/PivotChart.d.ts +2 -0
  152. package/lib/widgets/charts/pivot/PivotChart.js +156 -0
  153. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +5 -20
  154. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.js +31 -61
  155. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.d.ts +4 -0
  156. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.js +4 -2
  157. package/lib/widgets/charts/pivot/PivotChartLayoutComponent.d.ts +5 -44
  158. package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +38 -63
  159. package/lib/widgets/charts/pivot/SegmentDesignerComponent.d.ts +7 -68
  160. package/lib/widgets/charts/pivot/SegmentDesignerComponent.js +58 -106
  161. package/lib/widgets/charts/table/TableChart.d.ts +2 -0
  162. package/lib/widgets/charts/table/TableChart.js +172 -1
  163. package/lib/widgets/charts/table/TableChartDesignerComponent.d.ts +7 -17
  164. package/lib/widgets/charts/table/TableChartDesignerComponent.js +79 -95
  165. package/lib/widgets/charts/table/TableChartViewComponent.d.ts +1 -7
  166. package/lib/widgets/charts/table/TableChartViewComponent.js +19 -27
  167. package/lib/widgets/text/ExprItemEditorComponent.d.ts +3 -8
  168. package/lib/widgets/text/ExprItemEditorComponent.js +36 -33
  169. package/lib/widgets/text/ExprUpdateModalComponent.d.ts +1 -0
  170. package/package.json +4 -10
  171. package/src/MWaterContextComponent.tsx +2 -2
  172. package/src/{MWaterGlobalFiltersComponent.ts → MWaterGlobalFiltersComponent.tsx} +32 -33
  173. package/src/{MWaterLoaderComponent.ts → MWaterLoaderComponent.tsx} +18 -19
  174. package/src/UndoStack.ts +14 -6
  175. package/src/dashboards/DashboardComponent.tsx +7 -5
  176. package/src/dashboards/DashboardDesign.ts +1 -1
  177. package/src/dashboards/LayoutOptionsComponent.tsx +22 -10
  178. package/src/dashboards/ServerDashboardDataSource.ts +36 -13
  179. package/src/dashboards/SettingsModalComponent.tsx +1 -1
  180. package/src/dashboards/layoutOptions.tsx +5 -1
  181. package/src/datagrids/DatagridComponent.tsx +31 -3
  182. package/src/datagrids/DatagridDesignerComponent.tsx +241 -229
  183. package/src/datagrids/DatagridViewComponent.tsx +3 -2
  184. package/src/datagrids/ExprCellComponent.tsx +23 -20
  185. package/src/datagrids/OrderBysDesignerComponent.tsx +61 -70
  186. package/src/index.css +45 -2
  187. package/src/index.ts +5 -11
  188. package/src/layouts/blocks/BlocksDisplayComponent.tsx +60 -5
  189. package/src/maps/BufferLayer.ts +48 -20
  190. package/src/maps/BufferLayerDesign.ts +1 -1
  191. package/src/maps/BufferLayerDesignerComponent.tsx +2 -1
  192. package/src/maps/ChoroplethLayer.ts +70 -39
  193. package/src/maps/ChoroplethLayerDesign.ts +6 -2
  194. package/src/maps/ChoroplethLayerDesigner.tsx +171 -167
  195. package/src/maps/DirectMapDataSource.ts +21 -13
  196. package/src/maps/EditHoverOver.tsx +98 -54
  197. package/src/maps/HoverContent.tsx +17 -48
  198. package/src/maps/Layer.ts +42 -4
  199. package/src/maps/LeafletMapComponent.tsx +10 -19
  200. package/src/maps/MWaterServerLayer.ts +6 -6
  201. package/src/maps/MapComponent.ts +0 -1
  202. package/src/maps/MapLayerDataSource.ts +8 -0
  203. package/src/maps/MapUtils.ts +82 -3
  204. package/src/maps/MarkersLayer.ts +54 -27
  205. package/src/maps/MarkersLayerDesign.ts +1 -1
  206. package/src/maps/MarkersLayerDesignerComponent.tsx +360 -0
  207. package/src/maps/RasterMapViewComponent.ts +1 -1
  208. package/src/maps/ServerMapDataSource.ts +35 -12
  209. package/src/maps/VectorMapViewComponent.tsx +8 -19
  210. package/src/maps/maps.ts +4 -2
  211. package/src/maps/symbols/font-awesome/asterisk.png +0 -0
  212. package/src/maps/symbols/font-awesome/ban.png +0 -0
  213. package/src/maps/symbols/font-awesome/beer.png +0 -0
  214. package/src/maps/symbols/font-awesome/bell.png +0 -0
  215. package/src/maps/symbols/font-awesome/bolt.png +0 -0
  216. package/src/maps/symbols/font-awesome/building.png +0 -0
  217. package/src/maps/symbols/font-awesome/bullseye.png +0 -0
  218. package/src/maps/symbols/font-awesome/bus.png +0 -0
  219. package/src/maps/symbols/font-awesome/caret-up.png +0 -0
  220. package/src/maps/symbols/font-awesome/certificate.png +0 -0
  221. package/src/maps/symbols/font-awesome/check-circle.png +0 -0
  222. package/src/maps/symbols/font-awesome/check.png +0 -0
  223. package/src/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  224. package/src/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  225. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  226. package/src/maps/symbols/font-awesome/cloud.png +0 -0
  227. package/src/maps/symbols/font-awesome/comment.png +0 -0
  228. package/src/maps/symbols/font-awesome/crosshairs.png +0 -0
  229. package/src/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  230. package/src/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  231. package/src/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  232. package/src/maps/symbols/font-awesome/female.png +0 -0
  233. package/src/maps/symbols/font-awesome/file.png +0 -0
  234. package/src/maps/symbols/font-awesome/flag.png +0 -0
  235. package/src/maps/symbols/font-awesome/flask.png +0 -0
  236. package/src/maps/symbols/font-awesome/h-square.png +0 -0
  237. package/src/maps/symbols/font-awesome/home.png +0 -0
  238. package/src/maps/symbols/font-awesome/info-circle.png +0 -0
  239. package/src/maps/symbols/font-awesome/male.png +0 -0
  240. package/src/maps/symbols/font-awesome/medkit.png +0 -0
  241. package/src/maps/symbols/font-awesome/mobile.png +0 -0
  242. package/src/maps/symbols/font-awesome/plus-circle.png +0 -0
  243. package/src/maps/symbols/font-awesome/plus-square.png +0 -0
  244. package/src/maps/symbols/font-awesome/plus.png +0 -0
  245. package/src/maps/symbols/font-awesome/square.png +0 -0
  246. package/src/maps/symbols/font-awesome/star.png +0 -0
  247. package/src/maps/symbols/font-awesome/thumbs-down.png +0 -0
  248. package/src/maps/symbols/font-awesome/thumbs-up.png +0 -0
  249. package/src/maps/symbols/font-awesome/ticket.png +0 -0
  250. package/src/maps/symbols/font-awesome/times-circle.png +0 -0
  251. package/src/maps/symbols/font-awesome/times.png +0 -0
  252. package/src/maps/symbols/font-awesome/tint.png +0 -0
  253. package/src/maps/symbols/font-awesome/tree.png +0 -0
  254. package/src/maps/symbols/font-awesome/university.png +0 -0
  255. package/src/maps/symbols/font-awesome/usd.png +0 -0
  256. package/src/maps/symbols/font-awesome/user.png +0 -0
  257. package/src/maps/symbols/font-awesome/users.png +0 -0
  258. package/src/maps/symbols/font-awesome/wheelchair.png +0 -0
  259. package/src/maps/symbols/sdf-ize.sh +93 -0
  260. package/src/maps/vectorMaps.tsx +20 -44
  261. package/src/mwater_table_selection/FormsListComponent.tsx +188 -0
  262. package/src/mwater_table_selection/IndicatorsListComponent.tsx +411 -0
  263. package/src/mwater_table_selection/IssuesListComponent.tsx +167 -0
  264. package/src/mwater_table_selection/MWaterAccountingSystemListComponent.tsx +225 -0
  265. package/src/{MWaterAssetSystemsListComponent.tsx → mwater_table_selection/MWaterAssetSystemsListComponent.tsx} +2 -2
  266. package/src/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.tsx +111 -0
  267. package/src/mwater_table_selection/MWaterCompleteTableSelectComponent.tsx +713 -0
  268. package/src/{MWaterCustomTablesetListComponent.tsx → mwater_table_selection/MWaterCustomTablesetListComponent.tsx} +1 -1
  269. package/src/{MWaterMetricsTableListComponent.tsx → mwater_table_selection/MWaterMetricsTableListComponent.tsx} +1 -1
  270. package/src/{MWaterTableSelectComponent.tsx → mwater_table_selection/MWaterTableSelectComponent.tsx} +91 -90
  271. package/src/mwater_table_selection/MWaterWorkflowsSelectComponent.tsx +159 -0
  272. package/src/quickfilter/{QuickfiltersComponent.ts → QuickfiltersComponent.tsx} +165 -158
  273. package/src/quickfilter/TextLiteralComponent.tsx +197 -0
  274. package/src/widgets/MapWidget.tsx +9 -1
  275. package/src/widgets/charts/Chart.ts +17 -0
  276. package/src/widgets/charts/ChartWidgetComponent.tsx +36 -1
  277. package/src/widgets/charts/layered/LayeredChartDesign.ts +1 -1
  278. package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +23 -24
  279. package/src/widgets/charts/layered/LayeredChartLayerDesignerComponent.tsx +260 -211
  280. package/src/widgets/charts/layered/LayeredChartUtils.ts +7 -7
  281. package/src/widgets/charts/pivot/PivotChart.ts +191 -0
  282. package/src/widgets/charts/pivot/PivotChartDesignerComponent.tsx +124 -129
  283. package/src/widgets/charts/pivot/PivotChartLayoutBuilder.ts +4 -2
  284. package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +120 -149
  285. package/src/widgets/charts/pivot/SegmentDesignerComponent.tsx +178 -198
  286. package/src/widgets/charts/table/TableChart.ts +177 -1
  287. package/src/widgets/charts/table/TableChartDesignerComponent.tsx +422 -0
  288. package/src/widgets/charts/table/{TableChartViewComponent.ts → TableChartViewComponent.tsx} +65 -60
  289. package/src/widgets/text/ExprItemEditorComponent.tsx +83 -77
  290. package/src/widgets/text/ExprUpdateModalComponent.tsx +1 -0
  291. package/test/UndoStackTests.ts +52 -1
  292. package/.storybook/config.js +0 -7
  293. package/.storybook/head.html +0 -4
  294. package/.storybook/webpack.config.js +0 -15
  295. package/src/MWaterCompleteTableSelectComponent.tsx +0 -975
  296. package/src/maps/BingLayer.ts +0 -146
  297. package/src/maps/MarkersLayerDesignerComponent.ts +0 -374
  298. package/src/quickfilter/TextLiteralComponent.ts +0 -165
  299. package/src/widgets/charts/table/TableChartDesignerComponent.ts +0 -441
  300. package/stories/UpdateableComponent.js +0 -29
  301. package/stories/consoles.js +0 -202
  302. package/stories/dashboards.js +0 -217
  303. package/stories/datagridDesign.js +0 -114
  304. package/stories/datagrids.js +0 -69
  305. package/stories/dates.js +0 -80
  306. package/stories/exprcomponent.js +0 -43
  307. package/stories/index.js +0 -18
  308. package/stories/leaflet.js +0 -59
  309. package/stories/maps.js +0 -24
  310. package/stories/pivotChart.js +0 -235
@@ -8,7 +8,7 @@ export interface GlobalFiltersElementFactoryProps {
8
8
  dataSource: DataSource;
9
9
  filterableTables: string[];
10
10
  globalFilters?: GlobalFilter[];
11
- onChange: (globalFilters: GlobalFilter[]) => void;
11
+ onChange?: (globalFilters: GlobalFilter[]) => void;
12
12
  /** If true, return null element if not applicable to filterableTables */
13
13
  nullIfIrrelevant?: boolean;
14
14
  }
@@ -30,7 +30,7 @@ exports.AddLayerElementFactoryContext = exports.GlobalFiltersElementFactoryConte
30
30
  const lodash_1 = __importDefault(require("lodash"));
31
31
  const react_1 = __importStar(require("react"));
32
32
  const R = react_1.default.createElement;
33
- const MWaterTableSelectComponent_1 = __importDefault(require("./MWaterTableSelectComponent"));
33
+ const MWaterTableSelectComponent_1 = __importDefault(require("./mwater_table_selection/MWaterTableSelectComponent"));
34
34
  const MWaterAddRelatedFormComponent_1 = __importDefault(require("./MWaterAddRelatedFormComponent"));
35
35
  const MWaterAddRelatedIndicatorComponent_1 = __importDefault(require("./MWaterAddRelatedIndicatorComponent"));
36
36
  const MWaterGlobalFiltersComponent_1 = __importDefault(require("./MWaterGlobalFiltersComponent"));
@@ -8,10 +8,10 @@ export interface MWaterGlobalFiltersComponentProps {
8
8
  dataSource: DataSource;
9
9
  filterableTables: string[];
10
10
  globalFilters?: GlobalFilter[];
11
- onChange: (globalFilters: GlobalFilter[]) => void;
11
+ onChange?: (globalFilters: GlobalFilter[]) => void;
12
12
  }
13
13
  export default class MWaterGlobalFiltersComponent extends React.Component<MWaterGlobalFiltersComponentProps> {
14
14
  handleRegionsChange: (regions: any) => void;
15
15
  handleManagedByChange: (managedBy: any) => void;
16
- render(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
16
+ render(): React.JSX.Element;
17
17
  }
@@ -28,12 +28,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const lodash_1 = __importDefault(require("lodash"));
30
30
  const react_1 = __importDefault(require("react"));
31
- const R = react_1.default.createElement;
32
31
  const ui = __importStar(require("@mwater/react-library/lib/bootstrap"));
33
32
  const expressions_ui_1 = require("@mwater/expressions-ui");
34
33
  // Control to edit the global filters (_managed_by and admin_region)
35
34
  class MWaterGlobalFiltersComponent extends react_1.default.Component {
36
35
  handleRegionsChange = (regions) => {
36
+ if (!this.props.onChange) {
37
+ return;
38
+ }
37
39
  // Remove existing filter
38
40
  const globalFilters = lodash_1.default.filter(this.props.globalFilters || [], (gf) => !(gf.op === "within any" && gf.columnId === "admin_region"));
39
41
  // Add new filter if present
@@ -48,6 +50,9 @@ class MWaterGlobalFiltersComponent extends react_1.default.Component {
48
50
  this.props.onChange(globalFilters);
49
51
  };
50
52
  handleManagedByChange = (managedBy) => {
53
+ if (!this.props.onChange) {
54
+ return;
55
+ }
51
56
  // Remove existing filter
52
57
  const globalFilters = lodash_1.default.filter(this.props.globalFilters || [], (gf) => !(gf.op === "within" && gf.columnId === "_managed_by"));
53
58
  // Add new filter if present
@@ -79,25 +84,11 @@ class MWaterGlobalFiltersComponent extends react_1.default.Component {
79
84
  else {
80
85
  adminRegions = null;
81
86
  }
82
- return R("div", null, R(ui.FormGroup, { label: T `Only sites managed by`, labelMuted: true }, R(expressions_ui_1.IdLiteralComponent, {
83
- value: managedBy,
84
- onChange: this.handleManagedByChange,
85
- idTable: "groups",
86
- schema: this.props.schema,
87
- dataSource: this.props.dataSource,
88
- placeholder: T `All Organizations`,
89
- multi: false,
90
- filter: { type: "field", tableAlias: "main", column: "canManageEntities" }
91
- })), R(ui.FormGroup, { label: T `Only sites located in`, labelMuted: true }, R(expressions_ui_1.IdLiteralComponent, {
92
- value: adminRegions,
93
- onChange: this.handleRegionsChange,
94
- idTable: "admin_regions",
95
- schema: this.props.schema,
96
- dataSource: this.props.dataSource,
97
- placeholder: T `All Regions`,
98
- multi: true,
99
- orderBy: [{ expr: { type: "field", tableAlias: "main", column: "level" }, direction: "asc" }]
100
- })));
87
+ return (react_1.default.createElement("div", null,
88
+ react_1.default.createElement(ui.FormGroup, { label: T `Only sites managed by`, labelMuted: true },
89
+ react_1.default.createElement(expressions_ui_1.IdLiteralComponent, { value: managedBy, onChange: this.props.onChange ? this.handleManagedByChange : undefined, idTable: "groups", schema: this.props.schema, dataSource: this.props.dataSource, placeholder: T `All Organizations`, multi: false, filter: { type: "field", tableAlias: "main", column: "canManageEntities" } })),
90
+ react_1.default.createElement(ui.FormGroup, { label: T `Only sites located in`, labelMuted: true },
91
+ react_1.default.createElement(expressions_ui_1.IdLiteralComponent, { value: adminRegions, onChange: this.props.onChange ? this.handleRegionsChange : undefined, idTable: "admin_regions", schema: this.props.schema, dataSource: this.props.dataSource, placeholder: T `All Regions`, multi: true, orderBy: [{ expr: { type: "field", tableAlias: "main", column: "level" }, direction: "asc" }] }))));
101
92
  }
102
93
  }
103
94
  exports.default = MWaterGlobalFiltersComponent;
@@ -1,8 +1,7 @@
1
- import React, { ReactElement } from "react";
1
+ import React, { ReactElement, ReactNode } from "react";
2
2
  import { DataSource, Schema } from "@mwater/expressions";
3
3
  import AsyncLoadComponent from "@mwater/react-library/lib/AsyncLoadComponent";
4
- import LoadingComponent from "@mwater/react-library/lib/LoadingComponent";
5
- import MWaterContextComponent, { AddLayerElementFactory } from "./MWaterContextComponent";
4
+ import { AddLayerElementFactory } from "./MWaterContextComponent";
6
5
  export interface MWaterLoaderComponentProps {
7
6
  apiUrl: string;
8
7
  client?: string;
@@ -22,9 +21,9 @@ export interface MWaterLoaderComponentProps {
22
21
  children: (error: any, config?: {
23
22
  schema: Schema;
24
23
  dataSource: DataSource;
25
- }) => ReactElement<any>;
24
+ }) => ReactElement<any> | null;
26
25
  /** Custom error formatter that returns React node or string, gets passed the error response from server */
27
- errorFormatter?: (data: any, defaultError: string) => string;
26
+ errorFormatter?: (data: any, defaultError: ReactNode) => ReactNode;
28
27
  /** Origin of usage. e.g. "dashboards:43445364..." */
29
28
  origin?: string;
30
29
  }
@@ -43,13 +42,5 @@ export default class MWaterLoaderComponent extends AsyncLoadComponent<MWaterLoad
43
42
  constructor(props: MWaterLoaderComponentProps);
44
43
  isLoadNeeded(newProps: MWaterLoaderComponentProps, oldProps: MWaterLoaderComponentProps): boolean;
45
44
  load(props: MWaterLoaderComponentProps, prevProps: MWaterLoaderComponentProps, callback: any): void;
46
- render(): React.ReactElement<any, string | React.JSXElementConstructor<any>> | React.CElement<import("@mwater/react-library/lib/LoadingComponent").LoadingComponentProps, LoadingComponent> | React.CElement<{
47
- apiUrl: string;
48
- client?: string;
49
- user?: string;
50
- schema: Schema;
51
- extraTables?: string[];
52
- onExtraTablesChange?: (extraTables: string[]) => void;
53
- addLayerElementFactory?: AddLayerElementFactory;
54
- }, MWaterContextComponent>;
45
+ render(): React.JSX.Element | null;
55
46
  }
@@ -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 AsyncLoadComponent_1 = __importDefault(require("@mwater/react-library/lib/AsyncLoadComponent"));
10
9
  const LoadingComponent_1 = __importDefault(require("@mwater/react-library/lib/LoadingComponent"));
11
10
  const mWaterLoader_1 = __importDefault(require("./mWaterLoader"));
@@ -69,18 +68,10 @@ class MWaterLoaderComponent extends AsyncLoadComponent_1.default {
69
68
  return this.props.children(this.state.error);
70
69
  }
71
70
  // Inject context
72
- return R(MWaterContextComponent_1.default, {
73
- apiUrl: this.props.apiUrl,
74
- client: this.props.client,
75
- user: this.props.user,
76
- schema: this.state.schema,
77
- extraTables: this.props.extraTables,
78
- onExtraTablesChange: this.props.onExtraTablesChange,
79
- addLayerElementFactory: this.props.addLayerElementFactory
80
- }, this.props.children(this.state.error, {
71
+ return (react_1.default.createElement(MWaterContextComponent_1.default, { apiUrl: this.props.apiUrl, client: this.props.client, user: this.props.user, schema: this.state.schema, extraTables: this.props.extraTables, onExtraTablesChange: this.props.onExtraTablesChange, addLayerElementFactory: this.props.addLayerElementFactory }, this.props.children(this.state.error, {
81
72
  schema: this.state.schema,
82
73
  dataSource: this.state.dataSource
83
- }));
74
+ })));
84
75
  }
85
76
  }
86
77
  exports.default = MWaterLoaderComponent;
@@ -1,7 +1,8 @@
1
1
  export default class UndoStack {
2
2
  undoStack: any[];
3
3
  redoStack: any[];
4
- constructor(undoStack?: any, redoStack?: any);
4
+ maxDepth?: number;
5
+ constructor(undoStack?: any, redoStack?: any, maxDepth?: number);
5
6
  push(value: any): UndoStack;
6
7
  canUndo(): boolean;
7
8
  canRedo(): boolean;
package/lib/UndoStack.js CHANGED
@@ -8,20 +8,26 @@ const lodash_1 = __importDefault(require("lodash"));
8
8
  class UndoStack {
9
9
  undoStack;
10
10
  redoStack;
11
- constructor(undoStack, redoStack) {
11
+ maxDepth;
12
+ constructor(undoStack, redoStack, maxDepth) {
12
13
  this.undoStack = undoStack || [];
13
14
  this.redoStack = redoStack || [];
15
+ this.maxDepth = maxDepth;
14
16
  }
15
17
  // Add a value to the stack
16
18
  push(value) {
17
19
  // No trivial pushes
18
- if (lodash_1.default.isEqual(this.getValue(), value)) {
20
+ if (JSON.stringify(this.getValue()) === JSON.stringify(value)) {
19
21
  return this;
20
22
  }
21
- const undoStack = this.undoStack.slice();
23
+ let undoStack = this.undoStack.slice();
22
24
  undoStack.push(value);
25
+ // Limit stack depth if maxDepth is set
26
+ if (this.maxDepth && undoStack.length > this.maxDepth) {
27
+ undoStack = undoStack.slice(undoStack.length - this.maxDepth);
28
+ }
23
29
  const redoStack = [];
24
- return new UndoStack(undoStack, redoStack);
30
+ return new UndoStack(undoStack, redoStack, this.maxDepth);
25
31
  }
26
32
  canUndo() {
27
33
  return this.undoStack.length > 1;
@@ -34,14 +40,14 @@ class UndoStack {
34
40
  const redoStack = this.redoStack.slice();
35
41
  redoStack.push(lodash_1.default.last(this.undoStack));
36
42
  const undoStack = lodash_1.default.initial(this.undoStack);
37
- return new UndoStack(undoStack, redoStack);
43
+ return new UndoStack(undoStack, redoStack, this.maxDepth);
38
44
  }
39
45
  redo() {
40
46
  // Put last redo on to undoStack
41
47
  const undoStack = this.undoStack.slice();
42
48
  undoStack.push(lodash_1.default.last(this.redoStack));
43
49
  const redoStack = lodash_1.default.initial(this.redoStack);
44
- return new UndoStack(undoStack, redoStack);
50
+ return new UndoStack(undoStack, redoStack, this.maxDepth);
45
51
  }
46
52
  // Get the current value
47
53
  getValue() {
@@ -65,7 +65,8 @@ class DashboardComponent extends react_1.default.Component {
65
65
  editing: LayoutManager_1.default.createLayoutManager(props.design.layout).isEmpty(props.design.items) &&
66
66
  props.onDesignChange != null,
67
67
  layoutOptionsOpen: false,
68
- hideQuickfilters: layoutOptions.hideQuickfiltersWidth != null && layoutOptions.hideQuickfiltersWidth > document.body.clientWidth,
68
+ hideQuickfilters: layoutOptions.hideQuickfiltersWidth === 0 ||
69
+ (layoutOptions.hideQuickfiltersWidth != null && layoutOptions.hideQuickfiltersWidth > document.body.clientWidth),
69
70
  refreshKey: 1,
70
71
  locale: initialLocale
71
72
  };
@@ -201,25 +202,25 @@ class DashboardComponent extends react_1.default.Component {
201
202
  : undefined,
202
203
  react_1.default.createElement("a", { key: "print", className: "btn btn-link btn-sm", onClick: this.handlePrint },
203
204
  react_1.default.createElement("span", { className: "fas fa-print" }),
204
- react_1.default.createElement("span", { className: "hide-600px" },
205
+ react_1.default.createElement("span", { className: "hide-800px" },
205
206
  " ",
206
207
  T `Print`)),
207
208
  react_1.default.createElement("a", { key: "refresh", className: "btn btn-link btn-sm", onClick: this.handleRefreshData },
208
209
  react_1.default.createElement("span", { className: "fas fa-sync" }),
209
- react_1.default.createElement("span", { className: "hide-600px" },
210
+ react_1.default.createElement("span", { className: "hide-800px" },
210
211
  " ",
211
212
  T `Refresh`)),
212
213
  this.state.hideQuickfilters && this.props.design.quickfilters && this.props.design.quickfilters.length > 0
213
214
  ? react_1.default.createElement("a", { key: "showQuickfilters", className: "btn btn-link btn-sm", onClick: this.handleShowQuickfilters },
214
215
  react_1.default.createElement("span", { className: "fa fa-filter" }),
215
- react_1.default.createElement("span", { className: "hide-600px" },
216
+ react_1.default.createElement("span", { className: "hide-800px" },
216
217
  " ",
217
218
  T `Show Quickfilters`))
218
219
  : undefined,
219
220
  this.state.editing
220
221
  ? react_1.default.createElement("a", { key: "settings", className: "btn btn-link btn-sm", onClick: this.handleSettings },
221
222
  react_1.default.createElement("span", { className: "fas fa-cog" }),
222
- react_1.default.createElement("span", { className: "hide-600px" },
223
+ react_1.default.createElement("span", { className: "hide-800px" },
223
224
  " ",
224
225
  T `Settings`))
225
226
  : undefined,
@@ -270,6 +271,7 @@ class DashboardComponent extends react_1.default.Component {
270
271
  react_1.default.createElement("div", { style: {
271
272
  display: "grid",
272
273
  gridTemplateRows: this.props.hideTitleBar ? "auto 1fr" : "auto auto 1fr",
274
+ gridTemplateColumns: "minmax(0, 1fr)",
273
275
  height: "100%"
274
276
  } },
275
277
  !this.props.hideTitleBar ? this.renderTitleBar() : undefined,
@@ -34,6 +34,6 @@ export interface DashboardDesign {
34
34
  };
35
35
  /** true to enable implicit filtering (see ImplicitFilterBuilder). Defaults to true for older dashboards. */
36
36
  implicitFiltersEnabled?: boolean;
37
- /** array of global filters. See below. */
37
+ /** Array of global filters */
38
38
  globalFilters?: GlobalFilter[];
39
39
  }
@@ -78,8 +78,9 @@ function LayoutOptionsComponent(props) {
78
78
  react_1.default.createElement("div", { style: { backgroundColor: "#888", gridColumn: "1 / 4" } }),
79
79
  react_1.default.createElement("div", { style: { backgroundColor: "#888" } }),
80
80
  react_1.default.createElement("div", { style: { height: "100%", display: "grid", gridTemplateRows: "auto 1fr" } },
81
- react_1.default.createElement("div", { key: "quickfilters" }, layoutOptions.hideQuickfiltersWidth == null ||
82
- sizeOptions[previewSize].value.width > layoutOptions.hideQuickfiltersWidth
81
+ react_1.default.createElement("div", { key: "quickfilters" }, (layoutOptions.hideQuickfiltersWidth !== 0) &&
82
+ (layoutOptions.hideQuickfiltersWidth == null ||
83
+ sizeOptions[previewSize].value.width > layoutOptions.hideQuickfiltersWidth)
83
84
  ? props.quickfiltersView
84
85
  : null),
85
86
  props.dashboardView),
@@ -240,7 +241,7 @@ function CustomizeLayout(props) {
240
241
  react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Hide Quickfilters` },
241
242
  react_1.default.createElement(WidthSelector, { value: layoutOptions.hideQuickfiltersWidth, onChange: (hideQuickfiltersWidth) => {
242
243
  onLayoutOptionsChange({ ...layoutOptions, hideQuickfiltersWidth });
243
- }, sign: "< " })),
244
+ }, sign: "< ", includeAlways: true })),
244
245
  react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Minimum Width (before scrolling or scaling)` },
245
246
  react_1.default.createElement(WidthSelector, { value: layoutOptions.minimumWidth, onChange: (minimumWidth) => {
246
247
  onLayoutOptionsChange({ ...layoutOptions, minimumWidth });
@@ -305,12 +306,18 @@ function PixelsInput(props) {
305
306
  "px")))))));
306
307
  }
307
308
  function WidthSelector(props) {
308
- return (react_1.default.createElement(bootstrap_1.Select, { value: props.value, onChange: props.onChange, nullLabel: T `N/A`, options: [
309
- { value: 400, label: `${props.sign}400px (${T `Phone`})` },
310
- { value: 600, label: `${props.sign}600px (${T `Small tablet`})` },
311
- { value: 800, label: `${props.sign}800px (${T `Tablet`})` },
312
- { value: 1000, label: `${props.sign}1000px (${T `Laptop`})` },
313
- { value: 1200, label: `${props.sign}1200px (${T `Desktop`})` },
314
- { value: 1600, label: `${props.sign}1600px (${T `Wide Desktop`})` }
315
- ] }));
309
+ // Create options array with conditional "Always" option
310
+ const options = [
311
+ { value: 400, label: `${props.sign}400px (${T `Phone`})` },
312
+ { value: 600, label: `${props.sign}600px (${T `Small tablet`})` },
313
+ { value: 800, label: `${props.sign}800px (${T `Tablet`})` },
314
+ { value: 1000, label: `${props.sign}1000px (${T `Laptop`})` },
315
+ { value: 1200, label: `${props.sign}1200px (${T `Desktop`})` },
316
+ { value: 1600, label: `${props.sign}1600px (${T `Wide Desktop`})` }
317
+ ];
318
+ // Add "Always" option if requested
319
+ if (props.includeAlways) {
320
+ options.push({ value: 0, label: T `Always` });
321
+ }
322
+ return (react_1.default.createElement(bootstrap_1.Select, { value: props.value, onChange: props.onChange, nullLabel: T `N/A`, options: options }));
316
323
  }
@@ -17,7 +17,7 @@ interface ServerDashboardDataSourceOptions {
17
17
  /** data source that is used for determining cache expiry */
18
18
  dataSource: DataSource;
19
19
  /** revision to use to allow caching */
20
- rev: string;
20
+ rev?: number;
21
21
  }
22
22
  interface ServerWidgetDataSourceOptions extends ServerDashboardDataSourceOptions {
23
23
  widgetId: string;
@@ -77,6 +77,15 @@ declare class ServerWidgetLayerDataSource implements MapLayerDataSource {
77
77
  getPopupWidgetDataSource(design: any, widgetId: string): ServerWidgetLayerPopupWidgetDataSource;
78
78
  createUrl(filters: JsonQLFilter[], extension: string): string;
79
79
  createLegacyUrl(design: any, extension: string, filters: JsonQLFilter[]): string;
80
+ /** Gets hover over data for hover over items
81
+ * @param design The design of the layer
82
+ * @param data The data of the current item being hovered over. e.g. { id: 123 }
83
+ * @param filters The filters to apply to the layer does not include filters that narrow down to a specific item
84
+ * @returns A promise that resolves to the hover over data, indexed by the id of the hover over item
85
+ */
86
+ getHoverOverData(design: any, data: any, filters: JsonQLFilter[]): Promise<{
87
+ [key: string]: any;
88
+ }>;
80
89
  }
81
90
  interface ServerWidgetLayerPopupDataSourceOptions extends ServerDashboardDataSourceOptions {
82
91
  widgetId: string;
@@ -298,22 +298,12 @@ class ServerWidgetLayerDataSource {
298
298
  query.cacheExpiry = cacheExpiry;
299
299
  }
300
300
  let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?` + querystring_1.default.stringify(query);
301
- // Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
302
- // Used to speed queries
303
- if (url.match(/^https:\/\/api\.mwater\.co\//)) {
304
- url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
305
- }
306
301
  return url;
307
302
  }
308
303
  // Create query string
309
304
  createLegacyUrl(design, extension, filters) {
310
305
  let where;
311
306
  let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?type=${design.type}&radius=1000`;
312
- // Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
313
- // Used to speed queries
314
- if (url.match(/^https:\/\/api\.mwater\.co\//)) {
315
- url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
316
- }
317
307
  if (this.options.client) {
318
308
  url += `&client=${this.options.client}`;
319
309
  }
@@ -336,6 +326,35 @@ class ServerWidgetLayerDataSource {
336
326
  }
337
327
  return url;
338
328
  }
329
+ /** Gets hover over data for hover over items
330
+ * @param design The design of the layer
331
+ * @param data The data of the current item being hovered over. e.g. { id: 123 }
332
+ * @param filters The filters to apply to the layer does not include filters that narrow down to a specific item
333
+ * @returns A promise that resolves to the hover over data, indexed by the id of the hover over item
334
+ */
335
+ async getHoverOverData(design, data, filters) {
336
+ const query = {
337
+ client: this.options.client,
338
+ share: this.options.share,
339
+ filters: (0, compressJson_1.default)(filters || []),
340
+ data: (0, compressJson_1.default)(data),
341
+ rev: this.options.rev
342
+ };
343
+ const url = `${this.options.apiUrl}dashboards/${this.options.dashboardId}/widgets/${this.options.widgetId}/layers/${this.options.layerView.id}/hoverdata?` +
344
+ querystring_1.default.stringify(query);
345
+ const response = await fetch(url, {
346
+ method: "GET",
347
+ headers: {
348
+ Accept: "application/json"
349
+ }
350
+ });
351
+ if (!response.ok) {
352
+ const errorText = await response.text();
353
+ console.error(errorText);
354
+ throw new Error(`Error fetching hover data: ${response.statusText}`);
355
+ }
356
+ return await response.json();
357
+ }
339
358
  }
340
359
  class ServerWidgetLayerPopupWidgetDataSource {
341
360
  options;
@@ -149,7 +149,7 @@ function LanguageTab({ design, onDesignChange, schema }) {
149
149
  for (const locale of design.otherLocales || []) {
150
150
  const translatedCount = translatableStrings.filter(str => design.translations?.[locale]?.[str] != null).length;
151
151
  // Round down to nearest percent
152
- percentages[locale] = Math.floor((translatedCount / totalStrings) * 100);
152
+ percentages[locale] = (totalStrings > 0) ? Math.floor((translatedCount / totalStrings) * 100) : 0;
153
153
  }
154
154
  return percentages;
155
155
  }, [design.translations, design.otherLocales, translatableStrings]);
@@ -12,7 +12,11 @@ export interface BlocksLayoutOptions {
12
12
  belowMinimumWidth: "scale" | "scroll";
13
13
  /** Width above which pads */
14
14
  maximumWidth: number | null;
15
- /** Width at which to hide quickfilters. Null for never */
15
+ /** Width at which to hide quickfilters.
16
+ * Null for never hide
17
+ * 0 for always hide
18
+ * Positive number for responsive hiding based on width
19
+ */
16
20
  hideQuickfiltersWidth: number | null;
17
21
  /** The padding around the entire dashboard */
18
22
  outerPadding: number;
@@ -276,7 +276,7 @@ exports.default = (0, react_1.forwardRef)(function DatagridComponent(props, ref)
276
276
  const renderTitleBar = () => {
277
277
  return (react_1.default.createElement("div", { style: { position: "absolute", top: 0, left: 0, right: 0, height: 40, padding: 4 } },
278
278
  react_1.default.createElement("div", { style: { float: "right" } },
279
- design.showNumRows && numRows ? react_1.default.createElement("small", { className: 'text-muted text-sm' }, `${(0, d3_format_1.format)(',')(numRows)} rows`) : undefined,
279
+ design.showNumRows && numRows ? react_1.default.createElement("small", { className: 'text-muted text-sm me-2' }, `${(0, d3_format_1.format)(',')(numRows)} rows`) : undefined,
280
280
  renderDeleteRows(),
281
281
  renderFindReplace(),
282
282
  renderCellEdit(),
@@ -342,8 +342,28 @@ exports.default = (0, react_1.forwardRef)(function DatagridComponent(props, ref)
342
342
  return (react_1.default.createElement(DatagridViewComponent_1.default, { ref: datagridViewRef, width: size.width - 1, height: size.height - 1, pageSize: 100, schema: schema, dataSource: dataSource, datagridDataSource: datagridDataSource, design: cleanedDesign, filters: activeFilters, onDesignChange: onDesignChange, onRowClick: onRowClick, onRowDoubleClick: onRowDoubleClick, selectedRows: dataEditingEnabled && props.onRowsDelete != null ? selectedRows : undefined, onSelectedRowsChange: dataEditingEnabled && props.onRowsDelete != null ? setSelectedRows : undefined, canEditExpr: dataEditingEnabled ? canEditExpr : undefined, updateExprValues: dataEditingEnabled ? updateExprValues : undefined, refreshKey: refreshKey }));
343
343
  }
344
344
  else if (onDesignChange) {
345
- return (react_1.default.createElement("div", { style: { textAlign: "center", marginTop: size.height / 2 } },
346
- react_1.default.createElement("a", { className: "btn btn-link", onClick: handleEdit }, T `Click Here to Configure`)));
345
+ return (react_1.default.createElement("div", { style: {
346
+ display: "flex",
347
+ flexDirection: "column",
348
+ alignItems: "center",
349
+ justifyContent: "center",
350
+ height: "100%",
351
+ padding: "40px"
352
+ } },
353
+ react_1.default.createElement("div", { style: {
354
+ textAlign: "center",
355
+ marginBottom: "24px"
356
+ } },
357
+ react_1.default.createElement("i", { className: "fas fa-table text-muted", style: {
358
+ fontSize: "48px",
359
+ marginBottom: "16px"
360
+ } }),
361
+ react_1.default.createElement("div", { style: {
362
+ fontSize: "14px"
363
+ }, className: "text-muted" }, T `Configure a data source and columns to get started.`)),
364
+ react_1.default.createElement("button", { className: "btn btn-primary", onClick: handleEdit },
365
+ react_1.default.createElement("i", { className: "fas fa-cog", style: { marginRight: "8px" } }),
366
+ T `Configure`)));
347
367
  }
348
368
  else {
349
369
  return null;
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import { DataSource, Schema } from "@mwater/expressions";
3
- import TabbedComponent from "@mwater/react-library/lib/TabbedComponent";
4
3
  import { DatagridDesign } from "..";
5
4
  export interface DatagridDesignerComponentProps {
6
5
  /** schema to use */
@@ -18,6 +17,6 @@ export default class DatagridDesignerComponent extends React.Component<DatagridD
18
17
  handleFilterChange: (filter: any) => void;
19
18
  handleGlobalFiltersChange: (globalFilters: any) => void;
20
19
  handleOrderBysChange: (orderBys: any) => void;
21
- renderTabs(): React.CElement<any, TabbedComponent>;
22
- render(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
20
+ renderTabs(): React.JSX.Element;
21
+ render(): React.JSX.Element;
23
22
  }