@mwater/visualization 5.5.0 → 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 (222) hide show
  1. package/lib/MWaterContextComponent.d.ts +1 -1
  2. package/lib/MWaterGlobalFiltersComponent.d.ts +2 -2
  3. package/lib/MWaterGlobalFiltersComponent.js +11 -20
  4. package/lib/MWaterLoaderComponent.d.ts +4 -13
  5. package/lib/MWaterLoaderComponent.js +2 -11
  6. package/lib/UndoStack.d.ts +2 -1
  7. package/lib/UndoStack.js +12 -6
  8. package/lib/dashboards/DashboardComponent.js +5 -4
  9. package/lib/dashboards/DashboardDesign.d.ts +1 -1
  10. package/lib/dashboards/ServerDashboardDataSource.js +0 -10
  11. package/lib/dashboards/SettingsModalComponent.js +1 -1
  12. package/lib/datagrids/DatagridComponent.js +22 -2
  13. package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -3
  14. package/lib/datagrids/DatagridDesignerComponent.js +108 -120
  15. package/lib/datagrids/DatagridViewComponent.js +3 -2
  16. package/lib/datagrids/OrderBysDesignerComponent.d.ts +7 -7
  17. package/lib/datagrids/OrderBysDesignerComponent.js +19 -28
  18. package/lib/index.css +45 -2
  19. package/lib/index.d.ts +5 -5
  20. package/lib/index.js +2 -3
  21. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +8 -1
  22. package/lib/layouts/blocks/BlocksDisplayComponent.js +46 -4
  23. package/lib/maps/BufferLayer.js +12 -0
  24. package/lib/maps/BufferLayerDesign.d.ts +1 -1
  25. package/lib/maps/BufferLayerDesignerComponent.js +2 -2
  26. package/lib/maps/ChoroplethLayer.js +12 -0
  27. package/lib/maps/ChoroplethLayerDesign.d.ts +5 -2
  28. package/lib/maps/ChoroplethLayerDesigner.d.ts +10 -32
  29. package/lib/maps/ChoroplethLayerDesigner.js +58 -89
  30. package/lib/maps/DirectMapDataSource.js +0 -10
  31. package/lib/maps/EditHoverOver.d.ts +4 -3
  32. package/lib/maps/EditHoverOver.js +3 -3
  33. package/lib/maps/HoverContent.js +1 -1
  34. package/lib/maps/LeafletMapComponent.js +10 -19
  35. package/lib/maps/MapComponent.js +0 -1
  36. package/lib/maps/MapUtils.js +10 -1
  37. package/lib/maps/MarkersLayer.js +18 -2
  38. package/lib/maps/MarkersLayerDesign.d.ts +1 -1
  39. package/lib/maps/MarkersLayerDesignerComponent.d.ts +12 -41
  40. package/lib/maps/MarkersLayerDesignerComponent.js +81 -111
  41. package/lib/maps/ServerMapDataSource.js +0 -10
  42. package/lib/maps/VectorMapViewComponent.js +1 -9
  43. package/lib/maps/symbols/font-awesome/asterisk.png +0 -0
  44. package/lib/maps/symbols/font-awesome/ban.png +0 -0
  45. package/lib/maps/symbols/font-awesome/beer.png +0 -0
  46. package/lib/maps/symbols/font-awesome/bell.png +0 -0
  47. package/lib/maps/symbols/font-awesome/bolt.png +0 -0
  48. package/lib/maps/symbols/font-awesome/building.png +0 -0
  49. package/lib/maps/symbols/font-awesome/bullseye.png +0 -0
  50. package/lib/maps/symbols/font-awesome/bus.png +0 -0
  51. package/lib/maps/symbols/font-awesome/caret-up.png +0 -0
  52. package/lib/maps/symbols/font-awesome/certificate.png +0 -0
  53. package/lib/maps/symbols/font-awesome/check-circle.png +0 -0
  54. package/lib/maps/symbols/font-awesome/check.png +0 -0
  55. package/lib/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  56. package/lib/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  57. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  58. package/lib/maps/symbols/font-awesome/cloud.png +0 -0
  59. package/lib/maps/symbols/font-awesome/comment.png +0 -0
  60. package/lib/maps/symbols/font-awesome/crosshairs.png +0 -0
  61. package/lib/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  62. package/lib/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  63. package/lib/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  64. package/lib/maps/symbols/font-awesome/female.png +0 -0
  65. package/lib/maps/symbols/font-awesome/file.png +0 -0
  66. package/lib/maps/symbols/font-awesome/flag.png +0 -0
  67. package/lib/maps/symbols/font-awesome/flask.png +0 -0
  68. package/lib/maps/symbols/font-awesome/h-square.png +0 -0
  69. package/lib/maps/symbols/font-awesome/home.png +0 -0
  70. package/lib/maps/symbols/font-awesome/info-circle.png +0 -0
  71. package/lib/maps/symbols/font-awesome/male.png +0 -0
  72. package/lib/maps/symbols/font-awesome/medkit.png +0 -0
  73. package/lib/maps/symbols/font-awesome/mobile.png +0 -0
  74. package/lib/maps/symbols/font-awesome/plus-circle.png +0 -0
  75. package/lib/maps/symbols/font-awesome/plus-square.png +0 -0
  76. package/lib/maps/symbols/font-awesome/plus.png +0 -0
  77. package/lib/maps/symbols/font-awesome/square.png +0 -0
  78. package/lib/maps/symbols/font-awesome/star.png +0 -0
  79. package/lib/maps/symbols/font-awesome/thumbs-down.png +0 -0
  80. package/lib/maps/symbols/font-awesome/thumbs-up.png +0 -0
  81. package/lib/maps/symbols/font-awesome/ticket.png +0 -0
  82. package/lib/maps/symbols/font-awesome/times-circle.png +0 -0
  83. package/lib/maps/symbols/font-awesome/times.png +0 -0
  84. package/lib/maps/symbols/font-awesome/tint.png +0 -0
  85. package/lib/maps/symbols/font-awesome/tree.png +0 -0
  86. package/lib/maps/symbols/font-awesome/university.png +0 -0
  87. package/lib/maps/symbols/font-awesome/usd.png +0 -0
  88. package/lib/maps/symbols/font-awesome/user.png +0 -0
  89. package/lib/maps/symbols/font-awesome/users.png +0 -0
  90. package/lib/maps/symbols/font-awesome/wheelchair.png +0 -0
  91. package/lib/maps/symbols/sdf-ize.sh +93 -0
  92. package/lib/maps/vectorMaps.d.ts +1 -0
  93. package/lib/maps/vectorMaps.js +20 -36
  94. package/lib/mwater_table_selection/IndicatorsListComponent.d.ts +4 -2
  95. package/lib/mwater_table_selection/IndicatorsListComponent.js +103 -34
  96. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.d.ts +18 -0
  97. package/lib/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.js +80 -0
  98. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.d.ts +26 -0
  99. package/lib/mwater_table_selection/MWaterCompleteTableSelectComponent.js +237 -51
  100. package/lib/mwater_table_selection/MWaterTableSelectComponent.d.ts +2 -2
  101. package/lib/mwater_table_selection/MWaterTableSelectComponent.js +9 -4
  102. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.d.ts +19 -0
  103. package/lib/mwater_table_selection/MWaterWorkflowsSelectComponent.js +111 -0
  104. package/lib/quickfilter/QuickfiltersComponent.d.ts +3 -102
  105. package/lib/quickfilter/QuickfiltersComponent.js +53 -110
  106. package/lib/quickfilter/TextLiteralComponent.d.ts +23 -47
  107. package/lib/quickfilter/TextLiteralComponent.js +85 -82
  108. package/lib/widgets/MapWidget.js +4 -2
  109. package/lib/widgets/text/ExprItemEditorComponent.d.ts +3 -8
  110. package/lib/widgets/text/ExprItemEditorComponent.js +36 -33
  111. package/lib/widgets/text/ExprUpdateModalComponent.d.ts +1 -0
  112. package/package.json +2 -3
  113. package/src/MWaterContextComponent.tsx +1 -1
  114. package/src/{MWaterGlobalFiltersComponent.ts → MWaterGlobalFiltersComponent.tsx} +32 -33
  115. package/src/{MWaterLoaderComponent.ts → MWaterLoaderComponent.tsx} +17 -18
  116. package/src/UndoStack.ts +14 -6
  117. package/src/dashboards/DashboardComponent.tsx +5 -4
  118. package/src/dashboards/DashboardDesign.ts +1 -1
  119. package/src/dashboards/ServerDashboardDataSource.ts +0 -12
  120. package/src/dashboards/SettingsModalComponent.tsx +1 -1
  121. package/src/datagrids/DatagridComponent.tsx +30 -2
  122. package/src/datagrids/DatagridDesignerComponent.tsx +241 -229
  123. package/src/datagrids/DatagridViewComponent.tsx +3 -2
  124. package/src/datagrids/OrderBysDesignerComponent.tsx +61 -70
  125. package/src/index.css +45 -2
  126. package/src/index.ts +5 -11
  127. package/src/layouts/blocks/BlocksDisplayComponent.tsx +60 -5
  128. package/src/maps/BufferLayer.ts +14 -1
  129. package/src/maps/BufferLayerDesign.ts +1 -1
  130. package/src/maps/BufferLayerDesignerComponent.tsx +2 -1
  131. package/src/maps/ChoroplethLayer.ts +20 -7
  132. package/src/maps/ChoroplethLayerDesign.ts +5 -2
  133. package/src/maps/ChoroplethLayerDesigner.tsx +169 -165
  134. package/src/maps/DirectMapDataSource.ts +0 -12
  135. package/src/maps/EditHoverOver.tsx +9 -5
  136. package/src/maps/HoverContent.tsx +1 -1
  137. package/src/maps/LeafletMapComponent.tsx +10 -19
  138. package/src/maps/MapComponent.ts +0 -1
  139. package/src/maps/MapUtils.ts +13 -1
  140. package/src/maps/MarkersLayer.ts +22 -5
  141. package/src/maps/MarkersLayerDesign.ts +1 -1
  142. package/src/maps/MarkersLayerDesignerComponent.tsx +360 -0
  143. package/src/maps/ServerMapDataSource.ts +0 -12
  144. package/src/maps/VectorMapViewComponent.tsx +2 -13
  145. package/src/maps/symbols/font-awesome/asterisk.png +0 -0
  146. package/src/maps/symbols/font-awesome/ban.png +0 -0
  147. package/src/maps/symbols/font-awesome/beer.png +0 -0
  148. package/src/maps/symbols/font-awesome/bell.png +0 -0
  149. package/src/maps/symbols/font-awesome/bolt.png +0 -0
  150. package/src/maps/symbols/font-awesome/building.png +0 -0
  151. package/src/maps/symbols/font-awesome/bullseye.png +0 -0
  152. package/src/maps/symbols/font-awesome/bus.png +0 -0
  153. package/src/maps/symbols/font-awesome/caret-up.png +0 -0
  154. package/src/maps/symbols/font-awesome/certificate.png +0 -0
  155. package/src/maps/symbols/font-awesome/check-circle.png +0 -0
  156. package/src/maps/symbols/font-awesome/check.png +0 -0
  157. package/src/maps/symbols/font-awesome/chevron-circle-down.png +0 -0
  158. package/src/maps/symbols/font-awesome/chevron-circle-up.png +0 -0
  159. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  160. package/src/maps/symbols/font-awesome/cloud.png +0 -0
  161. package/src/maps/symbols/font-awesome/comment.png +0 -0
  162. package/src/maps/symbols/font-awesome/crosshairs.png +0 -0
  163. package/src/maps/symbols/font-awesome/dot-circle-o.png +0 -0
  164. package/src/maps/symbols/font-awesome/exclamation-circle.png +0 -0
  165. package/src/maps/symbols/font-awesome/exclamation-triangle.png +0 -0
  166. package/src/maps/symbols/font-awesome/female.png +0 -0
  167. package/src/maps/symbols/font-awesome/file.png +0 -0
  168. package/src/maps/symbols/font-awesome/flag.png +0 -0
  169. package/src/maps/symbols/font-awesome/flask.png +0 -0
  170. package/src/maps/symbols/font-awesome/h-square.png +0 -0
  171. package/src/maps/symbols/font-awesome/home.png +0 -0
  172. package/src/maps/symbols/font-awesome/info-circle.png +0 -0
  173. package/src/maps/symbols/font-awesome/male.png +0 -0
  174. package/src/maps/symbols/font-awesome/medkit.png +0 -0
  175. package/src/maps/symbols/font-awesome/mobile.png +0 -0
  176. package/src/maps/symbols/font-awesome/plus-circle.png +0 -0
  177. package/src/maps/symbols/font-awesome/plus-square.png +0 -0
  178. package/src/maps/symbols/font-awesome/plus.png +0 -0
  179. package/src/maps/symbols/font-awesome/square.png +0 -0
  180. package/src/maps/symbols/font-awesome/star.png +0 -0
  181. package/src/maps/symbols/font-awesome/thumbs-down.png +0 -0
  182. package/src/maps/symbols/font-awesome/thumbs-up.png +0 -0
  183. package/src/maps/symbols/font-awesome/ticket.png +0 -0
  184. package/src/maps/symbols/font-awesome/times-circle.png +0 -0
  185. package/src/maps/symbols/font-awesome/times.png +0 -0
  186. package/src/maps/symbols/font-awesome/tint.png +0 -0
  187. package/src/maps/symbols/font-awesome/tree.png +0 -0
  188. package/src/maps/symbols/font-awesome/university.png +0 -0
  189. package/src/maps/symbols/font-awesome/usd.png +0 -0
  190. package/src/maps/symbols/font-awesome/user.png +0 -0
  191. package/src/maps/symbols/font-awesome/users.png +0 -0
  192. package/src/maps/symbols/font-awesome/wheelchair.png +0 -0
  193. package/src/maps/symbols/sdf-ize.sh +93 -0
  194. package/src/maps/vectorMaps.tsx +20 -44
  195. package/src/mwater_table_selection/IndicatorsListComponent.tsx +165 -37
  196. package/src/mwater_table_selection/MWaterCalculatedDataSourcesListComponent.tsx +111 -0
  197. package/src/mwater_table_selection/MWaterCompleteTableSelectComponent.tsx +373 -37
  198. package/src/mwater_table_selection/MWaterTableSelectComponent.tsx +12 -8
  199. package/src/mwater_table_selection/MWaterWorkflowsSelectComponent.tsx +159 -0
  200. package/src/quickfilter/{QuickfiltersComponent.ts → QuickfiltersComponent.tsx} +165 -158
  201. package/src/quickfilter/TextLiteralComponent.tsx +197 -0
  202. package/src/widgets/MapWidget.tsx +9 -1
  203. package/src/widgets/text/ExprItemEditorComponent.tsx +83 -77
  204. package/src/widgets/text/ExprUpdateModalComponent.tsx +1 -0
  205. package/test/UndoStackTests.ts +52 -1
  206. package/.storybook/config.js +0 -7
  207. package/.storybook/head.html +0 -3
  208. package/.storybook/webpack.config.js +0 -15
  209. package/src/maps/BingLayer.ts +0 -146
  210. package/src/maps/MarkersLayerDesignerComponent.ts +0 -374
  211. package/src/quickfilter/TextLiteralComponent.ts +0 -165
  212. package/stories/UpdateableComponent.js +0 -29
  213. package/stories/consoles.js +0 -202
  214. package/stories/dashboards.js +0 -217
  215. package/stories/datagridDesign.js +0 -114
  216. package/stories/datagrids.js +0 -69
  217. package/stories/dates.js +0 -80
  218. package/stories/exprcomponent.js +0 -43
  219. package/stories/index.js +0 -18
  220. package/stories/leaflet.js +0 -59
  221. package/stories/maps.js +0 -24
  222. package/stories/pivotChart.js +0 -235
