@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
package/lib/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export { default as LeafletMapComponent, MapBounds, TileLayer, GeoJsonLayer, MapLayer } from "./maps/LeafletMapComponent";
1
+ export { default as LeafletMapComponent } from "./maps/LeafletMapComponent";
2
+ export type { MapBounds, TileLayer, GeoJsonLayer, MapLayer } from "./maps/LeafletMapComponent";
2
3
  export { default as DateRangeComponent } from "./DateRangeComponent";
3
4
  export { default as RegionSelectComponent } from "./maps/RegionSelectComponent";
4
5
  export * from "./datagrids/DatagridDesign";
@@ -7,7 +8,7 @@ export { default as DashboardComponent } from "./dashboards/DashboardComponent";
7
8
  export { default as DashboardDataSource } from "./dashboards/DashboardDataSource";
8
9
  export { default as DirectDashboardDataSource } from "./dashboards/DirectDashboardDataSource";
9
10
  export * from "./dashboards/DashboardDesign";
10
- export { MapDesign, MapLayerView } from "./maps/MapDesign";
11
+ export type { MapDesign, MapLayerView } from "./maps/MapDesign";
11
12
  export { default as compressJson } from "./compressJson";
12
13
  export { default as LocaleContextInjector } from "./LocaleContextInjector";
13
14
  export * from "./WidgetScope";
@@ -15,12 +16,12 @@ export { default as WidgetFactory } from "./widgets/WidgetFactory";
15
16
  export { default as Widget } from "./widgets/Widget";
16
17
  export { default as DatagridUtils } from "./datagrids/DatagridUtils";
17
18
  export * from "./maps/MapViewComponent";
18
- export { MapScope } from "./maps/MapUtils";
19
+ export type { MapScope } from "./maps/MapUtils";
19
20
  export { languages } from "./languages";
20
21
  export { default as MWaterLoaderComponent } from "./MWaterLoaderComponent";
21
22
  export { default as MWaterContextComponent } from "./MWaterContextComponent";
22
23
  export { default as mWaterLoader } from "./mWaterLoader";
23
- export { WidgetDataSource } from "./widgets/WidgetDataSource";
24
+ export type { WidgetDataSource } from "./widgets/WidgetDataSource";
24
25
  export { default as DirectWidgetDataSource } from "./widgets/DirectWidgetDataSource";
25
26
  import "leaflet/dist/leaflet.css";
26
27
  import "rc-slider/assets/index.css";
@@ -31,7 +32,6 @@ import "./index.css";
31
32
  export { setMapTilerApiKey } from "./maps/vectorMaps";
32
33
  export { default as UndoStack } from "./UndoStack";
33
34
  export { default as DashboardViewComponent } from "./dashboards/DashboardViewComponent";
34
- export declare let BingLayer: any;
35
35
  export declare let UtfGridLayer: any;
36
36
  export { default as LayerFactory } from "./maps/LayerFactory";
37
37
  export { default as MapDesignerComponent } from "./maps/MapDesignerComponent";
