@mwater/visualization 5.5.0 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/lib/ColorComponent.js +2 -2
  2. package/lib/MWaterContextComponent.d.ts +1 -1
  3. package/lib/MWaterGlobalFiltersComponent.d.ts +2 -2
  4. package/lib/MWaterGlobalFiltersComponent.js +11 -20
  5. package/lib/MWaterLoaderComponent.d.ts +4 -13
  6. package/lib/MWaterLoaderComponent.js +2 -11
  7. package/lib/TranslationsTabComponent.d.ts +34 -0
  8. package/lib/TranslationsTabComponent.js +256 -0
  9. package/lib/UndoStack.d.ts +2 -1
  10. package/lib/UndoStack.js +12 -6
  11. package/lib/dashboards/DashboardComponent.js +6 -5
  12. package/lib/dashboards/DashboardDesign.d.ts +1 -1
  13. package/lib/dashboards/ServerDashboardDataSource.d.ts +0 -1
  14. package/lib/dashboards/ServerDashboardDataSource.js +0 -25
  15. package/lib/dashboards/SettingsModalComponent.js +9 -233
  16. package/lib/datagrids/DatagridComponent.js +27 -2
  17. package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -3
  18. package/lib/datagrids/DatagridDesignerComponent.js +108 -120
  19. package/lib/datagrids/DatagridViewComponent.js +33 -6
  20. package/lib/datagrids/OrderBysDesignerComponent.d.ts +7 -7
  21. package/lib/datagrids/OrderBysDesignerComponent.js +19 -28
  22. package/lib/index.css +45 -2
  23. package/lib/index.d.ts +5 -5
  24. package/lib/index.js +2 -3
  25. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +8 -1
  26. package/lib/layouts/blocks/BlocksDisplayComponent.js +46 -4
  27. package/lib/maps/BufferLayer.d.ts +0 -13
  28. package/lib/maps/BufferLayer.js +24 -237
  29. package/lib/maps/BufferLayerDesign.d.ts +1 -1
  30. package/lib/maps/BufferLayerDesignerComponent.d.ts +1 -1
  31. package/lib/maps/BufferLayerDesignerComponent.js +2 -7
  32. package/lib/maps/ChoroplethLayer.d.ts +1 -16
  33. package/lib/maps/ChoroplethLayer.js +25 -358
  34. package/lib/maps/ChoroplethLayerDesign.d.ts +5 -2
  35. package/lib/maps/ChoroplethLayerDesigner.d.ts +10 -32
  36. package/lib/maps/ChoroplethLayerDesigner.js +58 -89
  37. package/lib/maps/ClusterLayer.d.ts +0 -9
  38. package/lib/maps/ClusterLayer.js +0 -250
  39. package/lib/maps/DirectMapDataSource.js +1 -48
  40. package/lib/maps/EditHoverOver.d.ts +4 -3
  41. package/lib/maps/EditHoverOver.js +3 -3
  42. package/lib/maps/GridLayer.d.ts +0 -15
  43. package/lib/maps/GridLayer.js +0 -212
  44. package/lib/maps/HoverContent.js +1 -1
  45. package/lib/maps/Layer.d.ts +1 -26
  46. package/lib/maps/Layer.js +0 -13
  47. package/lib/maps/LeafletMapComponent.js +10 -19
  48. package/lib/maps/MapComponent.d.ts +19 -35
  49. package/lib/maps/MapComponent.js +135 -77
  50. package/lib/maps/MapControlComponent.d.ts +4 -5
  51. package/lib/maps/MapControlComponent.js +5 -12
  52. package/lib/maps/MapDesign.d.ts +8 -0
  53. package/lib/maps/MapDesignerComponent.d.ts +2 -0
  54. package/lib/maps/MapDesignerComponent.js +7 -2
  55. package/lib/maps/MapLayerDataSource.d.ts +0 -4
  56. package/lib/maps/MapLayerViewDesignerComponent.d.ts +3 -1
  57. package/lib/maps/MapLayerViewDesignerComponent.js +5 -1
  58. package/lib/maps/MapLayersDesignerComponent.d.ts +2 -0
  59. package/lib/maps/MapLayersDesignerComponent.js +2 -1
  60. package/lib/maps/MapTranslationsTab.d.ts +15 -0
  61. package/lib/maps/MapTranslationsTab.js +47 -0
  62. package/lib/maps/MapUtils.d.ts +11 -0
  63. package/lib/maps/MapUtils.js +57 -1
  64. package/lib/maps/MapViewComponent.d.ts +1 -1
  65. package/lib/maps/MapViewComponent.js +1 -8
  66. package/lib/maps/MarkersLayer.d.ts +1 -14
  67. package/lib/maps/MarkersLayer.js +89 -254
  68. package/lib/maps/MarkersLayerDesign.d.ts +5 -1
  69. package/lib/maps/MarkersLayerDesignerComponent.d.ts +32 -57
  70. package/lib/maps/MarkersLayerDesignerComponent.js +158 -134
  71. package/lib/maps/ServerMapDataSource.d.ts +0 -1
  72. package/lib/maps/ServerMapDataSource.js +0 -25
  73. package/lib/maps/SwitchableTileUrlLayer.d.ts +0 -2
  74. package/lib/maps/SwitchableTileUrlLayer.js +0 -9
  75. package/lib/maps/TileUrlLayer.d.ts +0 -1
  76. package/lib/maps/TileUrlLayer.js +0 -5
  77. package/lib/maps/VectorMapViewComponent.js +13 -10
  78. package/lib/maps/symbols/font-awesome/asterisk.png +0 -0
  79. package/lib/maps/symbols/font-awesome/ban.png +0 -0
  80. package/lib/maps/symbols/font-awesome/beer.png +0 -0
  81. package/lib/maps/symbols/font-awesome/bell.png +0 -0
  82. package/lib/maps/symbols/font-awesome/bolt.png +0 -0
  83. package/lib/maps/symbols/font-awesome/building.png +0 -0
  84. package/lib/maps/symbols/font-awesome/bullseye.png +0 -0
  85. package/lib/maps/symbols/font-awesome/bus.png +0 -0
  86. package/lib/maps/symbols/font-awesome/caret-up.png +0 -0
  87. package/lib/maps/symbols/font-awesome/certificate.png +0 -0
  88. package/lib/maps/symbols/font-awesome/check-circle.png +0 -0
  89. package/lib/maps/symbols/font-awesome/check.png +0 -0
  90. package/lib/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  91. package/lib/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  92. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  93. package/lib/maps/symbols/font-awesome/cloud.png +0 -0
  94. package/lib/maps/symbols/font-awesome/comment.png +0 -0
  95. package/lib/maps/symbols/font-awesome/crosshairs.png +0 -0
  96. package/lib/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  97. package/lib/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  98. package/lib/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  99. package/lib/maps/symbols/font-awesome/female.png +0 -0
  100. package/lib/maps/symbols/font-awesome/file.png +0 -0
  101. package/lib/maps/symbols/font-awesome/flag.png +0 -0
  102. package/lib/maps/symbols/font-awesome/flask.png +0 -0
  103. package/lib/maps/symbols/font-awesome/h-square.png +0 -0
  104. package/lib/maps/symbols/font-awesome/home.png +0 -0
  105. package/lib/maps/symbols/font-awesome/info-circle.png +0 -0
  106. package/lib/maps/symbols/font-awesome/male.png +0 -0
  107. package/lib/maps/symbols/font-awesome/medkit.png +0 -0
  108. package/lib/maps/symbols/font-awesome/mobile.png +0 -0
  109. package/lib/maps/symbols/font-awesome/plus-circle.png +0 -0
  110. package/lib/maps/symbols/font-awesome/plus-square.png +0 -0
  111. package/lib/maps/symbols/font-awesome/plus.png +0 -0
  112. package/lib/maps/symbols/font-awesome/square.png +0 -0
  113. package/lib/maps/symbols/font-awesome/star.png +0 -0
  114. package/lib/maps/symbols/font-awesome/thumbs-down.png +0 -0
  115. package/lib/maps/symbols/font-awesome/thumbs-up.png +0 -0
  116. package/lib/maps/symbols/font-awesome/ticket.png +0 -0
  117. package/lib/maps/symbols/font-awesome/times-circle.png +0 -0
  118. package/lib/maps/symbols/font-awesome/times.png +0 -0
  119. package/lib/maps/symbols/font-awesome/tint.png +0 -0
  120. package/lib/maps/symbols/font-awesome/tree.png +0 -0
  121. package/lib/maps/symbols/font-awesome/university.png +0 -0
  122. package/lib/maps/symbols/font-awesome/usd.png +0 -0
  123. package/lib/maps/symbols/font-awesome/user.png +0 -0
  124. package/lib/maps/symbols/font-awesome/users.png +0 -0
  125. package/lib/maps/symbols/font-awesome/wheelchair.png +0 -0
  126. package/lib/maps/symbols/sdf-ize.sh +93 -0
  127. package/lib/maps/vectorMaps.d.ts +6 -6
  128. package/lib/maps/vectorMaps.js +33 -45
  129. package/lib/mwater_table_selection/IndicatorsListComponent.d.ts +4 -2
  130. package/lib/mwater_table_selection/IndicatorsListComponent.js +103 -34
  131. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.d.ts +18 -0
  132. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.js +80 -0
  133. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.d.ts +26 -0
  134. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.js +237 -51
  135. package/lib/mwater_table_selection/MWaterTableSelectComponent.d.ts +2 -2
  136. package/lib/mwater_table_selection/MWaterTableSelectComponent.js +9 -4
  137. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.d.ts +19 -0
  138. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.js +111 -0
  139. package/lib/quickfilter/QuickfiltersComponent.d.ts +3 -102
  140. package/lib/quickfilter/QuickfiltersComponent.js +53 -110
  141. package/lib/quickfilter/TextLiteralComponent.d.ts +23 -47
  142. package/lib/quickfilter/TextLiteralComponent.js +85 -82
  143. package/lib/widgets/MapWidget.js +6 -3
  144. package/lib/widgets/text/ExprItemEditorComponent.d.ts +3 -8
  145. package/lib/widgets/text/ExprItemEditorComponent.js +36 -33
  146. package/lib/widgets/text/ExprUpdateModalComponent.d.ts +1 -0
  147. package/package.json +3 -4
  148. package/src/ColorComponent.tsx +2 -2
  149. package/src/MWaterContextComponent.tsx +1 -1
  150. package/src/{MWaterGlobalFiltersComponent.ts → MWaterGlobalFiltersComponent.tsx} +32 -33
  151. package/src/{MWaterLoaderComponent.ts → MWaterLoaderComponent.tsx} +17 -18
  152. package/src/TranslationsTabComponent.tsx +429 -0
  153. package/src/UndoStack.ts +14 -6
  154. package/src/dashboards/DashboardComponent.tsx +6 -5
  155. package/src/dashboards/DashboardDesign.ts +1 -1
  156. package/src/dashboards/ServerDashboardDataSource.ts +0 -31
  157. package/src/dashboards/SettingsModalComponent.tsx +27 -383
  158. package/src/datagrids/DatagridComponent.tsx +36 -2
  159. package/src/datagrids/DatagridDesignerComponent.tsx +241 -229
  160. package/src/datagrids/DatagridViewComponent.tsx +44 -7
  161. package/src/datagrids/OrderBysDesignerComponent.tsx +61 -70
  162. package/src/index.css +45 -2
  163. package/src/index.ts +5 -11
  164. package/src/layouts/blocks/BlocksDisplayComponent.tsx +60 -5
  165. package/src/maps/BufferLayer.ts +30 -263
  166. package/src/maps/BufferLayerDesign.ts +1 -1
  167. package/src/maps/BufferLayerDesignerComponent.tsx +2 -7
  168. package/src/maps/ChoroplethLayer.ts +30 -394
  169. package/src/maps/ChoroplethLayerDesign.ts +5 -2
  170. package/src/maps/ChoroplethLayerDesigner.tsx +169 -165
  171. package/src/maps/ClusterLayer.ts +0 -274
  172. package/src/maps/DirectMapDataSource.ts +2 -61
  173. package/src/maps/EditHoverOver.tsx +9 -5
  174. package/src/maps/GridLayer.ts +0 -224
  175. package/src/maps/HoverContent.tsx +1 -1
  176. package/src/maps/Layer.ts +1 -35
  177. package/src/maps/LeafletMapComponent.tsx +10 -19
  178. package/src/maps/MapComponent.tsx +448 -0
  179. package/src/maps/MapControlComponent.tsx +41 -0
  180. package/src/maps/MapDesign.ts +6 -0
  181. package/src/maps/MapDesignerComponent.tsx +18 -1
  182. package/src/maps/MapLayerDataSource.ts +0 -5
  183. package/src/maps/MapLayerViewDesignerComponent.ts +9 -2
  184. package/src/maps/MapLayersDesignerComponent.ts +4 -1
  185. package/src/maps/MapTranslationsTab.tsx +53 -0
  186. package/src/maps/MapUtils.ts +61 -1
  187. package/src/maps/MapViewComponent.tsx +2 -8
  188. package/src/maps/MarkersLayer.ts +101 -275
  189. package/src/maps/MarkersLayerDesign.ts +7 -1
  190. package/src/maps/MarkersLayerDesignerComponent.tsx +436 -0
  191. package/src/maps/ServerMapDataSource.ts +0 -31
  192. package/src/maps/SwitchableTileUrlLayer.tsx +0 -11
  193. package/src/maps/TileUrlLayer.tsx +0 -6
  194. package/src/maps/VectorMapViewComponent.tsx +15 -15
  195. package/src/maps/symbols/font-awesome/asterisk.png +0 -0
  196. package/src/maps/symbols/font-awesome/ban.png +0 -0
  197. package/src/maps/symbols/font-awesome/beer.png +0 -0
  198. package/src/maps/symbols/font-awesome/bell.png +0 -0
  199. package/src/maps/symbols/font-awesome/bolt.png +0 -0
  200. package/src/maps/symbols/font-awesome/building.png +0 -0
  201. package/src/maps/symbols/font-awesome/bullseye.png +0 -0
  202. package/src/maps/symbols/font-awesome/bus.png +0 -0
  203. package/src/maps/symbols/font-awesome/caret-up.png +0 -0
  204. package/src/maps/symbols/font-awesome/certificate.png +0 -0
  205. package/src/maps/symbols/font-awesome/check-circle.png +0 -0
  206. package/src/maps/symbols/font-awesome/check.png +0 -0
  207. package/src/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  208. package/src/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  209. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  210. package/src/maps/symbols/font-awesome/cloud.png +0 -0
  211. package/src/maps/symbols/font-awesome/comment.png +0 -0
  212. package/src/maps/symbols/font-awesome/crosshairs.png +0 -0
  213. package/src/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  214. package/src/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  215. package/src/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  216. package/src/maps/symbols/font-awesome/female.png +0 -0
  217. package/src/maps/symbols/font-awesome/file.png +0 -0
  218. package/src/maps/symbols/font-awesome/flag.png +0 -0
  219. package/src/maps/symbols/font-awesome/flask.png +0 -0
  220. package/src/maps/symbols/font-awesome/h-square.png +0 -0
  221. package/src/maps/symbols/font-awesome/home.png +0 -0
  222. package/src/maps/symbols/font-awesome/info-circle.png +0 -0
  223. package/src/maps/symbols/font-awesome/male.png +0 -0
  224. package/src/maps/symbols/font-awesome/medkit.png +0 -0
  225. package/src/maps/symbols/font-awesome/mobile.png +0 -0
  226. package/src/maps/symbols/font-awesome/plus-circle.png +0 -0
  227. package/src/maps/symbols/font-awesome/plus-square.png +0 -0
  228. package/src/maps/symbols/font-awesome/plus.png +0 -0
  229. package/src/maps/symbols/font-awesome/square.png +0 -0
  230. package/src/maps/symbols/font-awesome/star.png +0 -0
  231. package/src/maps/symbols/font-awesome/thumbs-down.png +0 -0
  232. package/src/maps/symbols/font-awesome/thumbs-up.png +0 -0
  233. package/src/maps/symbols/font-awesome/ticket.png +0 -0
  234. package/src/maps/symbols/font-awesome/times-circle.png +0 -0
  235. package/src/maps/symbols/font-awesome/times.png +0 -0
  236. package/src/maps/symbols/font-awesome/tint.png +0 -0
  237. package/src/maps/symbols/font-awesome/tree.png +0 -0
  238. package/src/maps/symbols/font-awesome/university.png +0 -0
  239. package/src/maps/symbols/font-awesome/usd.png +0 -0
  240. package/src/maps/symbols/font-awesome/user.png +0 -0
  241. package/src/maps/symbols/font-awesome/users.png +0 -0
  242. package/src/maps/symbols/font-awesome/wheelchair.png +0 -0
  243. package/src/maps/symbols/sdf-ize.sh +93 -0
  244. package/src/maps/vectorMaps.tsx +32 -53
  245. package/src/mwater_table_selection/IndicatorsListComponent.tsx +165 -37
  246. package/src/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.tsx +111 -0
  247. package/src/mwater_table_selection/MWaterCompleteTableSelectComponent.tsx +373 -37
  248. package/src/mwater_table_selection/MWaterTableSelectComponent.tsx +12 -8
  249. package/src/mwater_table_selection/MWaterWorkflowsSelectComponent.tsx +159 -0
  250. package/src/quickfilter/{QuickfiltersComponent.ts → QuickfiltersComponent.tsx} +165 -158
  251. package/src/quickfilter/TextLiteralComponent.tsx +197 -0
  252. package/src/widgets/MapWidget.tsx +11 -1
  253. package/src/widgets/text/ExprItemEditorComponent.tsx +83 -77
  254. package/src/widgets/text/ExprUpdateModalComponent.tsx +1 -0
  255. package/test/UndoStackTests.ts +52 -1
  256. package/.storybook/config.js +0 -7
  257. package/.storybook/head.html +0 -3
  258. package/.storybook/webpack.config.js +0 -15
  259. package/src/maps/BingLayer.ts +0 -146
  260. package/src/maps/MapComponent.ts +0 -312
  261. package/src/maps/MapControlComponent.ts +0 -46
  262. package/src/maps/MarkersLayerDesignerComponent.ts +0 -374
  263. package/src/maps/RasterMapViewComponent.ts +0 -345
  264. package/src/quickfilter/TextLiteralComponent.ts +0 -165
  265. package/stories/UpdateableComponent.js +0 -29
  266. package/stories/consoles.js +0 -202
  267. package/stories/dashboards.js +0 -217
  268. package/stories/datagridDesign.js +0 -114
  269. package/stories/datagrids.js +0 -69
  270. package/stories/dates.js +0 -80
  271. package/stories/exprcomponent.js +0 -43
  272. package/stories/index.js +0 -18
  273. package/stories/leaflet.js +0 -59
  274. package/stories/maps.js +0 -24
  275. package/stories/pivotChart.js +0 -235