@@ -164,20 +164,29 @@ function getTranslatableStrings(design, schema) {
164
164
  */
165
165
  async function getSimpleHoverOverData(options) {
166
166
  const { id, table, filters, schema, dataSource, hoverOverItems } = options;
167
+ const exprUtils = new expressions_1.ExprUtils(schema);
167
168
  const exprCompiler = new expressions_1.ExprCompiler(schema);
168
169
  const query = {
169
170
  type: "query",
170
171
  selects: [],
171
172
  from: exprCompiler.compileTable(table, "main"),
173
+ groupBy: [],
172
174
  limit: 1
173
175
  };
174
- for (const item of hoverOverItems) {
176
+ // Check if any items are aggregate
177
+ const isAggregate = hoverOverItems.some(item => exprUtils.getExprAggrStatus(item.value ?? null) === "aggregate");
178
+ for (let i = 0; i < hoverOverItems.length; i++) {
179
+ const item = hoverOverItems[i];
175
180
  if (item.value) {
176
181
  query.selects.push({
177
182
  type: "select",
178
183
  expr: exprCompiler.compileExpr({ expr: item.value, tableAlias: "main" }),
179
184
  alias: item.id
180
185
  });
186
+ // Group by if there are aggregate items and this is not aggregate
187
+ if (isAggregate && exprUtils.getExprAggrStatus(item.value) !== "aggregate") {
188
+ query.groupBy.push(i + 1);
189
+ }
181
190
  }
182
191
  }
183
192
  if (filters) {
@@ -121,6 +121,8 @@ class MarkersLayer extends Layer_1.default {
121
121
  });
122
122
  }
123
123
  else {
124
+ // For some reason, scales down from 20 to 14. No idea why
125
+ const iconSize = (design.markerSize || 10) / 14;
124
126
  mapLayers.push({
125
127
  id: `${sourceId}:points`,
126
128
  type: "symbol",
@@ -129,11 +131,13 @@ class MarkersLayer extends Layer_1.default {
129
131
  layout: {
130
132
  "icon-image": design.symbol,
131
133
  "icon-allow-overlap": true,
132
- "icon-size": (design.markerSize || 10) / 14 // For some reason, scales down from 20 to 14. No idea why
134
+ "icon-size": iconSize,
133
135
  },
134
136
  paint: {
135
137
  "icon-color": color,
136
- "icon-opacity": opacity
138
+ "icon-opacity": opacity,
139
+ "icon-halo-color": (0, mapboxUtils_1.compileColorToMapbox)("#FFFFFFCC", design.axes.color?.excludedValues),
140
+ "icon-halo-width": iconSize * 5,
137
141
  },
138
142
  filter: addFilter(["==", ["geometry-type"], "Point"])
139
143
  });
@@ -662,6 +666,18 @@ ${design.polygonBorderColor ? "line-color: " + design.polygonBorderColor + ";" :
662
666
  aggrNeed: "none"
663
667
  });
664
668
  draft.filter = exprCleaner.cleanExpr(design.filter || null, { table: draft.table });
669
+ // Clean hover over expressions
670
+ if (design.table && design.hoverOver && design.hoverOver.items) {
671
+ for (let i = 0; i < design.hoverOver.items.length; i++) {
672
+ const item = design.hoverOver.items[i];
673
+ if (item.value) {
674
+ draft.hoverOver.items[i].value = exprCleaner.cleanExpr(item.value || null, {
675
+ table: design.table,
676
+ aggrStatuses: ["individual", "literal"]
677
+ });
678
+ }
679
+ }
680
+ }
665
681
  });
666
682
  return design;
667
683
  }