package/lib/index.js CHANGED
@@ -17,8 +17,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.ItemsHtmlConverter = exports.RichTextComponent = exports.AxisColorEditorComponent = exports.MarkerSymbolSelectComponent = exports.DetailLevelSelectComponent = exports.LayoutManager = exports.LabeledExprGenerator = exports.DirectDatagridDataSource = exports.ServerDatagridDataSource = exports.DirectMapDataSource = exports.ServerMapDataSource = exports.ServerDashboardDataSource = exports.DatagridViewComponent = exports.DatagridComponent = exports.ColorSchemeFactory = exports.AxisBuilder = exports.WidgetScopesViewComponent = exports.WidgetScoper = exports.ChartViewComponent = exports.ImageMosaicChart = exports.CalendarChart = exports.TableChart = exports.LayeredChart = exports.CheckboxComponent = exports.RadioButtonComponent = exports.VerticalLayoutComponent = exports.MapComponent = exports.MapDesignerComponent = exports.LayerFactory = exports.UtfGridLayer = exports.BingLayer = exports.DashboardViewComponent = exports.UndoStack = exports.setMapTilerApiKey = exports.DirectWidgetDataSource = exports.mWaterLoader = exports.MWaterContextComponent = exports.MWaterLoaderComponent = exports.languages = exports.DatagridUtils = exports.Widget = exports.WidgetFactory = exports.LocaleContextInjector = exports.compressJson = exports.DirectDashboardDataSource = exports.DashboardDataSource = exports.DashboardComponent = exports.RegionSelectComponent = exports.DateRangeComponent = exports.LeafletMapComponent = void 0;
21
- exports.OptionListComponent = exports.ToggleEditComponent = exports.QuickfilterCompiler = exports.DropdownWidgetComponent = void 0;
20
+ exports.DropdownWidgetComponent = exports.ItemsHtmlConverter = exports.RichTextComponent = exports.AxisColorEditorComponent = exports.MarkerSymbolSelectComponent = exports.DetailLevelSelectComponent = exports.LayoutManager = exports.LabeledExprGenerator = exports.DirectDatagridDataSource = exports.ServerDatagridDataSource = exports.DirectMapDataSource = exports.ServerMapDataSource = exports.ServerDashboardDataSource = exports.DatagridViewComponent = exports.DatagridComponent = exports.ColorSchemeFactory = exports.AxisBuilder = exports.WidgetScopesViewComponent = exports.WidgetScoper = exports.ChartViewComponent = exports.ImageMosaicChart = exports.CalendarChart = exports.TableChart = exports.LayeredChart = exports.CheckboxComponent = exports.RadioButtonComponent = exports.VerticalLayoutComponent = exports.MapComponent = exports.MapDesignerComponent = exports.LayerFactory = exports.UtfGridLayer = exports.DashboardViewComponent = exports.UndoStack = exports.setMapTilerApiKey = exports.DirectWidgetDataSource = exports.mWaterLoader = exports.MWaterContextComponent = exports.MWaterLoaderComponent = exports.languages = exports.DatagridUtils = exports.Widget = exports.WidgetFactory = exports.LocaleContextInjector = exports.compressJson = exports.DirectDashboardDataSource = exports.DashboardDataSource = exports.DashboardComponent = exports.RegionSelectComponent = exports.DateRangeComponent = exports.LeafletMapComponent = void 0;
21
+ exports.OptionListComponent = exports.ToggleEditComponent = exports.QuickfilterCompiler = void 0;
22
22
  var LeafletMapComponent_1 = require("./maps/LeafletMapComponent");
23
23
  Object.defineProperty(exports, "LeafletMapComponent", { enumerable: true, get: function () { return __importDefault(LeafletMapComponent_1).default; } });
24
24
  var DateRangeComponent_1 = require("./DateRangeComponent");
@@ -68,7 +68,6 @@ var UndoStack_1 = require("./UndoStack");
68
68
  Object.defineProperty(exports, "UndoStack", { enumerable: true, get: function () { return __importDefault(UndoStack_1).default; } });
69
69
  var DashboardViewComponent_1 = require("./dashboards/DashboardViewComponent");
70
70
  Object.defineProperty(exports, "DashboardViewComponent", { enumerable: true, get: function () { return __importDefault(DashboardViewComponent_1).default; } });
71
- exports.BingLayer = require("./maps/BingLayer");
72
71
  exports.UtfGridLayer = require("./maps/UtfGridLayer");
73
72
  var LayerFactory_1 = require("./maps/LayerFactory");
74
73
  Object.defineProperty(exports, "LayerFactory", { enumerable: true, get: function () { return __importDefault(LayerFactory_1).default; } });
@@ -20,11 +20,18 @@ export interface BlocksDisplayComponentProps {
20
20
  /** message to display if clipboard can't be pasted into current dashboard */
21
21
  cantPasteMessage?: string;
22
22
  }