@@ -28,7 +28,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const lodash_1 = __importDefault(require("lodash"));
30
30
  const react_1 = __importDefault(require("react"));
31
- const R = react_1.default.createElement;
32
31
  const immer_1 = require("immer");
33
32
  const expressions_ui_1 = require("@mwater/expressions-ui");
34
33
  const expressions_1 = require("@mwater/expressions");
@@ -41,7 +40,7 @@ const ZoomLevelsComponent_1 = __importDefault(require("./ZoomLevelsComponent"));
41
40
  const ui = __importStar(require("@mwater/react-library/lib/bootstrap"));
42
41
  const AdminScopeAndDetailLevelComponent_1 = __importDefault(require("./AdminScopeAndDetailLevelComponent"));
43
42
  const ScopeAndDetailLevelComponent_1 = __importDefault(require("./ScopeAndDetailLevelComponent"));
44
- const EditHoverOver_1 = __importDefault(require("./EditHoverOver"));
43
+ const EditHoverOver_1 = require("./EditHoverOver");
45
44
  // Designer for a choropleth layer
46
45
  class ChoroplethLayerDesigner extends react_1.default.Component {
47
46
  update(mutation) {
@@ -151,7 +150,8 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
151
150
  react_1.default.createElement(expressions_ui_2.TableSelectComponent, { schema: this.props.schema, value: this.props.design.table, onChange: this.handleTableChange, filter: this.props.design.filter, onFilterChange: this.handleFilterChange })));