@@ -33,7 +33,7 @@ export interface MarkersLayerDesign {
33
33
  items: LayoutBlock;
34
34
  };
35
35
  /** Contains items to display when hovering over the layer */
36
- hoverOver: {
36
+ hoverOver?: {
37
37
  items: HoverOverItem[];
38
38
  };
39
39
  /** Customizable filtering for popup */
@@ -1,7 +1,5 @@
1
1
  import React from "react";
2
2
  import { DataSource, Schema } from "@mwater/expressions";
3
- import EditPopupComponent from "./EditPopupComponent";
4
- import MarkerSymbolSelectComponent from "./MarkerSymbolSelectComponent";
5
3
  import { MarkersLayerDesign } from "./MarkersLayerDesign";
6
4
  export interface MarkersLayerDesignerComponentProps {
7
5
  /** Schema to use */
@@ -27,43 +25,16 @@ export default class MarkersLayerDesignerComponent extends React.Component<Marke
27
25
  handleNameChange: (e: any) => any;
28
26
  handleMarkerSizeChange: (markerSize: any) => any;
29
27
  handleLineWidthChange: (lineWidth: any) => any;
30
- renderTable(): React.DetailedReactHTMLElement<{
31
- className: string;
32
- }, HTMLElement>;
33
- renderGeometryAxis(): React.DetailedReactHTMLElement<{
34
- className: string;
35
- }, HTMLElement> | undefined;
36
- renderColor(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement> | undefined;
37
- renderSymbol(): React.CElement<import("./MarkerSymbolSelectComponent").MarkerSymbolSelectComponentProps, MarkerSymbolSelectComponent> | undefined;
38
- renderMarkerSize(): React.DetailedReactHTMLElement<{
39
- className: string;
40
- }, HTMLElement> | undefined;
41
- renderLineWidth(): React.DetailedReactHTMLElement<{
42
- className: string;
43
- }, HTMLElement> | undefined;
44
- renderPolygonBorderColor(): React.DetailedReactHTMLElement<{
45
- className: string;
46
- }, HTMLElement> | undefined;
47
- renderPolygonFillOpacity(): React.DetailedReactHTMLElement<{
48
- className: string;
49
- }, HTMLElement> | undefined;
50
- renderFilter(): React.DetailedReactHTMLElement<{
51
- className: string;
52
- }, HTMLElement> | null;
53
- renderPopup(): React.CElement<any, EditPopupComponent> | null;
54
- renderHoverOver(): React.FunctionComponentElement<{
55
- design: MarkersLayerDesign;
56
- onDesignChange: any;
57
- schema: Schema;
58
- dataSource: DataSource;
59
- table: string;
60
- idTable: string;
61
- defaultPopupFilterJoins: {
62
- [x: number]: {
63
- table: any;
64
- type: string;
65
- };
66
- };
67
- }> | null;
68
- render(): React.DetailedReactHTMLElement<React.HTMLAttributes<HTMLElement>, HTMLElement>;
28
+ renderTable(): React.JSX.Element;
29
+ renderGeometryAxis(): React.JSX.Element | undefined;
30
+ renderColor(): React.JSX.Element | undefined;
31
+ renderSymbol(): React.JSX.Element | undefined;
32
+ renderMarkerSize(): React.JSX.Element | undefined;
33
+ renderLineWidth(): React.JSX.Element | undefined;
34
+ renderPolygonBorderColor(): React.JSX.Element | undefined;
35
+ renderPolygonFillOpacity(): React.JSX.Element | undefined;
36
+ renderFilter(): React.JSX.Element | null;
37
+ renderPopup(): React.JSX.Element | null;
38
+ renderHoverOver(): React.JSX.Element | null;
39
+ render(): React.JSX.Element;
69
40
  }
@@ -28,10 +28,9 @@ 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 expressions_ui_1 = require("@mwater/expressions-ui");
33
32
  const expressions_1 = require("@mwater/expressions");
34
- const AxisComponent_1 = __importDefault(require("./../axes/AxisComponent"));
33
+ const AxisComponent_1 = __importDefault(require("../axes/AxisComponent"));
35
34
  const ColorComponent_1 = __importDefault(require("../ColorComponent"));
36
35
  const expressions_ui_2 = require("@mwater/expressions-ui");
37
36
  const EditPopupComponent_1 = __importDefault(require("./EditPopupComponent"));
@@ -39,7 +38,7 @@ const ZoomLevelsComponent_1 = __importDefault(require("./ZoomLevelsComponent"));
39
38
  const MarkerSymbolSelectComponent_1 = __importDefault(require("./MarkerSymbolSelectComponent"));
40
39
  const PopupFilterJoinsUtils = __importStar(require("./PopupFilterJoinsUtils"));
41
40
  const ui = __importStar(require("@mwater/react-library/lib/bootstrap"));
42
- const EditHoverOver_1 = __importDefault(require("./EditHoverOver"));
41
+ const EditHoverOver_1 = require("./EditHoverOver");
43
42
  const rc_slider_1 = __importDefault(require("rc-slider"));
44
43
  // Designer for a markers layer
45
44
  class MarkersLayerDesignerComponent extends react_1.default.Component {
@@ -86,19 +85,22 @@ class MarkersLayerDesignerComponent extends react_1.default.Component {
86
85
  return this.update({ lineWidth });
87
86
  };
88
87
  renderTable() {
89
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("i", { className: "fa fa-database" }), " ", T `Data Source`), R("div", { style: { marginLeft: 10 } }, R(expressions_ui_2.TableSelectComponent, {
90
- schema: this.props.schema,
91
- value: this.props.design.table,
92
- onChange: this.handleTableChange,
93
- filter: this.props.design.filter,
94
- onFilterChange: this.handleFilterChange
95
- })));
88
+ return (react_1.default.createElement("div", { className: "mb-3" },
89
+ react_1.default.createElement("label", { className: "text-muted" },
90
+ react_1.default.createElement("i", { className: "fa fa-database" }),
91
+ " ",
92
+ T `Data Source`),
93
+ react_1.default.createElement("div", { style: { marginLeft: 10 } },
94
+ 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 }))));
96
95
  }
