@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
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
- import { DataSource, LocalizedString, Schema } from "@mwater/expressions";
3
- import IdArrayQuickfilterComponent from "./IdArrayQuickfilterComponent";
2
+ import { DataSource, Schema } from "@mwater/expressions";
4
3
  import { Quickfilter, QuickfilterLock } from "./Quickfilter";
5
4
  import { QuickfiltersDataSource } from "./QuickfiltersDataSource";
6
5
  import { JsonQLFilter } from "..";
@@ -26,104 +25,6 @@ export interface QuickfiltersComponentProps {
26
25
  }
27
26
  /** Displays quick filters and allows their value to be modified */
28
27
  export default class QuickfiltersComponent extends React.Component<QuickfiltersComponentProps> {
29
- renderQuickfilter(item: any, index: any): React.CElement<EnumQuickfilterComponentProps, EnumQuickfilterComponent> | React.CElement<TextQuickfilterComponentProps, TextQuickfilterComponent> | React.CElement<DateQuickfilterComponentProps, DateQuickfilterComponent> | React.CElement<import("./IdArrayQuickfilterComponent").IdArrayQuickfilterComponentProps, IdArrayQuickfilterComponent> | null;
30
- render(): React.DetailedReactHTMLElement<{
31
- style: {
32
- borderTop: string | undefined;
33
- borderBottom: string;
34
- padding: number;
35
- };
36
- }, HTMLElement> | null;
28
+ renderQuickfilter(item: Quickfilter, index: number): React.JSX.Element | null;
29
+ render(): React.JSX.Element | null;
37
30
  }
38
- interface EnumQuickfilterComponentProps {
39
- label?: string;
40
- schema: Schema;
41
- /** true to display multiple values */
42
- multi?: boolean;
43
- /** Current value of quickfilter (state of filter selected) */
44
- value?: any;
45
- /** Called when value changes */
46
- onValueChange?: any;
47
- options: {
48
- /** id of option */
49
- id: string;
50
- /** localized name */
51
- name: LocalizedString;
52
- }[];
53
- }
54
- /** Quickfilter for an enum */
55
- declare class EnumQuickfilterComponent extends React.Component<EnumQuickfilterComponentProps> {
56
- static contextType: React.Context<string>;
57
- handleSingleChange: (val: any) => any;
58
- handleMultiChange: (val: any) => any;
59
- renderSingleSelect(options: any[]): React.FunctionComponentElement<{
60
- placeholder: string;
61
- value: any;
62
- options: any[];
63
- isClearable: boolean;
64
- onChange: (value: any) => any;
65
- isDisabled: boolean;
66
- styles: {
67
- menu: (style: import("react-select").CSSObjectWithLabel) => import("react-select").CSSObjectWithLabel;
68
- };
69
- }>;
70
- renderMultiSelect(options: any[]): React.FunctionComponentElement<{
71
- placeholder: string;
72
- value: any[];
73
- isClearable: boolean;
74
- isMulti: boolean;
75
- options: any[];
76
- onChange: ((val: any) => any) | undefined;
77
- isDisabled: boolean;
78
- styles: {
79
- menu: (style: import("react-select").CSSObjectWithLabel) => import("react-select").CSSObjectWithLabel;
80
- };
81
- }>;
82
- render(): React.DetailedReactHTMLElement<{
83
- style: {
84
- display: "inline-block";
85
- paddingRight: number;
86
- };
87
- }, HTMLElement>;
88
- }
89
- interface TextQuickfilterComponentProps {
90
- label: string;
91
- schema: Schema;
92
- /** See QuickfiltersDataSource */
93
- quickfiltersDataSource: QuickfiltersDataSource;
94
- expr: any;
95
- index: number;
96
- /** Current value of quickfilter (state of filter selected) */
97
- value?: any;
98
- /** Called when value changes */
99
- onValueChange?: any;
100
- /** true to display multiple values */
101
- multi?: boolean;
102
- /** Filters to add to restrict quick filter data to */
103
- filters?: JsonQLFilter[];
104
- }
105
- declare class TextQuickfilterComponent extends React.Component<TextQuickfilterComponentProps> {
106
- render(): React.DetailedReactHTMLElement<{
107
- style: {
108
- display: "inline-block";
109
- paddingRight: number;
110
- };
111
- }, HTMLElement>;
112
- }
113
- interface DateQuickfilterComponentProps {
114
- label?: string;
115
- schema: Schema;
116
- expr: any;
117
- /** Current value of quickfilter (state of filter selected) */
118
- value?: any;
119
- onValueChange: any;
120
- }
121
- declare class DateQuickfilterComponent extends React.Component<DateQuickfilterComponentProps> {
122
- render(): React.DetailedReactHTMLElement<{
123
- style: {
124
- display: "inline-block";
125
- paddingRight: number;
126
- };
127
- }, HTMLElement>;
128
- }
129
- export {};
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const lodash_1 = __importDefault(require("lodash"));
7
7
  const react_1 = __importDefault(require("react"));