152
151
  }
153
152
  renderRegionsTable() {
154
- let options = lodash_1.default.map(lodash_1.default.filter(this.props.schema.getTables(), table => table.id.startsWith("regions.")), table => ({ value: table.id, label: table.name.en }));
153
+ // Regions tables are either "regions." or "regions_<name>" with a shape column
154
+ let options = lodash_1.default.map(lodash_1.default.filter(this.props.schema.getTables(), table => table.id.startsWith("regions.") || (table.id.startsWith("regions_") && this.props.schema.getColumn(table.id, "shape") != null)), table => ({ value: table.id, label: expressions_1.ExprUtils.localizeString(table.name) }));
155
155
  const regionsTable = this.props.design.regionsTable || "admin_regions";
156
156
  return (react_1.default.createElement("div", { className: "mb-3" },
157
157
  react_1.default.createElement("label", { className: "text-muted" }, T `Regions Type`),
@@ -182,39 +182,27 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
182
182
  renderScopeAndDetailLevel() {
183
183
  const regionsTable = this.props.design.regionsTable || "admin_regions";
184
184
  if (regionsTable === "admin_regions") {
185
- return R(AdminScopeAndDetailLevelComponent_1.default, {
186
- schema: this.props.schema,
187
- dataSource: this.props.dataSource,
188
- scope: this.props.design.scope,
189
- scopeLevel: this.props.design.scopeLevel || 0,
190
- detailLevel: this.props.design.detailLevel,
191
- onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange
192
- });
185
+ return react_1.default.createElement(AdminScopeAndDetailLevelComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, scope: this.props.design.scope, scopeLevel: this.props.design.scopeLevel || 0, detailLevel: this.props.design.detailLevel, onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange });
193
186
  }
194
187
  else {
195
- return R(ScopeAndDetailLevelComponent_1.default, {
196
- schema: this.props.schema,
197
- dataSource: this.props.dataSource,
198
- scope: this.props.design.scope,
199
- scopeLevel: this.props.design.scopeLevel,
200
- detailLevel: this.props.design.detailLevel,
201
- onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange,
202
- regionsTable
203
- });
188
+ return react_1.default.createElement(ScopeAndDetailLevelComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, scope: this.props.design.scope, scopeLevel: this.props.design.scopeLevel, detailLevel: this.props.design.detailLevel, onScopeAndDetailLevelChange: this.handleScopeAndDetailLevelChange, regionsTable: regionsTable });
204
189
  }
205
190
  }
206
191
  renderDisplayNames() {
207
- return R("div", { className: "mb-3" }, react_1.default.createElement(ui.Checkbox, { value: this.props.design.displayNames, onChange: value => this.handleDisplayNamesChange(value) }, T `Display Region Names`));
192
+ return (react_1.default.createElement("div", { className: "mb-3" },
193
+ react_1.default.createElement(ui.Checkbox, { value: this.props.design.displayNames, onChange: value => this.handleDisplayNamesChange(value) }, T `Display Region Names`)));
208
194
  }
209
195
  renderColor() {
210
196
  // Only if plain
211
197
  if (this.props.design.regionMode !== "plain") {
212
198
  return null;
213
199
  }
214
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-tint" }), T `Fill Color`), R("div", null, R(ColorComponent_1.default, {
215
- color: this.props.design.color,
216
- onChange: this.handleColorChange
217
- })));
200
+ return (react_1.default.createElement("div", { className: "mb-3" },
201
+ react_1.default.createElement("label", { className: "text-muted" },
202
+ react_1.default.createElement("span", { className: "fas fa-tint" }),
203
+ T `Fill Color`),
204
+ react_1.default.createElement("div", null,
205
+ react_1.default.createElement(ColorComponent_1.default, { color: this.props.design.color, onChange: this.handleColorChange }))));
218
206
  }