97
96
  renderGeometryAxis() {
98
97
  if (!this.props.design.table) {
99
98
  return;
100
99
  }
101
- const title = R("span", null, R("span", { className: "fas fa-map-marker-alt" }), " ", T `Location`);
100
+ const title = react_1.default.createElement("span", null,
101
+ react_1.default.createElement("span", { className: "fas fa-map-marker-alt" }),
102
+ " ",
103
+ T `Location`);
102
104
  const filters = lodash_1.default.clone(this.props.filters) || [];
103
105
  if (this.props.design.filter != null) {
104
106
  const exprCompiler = new expressions_1.ExprCompiler(this.props.schema);
@@ -107,16 +109,10 @@ class MarkersLayerDesignerComponent extends react_1.default.Component {
107
109
  filters.push({ table: this.props.design.filter.table, jsonql });
108
110
  }
109
111
  }
110
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, title), R("div", { style: { marginLeft: 10 } }, R(AxisComponent_1.default, {
111
- schema: this.props.schema,
112
- dataSource: this.props.dataSource,
113
- table: this.props.design.table,
114
- types: ["geometry"],
115
- aggrNeed: "none",
116
- value: this.props.design.axes.geometry,
117
- onChange: this.handleGeometryAxisChange,
118
- filters
119
- })));
112
+ return (react_1.default.createElement("div", { className: "mb-3" },
113
+ react_1.default.createElement("label", { className: "text-muted" }, title),
114
+ react_1.default.createElement("div", { style: { marginLeft: 10 } },
115
+ react_1.default.createElement(AxisComponent_1.default, { schema: this.props.schema, dataSource: this.props.dataSource, table: this.props.design.table, types: ["geometry"], aggrNeed: "none", value: this.props.design.axes.geometry, onChange: this.handleGeometryAxisChange, filters: filters }))));
120
116
  }
