@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
@@ -2,7 +2,7 @@ import _ from "lodash"
2
2
  import { Schema, LocalizedString, Table, ExprUtils } from "@mwater/expressions"
3
3
  import { useState, useEffect } from "react"
4
4
  import React from "react"
5
- import { OptionListComponent } from "./UIComponents"
5
+ import { OptionListComponent } from "../UIComponents"
6
6
  import { TextInput } from "@mwater/react-library/lib/bootstrap"
7
7
 
8
8
  /** Searchable list of custom tables */
@@ -2,7 +2,7 @@ import _ from "lodash"
2
2
  import { Schema, LocalizedString, Table, ExprUtils } from "@mwater/expressions"
3
3
  import { useState, useEffect } from "react"
4
4
  import React from "react"
5
- import { OptionListComponent } from "./UIComponents"
5
+ import { OptionListComponent } from "../UIComponents"
6
6
  import { TextInput } from "@mwater/react-library/lib/bootstrap"
7
7
 
8
8
  /** Searchable list of metric tables */
@@ -1,9 +1,8 @@
1
1
  import _ from "lodash"
2
2
  import React from "react"
3
- const R = React.createElement
4
- import { ToggleEditComponent, OptionListComponent } from "./UIComponents"
3
+ import { ToggleEditComponent, OptionListComponent } from "../UIComponents"
5
4
  import { ExprUtils, Schema } from "@mwater/expressions"
6
- import MWaterResponsesFilterComponent from "./MWaterResponsesFilterComponent"
5
+ import MWaterResponsesFilterComponent from "../MWaterResponsesFilterComponent"
7
6
  import ModalPopupComponent from "@mwater/react-library/lib/ModalPopupComponent"
8
7
  import MWaterCompleteTableSelectComponent from "./MWaterCompleteTableSelectComponent"
9
8
  import { ActiveTablesContext } from "@mwater/expressions-ui"
@@ -18,16 +17,16 @@ export interface MWaterTableSelectComponentProps {
18
17
  user?: string
19
18
  table?: string
20
19
  /** Called with table selected */
21
- onChange: any
22
- extraTables: any
23
- onExtraTablesChange: any
20
+ onChange: (table: string | null) => void
21
+ extraTables?: string[]
22
+ onExtraTablesChange?: (tables: string[]) => void
24
23
  /** Can also perform filtering for some types. Include these props to enable this */
25
24
  filter?: any
26
- onFilterChange?: any
25
+ onFilterChange?: (filter: any) => void
27
26
  }
28
27
 
29
28
  interface MWaterTableSelectComponentState {
30
- pendingExtraTable: any
29
+ pendingExtraTable: string | null
31
30
  }
32
31
 
33
32
  // Allows selection of a mwater-visualization table. Loads forms as well and calls event if modified
@@ -35,7 +34,7 @@ export default class MWaterTableSelectComponent extends React.Component<
35
34
  MWaterTableSelectComponentProps,
36
35
  MWaterTableSelectComponentState
37
36
  > {
38
- toggleEdit: any
37
+ toggleEdit: ToggleEditComponent | null = null
39
38
 
40
39
  constructor(props: MWaterTableSelectComponentProps) {
41
40
  super(props)
@@ -45,46 +44,46 @@ export default class MWaterTableSelectComponent extends React.Component<
45
44
  }
46
45
  }
47
46
 