219
207
  renderColorAxis() {
220
208
  // Not applicable if in plain mode, or if in indirect mode with no table
@@ -235,19 +223,12 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
235
223
  }
236
224
  }
237
225
  const table = this.props.design.table;
238
- return R("div", null, R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-tint" }), T `Color By Data`), R(AxisComponent_1.default, {
239
- schema: this.props.schema,
240
- dataSource: this.props.dataSource,
241
- table: this.props.design.table,
242
- types: ["text", "enum", "boolean", "date"],
243
- aggrNeed: "required",
244
- value: this.props.design.axes.color,
245
- defaultColor: this.props.design.color,
246
- showColorMap: true,
247
- onChange: this.handleColorAxisChange,
248
- allowExcludedValues: true,
249
- filters: filters
250
- })));
226
+ return (react_1.default.createElement("div", null,
227
+ react_1.default.createElement("div", { className: "mb-3" },
228
+ react_1.default.createElement("label", { className: "text-muted" },
229
+ react_1.default.createElement("span", { className: "fas fa-tint" }),
230
+ T `Color By Data`),
231
+ react_1.default.createElement(AxisComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, types: ["text", "enum", "boolean", "date"], aggrNeed: "required", value: this.props.design.axes.color, defaultColor: this.props.design.color, showColorMap: true, onChange: this.handleColorAxisChange, allowExcludedValues: true, filters: filters }))));
251
232
  }
252
233
  else {
253
234
  // direct mode
@@ -275,19 +256,12 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
275
256
  }
276
257
  });
277
258
  }
278
- return R("div", null, R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-tint" }), T `Color By Data`), R(AxisComponent_1.default, {
279
- schema: this.props.schema,
280
- dataSource: this.props.dataSource,
281
- table: regionsTable,
282
- types: ["text", "enum", "boolean", "date"],
283
- aggrNeed: "none",
284
- value: this.props.design.axes.color,
285
- defaultColor: this.props.design.color,
286
- showColorMap: true,
287
- onChange: this.handleColorAxisChange,
288
- allowExcludedValues: true,
289
- filters: filters
290
- })));
259
+ return (react_1.default.createElement("div", null,
260
+ react_1.default.createElement("div", { className: "mb-3" },
261
+ react_1.default.createElement("label", { className: "text-muted" },
262
+ react_1.default.createElement("span", { className: "fas fa-tint" }),
263
+ T `Color By Data`),
264
+ react_1.default.createElement(AxisComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: regionsTable, types: ["text", "enum", "boolean", "date"], aggrNeed: "none", value: this.props.design.axes.color, defaultColor: this.props.design.color, showColorMap: true, onChange: this.handleColorAxisChange, allowExcludedValues: true, filters: filters }))));
291
265
  }