121
117
  renderColor() {
122
118
  if (!this.props.design.axes.geometry) {
@@ -130,140 +126,114 @@ class MarkersLayerDesignerComponent extends react_1.default.Component {
130
126
  filters.push({ table: this.props.design.filter.table, jsonql });
131
127
  }
132
128
  }
133
- return R("div", null, !this.props.design.axes.color
134
- ? R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-tint" }), T `Color`), R("div", null, R(ColorComponent_1.default, {
135
- color: this.props.design.color,
136
- onChange: this.handleColorChange
137
- })))
138
- : undefined, R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", { className: "fas fa-tint" }), T `Color By Data`), R(AxisComponent_1.default, {
139
- schema: this.props.schema,
140
- dataSource: this.props.dataSource,
141
- table: this.props.design.table,
142
- types: ["text", "enum", "boolean", "date"],
143
- aggrNeed: "none",
144
- value: this.props.design.axes.color,
145
- defaultColor: this.props.design.color,
146
- showColorMap: true,
147
- onChange: this.handleColorAxisChange,
148
- allowExcludedValues: true,
149
- filters
150
- })));
129
+ return (react_1.default.createElement("div", null,
130
+ !this.props.design.axes.color ? (react_1.default.createElement("div", { className: "mb-3" },
131
+ react_1.default.createElement("label", { className: "text-muted" },
132
+ react_1.default.createElement("span", { className: "fas fa-tint" }),
133
+ T `Color`),
134
+ react_1.default.createElement("div", null,
135
+ react_1.default.createElement(ColorComponent_1.default, { color: this.props.design.color, onChange: this.handleColorChange })))) : undefined,
136
+ react_1.default.createElement("div", { className: "mb-3" },
137
+ react_1.default.createElement("label", { className: "text-muted" },
138
+ react_1.default.createElement("span", { className: "fas fa-tint" }),
139
+ T `Color By Data`),
140
+ 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: "none", value: this.props.design.axes.color, defaultColor: this.props.design.color, showColorMap: true, onChange: this.handleColorAxisChange, allowExcludedValues: true, filters: filters }))));
151
141
  }