8
- const R = react_1.default.createElement;
9
8
  const react_select_1 = __importDefault(require("react-select"));
10
9
  const expressions_1 = require("@mwater/expressions");
11
10
  const expressions_2 = require("@mwater/expressions");
@@ -25,9 +24,10 @@ class QuickfiltersComponent extends react_1.default.Component {
25
24
  let values = this.props.values || [];
26
25
  let itemValue = values[index];
27
26
  // Translate label
28
- const label = this.props.translate?.(item.label) ?? item.label;
27
+ const label = this.props.translate?.(item.label ?? "") ?? item.label ?? "";
28
+ const exprCleaner = new expressions_2.ExprCleaner(this.props.schema);
29
29
  // Clean expression first
30
- const expr = new expressions_2.ExprCleaner(this.props.schema).cleanExpr(item.expr);
30
+ const expr = exprCleaner.cleanExpr(item.expr);
31
31
  // Do not render if nothing
32
32
  if (!expr) {
33
33
  return null;
@@ -37,6 +37,22 @@ class QuickfiltersComponent extends react_1.default.Component {
37
37
  if (!type) {
38
38
  return null;
39
39
  }
40
+ // If this quickfilter is text or text[] and has subsequent merged quickfilters, gather their expressions
41
+ let exprsToPass = [expr];
42
+ if (["text", "text[]"].includes(type)) {
43
+ for (let i2 = index + 1; i2 < this.props.design.length; i2++) {
44
+ const nextItem = this.props.design[i2];
45
+ if (nextItem.merged) {
46
+ const cleaned = exprCleaner.cleanExpr(nextItem.expr);
47
+ if (cleaned) {
48
+ exprsToPass.push(cleaned);
49
+ }
50
+ }
51
+ else {
52
+ break;
53
+ }
54
+ }
55
+ }
40
56
  // Determine if locked
41
57
  const lock = lodash_1.default.find(this.props.locks || [], (lock) => lodash_1.default.isEqual(lock.expr, expr));
42
58
  if (lock) {
@@ -73,67 +89,19 @@ class QuickfiltersComponent extends react_1.default.Component {
73
89
  const otherQuickfilterFilters = compiler.compile(otherDesign, otherValues, otherLocks);
74
90
  const filters = (this.props.filters || []).concat(otherQuickfilterFilters);
75
91
  if (["enum", "enumset"].includes(type)) {
76
- return R(EnumQuickfilterComponent, {
77
- key: JSON.stringify(item),
78
- label,
79
- schema: this.props.schema,
80
- options: new expressions_1.ExprUtils(this.props.schema).getExprEnumValues(expr),
81
- value: itemValue,
82
- onValueChange,
83
- multi: item.multi
84
- });
92
+ return react_1.default.createElement(EnumQuickfilterComponent, { key: JSON.stringify(item), label: label, schema: this.props.schema, options: new expressions_1.ExprUtils(this.props.schema).getExprEnumValues(expr), value: itemValue, onValueChange: onValueChange, multi: item.multi });
85
93
  }
86
94
  if (type === "text") {
87
- return R(TextQuickfilterComponent, {
88
- key: JSON.stringify(item),
89
- index,
90
- label,
91
- expr,
92
- schema: this.props.schema,
93
- quickfiltersDataSource: this.props.quickfiltersDataSource,
94
- value: itemValue,
95
- onValueChange,
96
- filters,
97
- multi: item.multi
98
- });
95
+ return react_1.default.createElement(TextQuickfilterComponent, { key: JSON.stringify(item), index: index, label: label, expr: exprsToPass, schema: this.props.schema, quickfiltersDataSource: this.props.quickfiltersDataSource, value: itemValue, onValueChange: onValueChange, filters: filters, multi: item.multi });
99
96
  }
100
97
  if (["date", "datetime"].includes(type)) {
101
- return R(DateQuickfilterComponent, {
102
- key: JSON.stringify(item),
103
- label,
104
- expr,
105
- schema: this.props.schema,
106
- value: itemValue,
107
- onValueChange
108
- });
98
+ return react_1.default.createElement(DateQuickfilterComponent, { key: JSON.stringify(item), label: label, expr: expr, schema: this.props.schema, value: itemValue, onValueChange: onValueChange });
109
99
  }
110
100
  if (type === "id[]") {
111
- return R(IdArrayQuickfilterComponent_1.default, {
112
- key: JSON.stringify(item),
113
- index,
114
- label,
115
- expr,
116
- schema: this.props.schema,
117
- dataSource: this.props.dataSource,
118
- value: itemValue,
119
- onValueChange,
120
- filters,
121
- multi: item.multi
122
- });
101
+ return react_1.default.createElement(IdArrayQuickfilterComponent_1.default, { key: JSON.stringify(item), index: index, label: label, expr: expr, schema: this.props.schema, dataSource: this.props.dataSource, value: itemValue, onValueChange: onValueChange, filters: filters, multi: item.multi });
123
102
  }
124
103
  if (type === "text[]") {
125
- return R(TextArrayQuickfilterComponent, {
126
- key: JSON.stringify(item),
127
- index,
128
- label,
129
- expr,
130
- schema: this.props.schema,
131
- quickfiltersDataSource: this.props.quickfiltersDataSource,
132
- value: itemValue,
133
- onValueChange,
134
- filters,
135
- multi: item.multi
136
- });
104
+ return react_1.default.createElement(TextArrayQuickfilterComponent, { key: JSON.stringify(item), index: index, label: label, expr: exprsToPass, schema: this.props.schema, quickfiltersDataSource: this.props.quickfiltersDataSource, value: itemValue, onValueChange: onValueChange, filters: filters, multi: item.multi });
137
105
  }
138
106
  return null;
139
107
  }
@@ -141,15 +109,14 @@ class QuickfiltersComponent extends react_1.default.Component {
141
109
  if (!this.props.design || this.props.design.length === 0) {
142
110
  return null;
143
111
  }
144
- return R("div", {
145
- style: {
112
+ return (react_1.default.createElement("div", { style: {
146
113
  borderTop: !this.props.hideTopBorder ? "solid 1px #E8E8E8" : undefined,
147
114
  borderBottom: "solid 1px #E8E8E8",
148
115
  padding: 5
149
- }
150
- }, lodash_1.default.map(this.props.design, (item, i) => this.renderQuickfilter(item, i)), this.props.onHide
151
- ? R("button", { className: "btn btn-sm btn-link", onClick: this.props.onHide }, R("i", { className: "fa fa-angle-double-up" }))
152
- : undefined);
116
+ } },
117
+ lodash_1.default.map(this.props.design, (item, i) => this.renderQuickfilter(item, i)),
118
+ this.props.onHide ? (react_1.default.createElement("button", { className: "btn btn-sm btn-link", onClick: this.props.onHide },
119
+ react_1.default.createElement("i", { className: "fa fa-angle-double-up" }))) : undefined));
153
120
  }
154
121
  }
155
122
  exports.default = QuickfiltersComponent;
@@ -173,37 +140,20 @@ class EnumQuickfilterComponent extends react_1.default.Component {
173
140
  }
174
141
  };
175
142
  renderSingleSelect(options) {
176
- return R(react_select_1.default, {
177
- placeholder: T `All`,
178
- value: lodash_1.default.findWhere(options, { value: this.props.value }) || null,
179
- options,
180
- isClearable: true,
181
- onChange: (value) => {
143
+ return react_1.default.createElement(react_select_1.default, { placeholder: T `All`, value: lodash_1.default.findWhere(options, { value: this.props.value }) || null, options: options, isClearable: true, onChange: (value) => {
182
144
  if (this.props.onValueChange) {
183
145
  return this.handleSingleChange(value?.value);
184
146
  }
185
- },
186
- isDisabled: this.props.onValueChange == null,
187
- styles: {
147
+ }, isDisabled: this.props.onValueChange == null, styles: {
188
148
  // Keep menu above fixed data table headers
189
149
  menu: (style) => lodash_1.default.extend({}, style, { zIndex: 2000 })
190
- }
191
- });
150
+ } });
192
151
  }
193
152
  renderMultiSelect(options) {
194
- return R(react_select_1.default, {
195
- placeholder: T `All`,
196
- value: lodash_1.default.map(this.props.value, (v) => lodash_1.default.find(options, (o) => o.value === v)),
197
- isClearable: true,
198
- isMulti: true,
199
- options,
200
- onChange: this.props.onValueChange ? this.handleMultiChange : undefined,
201
- isDisabled: this.props.onValueChange == null,
202
- styles: {
153
+ return react_1.default.createElement(react_select_1.default, { placeholder: T `All`, value: lodash_1.default.map(this.props.value, (v) => lodash_1.default.find(options, (o) => o.value === v)), isClearable: true, isMulti: true, options: options, onChange: this.props.onValueChange ? this.handleMultiChange : undefined, isDisabled: this.props.onValueChange == null, styles: {
203
154
  // Keep menu above fixed data table headers
204
155
  menu: (style) => lodash_1.default.extend({}, style, { zIndex: 2000 })
205
- }
206
- });
156
+ } });
207
157
  }
208
158
  render() {
209
159
  const options = lodash_1.default.map(this.props.options, (opt) => ({
@@ -214,46 +164,39 @@ class EnumQuickfilterComponent extends react_1.default.Component {
214
164
  let width = lodash_1.default.max(options, (o) => o.label.length)?.label?.length;
215
165
  width = width ? width * 8 + 120 : 280;
216
166
  const minWidth = width > 280 || this.props.multi ? "280px" : `${width}px`;
217
- return R("div", { style: { display: "inline-block", paddingRight: 10 } }, this.props.label ? R("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined, R("div", { style: { display: "inline-block", minWidth, verticalAlign: "middle" } }, this.props.multi ? this.renderMultiSelect(options) : this.renderSingleSelect(options)), !this.props.onValueChange ? R("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined);
167
+ return (react_1.default.createElement("div", { style: { display: "inline-block", paddingRight: 10 } },
168
+ this.props.label ? react_1.default.createElement("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined,
169
+ react_1.default.createElement("div", { style: { display: "inline-block", minWidth, verticalAlign: "middle" } }, this.props.multi ? this.renderMultiSelect(options) : this.renderSingleSelect(options)),
170
+ !this.props.onValueChange ? react_1.default.createElement("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined));
218
171
  }
219
172
  }
220
173
  // Quickfilter for a text value
221
174
  class TextQuickfilterComponent extends react_1.default.Component {
222
175
  render() {
223
- return R("div", { style: { display: "inline-block", paddingRight: 10 } }, this.props.label ? R("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined, R("div", { style: { display: "inline-block", minWidth: "280px", verticalAlign: "middle" } }, R(TextLiteralComponent_1.default, {
224
- value: this.props.value,
225
- onChange: this.props.onValueChange,
226
- schema: this.props.schema,
227
- expr: this.props.expr,
228
- index: this.props.index,
229
- multi: this.props.multi,
230
- quickfiltersDataSource: this.props.quickfiltersDataSource,
231
- filters: this.props.filters
232
- })), !this.props.onValueChange ? R("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined);
176
+ return (react_1.default.createElement("div", { style: { display: "inline-block", paddingRight: 10 } },
177
+ this.props.label ? react_1.default.createElement("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined,
178
+ react_1.default.createElement("div", { style: { display: "inline-block", minWidth: "280px", verticalAlign: "middle" } },
179
+ react_1.default.createElement(TextLiteralComponent_1.default, { value: this.props.value, onChange: this.props.onValueChange, schema: this.props.schema, expr: this.props.expr, index: this.props.index, multi: this.props.multi, quickfiltersDataSource: this.props.quickfiltersDataSource, filters: this.props.filters })),
180
+ !this.props.onValueChange ? react_1.default.createElement("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined));
233
181
  }
234
182
  }
235
183
  // Quickfilter for a date value
236
184
  class DateQuickfilterComponent extends react_1.default.Component {
237
185
  render() {
238
- return R("div", { style: { display: "inline-block", paddingRight: 10 } }, this.props.label ? R("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined, R("div", { style: { display: "inline-block", minWidth: "280px", verticalAlign: "middle" } }, R(DateExprComponent_1.default, {
239
- datetime: new expressions_1.ExprUtils(this.props.schema).getExprType(this.props.expr) === "datetime",
240
- value: this.props.value,
241
- onChange: this.props.onValueChange
242
- })), !this.props.onValueChange ? R("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined);
186
+ return (react_1.default.createElement("div", { style: { display: "inline-block", paddingRight: 10 } },
187
+ this.props.label ? react_1.default.createElement("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined,
188
+ react_1.default.createElement("div", { style: { display: "inline-block", minWidth: "280px", verticalAlign: "middle" } },
189
+ react_1.default.createElement(DateExprComponent_1.default, { datetime: new expressions_1.ExprUtils(this.props.schema).getExprType(this.props.expr) === "datetime", value: this.props.value, onChange: this.props.onValueChange })),
190
+ !this.props.onValueChange ? react_1.default.createElement("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined));
243
191
  }
244
192
  }
245
193
  /** Quickfilter for a text value */
246
194
  class TextArrayQuickfilterComponent extends react_1.default.Component {
247
195
  render() {
248
- return R("div", { style: { display: "inline-block", paddingRight: 10 } }, this.props.label ? R("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined, R("div", { style: { display: "inline-block", minWidth: "280px", verticalAlign: "middle" } }, R(TextLiteralComponent_1.default, {
249
- value: this.props.value,
250
- onChange: this.props.onValueChange,
251
- schema: this.props.schema,
252
- expr: this.props.expr,
253
- index: this.props.index,
254
- multi: this.props.multi,
255
- quickfiltersDataSource: this.props.quickfiltersDataSource,
256
- filters: this.props.filters
257
- })), !this.props.onValueChange ? R("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined);
196
+ return (react_1.default.createElement("div", { style: { display: "inline-block", paddingRight: 10 } },
197
+ this.props.label ? react_1.default.createElement("span", { style: { color: "gray" } }, this.props.label + ":\u00a0") : undefined,
198
+ react_1.default.createElement("div", { style: { display: "inline-block", minWidth: "280px", verticalAlign: "middle" } },
199
+ react_1.default.createElement(TextLiteralComponent_1.default, { value: this.props.value, onChange: this.props.onValueChange, schema: this.props.schema, expr: this.props.expr, index: this.props.index, multi: this.props.multi, quickfiltersDataSource: this.props.quickfiltersDataSource, filters: this.props.filters })),
200
+ !this.props.onValueChange ? react_1.default.createElement("i", { className: "text-warning fa fa-fw fa-lock" }) : undefined));
258
201
  }
259
202
  }
@@ -1,14 +1,19 @@
1
1
  import React from "react";
2
- import { Schema } from "@mwater/expressions";
2
+ import { Expr, Schema } from "@mwater/expressions";
3
3
  import { JsonQLFilter } from "../JsonQLFilter";
4
4
  import { QuickfiltersDataSource } from "./QuickfiltersDataSource";
5
5
  export interface TextLiteralComponentProps {
6
- value?: any;
7
- onChange?: any;
6
+ value?: string | string[] | null;
7
+ onChange?: (value: string | string[] | null) => void;
8
8
  schema: Schema;
9
9
  /** See QuickfiltersDataSource */
10
10
  quickfiltersDataSource: QuickfiltersDataSource;
11
- expr: any;
11
+ /**
12
+ * One or more expressions whose values should be combined into a single option list.
13
+ * Each subsequent expression represents another quickfilter that is merged with this one.
14
+ * The first expression is the main quickfilter, and the subsequent expressions are merged with it.
15
+ */
16
+ expr: Expr[];
12
17
  index: number;
13
18
  /** true to display multiple values */
14
19
  multi?: boolean;
@@ -19,47 +24,18 @@ export interface TextLiteralComponentProps {
19
24
  * The expression can be type `text` or `text[]`
20
25
  */
21
26
  export default class TextLiteralComponent extends React.Component<TextLiteralComponentProps> {
22
- handleSingleChange: (val: any) => any;
23
- handleMultipleChange: (val: any) => any;
24
- getOptions: (input: any, cb: any) => void;
25
- renderSingle(): React.FunctionComponentElement<{
26
- key: string;
27
- placeholder: string;
28
- value: {
29
- value: any;
30
- label: any;
31
- } | null;
32
- loadOptions: (input: any, cb: any) => void;
33
- onChange: ((val: any) => any) | undefined;
34
- isClearable: boolean;
35
- defaultOptions: boolean;
36
- isDisabled: boolean;
37
- noOptionsMessage: () => string;
38
- styles: {
39
- menu: (style: import("react-select").CSSObjectWithLabel) => import("react-select").CSSObjectWithLabel;
40
- };
41
- }>;
42
- renderMultiple(): React.FunctionComponentElement<{
43
- placeholder: string;
44
- value: {
45
- value: unknown;
46
- label: unknown;
47
- }[] | null;
48
- key: string;
49
- isMulti: boolean;
50
- loadOptions: (input: any, cb: any) => void;
51
- defaultOptions: boolean;
52
- onChange: ((val: any) => any) | undefined;
53
- isClearable: boolean;
54
- isDisabled: boolean;
55
- noOptionsMessage: () => string;
56
- styles: {
57
- menu: (style: import("react-select").CSSObjectWithLabel) => import("react-select").CSSObjectWithLabel;
58
- };
59
- }>;
60
- render(): React.DetailedReactHTMLElement<{
61
- style: {
62
- width: string;
63
- };
64
- }, HTMLElement>;
27
+ handleSingleChange: (val: any) => void | undefined;
28
+ handleMultipleChange: (val: any) => void | undefined;
29
+ /**
30
+ * Load the options for the select. If multiple expressions are supplied, each
31
+ * is queried independently and the union of the results (unique values) is
32
+ * returned.
33
+ */
34
+ getOptions: (input: string, cb: (rows: {
35
+ value: string;
36
+ label: string;
37
+ }[]) => void) => void;
38
+ renderSingle(): React.JSX.Element;
39
+ renderMultiple(): React.JSX.Element;
40
+ render(): React.JSX.Element;
65
41
  }