292
266
  }
293
267
  // renderLabelAxis: ->
@@ -309,33 +283,30 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
309
283
  // showColorMap: true
310
284
  // onChange: @handleColorAxisChange)
311
285
  renderFillOpacity() {
312
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, T `Fill Opacity: ${(this.props.design.fillOpacity * this.props.design.fillOpacity * 100).toFixed(0)}%`), ": ", R(rc_slider_1.default, {
313
- min: 0,
314
- max: 100,
315
- step: 1,
316
- tipTransitionName: "rc-slider-tooltip-zoom-down",
317
- value: Math.round(this.props.design.fillOpacity * this.props.design.fillOpacity * 100),
318
- onChange: (val) => this.handleFillOpacityChange(Math.sqrt(val / 100))
319
- }));
286
+ return (react_1.default.createElement("div", { className: "mb-3" },
287
+ react_1.default.createElement("label", { className: "text-muted" }, T `Fill Opacity: ${(this.props.design.fillOpacity * this.props.design.fillOpacity * 100).toFixed(0)}%`),
288
+ ": ",
289
+ react_1.default.createElement(rc_slider_1.default, { min: 0, max: 100, step: 1, tipTransitionName: "rc-slider-tooltip-zoom-down", value: Math.round(this.props.design.fillOpacity * this.props.design.fillOpacity * 100), onChange: (val) => this.handleFillOpacityChange(Math.sqrt(val / 100)) })));
320
290
  }
321
291
  renderBorderColor() {
322
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-tint" }), T `Border Color`), R("div", null, R(ColorComponent_1.default, {
323
- color: this.props.design.borderColor || "#000",
324
- onChange: this.handleBorderColorChange
325
- })));
292
+ return (react_1.default.createElement("div", { className: "mb-3" },
293
+ react_1.default.createElement("label", { className: "text-muted" },
294
+ react_1.default.createElement("span", { className: "fas fa-tint" }),
295
+ T `Border Color`),
296
+ react_1.default.createElement("div", null,
297
+ react_1.default.createElement(ColorComponent_1.default, { color: this.props.design.borderColor || "#000", onChange: this.handleBorderColorChange }))));
326
298
  }
327
299
  renderFilter() {
328
300
  // If not in indirect mode with table, hide
329
301
  if (this.props.design.regionMode !== "indirect" || !this.props.design.table) {
330
302
  return null;
331
303
  }
332
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-filter" }), T `Filters`), R("div", { style: { marginLeft: 8 } }, R(expressions_ui_1.FilterExprComponent, {
333
- schema: this.props.schema,
334
- dataSource: this.props.dataSource,
335
- onChange: this.handleFilterChange,
336
- table: this.props.design.table,
337
- value: this.props.design.filter
338
- })));
304
+ return (react_1.default.createElement("div", { className: "mb-3" },
305
+ react_1.default.createElement("label", { className: "text-muted" },
306
+ react_1.default.createElement("span", { className: "fas fa-filter" }),
307
+ T `Filters`),
308
+ react_1.default.createElement("div", { style: { marginLeft: 8 } },
309
+ react_1.default.createElement(expressions_ui_1.FilterExprComponent, { schema: this.props.schema, dataSource: this.props.dataSource, onChange: this.handleFilterChange, table: this.props.design.table, value: this.props.design.filter }))));
339
310
  }
340
311
  renderPopup() {
341
312
  // If not in indirect mode with table, hide
@@ -347,15 +318,7 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
347
318
  if (this.props.design.adminRegionExpr) {
348
319
  defaultPopupFilterJoins[this.props.design.table] = this.props.design.adminRegionExpr;
349
320
  }
350
- return R(EditPopupComponent_1.default, {
351
- design: this.props.design,
352
- onDesignChange: this.props.onDesignChange,
353
- schema: this.props.schema,
354
- dataSource: this.props.dataSource,
355
- table: this.props.design.table,
356
- idTable: regionsTable,
357
- defaultPopupFilterJoins
358
- });
321
+ return react_1.default.createElement(EditPopupComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange, schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, idTable: regionsTable, defaultPopupFilterJoins: defaultPopupFilterJoins });
359
322
  }
360
323
  renderHoverOver() {
361
324
  // If not in indirect mode with table, hide
@@ -367,18 +330,24 @@ class ChoroplethLayerDesigner extends react_1.default.Component {
367
330
  if (this.props.design.adminRegionExpr) {
368
331
  defaultPopupFilterJoins[this.props.design.table] = this.props.design.adminRegionExpr;
369
332
  }
370
- return R(EditHoverOver_1.default, {
371
- design: this.props.design,
372
- onDesignChange: this.props.onDesignChange,
373
- schema: this.props.schema,
374
- dataSource: this.props.dataSource,
375
- table: this.props.design.table,
376
- idTable: regionsTable,
377
- defaultPopupFilterJoins
378
- });
333
+ 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: regionsTable, defaultPopupFilterJoins: defaultPopupFilterJoins, aggrStatuses: ["individual", "aggregate", "literal"] });
379
334
  }
380
335
  render() {
381
- return R("div", null, this.renderRegionMode(), this.renderRegionsTable(), this.renderTable(), this.renderAdminRegionExpr(), this.renderScopeAndDetailLevel(), this.renderDisplayNames(), this.renderColor(), this.renderColorAxis(), this.renderFillOpacity(), this.renderBorderColor(), this.renderFilter(), this.renderPopup(), this.renderHoverOver(), R(ZoomLevelsComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange }));
336
+ return (react_1.default.createElement("div", null,
337
+ this.renderRegionMode(),
338
+ this.renderRegionsTable(),
339
+ this.renderTable(),
340
+ this.renderAdminRegionExpr(),
341
+ this.renderScopeAndDetailLevel(),
342
+ this.renderDisplayNames(),
343
+ this.renderColor(),
344
+ this.renderColorAxis(),
345
+ this.renderFillOpacity(),
346
+ this.renderBorderColor(),
347
+ this.renderFilter(),
348
+ this.renderPopup(),
349
+ this.renderHoverOver(),
350
+ react_1.default.createElement(ZoomLevelsComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange })));
382
351
  }
383
352
  }
384
353
  exports.default = ChoroplethLayerDesigner;