152
142
  renderSymbol() {
153
143
  if (!this.props.design.axes.geometry) {
154
144
  return;
155
145
  }
156
- return R(MarkerSymbolSelectComponent_1.default, { symbol: this.props.design.symbol, onChange: this.handleSymbolChange });
146
+ return react_1.default.createElement(MarkerSymbolSelectComponent_1.default, { symbol: this.props.design.symbol, onChange: this.handleSymbolChange });
157
147
  }
158
148
  renderMarkerSize() {
159
149
  if (!this.props.design.axes.geometry) {
160
150
  return;
161
151
  }
162
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, T `Marker Size`), R(ui.Select, {
163
- value: this.props.design.markerSize || 10,
164
- options: [
165
- { value: 5, label: T `Extra small` },
166
- { value: 8, label: T `Small` },
167
- { value: 10, label: T `Normal` },
168
- { value: 13, label: T `Large` },
169
- { value: 16, label: T `Extra large` }
170
- ],
171
- onChange: this.handleMarkerSizeChange
172
- }));
152
+ return (react_1.default.createElement("div", { className: "mb-3" },
153
+ react_1.default.createElement("label", { className: "text-muted" }, T `Marker Size`),
154
+ react_1.default.createElement(ui.Select, { value: this.props.design.markerSize || 10, options: [
155
+ { value: 5, label: T `Extra small` },
156
+ { value: 8, label: T `Small` },
157
+ { value: 10, label: T `Normal` },
158
+ { value: 13, label: T `Large` },
159
+ { value: 16, label: T `Extra large` }
160
+ ], onChange: this.handleMarkerSizeChange })));
173
161
  }