23
+ interface BlocksDisplayComponentState {
24
+ isPaletteVisible: boolean;
25
+ isManuallyHidden: boolean;
26
+ }
23
27
  /**
24
28
  Renders the complete layout of the blocks and also optionally a palette to the left
25
29
  that can be used to drag new items into the layout. Palette is only displayed if onItemsChange is not null
26
30
  */
27
- declare class BlocksDisplayComponent extends React.Component<BlocksDisplayComponentProps> {
31
+ declare class BlocksDisplayComponent extends React.Component<BlocksDisplayComponentProps, BlocksDisplayComponentState> {
32
+ state: BlocksDisplayComponentState;
33
+ componentDidUpdate(prevProps: BlocksDisplayComponentProps): void;
34
+ handlePaletteToggle: () => void;
28
35
  handleBlockDrop: (sourceBlock: LayoutBlock, targetBlock: LayoutBlock, side: "top" | "left" | "right" | "bottom") => void;
29
36
  handleBlockRemove: (block: LayoutBlock) => void;
30
37
  handleBlockUpdate: (block: LayoutBlock) => void;
@@ -42,6 +42,27 @@ const layoutOptions_1 = require("../../dashboards/layoutOptions");
42
42
  that can be used to drag new items into the layout. Palette is only displayed if onItemsChange is not null
43
43
  */
44
44
  class BlocksDisplayComponent extends react_1.default.Component {
45
+ state = {
46
+ isPaletteVisible: false,
47
+ isManuallyHidden: false
48
+ };
49
+ componentDidUpdate(prevProps) {
50
+ // If editing state changes (onItemsChange becomes available/unavailable)
51
+ if (prevProps.onItemsChange !== this.props.onItemsChange) {
52
+ if (this.props.onItemsChange && !this.state.isManuallyHidden) {
53
+ this.setState({ isPaletteVisible: true });
54
+ }
55
+ else if (!this.props.onItemsChange) {
56
+ this.setState({ isPaletteVisible: false, isManuallyHidden: false });
57
+ }
58
+ }
59
+ }
60
+ handlePaletteToggle = () => {
61
+ this.setState(prevState => ({
62
+ isPaletteVisible: !prevState.isPaletteVisible,
63
+ isManuallyHidden: !prevState.isManuallyHidden
64
+ }));
65
+ };
45
66
  handleBlockDrop = (sourceBlock, targetBlock, side) => {
46
67
  // Remove source from items
47
68
  let items = blockUtils.removeBlock(this.props.items, sourceBlock);
@@ -121,8 +142,28 @@ class BlocksDisplayComponent extends react_1.default.Component {
121
142
  });
122
143
  }
123
144
  renderPalette() {
124
- return (react_1.default.createElement("div", { key: "palette", style: { width: 141, height: "100%", position: "absolute", top: 0, left: 0 } },
145
+ return (react_1.default.createElement("div", { key: "palette", style: {
146
+ width: 141,
147
+ height: "100%",
148
+ position: "absolute",
149
+ top: 0,
150
+ left: 0,
151
+ transition: "transform 0.3s ease-in-out",
152
+ transform: this.state.isPaletteVisible ? "translateX(0)" : "translateX(-100%)"
153
+ } },
125
154
  react_1.default.createElement("div", { className: "mwater-visualization-palette", style: { height: "100%" } },
155
+ react_1.default.createElement("div", { style: {
156
+ position: "absolute",
157
+ right: -14,
158
+ top: 0,
159
+ background: "#363b3e",
160
+ color: "white",
161
+ padding: "5px 3px 5px 5px",
162
+ cursor: "pointer",
163
+ borderRadius: "0 3px 3px 0",
164
+ zIndex: 1001
165
+ }, onClick: this.handlePaletteToggle },
166
+ react_1.default.createElement("i", { className: `fa fa-chevron-${this.state.isPaletteVisible ? 'left' : 'right'}` })),
126
167
  react_1.default.createElement(PaletteItemComponent_1.default, { createItem: this.createBlockItem({ type: "widget", widgetType: "Text", design: { style: "title" } }), title: react_1.default.createElement("i", { className: "fa fa-font" }), subtitle: T `Title` }),
127
168
  react_1.default.createElement(PaletteItemComponent_1.default, { createItem: this.createBlockItem({ type: "widget", widgetType: "Text", design: {} }), title: react_1.default.createElement("i", { className: "fa fa-align-left" }), subtitle: T `Text` }),
128
169
  react_1.default.createElement(PaletteItemComponent_1.default, { createItem: this.createBlockItem({ type: "widget", aspectRatio: 1.4, widgetType: "Image", design: {} }), title: react_1.default.createElement("i", { className: "fa fa-picture-o" }), subtitle: T `Image` }),
@@ -178,15 +219,16 @@ class BlocksDisplayComponent extends react_1.default.Component {
178
219
  innerParentStyle = {};
179
220
  innerParentStyle.maxWidth = layoutOptions.maximumWidth || undefined;
180
221
  return (react_1.default.createElement(layoutOptions_1.DashboardStyleWrapper, { style: { width: "100%", height: "100%", overflow: "hidden", position: "relative" }, layoutOptions: layoutOptions },
181
- this.renderPalette(),
222
+ react_1.default.createElement("div", { className: "mwater-visualization-palette-container" }, this.renderPalette()),
182
223
  react_1.default.createElement("div", { style: {
183
224
  position: "absolute",
184
- left: 141,
225
+ left: this.state.isPaletteVisible ? 141 : 0,
185
226
  top: 0,
186
227
  bottom: 0,
187
228
  right: 0,
188
229
  overflowX: "auto",
189
- overflowY: "scroll"
230
+ overflowY: "scroll",
231
+ transition: "left 0.3s ease-in-out"
190
232
  }, className: `mwater-visualization-block-parent-outer mwater-visualization-block-editing` },
191
233
  react_1.default.createElement("div", { key: "inner", className: `mwater-visualization-block-parent-inner mwater-visualization-block-parent-inner-${this.props.style || "default"}`, style: innerParentStyle }, this.renderBlock(this.props.items, false, 0)))));
192
234
  }
@@ -50,4 +50,22 @@ export default class BufferLayer extends Layer<BufferLayerDesign> {
50
50
  validateDesign(design: BufferLayerDesign, schema: Schema): string | null;
51
51
  /** Get strings to be translated */
52
52
  getTranslatableStrings(design: BufferLayerDesign, schema: Schema): string[];
53
+ /** Gets hover over data for hover over items. This should be implemented by layers that have hover over items.
54
+ * It will be called on the server side if using a server map data source, or on the client side if using a direct
55
+ * map data source.
56
+ */
57
+ getHoverOverData(options: {
58
+ /** Design of the layer */
59
+ design: BufferLayerDesign;
60
+ /** Data of the current item being hovered over. e.g. { id: 123 } */
61
+ data: any;
62
+ /** Filters to apply to the hover over data, not including filtering down to the current item */
63
+ filters: JsonQLFilter[];
64
+ /** Schema to use */
65
+ schema: Schema;
66
+ /** Data source to use */
67
+ dataSource: DataSource;
68
+ }): Promise<{
69
+ [key: string]: any;
70
+ }>;
53
71
  }
@@ -39,6 +39,7 @@ const HoverContent_1 = __importDefault(require("./HoverContent"));
39
39
  const layoutOptions_1 = require("../dashboards/layoutOptions");
40
40
  const BlocksLayoutManager_1 = __importDefault(require("../layouts/blocks/BlocksLayoutManager"));
41
41
  const DashboardUtils_1 = require("../dashboards/DashboardUtils");
42
+ const MapUtils_1 = require("./MapUtils");
42
43
  /** Layer which draws a buffer around geometries (i.e. a radius circle around points) */
43
44
  class BufferLayer extends Layer_1.default {
44
45
  /** Gets the type of layer definition */
@@ -635,25 +636,20 @@ marker-fill: ` +
635
636
  }
636
637
  // same as onGridClick but handles hover over
637
638
  onGridHoverOver(ev, hoverOptions) {
638
- if (ev.data && ev.data.id) {
639
- const { table } = hoverOptions.design;
640
- const results = {};
641
- // Popup
642
- if (hoverOptions.design.hoverOver) {
643
- // Create filter using popupFilterJoins
644
- const popupFilterJoins = hoverOptions.design.popupFilterJoins || PopupFilterJoinsUtils.createDefaultPopupFilterJoins(table);
645
- const popupFilters = PopupFilterJoinsUtils.createPopupFilters(popupFilterJoins, hoverOptions.schema, table, ev.data.id);
646
- results.hoverOver = react_1.default.createElement(HoverContent_1.default, {
639
+ if (ev.data && ev.data.id && hoverOptions.design.hoverOver && hoverOptions.design.hoverOver.items.length > 0) {
640
+ const results = {
641
+ hoverOver: react_1.default.createElement(HoverContent_1.default, {
647
642
  key: ev.data.id,
648
643
  schema: hoverOptions.schema,
649
- dataSource: hoverOptions.dataSource,
650
- table,
644
+ data: ev.data,
645
+ mapLayerDataSource: hoverOptions.layerDataSource,
646
+ design: hoverOptions.design,
651
647
  items: hoverOptions.design.hoverOver.items,
652
- filters: popupFilters,
648
+ filters: hoverOptions.filters,
653
649
  locale: hoverOptions.locale,
654
650
  translate: hoverOptions.translate
655
- });
656
- }
651
+ })
652
+ };
657
653
  return results;
658
654
  }
659
655
  else {
@@ -781,6 +777,18 @@ marker-fill: ` +
781
777
  aggrNeed: "none"
782
778
  });
783
779
  draft.filter = exprCleaner.cleanExpr(design.filter || null, { table: design.table });
780
+ // Clean hover over expressions
781
+ if (design.table && design.hoverOver && design.hoverOver.items) {
782
+ for (let i = 0; i < design.hoverOver.items.length; i++) {
783
+ const item = design.hoverOver.items[i];
784
+ if (item.value) {
785
+ draft.hoverOver.items[i].value = exprCleaner.cleanExpr(item.value || null, {
786
+ table: design.table,
787
+ aggrStatuses: ["individual", "literal"]
788
+ });
789
+ }
790
+ }
791
+ }
784
792
  });
785
793
  return design;
786
794
  }
@@ -836,5 +844,19 @@ marker-fill: ` +
836
844
  // Remove duplicates
837
845
  return lodash_1.default.uniq(strings);
838
846
  }
847
+ /** Gets hover over data for hover over items. This should be implemented by layers that have hover over items.
848
+ * It will be called on the server side if using a server map data source, or on the client side if using a direct
849
+ * map data source.
850
+ */
851
+ getHoverOverData(options) {
852
+ return (0, MapUtils_1.getSimpleHoverOverData)({
853
+ id: options.data.id,
854
+ table: options.design.table,
855
+ filters: options.filters,
856
+ schema: options.schema,
857
+ dataSource: options.dataSource,
858
+ hoverOverItems: options.design.hoverOver.items,
859
+ });
860
+ }
839
861
  }
840
862
  exports.default = BufferLayer;
@@ -36,7 +36,7 @@ export interface BufferLayerDesign {
36
36
  items: LayoutBlock;
37
37
  };
38
38
  /** Contains items: which is HoverOverItem[] */
39
- hoverOver: {
39
+ hoverOver?: {
40
40
  items: HoverOverItem[];
41
41
  };
42
42
  /** Customizable filtering for popup. See PopupFilterJoins.md */
@@ -39,7 +39,7 @@ const ZoomLevelsComponent_1 = __importDefault(require("./ZoomLevelsComponent"));
39
39
  const PopupFilterJoinsUtils = __importStar(require("./PopupFilterJoinsUtils"));
40
40
  const bootstrap_1 = require("@mwater/react-library/lib/bootstrap");
41
41
  const vectorMaps_1 = require("./vectorMaps");
42
- const EditHoverOver_1 = __importDefault(require("./EditHoverOver"));
42
+ const EditHoverOver_1 = require("./EditHoverOver");
43
43
  class BufferLayerDesignerComponent extends react_1.default.Component {
44
44
  handleTableChange = (table) => {
45
45
  this.props.onDesignChange({ ...this.props.design, table });
@@ -164,7 +164,7 @@ class BufferLayerDesignerComponent extends react_1.default.Component {
164
164
  if (!this.props.design.table) {
165
165
  return null;
166
166
  }
167
- return (react_1.default.createElement(EditHoverOver_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, idTable: this.props.design.table, defaultPopupFilterJoins: PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table) }));
167
+ return (react_1.default.createElement(EditHoverOver_1.EditHoverOver, { design: this.props.design, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, idTable: this.props.design.table, defaultPopupFilterJoins: PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table), aggrStatuses: ["individual", "literal"] }));
168
168
  }
169
169
  render() {
170
170
  return (react_1.default.createElement("div", null,
@@ -72,4 +72,22 @@ export default class ChoroplethLayer extends Layer<ChoroplethLayerDesign> {
72
72
  }): React.ReactElement<{}>;
73
73
  /** Get strings to be translated */
74
74
  getTranslatableStrings(design: ChoroplethLayerDesign, schema: Schema): string[];
75
+ /** Gets hover over data for hover over items. This should be implemented by layers that have hover over items.
76
+ * It will be called on the server side if using a server map data source, or on the client side if using a direct
77
+ * map data source.
78
+ */
79
+ getHoverOverData(options: {
80
+ /** Design of the layer */
81
+ design: ChoroplethLayerDesign;
82
+ /** Data of the current item being hovered over. e.g. { id: 123 } */
83
+ data: any;
84
+ /** Filters to apply to the hover over data, not including filtering down to the current item */
85
+ filters: JsonQLFilter[];
86
+ /** Schema to use */
87
+ schema: Schema;
88
+ /** Data source to use */
89
+ dataSource: DataSource;
90
+ }): Promise<{
91
+ [key: string]: any;
92
+ }>;
75
93
  }
@@ -39,6 +39,7 @@ const HoverContent_1 = __importDefault(require("./HoverContent"));
39
39
  const layoutOptions_1 = require("../dashboards/layoutOptions");
40
40
  const BlocksLayoutManager_1 = __importDefault(require("../layouts/blocks/BlocksLayoutManager"));
41
41
  const DashboardUtils_1 = require("../dashboards/DashboardUtils");
42
+ const MapUtils_1 = require("./MapUtils");
42
43
  class ChoroplethLayer extends Layer_1.default {
43
44
  /** Gets the type of layer definition */
44
45
  getLayerDefinitionType() {
@@ -1246,41 +1247,28 @@ class ChoroplethLayer extends Layer_1.default {
1246
1247
  }
1247
1248
  // same as onGridClick but handles hover over
1248
1249
  onGridHoverOver(ev, hoverOptions) {
1249
- const regionsTable = hoverOptions.design.regionsTable || "admin_regions";
1250
- // Row only if mode is "plain" or "direct"
1251
- if (hoverOptions.design.regionMode == "plain" || hoverOptions.design.regionMode == "direct") {
1252
- if (!ev.data || !ev.data.id) {
1253
- return null;
1254
- }
1250
+ // Only applicable to indirect mode
1251
+ if (hoverOptions.design.regionMode !== "indirect") {
1252
+ return null;
1255
1253
  }
1256
1254
  // Ignore if indirect with no table
1257
1255
  if (!hoverOptions.design.table) {
1258
1256
  return null;
1259
1257
  }
1260
- if (ev.data && ev.data.id) {
1261
- const { table } = hoverOptions.design;
1262
- const results = {};
1263
- // Popup
1264
- if (hoverOptions.design.hoverOver) {
1265
- // Create default popup filter joins
1266
- const defaultPopupFilterJoins = {};
1267
- if (hoverOptions.design.adminRegionExpr) {
1268
- defaultPopupFilterJoins[hoverOptions.design.table] = hoverOptions.design.adminRegionExpr;
1269
- }
1270
- // Create filter using popupFilterJoins
1271
- const popupFilterJoins = hoverOptions.design.popupFilterJoins || defaultPopupFilterJoins;
1272
- const popupFilters = PopupFilterJoinsUtils.createPopupFilters(popupFilterJoins, hoverOptions.schema, table, ev.data.id, true);
1273
- results.hoverOver = react_1.default.createElement(HoverContent_1.default, {
1258
+ if (ev.data && ev.data.id && hoverOptions.design.hoverOver && hoverOptions.design.hoverOver.items.length > 0) {
1259
+ const results = {
1260
+ hoverOver: react_1.default.createElement(HoverContent_1.default, {
1274
1261
  key: ev.data.id,
1275
1262
  schema: hoverOptions.schema,
1276
- dataSource: hoverOptions.dataSource,
1277
- table,
1263
+ mapLayerDataSource: hoverOptions.layerDataSource,
1264
+ design: hoverOptions.design,
1278
1265
  items: hoverOptions.design.hoverOver.items,
1279
- filters: popupFilters,
1266
+ data: ev.data,
1267
+ filters: hoverOptions.filters,
1280
1268
  locale: hoverOptions.locale,
1281
1269
  translate: hoverOptions.translate
1282
- });
1283
- }
1270
+ })
1271
+ };
1284
1272
  return results;
1285
1273
  }
1286
1274
  else {
@@ -1446,6 +1434,18 @@ class ChoroplethLayer extends Layer_1.default {
1446
1434
  else {
1447
1435
  delete draft.filter;
1448
1436
  }
1437
+ // Clean hover over expressions only for indirect mode with a valid table
1438
+ if (design.table && design.regionMode === "indirect" && design.hoverOver && design.hoverOver.items) {
1439
+ for (let i = 0; i < design.hoverOver.items.length; i++) {
1440
+ const item = design.hoverOver.items[i];
1441
+ if (item.value) {
1442
+ draft.hoverOver.items[i].value = exprCleaner.cleanExpr(item.value || null, {
1443
+ table: design.table,
1444
+ aggrStatuses: ["individual", "literal", "aggregate"]
1445
+ });
1446
+ }
1447
+ }
1448
+ }
1449
1449
  if (design.detailLevel == null) {
1450
1450
  draft.detailLevel = 0;
1451
1451
  }
@@ -1535,5 +1535,26 @@ class ChoroplethLayer extends Layer_1.default {
1535
1535
  // Remove duplicates
1536
1536
  return lodash_1.default.uniq(strings);
1537
1537
  }
1538
+ /** Gets hover over data for hover over items. This should be implemented by layers that have hover over items.
1539
+ * It will be called on the server side if using a server map data source, or on the client side if using a direct
1540
+ * map data source.
1541
+ */
1542
+ getHoverOverData(options) {
1543
+ // Use popup filter joins utilities to create filters
1544
+ const popupFilterJoins = {};
1545
+ if (options.design.adminRegionExpr) {
1546
+ popupFilterJoins[options.design.table] = options.design.adminRegionExpr;
1547
+ }
1548
+ const popupFilters = PopupFilterJoinsUtils.createPopupFilters(popupFilterJoins, options.schema, options.design.table, options.data.id, true);
1549
+ return (0, MapUtils_1.getSimpleHoverOverData)({
1550
+ // Filter using popup filters instead of id since will return multiple rows
1551
+ id: null,
1552
+ table: options.design.table,
1553
+ filters: popupFilters,
1554
+ schema: options.schema,
1555
+ dataSource: options.dataSource,
1556
+ hoverOverItems: options.design.hoverOver.items,
1557
+ });
1558
+ }
1538
1559
  }
1539
1560
  exports.default = ChoroplethLayer;
@@ -48,11 +48,15 @@ export default interface ChoroplethLayerDesign {
48
48
  popup: {
49
49
  items: LayoutBlock;
50
50
  };
51
- hoverOver: {
52
- items: HoverOverItem[];
53
- };
54
51
  /** customizable filtering for popup. See PopupFilterJoins.md. Only when region mode is "indirect" */
55
52
  popupFilterJoins: PopupFilterJoins;
53
+ /** Hover over items to display when hovering over a region. Only when region mode is "indirect".
54
+ * This is an aggregate hover over, but can contain individual items. If so, only the first row
55
+ * of the resulting query will be displayed.
56
+ */
57
+ hoverOver?: {
58
+ items: HoverOverItem[];
59
+ };
56
60
  /** minimum zoom level */
57
61
  minZoom?: number;
58
62
  /** maximum zoom level */
@@ -2,9 +2,7 @@ import React from "react";
2
2
  import { Schema, DataSource, Expr } from "@mwater/expressions";
3
3
  import ChoroplethLayerDesign from "./ChoroplethLayerDesign";
4
4
  import { JsonQLFilter } from "../index";
5
- import EditPopupComponent from "./EditPopupComponent";
6
5
  import { Axis } from "../axes/Axis";
7
- import ScopeAndDetailLevelComponent from "./ScopeAndDetailLevelComponent";
8
6
  export default class ChoroplethLayerDesigner extends React.Component<{
9
7
  schema: Schema;
10
8
  dataSource: DataSource;
@@ -30,24 +28,14 @@ export default class ChoroplethLayerDesigner extends React.Component<{
30
28
  renderTable(): React.JSX.Element | null;
31
29
  renderRegionsTable(): React.JSX.Element;
32
30
  renderAdminRegionExpr(): React.JSX.Element | null;
33
- renderScopeAndDetailLevel(): React.DetailedReactHTMLElement<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> | React.CElement<import("./ScopeAndDetailLevelComponent").ScopeAndDetailLevelComponentProps, ScopeAndDetailLevelComponent>;
34
- renderDisplayNames(): React.DetailedReactHTMLElement<{
35
- className: string;
36
- }, HTMLElement>;
37
- renderColor(): React.DetailedReactHTMLElement<{
38
- className: string;
39
- }, HTMLElement> | null;
40
- renderColorAxis(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement> | null | undefined;
41
- renderFillOpacity(): React.DetailedReactHTMLElement<{
42
- className: string;
43
- }, HTMLElement>;
44
- renderBorderColor(): React.DetailedReactHTMLElement<{
45
- className: string;
46
- }, HTMLElement>;
47
- renderFilter(): React.DetailedReactHTMLElement<{
48
- className: string;
49
- }, HTMLElement> | null;
50
- renderPopup(): React.CElement<any, EditPopupComponent> | null;
51
- renderHoverOver(): React.FunctionComponentElement<import("./EditHoverOver").EditHoverOverProps> | null;
52
- render(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
31
+ renderScopeAndDetailLevel(): React.JSX.Element;
32
+ renderDisplayNames(): React.JSX.Element;
33
+ renderColor(): React.JSX.Element | null;
34
+ renderColorAxis(): React.JSX.Element | null | undefined;
35
+ renderFillOpacity(): React.JSX.Element;
36
+ renderBorderColor(): React.JSX.Element;
37
+ renderFilter(): React.JSX.Element | null;
38
+ renderPopup(): React.JSX.Element | null;
39
+ renderHoverOver(): React.JSX.Element | null;
40
+ render(): React.JSX.Element;
53
41
  }