@@ -9,15 +9,6 @@ export default class ClusterLayer extends Layer<ClusterLayerDesign> {
9
9
  getLayerDefinitionType(): "VectorTile";
10
10
  getVectorTile(design: ClusterLayerDesign, sourceId: string, schema: Schema, filters: JsonQLFilter[], opacity: number): VectorTileDef;
11
11
  createJsonQL(design: ClusterLayerDesign, schema: Schema, filters: JsonQLFilter[]): JsonQLQuery;
12
- getJsonQLCss(design: ClusterLayerDesign, schema: Schema, filters: JsonQLFilter[]): {
13
- layers: {
14
- id: string;
15
- jsonql: JsonQLQuery;
16
- }[];
17
- css: string;
18
- };
19
- createMapnikJsonQL(design: ClusterLayerDesign, schema: Schema, filters: JsonQLFilter[]): JsonQLQuery;
20
- createCss(design: ClusterLayerDesign, schema: Schema): string;
21
12
  getBounds(design: ClusterLayerDesign, schema: Schema, dataSource: DataSource, filters: JsonQLFilter[], callback: any): void;
22
13
  getMinZoom(design: ClusterLayerDesign): number | undefined;
23
14
  getMaxZoom(design: ClusterLayerDesign): number;
@@ -295,256 +295,6 @@ class ClusterLayer extends Layer_1.default {
295
295
  };
296
296
  return query;
297
297
  }
298
- // Gets the layer definition as JsonQL + CSS in format:
299
- // {
300
- // layers: array of { id: layer id, jsonql: jsonql that includes "the_webmercator_geom" as a column }
301
- // css: carto css
302
- // interactivity: (optional) { layer: id of layer, fields: array of field names }
303
- // }
304
- // arguments:
305
- // design: design of layer
306
- // schema: schema to use
307
- // filters: array of filters to apply. Each is { table: table id, jsonql: jsonql condition with {alias} for tableAlias. Use injectAlias to put in table alias
308
- getJsonQLCss(design, schema, filters) {
309
- // Create design
310
- const layerDef = {
311
- layers: [{ id: "layer0", jsonql: this.createMapnikJsonQL(design, schema, filters) }],
312
- css: this.createCss(design, schema)
313
- // interactivity: {
314
- // layer: "layer0"
315
- // fields: ["id"]
316
- // }
317
- };
318
- return layerDef;
319
- }
320
- createMapnikJsonQL(design, schema, filters) {
321
- const axisBuilder = new AxisBuilder_1.default({ schema });
322
- const exprCompiler = new expressions_1.ExprCompiler(schema);
323
- /*
324
- Query:
325
- Works by first snapping to grid and then clustering the clusters with slower DBSCAN method
326
-
327
- select
328
- ST_Centroid(ST_Collect(center)) as the_geom_webmercator,
329
- sum(cnt) as cnt,
330
- log(sum(cnt)) * 6 + 14 as size from
331
- (
332
- select
333
- ST_ClusterDBSCAN(center, (!pixel_width!*30 + !pixel_height!*30)/2, 1) over () as clust,
334
- sub1.center as center,
335
- cnt as cnt
336
- from
337
- (
338
- select
339
- count(*) as cnt,
340
- ST_Centroid(ST_Collect(<geometry axis>)) as center,
341
- round(ST_XMin(<geometry axis>) / (!pixel_width!*40)) as gridx,
342
- round(ST_YMin(<geometry axis>) / (!pixel_width!*40)) as gridy,
343
- from <table> as main
344
- where <geometry axis> && !bbox!
345
- and <geometry axis> is not null
346
- and <other filters>
347
- group by 3, 4
348
- ) as sub1
349
- ) as sub2
350
- group by sub2.clust
351
-
352
- */
353
- // Compile geometry axis
354
- let geometryExpr = axisBuilder.compileAxis({ axis: design.axes.geometry, tableAlias: "main" });
355
- // ST_Centroid(ST_Collect(<geometry axis>))
356
- let centerExpr = {
357
- type: "op",
358
- op: "ST_Centroid",
359
- exprs: [
360
- {
361
- type: "op",
362
- op: "ST_Collect",
363
- exprs: [geometryExpr]
364
- }
365
- ]
366
- };
367
- const gridXExpr = {
368
- type: "op",
369
- op: "round",
370
- exprs: [
371
- {
372
- type: "op",
373
- op: "/",
374
- exprs: [
375
- { type: "op", op: "ST_XMin", exprs: [geometryExpr] },
376
- { type: "op", op: "*", exprs: [{ type: "token", token: "!pixel_width!" }, 40] }
377
- ]
378
- }
379
- ]
380
- };
381
- const gridYExpr = {
382
- type: "op",
383
- op: "round",
384
- exprs: [
385
- {
386
- type: "op",
387
- op: "/",
388
- exprs: [
389
- { type: "op", op: "ST_YMin", exprs: [geometryExpr] },
390
- { type: "op", op: "*", exprs: [{ type: "token", token: "!pixel_height!" }, 5] }
391
- ]
392
- }
393
- ]
394
- };
395
- // Create inner query
396
- const innerQuery = {
397
- type: "query",
398
- selects: [
399
- { type: "select", expr: { type: "op", op: "count", exprs: [] }, alias: "cnt" },
400
- { type: "select", expr: centerExpr, alias: "center" },
401
- { type: "select", expr: gridXExpr, alias: "gridx" },
402
- { type: "select", expr: gridYExpr, alias: "gridy" }
403
- ],
404
- from: exprCompiler.compileTable(design.table, "main"),
405
- groupBy: [3, 4]
406
- };
407
- // Create filters. First ensure geometry and limit to bounding box
408
- let whereClauses = [
409
- {
410
- type: "op",
411
- op: "&&",
412
- exprs: [geometryExpr, { type: "token", token: "!bbox!" }]
413
- }
414
- ];
415
- // Then add filters baked into layer
416
- if (design.filter) {
417
- whereClauses.push(exprCompiler.compileExpr({ expr: design.filter || null, tableAlias: "main" }));
418
- }
419
- // Then add extra filters passed in, if relevant
420
- // Get relevant filters
421
- const relevantFilters = lodash_1.default.where(filters, { table: design.table });
422
- for (let filter of relevantFilters) {
423
- whereClauses.push((0, expressions_1.injectTableAlias)(filter.jsonql, "main"));
424
- }
425
- whereClauses = lodash_1.default.compact(whereClauses);
426
- // Wrap if multiple
427
- if (whereClauses.length > 1) {
428
- innerQuery.where = { type: "op", op: "and", exprs: whereClauses };
429
- }
430
- else {
431
- innerQuery.where = whereClauses[0];
432
- }
433
- // Create next level
434
- // select
435
- // ST_ClusterDBSCAN(center, (!pixel_width!*30 + !pixel_height!*30)/2, 1) over () as clust,
436
- // sub1.center as center,
437
- // cnt as cnt from () as innerquery
438
- const clustExpr = {
439
- type: "op",
440
- op: "ST_ClusterDBSCAN",
441
- exprs: [
442
- { type: "field", tableAlias: "innerquery", column: "center" },
443
- {
444
- type: "op",
445
- op: "/",
446
- exprs: [
447
- {
448
- type: "op",
449
- op: "+",
450
- exprs: [
451
- { type: "op", op: "*", exprs: [{ type: "token", token: "!pixel_width!" }, 30] },
452
- { type: "op", op: "*", exprs: [{ type: "token", token: "!pixel_height!" }, 30] }
453
- ]
454
- },
455
- 2
456
- ]
457
- },
458
- 1
459
- ],
460
- over: {}
461
- };
462
- const inner2Query = {
463
- type: "query",
464
- selects: [
465
- { type: "select", expr: clustExpr, alias: "clust" },
466
- { type: "select", expr: { type: "field", tableAlias: "innerquery", column: "center" }, alias: "center" },
467
- { type: "select", expr: { type: "field", tableAlias: "innerquery", column: "cnt" }, alias: "cnt" }
468
- ],
469
- from: { type: "subquery", query: innerQuery, alias: "innerquery" }
470
- };
471
- // Create final level
472
- // ST_Centroid(ST_Collect(center)) as the_geom_webmercator,
473
- // sum(cnt) as cnt,
474
- // log(sum(cnt)) * 6 + 14 as size from
475
- // ST_Centroid(ST_Collect(center))
476
- centerExpr = {
477
- type: "op",
478
- op: "ST_Centroid",
479
- exprs: [
480
- {
481
- type: "op",
482
- op: "ST_Collect",
483
- exprs: [{ type: "field", tableAlias: "inner2query", column: "center" }]
484
- }
485
- ]
486
- };
487
- const cntExpr = {
488
- type: "op",
489
- op: "sum",
490
- exprs: [{ type: "field", tableAlias: "inner2query", column: "cnt" }]
491
- };
492
- const sizeExpr = {
493
- type: "op",
494
- op: "+",
495
- exprs: [{ type: "op", op: "*", exprs: [{ type: "op", op: "log", exprs: [cntExpr] }, 6] }, 14]
496
- };
497
- const query = {
498
- type: "query",
499
- selects: [
500
- { type: "select", expr: centerExpr, alias: "the_geom_webmercator" },
501
- { type: "select", expr: cntExpr, alias: "cnt" },
502
- { type: "select", expr: sizeExpr, alias: "size" }
503
- ],
504
- from: { type: "subquery", query: inner2Query, alias: "inner2query" },
505
- groupBy: [{ type: "field", tableAlias: "inner2query", column: "clust" }]
506
- };
507
- return query;
508
- }
509
- createCss(design, schema) {
510
- const css = `\
511
- #layer0 [cnt>1] {
512
- marker-width: [size];
513
- marker-line-color: white;
514
- marker-line-width: 4;
515
- marker-line-opacity: 0.6;
516
- marker-placement: point;
517
- marker-type: ellipse;
518
- marker-allow-overlap: true;
519
- marker-fill: ` +
520
- (design.fillColor || "#337ab7") +
521
- `;
522
- }
523
-
524
- #layer0::l1 [cnt>1] {
525
- text-name: [cnt];
526
- text-face-name: 'Arial Bold';
527
- text-allow-overlap: true;
528
- text-fill: ` +
529
- (design.textColor || "white") +
530
- `;
531
- }
532
-
533
- #layer0 [cnt=1] {
534
- marker-width: 10;
535
- marker-line-color: white;
536
- marker-line-width: 2;
537
- marker-line-opacity: 0.6;
538
- marker-placement: point;
539
- marker-type: ellipse;
540
- marker-allow-overlap: true;
541
- marker-fill: ` +
542
- (design.fillColor || "#337ab7") +
543
- `;
544
- }\
545
- `;
546
- return css;
547
- }
548
298
  // # Called when the interactivity grid is clicked.