174
162
  renderLineWidth() {
175
163
  if (!this.props.design.axes.geometry) {
176
164
  return;
177
165
  }
178
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, T `Line Width (for shapes)`), R(ui.Select, {
179
- value: this.props.design.lineWidth != null ? this.props.design.lineWidth : 3,
180
- options: [
181
- { value: 0, label: T `None` },
182
- { value: 1, label: T `1 pixel` },
183
- { value: 2, label: T `2 pixels` },
184
- { value: 3, label: T `3 pixels` },
185
- { value: 4, label: T `4 pixels` },
186
- { value: 5, label: T `5 pixels` },
187
- { value: 6, label: T `6 pixels` }
188
- ],
189
- onChange: this.handleLineWidthChange
190
- }));
166
+ return (react_1.default.createElement("div", { className: "mb-3" },
167
+ react_1.default.createElement("label", { className: "text-muted" }, T `Line Width (for shapes)`),
168
+ react_1.default.createElement(ui.Select, { value: this.props.design.lineWidth != null ? this.props.design.lineWidth : 3, options: [
169
+ { value: 0, label: T `None` },
170
+ { value: 1, label: T `1 pixel` },
171
+ { value: 2, label: T `2 pixels` },
172
+ { value: 3, label: T `3 pixels` },
173
+ { value: 4, label: T `4 pixels` },
174
+ { value: 5, label: T `5 pixels` },
175
+ { value: 6, label: T `6 pixels` }
176
+ ], onChange: this.handleLineWidthChange })));
191
177
  }
192
178
  renderPolygonBorderColor() {
193
179
  if (!this.props.design.axes.geometry) {
194
180
  return;
195
181
  }
196
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, T `Polygon border color (blank for same as fill color)`), R("div", null, R(ColorComponent_1.default, {
197
- color: this.props.design.polygonBorderColor,
198
- onChange: this.handlePolygonBorderColorChange
199
- })));
182
+ return (react_1.default.createElement("div", { className: "mb-3" },
183
+ react_1.default.createElement("label", { className: "text-muted" }, T `Polygon border color (blank for same as fill color)`),
184
+ react_1.default.createElement("div", null,
185
+ react_1.default.createElement(ColorComponent_1.default, { color: this.props.design.polygonBorderColor, onChange: this.handlePolygonBorderColorChange }))));
200
186
  }
201
187
  renderPolygonFillOpacity() {
202
188
  if (!this.props.design.axes.geometry) {
203
189
  return;
204
190
  }
205
191
  const opacity = this.props.design.polygonFillOpacity != null ? this.props.design.polygonFillOpacity : 0.25;
206
- return R("div", { className: "mb-3" }, R("label", { className: "text-muted" }, R("span", null, T `Polygon Fill Opacity: ${Math.round(opacity * 100)}%`)), R("div", { style: { padding: "10px" } }, react_1.default.createElement(rc_slider_1.default, {
207
- min: 0,
208
- max: 100,
209
- step: 1,
210
- tipTransitionName: "rc-slider-tooltip-zoom-down",
211
- value: opacity * 100,
212
- onChange: this.handlePolygonFillOpacityChange
213
- })));
192
+ return (react_1.default.createElement("div", { className: "mb-3" },
193
+ react_1.default.createElement("label", { className: "text-muted" },
194
+ react_1.default.createElement("span", null, T `Polygon Fill Opacity: ${Math.round(opacity * 100)}%`)),
195
+ react_1.default.createElement("div", { style: { padding: "10px" } },
196
+ react_1.default.createElement(rc_slider_1.default, { min: 0, max: 100, step: 1, tipTransitionName: "rc-slider-tooltip-zoom-down", value: opacity * 100, onChange: this.handlePolygonFillOpacityChange }))));
214
197
  }