48
- componentWillReceiveProps(nextProps: any) {
47
+ componentDidUpdate(prevProps: MWaterTableSelectComponentProps) {
49
48
  // If received new schema with pending extra table, select it
50
- let table
49
+ let table: string | null = null
51
50
  if (this.state.pendingExtraTable) {
52
51
  table = this.state.pendingExtraTable
53
- if (nextProps.schema.getTable(table)) {
52
+ if (this.props.schema.getTable(table)) {
54
53
  // No longer waiting
55
54
  this.setState({ pendingExtraTable: null })
56
55
 
57
56
  // Close toggle edit
58
- this.toggleEdit.close()
57
+ this.toggleEdit?.close()
59
58
 
60
59
  // Fire change
61
- nextProps.onChange(table)
60
+ this.props.onChange(table)
62
61
  }
63
62
  }
64
63
 
65
64
  // If table is newly selected and is a responses table and no filters, set filters to final only
66
65
  if (
67
- nextProps.table &&
68
- nextProps.table.match(/responses:/) &&
69
- nextProps.table !== this.props.table &&
70
- !nextProps.filter &&
71
- nextProps.onFilterChange
66
+ this.props.table &&
67
+ this.props.table.match(/responses:/) &&
68
+ this.props.table !== prevProps.table &&
69
+ !this.props.filter &&
70
+ this.props.onFilterChange
72
71
  ) {
73
- return nextProps.onFilterChange({
72
+ this.props.onFilterChange({
74
73
  type: "op",
75
74
  op: "= any",
76
- table: nextProps.table,
75
+ table: this.props.table,
77
76
  exprs: [
78
- { type: "field", table: nextProps.table, column: "status" },
77
+ { type: "field", table: this.props.table, column: "status" },
79
78
  { type: "literal", valueType: "enumset", value: ["final"] }
80
79
  ]
81
80
  })
82
81
  }
83
82
  }
84
83
 
85
- handleChange = (tableId: any) => {
84
+ handleChange = (tableId: string | null) => {
86
85
  // Close toggle edit
87
- this.toggleEdit.close()
86
+ this.toggleEdit?.close()
88
87
 
89
88
  // Call onChange if different
90
89
  if (tableId !== this.props.table) {
@@ -92,68 +91,70 @@ export default class MWaterTableSelectComponent extends React.Component<
92
91
  }
93
92
  }
94
93
 
95
- handleTableChange = (tableId: any) => {
94
+ handleTableChange = (tableId: string | null) => {
96
95
  // If not part of extra tables, add it and wait for new schema
97
96
  if (tableId && !this.props.schema.getTable(tableId)) {
98
- return this.setState({ pendingExtraTable: tableId }, () => {
99
- return this.props.onExtraTablesChange(_.union(this.props.extraTables, [tableId]))
100
- })
97
+ if (this.props.onExtraTablesChange) {
98
+ this.setState({ pendingExtraTable: tableId }, () => {
99
+ this.props.onExtraTablesChange!(_.union(this.props.extraTables || [], [tableId]))
100
+ })
101
+ } else {
102
+ alert(T`Cannot add new tables.`)
103
+ }
101
104
  } else {
102
- return this.handleChange(tableId)
105
+ this.handleChange(tableId)
103
106
  }
104
107
  }
105
108
 
106
109
  render() {
107
- const editor = R(EditModeTableSelectComponent, {
108
- apiUrl: this.props.apiUrl,
109
- client: this.props.client,
110
- schema: this.props.schema,
111
- user: this.props.user,
112
- table: this.props.table,
113
- onChange: this.handleTableChange,
114
- extraTables: this.props.extraTables,
115
- onExtraTablesChange: this.props.onExtraTablesChange
116
- })
110
+ const editor = <EditModeTableSelectComponent
111
+ apiUrl={this.props.apiUrl}
112
+ client={this.props.client}
113
+ schema={this.props.schema}
114
+ user={this.props.user}
115
+ table={this.props.table}
116
+ onChange={this.handleTableChange}
117
+ extraTables={this.props.extraTables}
118
+ onExtraTablesChange={this.props.onExtraTablesChange}
119
+ />
117
120
 
118
- return R(
119
- "div",
120
- null,
121
- // Show message if loading
122
- this.state.pendingExtraTable
123
- ? R(
124
- "div",
125
- { className: "alert alert-info", key: "pendingExtraTable" },
126
- R("i", { className: "fa fa-spinner fa-spin" }),
127
- `\u00a0${T`Please wait...`}`
128
- )
129
- : undefined,
121
+ return (
122
+ <div>
123
+ {/* Show message if loading */}
124
+ {this.state.pendingExtraTable ? (
125
+ <div className="alert alert-info" key="pendingExtraTable">
126
+ <i className="fa fa-spinner fa-spin"/>
127
+ &nbsp;{T`Please wait...`}
128
+ </div>
129
+ ) : undefined}
130
130
 
131
- R(ToggleEditComponent, {
132
- ref: (c: any) => {
133
- this.toggleEdit = c
134
- },
135
- forceOpen: !this.props.table, // Must have table
136
- label: this.props.table
137
- ? ExprUtils.localizeString(this.props.schema.getTable(this.props.table)?.name, T.locale)
138
- : "",
139
- editor,
140
- onRemove: () => {
141
- this.props.onChange(null)
142
- }
143
- }),
131
+ <ToggleEditComponent
132
+ ref={(c: ToggleEditComponent | null) => {
133
+ this.toggleEdit = c
134
+ }}
135
+ forceOpen={!this.props.table} // Must have table
136
+ label={this.props.table
137
+ ? ExprUtils.localizeString(this.props.schema.getTable(this.props.table)?.name, T.locale)
138
+ : ""}
139
+ editor={editor}
140
+ onRemove={() => {
141
+ this.props.onChange(null)
142
+ }}
143
+ />
144
144
 
145
- // Make sure table still exists
146
- this.props.table &&
147
- this.props.onFilterChange &&
148
- this.props.table.match(/^responses:/) &&
149
- this.props.schema.getTable(this.props.table)
150
- ? R(MWaterResponsesFilterComponent, {
151
- schema: this.props.schema,
152
- table: this.props.table,
153
- filter: this.props.filter,
154
- onFilterChange: this.props.onFilterChange
155
- })
156
- : undefined
145
+ {/* Make sure table still exists */}
146
+ {this.props.table &&
147
+ this.props.onFilterChange &&
148
+ this.props.table.match(/^responses:/) &&
149
+ this.props.schema.getTable(this.props.table) ? (
150
+ <MWaterResponsesFilterComponent
151
+ schema={this.props.schema}
152
+ table={this.props.table}
153
+ filter={this.props.filter}
154
+ onFilterChange={this.props.onFilterChange}
155
+ />
156
+ ) : undefined}
157
+ </div>
157
158
  )
158
159
  }
159
160
  }
@@ -168,13 +169,13 @@ interface EditModeTableSelectComponentProps {
168
169
  user?: string
169
170
  table?: string
170
171
  /** Called with table selected */
171
- onChange: any
172
- extraTables: any
173
- onExtraTablesChange: any
172
+ onChange: (table: string | null) => void
173
+ extraTables?: string[]
174
+ onExtraTablesChange?: (tables: string[]) => void
174
175
  }
175
176
 
176
177
  interface EditModeTableSelectComponentState {
177
- completeMode: any
178
+ completeMode: boolean
178
179
  }
179
180
 
180
181
  // Is the table select component when in edit mode. Toggles between complete list and simplified list
@@ -182,7 +183,7 @@ class EditModeTableSelectComponent extends React.Component<
182
183
  EditModeTableSelectComponentProps,
183
184
  EditModeTableSelectComponentState
184
185
  > {
185
- constructor(props: any) {
186
+ constructor(props: EditModeTableSelectComponentProps) {
186
187
  super(props)
187
188
 
188
189
  this.state = {
@@ -203,7 +204,7 @@ class EditModeTableSelectComponent extends React.Component<
203
204
 
204
205
  // Remove dead tables
205
206
  tables = tables.filter(
206
- (t: any) => this.props.schema.getTable(t) != null && !this.props.schema.getTable(t)!.deprecated
207
+ (t: string) => this.props.schema.getTable(t) != null && !this.props.schema.getTable(t)?.deprecated
207
208
  )
208
209
  tables = _.union(
209
210
  tables,
@@ -223,7 +224,7 @@ class EditModeTableSelectComponent extends React.Component<
223
224
  }
224
225
  } else {
225
226
  // Add if exists
226
- if (this.props.schema.getTable(extraTable) && !this.props.schema.getTable(extraTable)!.deprecated) {
227
+ if (this.props.schema.getTable(extraTable) && !this.props.schema.getTable(extraTable)?.deprecated) {
227
228
  tables = _.union(tables, [extraTable])
228
229
  }
229
230
  }
@@ -231,13 +232,13 @@ class EditModeTableSelectComponent extends React.Component<
231
232
 
232
233
  // Sort by name
233
234
  tables = _.sortBy(tables, (tableId) =>
234
- ExprUtils.localizeString(this.props.schema.getTable(tableId)!.name, T.locale)
235
+ ExprUtils.localizeString(this.props.schema.getTable(tableId)?.name, T.locale)
235
236
  )
236
237
 
237
238
  return tables
238
239
  }
239
240
 
240
- handleCompleteChange = (tableId: any) => {
241
+ handleCompleteChange = (tableId: string | null) => {
241
242
  this.setState({ completeMode: false })
242
243
  return this.props.onChange(tableId)
243
244
  }
@@ -245,7 +246,7 @@ class EditModeTableSelectComponent extends React.Component<
245
246
  render() {
246
247
  return (
247
248
  <ActiveTablesContext.Consumer>
248
- {activeTables => (
249
+ {(activeTables: string[]) => (
249
250
  <div>
250
251
  {this.state.completeMode ? (
251
252
  <ModalPopupComponent
@@ -271,11 +272,11 @@ class EditModeTableSelectComponent extends React.Component<
271
272
  <>
272
273
  <div className="text-muted">{T`Select Data Source:`}</div>
273
274
  <OptionListComponent items={this.getTableShortlist(activeTables).map((tableId) => {
274
- const table = this.props.schema.getTable(tableId)!
275
+ const table = this.props.schema.getTable(tableId)
275
276
  return {
276
- name: ExprUtils.localizeString(table.name, T.locale),
277
- desc: ExprUtils.localizeString(table.desc, T.locale),
278
- onClick: () => this.props.onChange(table.id)
277
+ name: ExprUtils.localizeString(table?.name, T.locale),
278
+ desc: ExprUtils.localizeString(table?.desc, T.locale),
279
+ onClick: () => table && this.props.onChange(table.id)
279
280
  }
280
281
  })} />
281
282
  <div>
@@ -0,0 +1,159 @@
1
+ import _ from "lodash"
2
+ import $ from "jquery"
3
+ import React, { useState, useEffect } from "react"
4
+ import querystring from "querystring"
5
+ import * as uiComponents from "../UIComponents"
6
+ import { ExprUtils, Schema } from "@mwater/expressions"
7
+ import { WorkflowType } from "@mwater/common/lib/tables/workflow_types"
8
+
9
+ interface MWaterWorkflowsSelectComponentProps {
10
+ /** Url to hit api */
11
+ apiUrl: string
12
+ /** Optional client */
13
+ client?: string
14
+ schema: Schema
15
+ /** User id */
16
+ user?: string
17
+ /** Called with table selected */
18
+ onChange: (tableId: string) => void
19
+ extraTables: string[]
20
+ onExtraTableAdd: (tableId: string) => void
21
+ onExtraTableRemove: (tableId: string) => void
22
+ }
23
+
24
+ interface WorkflowTypeItem {
25
+ id: string
26
+ name: string
27
+ desc?: string
28
+ }
29
+
30
+ /** Searchable list of workflow types */
31
+ export function MWaterWorkflowsSelectComponent(props: MWaterWorkflowsSelectComponentProps) {
32
+ const [workflowTypes, setWorkflowTypes] = useState<WorkflowTypeItem[] | null>(null)
33
+ const [search, setSearch] = useState("")
34
+ const [error, setError] = useState<string | null>(null)
35
+
36
+ useEffect(() => {
37
+ // Get names and basic of workflow types
38
+ const query: any = {}
39
+ query.fields = JSON.stringify({
40
+ name: 1,
41
+ description: 1,
42
+ roles: 1,
43
+ _created_by: 1,
44
+ _modified_on: 1
45
+ })
46
+ query.client = props.client
47
+
48
+ // Get list of all workflow types
49
+ $.getJSON(props.apiUrl + "workflow_types?" + querystring.stringify(query), (types: WorkflowType[]) => {
50
+ // Sort by included first, then user-created, then by name
51
+ types = _.sortByOrder(
52
+ types,
53
+ [
54
+ (type: WorkflowType) => ((props.extraTables || []).includes("workflows:" + type._id) ? 0 : 1),
55
+ (type: WorkflowType) => (type._created_by === props.user ? 0 : 1),
56
+ (type: WorkflowType) => ExprUtils.localizeString(type.name, T.locale) || T`Untitled Workflow Type`
57
+ ],
58
+ ["asc", "asc", "asc"]
59
+ )
60
+
61
+ setWorkflowTypes(
62
+ _.map(types, (type) => ({
63
+ id: type._id,
64
+ name: ExprUtils.localizeString(type.name, T.locale) || T`Untitled Workflow Type`,
65
+ desc: ExprUtils.localizeString(type.description, T.locale)
66
+ }))
67
+ )
68
+ }).fail((xhr: any) => {
69
+ setError(xhr.responseText)
70
+ })
71
+ }, [props.apiUrl, props.client, props.user, props.extraTables])
72
+
73
+ const handleTableRemove = (table: WorkflowTypeItem) => {
74
+ if (
75
+ confirm(
76
+ T`Remove ${table.name}? Any widgets that depend on it will no longer work properly.`
77
+ )
78
+ ) {
79
+ props.onExtraTableRemove(`workflows:${table.id}`)
80
+ }
81
+ }
82
+
83
+ if (error) {
84
+ return <div className="alert alert-danger">{error}</div>
85
+ }
86
+
87
+ // Filter workflow types by search
88
+ let filteredWorkflowTypes: WorkflowTypeItem[] | null = workflowTypes
89
+ if (search && workflowTypes) {
90
+ const escapeRegExp = (s: string) => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&")
91
+ const searchStringRegExp = new RegExp(escapeRegExp(search), "i")
92
+ filteredWorkflowTypes = _.filter(workflowTypes, (type) => type.name.match(searchStringRegExp))
93
+ }
94
+
95
+ // Remove if already included
96
+ filteredWorkflowTypes = _.filter(
97
+ filteredWorkflowTypes || [],
98
+ (wt) => !(props.extraTables || []).includes(`workflows:${wt.id}`)
99
+ )
100
+
101
+ // Get included workflow tables from schema
102
+ let includedTables = _.filter(
103
+ props.schema.getTables(),
104
+ (table) => (table.id.match(/^workflows:/) || table.id.match(/^workflow_events:/)) && !table.deprecated
105
+ )
106
+ includedTables = _.sortBy(includedTables, (t) => t.name.en)
107
+
108
+ return (
109
+ <div>
110
+ <label>{T`Included Workflows:`}</label>
111
+ {includedTables.length > 0 ? (
112
+ <uiComponents.OptionListComponent
113
+ items={_.map(includedTables, (table) => {
114
+ return {
115
+ name: ExprUtils.localizeString(table.name, T.locale),
116
+ desc: ExprUtils.localizeString(table.desc, T.locale),
117
+ onClick: () => props.onChange(table.id),
118
+ onRemove: () => handleTableRemove({ id: table.id.replace(/^workflows:/, ""), name: ExprUtils.localizeString(table.name, T.locale) })
119
+ }
120
+ })}
121
+ />
122
+ ) : (
123
+ <div>{T`None`}</div>
124
+ )}
125
+
126
+ <br />
127
+
128
+ <label>{T`All Workflows:`}</label>
129
+ {!workflowTypes || workflowTypes.length === 0 ? (
130
+ <div className="alert alert-info">
131
+ <i className="fa fa-spinner fa-spin" />
132
+ &nbsp;{T`Loading...`}
133
+ </div>
134
+ ) : (
135
+ <>
136
+ <input
137
+ type="text"
138
+ className="form-control form-control-sm"
139
+ placeholder={T`Search...`}
140
+ key="search"
141
+ autoFocus
142
+ style={{ maxWidth: "20em", marginBottom: 10 }}
143
+ value={search}
144
+ onChange={(ev) => setSearch(ev.target.value)}
145
+ />
146
+
147
+ <uiComponents.OptionListComponent
148
+ items={_.map(filteredWorkflowTypes, (workflowType) => ({
149
+ name: workflowType.name,
150
+ desc: workflowType.desc,
151
+ onClick: () => props.onChange("workflows:" + workflowType.id)
152
+ }))}
153
+ />
154
+ </>
155
+ )}
156
+ </div>
157
+ )
158
+ }
159
+