549
299
  // # arguments:
550
300
  // # ev: { data: interactivty data e.g. `{ id: 123 }` }
@@ -35,7 +35,6 @@ const LayerFactory_1 = __importDefault(require("./LayerFactory"));
35
35
  const MapBoundsCalculator_1 = __importDefault(require("./MapBoundsCalculator"));
36
36
  const DirectWidgetDataSource_1 = __importDefault(require("../widgets/DirectWidgetDataSource"));
37
37
  const compressJson_1 = __importDefault(require("../compressJson"));
38
- const querystring_1 = __importDefault(require("querystring"));
39
38
  const QuickfilterUtils = __importStar(require("../quickfilter/QuickfilterUtils"));
40
39
  const react_1 = require("react");
41
40
  const useStableCallback_1 = require("@mwater/react-library/lib/useStableCallback");
@@ -175,26 +174,7 @@ class DirectLayerDataSource {
175
174
  if (layer.getLayerDefinitionType() === "TileUrl") {
176
175
  return layer.getTileUrl(design, filters);
177
176
  }
178
- // Get JsonQLCss
179
- const jsonqlCss = layer.getJsonQLCss(design, this.options.schema, filters);
180
- return this.createUrl("png", jsonqlCss);
181
- }
182
- // Get the url for the interactivity tiles with the specified filters applied
183
- // Called with (design, filters) where design is the design of the layer and filters are filters to apply. Returns URL
184
- getUtfGridUrl(design, filters) {
185
- // Create layer
186
- const layer = LayerFactory_1.default.createLayer(this.options.layerView.type);
187
- // Handle special cases
188
- if (this.options.layerView.type === "MWaterServer") {
189
- return this.createLegacyUrl(design, "grid.json", filters);
190
- }
191
- // If layer has tiles url directly available
192
- if (layer.getLayerDefinitionType() === "TileUrl") {
193
- return layer.getUtfGridUrl(design, filters);
194
- }
195
- // Get JsonQLCss
196
- const jsonqlCss = layer.getJsonQLCss(design, this.options.schema, filters);
197
- return this.createUrl("grid.json", jsonqlCss);
177
+ throw new Error("Layer type not supported: " + this.options.layerView.type);
198
178
  }
199
179
  // Gets widget data source for a popup widget
200
180
  getPopupWidgetDataSource(design, widgetId) {
@@ -213,36 +193,9 @@ class DirectLayerDataSource {
213
193
  });
214
194
  }
215
195
  // Create query string