215
198
  renderFilter() {
216
199
  // If no data, hide
217
200
  if (!this.props.design.axes.geometry) {
218
201
  return null;
219
202
  }
220
- 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, {
221
- schema: this.props.schema,
222
- dataSource: this.props.dataSource,
223
- onChange: this.handleFilterChange,
224
- table: this.props.design.table,
225
- value: this.props.design.filter
226
- })));
203
+ return (react_1.default.createElement("div", { className: "mb-3" },
204
+ react_1.default.createElement("label", { className: "text-muted" },
205
+ react_1.default.createElement("span", { className: "fas fa-filter" }),
206
+ T `Filters`),
207
+ react_1.default.createElement("div", { style: { marginLeft: 8 } },
208
+ 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 }))));
227
209
  }
228
210
  renderPopup() {
229
211
  if (!this.props.design.table) {
230
212
  return null;
231
213
  }
232
- return R(EditPopupComponent_1.default, {
233
- design: this.props.design,
234
- onDesignChange: this.props.onDesignChange,
235
- schema: this.props.schema,
236
- dataSource: this.props.dataSource,
237
- table: this.props.design.table,
238
- idTable: this.props.design.table,
239
- defaultPopupFilterJoins: PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table)
240
- });
214
+ 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: this.props.design.table, defaultPopupFilterJoins: PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table) }));
241
215
  }
242
216
  renderHoverOver() {
243
217
  if (!this.props.design.table) {
244
218
  return null;
245
219
  }
246
- return R(EditHoverOver_1.default, {
247
- design: this.props.design,
248
- onDesignChange: this.props.onDesignChange,
249
- schema: this.props.schema,
250
- dataSource: this.props.dataSource,
251
- table: this.props.design.table,
252
- idTable: this.props.design.table,
253
- defaultPopupFilterJoins: PopupFilterJoinsUtils.createDefaultPopupFilterJoins(this.props.design.table)
254
- });
220
+ 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"] }));
255
221
  }
256
222
  render() {
257
- return R("div", null, this.renderTable(), this.renderGeometryAxis(), this.renderColor(), this.renderSymbol(), this.renderMarkerSize(), R(ui.CollapsibleSection, {
258
- label: T `Shape Options`,
259
- labelMuted: true
260
- }, [
261
- this.renderLineWidth(),
262
- this.renderPolygonBorderColor(),
263
- this.renderPolygonFillOpacity(),
264
- ]), this.renderFilter(), this.renderPopup(), this.renderHoverOver(), this.props.design.table
265
- ? R(ZoomLevelsComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange })
266
- : undefined);
223
+ return (react_1.default.createElement("div", null,
224
+ this.renderTable(),
225
+ this.renderGeometryAxis(),
226
+ this.renderColor(),
227
+ this.renderSymbol(),
228
+ this.renderMarkerSize(),
229
+ react_1.default.createElement(ui.CollapsibleSection, { label: T `Shape Options`, labelMuted: true },
230
+ this.renderLineWidth(),
231
+ this.renderPolygonBorderColor(),
232
+ this.renderPolygonFillOpacity()),
233
+ this.renderFilter(),
234
+ this.renderPopup(),
235
+ this.renderHoverOver(),
236
+ this.props.design.table ? (react_1.default.createElement(ZoomLevelsComponent_1.default, { design: this.props.design, onDesignChange: this.props.onDesignChange })) : undefined));
267
237
  }
268
238
  }
269
239
  exports.default = MarkersLayerDesignerComponent;
@@ -144,22 +144,12 @@ class ServerLayerDataSource {
144
144
  rev: this.options.rev
145
145
  };
146
146
  let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?` + querystring_1.default.stringify(query);
147
- // Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
148
- // Used to speed queries
149
- if (url.match(/^https:\/\/api\.mwater\.co\//)) {
150
- url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
151
- }
152
147
  return url;
153
148
  }
154
149
  // Create query string
155
150
  createLegacyUrl(design, extension, filters) {
156
151
  let where;
157
152
  let url = `${this.options.apiUrl}maps/tiles/{z}/{x}/{y}.${extension}?type=${design.type}&radius=1000`;
158
- // Add subdomains: {s} will be substituted with "a", "b" or "c" in leaflet for api.mwater.co only.
159
- // Used to speed queries
160
- if (url.match(/^https:\/\/api\.mwater\.co\//)) {
161
- url = url.replace(/^https:\/\/api\.mwater\.co\//, "https://{s}-api.mwater.co/");
162
- }
163
153
  if (this.options.client) {
164
154
  url += `&client=${this.options.client}`;
165
155
  }
@@ -230,17 +230,9 @@ function VectorMapViewComponent(props) {
230
230
  else {
231
231
  const tileUrl = props.mapDataSource.getLayerDataSource(layerView.id).getTileUrl(design, []);
232
232
  if (tileUrl) {
233
- // Replace "{s}" with "a", "b", "c"
234
- let tiles = [];
235
- if (tileUrl.includes("{s}")) {
236
- tiles = [tileUrl.replace("{s}", "a"), tileUrl.replace("{s}", "b"), tileUrl.replace("{s}", "c")];
237
- }
238
- else {
239
- tiles = [tileUrl];
240
- }
241
233
  newSources[layerView.id] = {
242
234
  type: "raster",
243
- tiles,
235
+ tiles: [tileUrl],
244
236
  tileSize: 256
245
237
  };
246
238
  newLayers.push({