216
- createUrl(extension, jsonqlCss) {
217
- const query = {
218
- type: "jsonql",
219
- design: (0, compressJson_1.default)(jsonqlCss)
220
- };
221
- if (this.options.client) {
222
- query.client = this.options.client;
223
- }
224
- // Make URL change when cache expired
225
- const cacheExpiry = this.options.dataSource.getCacheExpiry();
226
- if (cacheExpiry) {
227
- query.cacheExpiry = cacheExpiry;
228
- }
229
- let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?` + querystring_1.default.stringify(query);
230
- // Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
231
- // Used to speed queries
232
- if (url.match(/^https:\/\/api\.mwater\.co\//)) {
233
- url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
234
- }
235
- return url;
236
- }
237
- // Create query string
238
196
  createLegacyUrl(design, extension, filters) {
239
197
  let where;
240
198
  let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?type=${design.type}&radius=1000`;
241
- // Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
242
- // Used to speed queries
243
- if (url.match(/^https:\/\/api\.mwater\.co\//)) {
244
- url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
245
- }
246
199
  if (this.options.client) {
247
200
  url += `&client=${this.options.client}`;
248
201
  }
@@ -1,4 +1,4 @@
1
- import { DataSource, Schema } from "@mwater/expressions";
1
+ import { AggrStatus, DataSource, Schema } from "@mwater/expressions";
2
2
  import React from "react";
3
3
  export interface EditHoverOverProps {
4
4
  /** Schema to use */
@@ -13,6 +13,7 @@ export interface EditHoverOverProps {
13
13
  /** Table of the row that join is to. Usually same as table except for choropleth maps */
14
14
  idTable: string;
15
15
  defaultPopupFilterJoins: any;
16
+ /** Aggr statuses to allow in hover over expressions */
17
+ aggrStatuses: AggrStatus[];
16
18
  }
17
- declare function EditHoverOver(props: EditHoverOverProps): React.JSX.Element;
18
- export default EditHoverOver;
19
+ export declare function EditHoverOver(props: EditHoverOverProps): React.JSX.Element;
@@ -26,6 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.EditHoverOver = EditHoverOver;
29
30
  const lodash_1 = require("lodash");
30
31
  const expressions_1 = require("@mwater/expressions");
31
32
  const expressions_ui_1 = require("@mwater/expressions-ui");
@@ -84,7 +85,7 @@ function EditHoverOver(props) {
84
85
  react_1.default.createElement("th", null, T `Value`),
85
86
  react_1.default.createElement("th", { style: { width: "1%", whiteSpace: "nowrap" } }, T `Format`),
86
87
  react_1.default.createElement("th", { style: { width: "1%", whiteSpace: "nowrap" } }))),
87
- react_1.default.createElement("tbody", null, draftItems?.map((item) => (react_1.default.createElement(HoverOverItemEditor, { key: item.id, schema: schema, dataSource: dataSource, table: table, onItemChange: handleItemChange, onItemDelete: handleItemDelete, item: item })))))),
88
+ react_1.default.createElement("tbody", null, draftItems?.map((item) => (react_1.default.createElement(HoverOverItemEditor, { key: item.id, schema: schema, dataSource: dataSource, table: table, onItemChange: handleItemChange, onItemDelete: handleItemDelete, item: item, aggrStatuses: props.aggrStatuses })))))),
88
89
  react_1.default.createElement("button", { className: "btn btn-link", onClick: handleAddItem },
89
90
  react_1.default.createElement("span", { className: "fas fa-plus me-1" }),
90
91
  T `Add Item`)))));
@@ -110,10 +111,9 @@ function HoverOverItemEditor(props) {
110
111
  react_1.default.createElement("td", { className: "align-middle" },
111
112
  react_1.default.createElement(ui.TextInput, { value: item.label, onChange: value => onItemChange({ ...item, label: value }) })),
112
113
  react_1.default.createElement("td", { className: "align-middle" },
113
- react_1.default.createElement(expressions_ui_1.ExprComponent, { schema: schema, dataSource: dataSource, table: table, types: ["text", "number", "enum", "boolean", "date", "datetime", "id"], onChange: expr => onItemChange({ ...item, value: expr }), value: item.value ?? null, aggrStatuses: ["individual", "literal", "aggregate"] })),
114
+ react_1.default.createElement(expressions_ui_1.ExprComponent, { schema: schema, dataSource: dataSource, table: table, types: ["text", "number", "enum", "boolean", "date", "datetime", "id"], onChange: expr => onItemChange({ ...item, value: expr }), value: item.value ?? null, aggrStatuses: props.aggrStatuses })),
114
115
  react_1.default.createElement("td", { className: "align-middle", style: { width: "1%", whiteSpace: "nowrap" } }, renderFormat()),
115
116
  react_1.default.createElement("td", { className: "align-middle", style: { width: "1%", whiteSpace: "nowrap" } },
116
117
  react_1.default.createElement("button", { className: "btn btn-link", onClick: () => onItemDelete(item) },
117
118
  react_1.default.createElement("span", { className: "fa fa-close" })))));
118
119
  }
119
- exports.default = EditHoverOver;
@@ -1,7 +1,6 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import Layer, { LegendOptions, VectorTileDef } from "./Layer";
3
3
  import { Schema, DataSource } from "@mwater/expressions";
4
- import { LayerDefinition } from "./maps";
5
4
  import { JsonQLFilter } from "../index";
6
5
  import GridLayerDesign from "./GridLayerDesign";
7
6
  import { JsonQLQuery } from "@mwater/jsonql";
@@ -11,20 +10,6 @@ export default class GridLayer extends Layer<GridLayerDesign> {
11
10
  getLayerDefinitionType(): "VectorTile";
12
11
  getVectorTile(design: GridLayerDesign, sourceId: string, schema: Schema, filters: JsonQLFilter[], opacity: number): VectorTileDef;
13
12
  createJsonQL(design: GridLayerDesign, schema: Schema, filters: JsonQLFilter[]): JsonQLQuery;
14
- /** Gets the layer definition as JsonQL + CSS in format:
15
- * {
16
- * layers: array of { id: layer id, jsonql: jsonql that includes "the_webmercator_geom" as a column }
17
- * css: carto css
18
- * interactivity: (optional) { layer: id of layer, fields: array of field names }
19
- * }
20
- * arguments:
21
- * design: design of layer
22
- * schema: schema to use
23
- * filters: array of filters to apply
24
- */
25
- getJsonQLCss(design: GridLayerDesign, schema: Schema, filters: JsonQLFilter[]): LayerDefinition;
26
- createMapnikJsonQL(design: GridLayerDesign, schema: Schema, filters: JsonQLFilter[]): JsonQLQuery;
27
- createCss(design: GridLayerDesign, schema: Schema, filters: JsonQLFilter[]): string;
28
13
  getMinZoom(design: GridLayerDesign): number | undefined;
29
14
  getMaxZoom(design: GridLayerDesign): number;
30
15
  /** Get the legend to be optionally displayed on the map. Returns