@mwater/visualization 5.2.0 → 5.3.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 (254) hide show
  1. package/lib/ColorComponent.d.ts +10 -11
  2. package/lib/ColorComponent.js +78 -29
  3. package/lib/ColorSchemeFactory.d.ts +13 -2
  4. package/lib/ColorSchemeFactory.js +7 -5
  5. package/lib/CustomColorsContext.d.ts +6 -0
  6. package/lib/CustomColorsContext.js +6 -0
  7. package/lib/FiltersDesignerComponent.d.ts +1 -4
  8. package/lib/FiltersDesignerComponent.js +2 -3
  9. package/lib/LocaleContextInjector.d.ts +5 -11
  10. package/lib/LocaleContextInjector.js +4 -12
  11. package/lib/MWaterAddRelatedFormComponent.js +3 -3
  12. package/lib/MWaterAddRelatedIndicatorComponent.d.ts +1 -4
  13. package/lib/MWaterAddRelatedIndicatorComponent.js +6 -6
  14. package/lib/MWaterCompleteTableSelectComponent.d.ts +5 -16
  15. package/lib/MWaterCompleteTableSelectComponent.js +36 -36
  16. package/lib/MWaterContextComponent.d.ts +4 -6
  17. package/lib/MWaterContextComponent.js +4 -13
  18. package/lib/MWaterLoaderComponent.d.ts +5 -3
  19. package/lib/MWaterLoaderComponent.js +2 -1
  20. package/lib/MWaterTableSelectComponent.d.ts +1 -4
  21. package/lib/MWaterTableSelectComponent.js +10 -12
  22. package/lib/UIComponents.d.ts +2 -2
  23. package/lib/UIComponents.js +4 -12
  24. package/lib/axes/AxisBuilder.d.ts +7 -4
  25. package/lib/axes/AxisBuilder.js +3 -1
  26. package/lib/axes/AxisComponent.d.ts +2 -5
  27. package/lib/axes/AxisComponent.js +1 -2
  28. package/lib/axes/ColorPaletteCollectionComponent.d.ts +5 -12
  29. package/lib/axes/ColorPaletteCollectionComponent.js +67 -36
  30. package/lib/dashboards/DashboardComponent.d.ts +4 -12
  31. package/lib/dashboards/DashboardComponent.js +18 -38
  32. package/lib/dashboards/DashboardDesign.d.ts +3 -3
  33. package/lib/dashboards/DashboardUpgrader.js +36 -1
  34. package/lib/dashboards/DashboardViewComponent.d.ts +5 -34
  35. package/lib/dashboards/DashboardViewComponent.js +109 -132
  36. package/lib/dashboards/FontStyleEditor.d.ts +8 -0
  37. package/lib/dashboards/FontStyleEditor.js +130 -0
  38. package/lib/dashboards/LayoutOptionsComponent.d.ts +0 -1
  39. package/lib/dashboards/LayoutOptionsComponent.js +211 -42
  40. package/lib/dashboards/ServerDashboardDataSource.d.ts +1 -2
  41. package/lib/dashboards/ServerDashboardDataSource.js +52 -33
  42. package/lib/dashboards/WidgetComponent.d.ts +3 -3
  43. package/lib/dashboards/WidgetComponent.js +3 -6
  44. package/lib/dashboards/WidgetDataSourcePrioritizer.d.ts +20 -0
  45. package/lib/dashboards/WidgetDataSourcePrioritizer.js +72 -0
  46. package/lib/dashboards/layoutOptions.d.ts +83 -0
  47. package/lib/dashboards/layoutOptions.js +436 -10
  48. package/lib/datagrids/DatagridDesign.d.ts +7 -6
  49. package/lib/datagrids/ServerDatagridDataSource.d.ts +7 -6
  50. package/lib/datagrids/ServerDatagridDataSource.js +87 -33
  51. package/lib/demo.js +3 -3
  52. package/lib/index.css +5 -0
  53. package/lib/index.d.ts +1 -1
  54. package/lib/index.js +0 -1
  55. package/lib/layouts/LayoutManager.d.ts +33 -29
  56. package/lib/layouts/LayoutManager.js +2 -8
  57. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +26 -57
  58. package/lib/layouts/blocks/BlocksDisplayComponent.js +122 -205
  59. package/lib/layouts/blocks/BlocksLayoutManager.d.ts +6 -22
  60. package/lib/layouts/blocks/BlocksLayoutManager.js +5 -14
  61. package/lib/layouts/blocks/HorizontalBlockComponent.d.ts +5 -4
  62. package/lib/layouts/blocks/HorizontalBlockComponent.js +5 -5
  63. package/lib/mWaterLoader.d.ts +2 -0
  64. package/lib/mWaterLoader.js +2 -1
  65. package/lib/maps/AddLayerComponent.d.ts +6 -8
  66. package/lib/maps/AddLayerComponent.js +6 -6
  67. package/lib/maps/BingLayer.js +10 -20
  68. package/lib/maps/BufferLayer.js +2 -1
  69. package/lib/maps/ChoroplethLayer.js +2 -1
  70. package/lib/maps/DirectMapDataSource.d.ts +5 -2
  71. package/lib/maps/DirectMapDataSource.js +2 -1
  72. package/lib/maps/EditPopupComponent.js +2 -1
  73. package/lib/maps/MapComponent.d.ts +1 -4
  74. package/lib/maps/MapComponent.js +3 -3
  75. package/lib/maps/MarkersLayer.js +30 -25
  76. package/lib/maps/RasterMapViewComponent.d.ts +1 -4
  77. package/lib/maps/RasterMapViewComponent.js +3 -3
  78. package/lib/maps/ServerMapDataSource.d.ts +2 -3
  79. package/lib/maps/ServerMapDataSource.js +5 -5
  80. package/lib/maps/VectorMapViewComponent.js +2 -1
  81. package/lib/maps/mapSymbols.js +2 -0
  82. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  83. package/lib/maps/vectorMaps.js +61 -55
  84. package/lib/quickfilter/QuickfiltersComponent.d.ts +1 -4
  85. package/lib/quickfilter/QuickfiltersComponent.js +3 -3
  86. package/lib/richtext/DropdownPaletteItem.d.ts +32 -0
  87. package/lib/richtext/DropdownPaletteItem.js +82 -0
  88. package/lib/richtext/FontColorPaletteItem.d.ts +1 -5
  89. package/lib/richtext/FontColorPaletteItem.js +32 -27
  90. package/lib/richtext/ItemsHtmlConverter.js +12 -3
  91. package/lib/richtext/RichTextComponent.d.ts +26 -52
  92. package/lib/richtext/RichTextComponent.js +166 -128
  93. package/lib/valueFormatter.js +6 -1
  94. package/lib/wellknown.d.ts +5 -0
  95. package/lib/wellknown.js +288 -0
  96. package/lib/widgets/DropdownWidgetComponent.d.ts +8 -25
  97. package/lib/widgets/DropdownWidgetComponent.js +48 -25
  98. package/lib/widgets/IFrameWidgetComponent.d.ts +1 -2
  99. package/lib/widgets/ImageWidgetComponent.d.ts +2 -3
  100. package/lib/widgets/MapWidget.d.ts +2 -0
  101. package/lib/widgets/MapWidget.js +2 -1
  102. package/lib/widgets/TOCWidget.js +2 -1
  103. package/lib/widgets/Widget.d.ts +2 -0
  104. package/lib/widgets/WidgetDataSource.d.ts +3 -1
  105. package/lib/widgets/charts/Chart.d.ts +0 -1
  106. package/lib/widgets/charts/ChartViewComponent.d.ts +4 -0
  107. package/lib/widgets/charts/ChartViewComponent.js +11 -3
  108. package/lib/widgets/charts/ChartWidget.d.ts +1 -62
  109. package/lib/widgets/charts/ChartWidget.js +4 -183
  110. package/lib/widgets/charts/ChartWidgetComponent.d.ts +51 -0
  111. package/lib/widgets/charts/ChartWidgetComponent.js +167 -0
  112. package/lib/widgets/charts/calendar/CalendarChartViewComponent.d.ts +1 -4
  113. package/lib/widgets/charts/calendar/CalendarChartViewComponent.js +4 -4
  114. package/lib/widgets/charts/layered/LayeredChart.d.ts +5 -10
  115. package/lib/widgets/charts/layered/LayeredChart.js +6 -7
  116. package/lib/widgets/charts/layered/LayeredChartCompiler.d.ts +4 -2
  117. package/lib/widgets/charts/layered/LayeredChartCompiler.js +46 -32
  118. package/lib/widgets/charts/layered/LayeredChartDesign.d.ts +4 -0
  119. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.d.ts +3 -0
  120. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +21 -3
  121. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.d.ts +1 -2
  122. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.js +2 -1
  123. package/lib/widgets/charts/layered/LayeredChartViewComponent.d.ts +1 -4
  124. package/lib/widgets/charts/layered/LayeredChartViewComponent.js +89 -38
  125. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.d.ts +5 -112
  126. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.js +122 -166
  127. package/lib/widgets/charts/pivot/PivotChart.d.ts +6 -0
  128. package/lib/widgets/charts/pivot/PivotChart.js +47 -17
  129. package/lib/widgets/charts/pivot/PivotChartDesign.d.ts +11 -0
  130. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +1 -1
  131. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.js +1 -1
  132. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.d.ts +2 -2
  133. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.js +20 -36
  134. package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +0 -1
  135. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.d.ts +23 -2
  136. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.js +215 -181
  137. package/lib/widgets/charts/pivot/PivotChartUtils.d.ts +2 -2
  138. package/lib/widgets/charts/pivot/PivotChartViewComponent.d.ts +9 -28
  139. package/lib/widgets/charts/pivot/PivotChartViewComponent.js +20 -60
  140. package/lib/widgets/charts/table/TableChart.js +8 -4
  141. package/lib/widgets/charts/table/TableChartDesignerComponent.js +3 -3
  142. package/lib/widgets/charts/table/TableChartViewComponent.js +11 -11
  143. package/lib/widgets/text/TextComponent.d.ts +5 -12
  144. package/lib/widgets/text/TextComponent.js +19 -39
  145. package/lib/widgets/text/TextWidget.d.ts +2 -1
  146. package/lib/widgets/text/TextWidget.js +5 -1
  147. package/lib/widgets/text/TextWidgetComponent.d.ts +15 -3
  148. package/lib/widgets/text/TextWidgetComponent.js +76 -19
  149. package/lib/widgets/text/TextWidgetDesign.d.ts +13 -1
  150. package/lib/widgets/text/TextWidgetDesign.js +6 -0
  151. package/package.json +4 -4
  152. package/src/ColorComponent.tsx +177 -0
  153. package/src/ColorSchemeFactory.ts +12 -6
  154. package/src/CustomColorsContext.tsx +9 -0
  155. package/src/FiltersDesignerComponent.ts +3 -4
  156. package/src/LocaleContextInjector.tsx +14 -13
  157. package/src/MWaterAddRelatedFormComponent.ts +3 -3
  158. package/src/MWaterAddRelatedIndicatorComponent.ts +6 -6
  159. package/src/MWaterCompleteTableSelectComponent.tsx +36 -36
  160. package/src/MWaterContextComponent.tsx +8 -17
  161. package/src/MWaterLoaderComponent.ts +6 -3
  162. package/src/MWaterTableSelectComponent.tsx +11 -12
  163. package/src/{UIComponents.ts → UIComponents.tsx} +7 -15
  164. package/src/axes/AxisBuilder.ts +7 -5
  165. package/src/axes/AxisComponent.ts +3 -4
  166. package/src/axes/{ColorPaletteCollectionComponent.ts → ColorPaletteCollectionComponent.tsx} +87 -61
  167. package/src/dashboards/DashboardComponent.tsx +71 -107
  168. package/src/dashboards/DashboardDesign.ts +3 -3
  169. package/src/dashboards/DashboardUpgrader.ts +41 -1
  170. package/src/dashboards/DashboardViewComponent.tsx +313 -0
  171. package/src/dashboards/FontStyleEditor.tsx +166 -0
  172. package/src/dashboards/LayoutOptionsComponent.tsx +380 -75
  173. package/src/dashboards/ServerDashboardDataSource.ts +52 -33
  174. package/src/dashboards/WidgetComponent.tsx +6 -12
  175. package/src/dashboards/WidgetDataSourcePrioritizer.ts +82 -0
  176. package/src/dashboards/layoutOptions.tsx +581 -0
  177. package/src/datagrids/DatagridDesign.ts +8 -3
  178. package/src/datagrids/ServerDatagridDataSource.ts +106 -43
  179. package/src/demo.ts +3 -3
  180. package/src/index.css +5 -0
  181. package/src/index.ts +1 -1
  182. package/src/layouts/LayoutManager.ts +44 -42
  183. package/src/layouts/blocks/BlocksDisplayComponent.tsx +498 -0
  184. package/src/layouts/blocks/BlocksLayoutManager.ts +6 -15
  185. package/src/layouts/blocks/HorizontalBlockComponent.ts +9 -8
  186. package/src/mWaterLoader.ts +4 -1
  187. package/src/maps/AddLayerComponent.ts +9 -9
  188. package/src/maps/BingLayer.ts +16 -26
  189. package/src/maps/BufferLayer.ts +2 -1
  190. package/src/maps/ChoroplethLayer.ts +2 -1
  191. package/src/maps/DirectMapDataSource.ts +12 -3
  192. package/src/maps/EditPopupComponent.ts +2 -1
  193. package/src/maps/MapComponent.ts +3 -3
  194. package/src/maps/MarkersLayer.ts +38 -41
  195. package/src/maps/RasterMapViewComponent.ts +3 -3
  196. package/src/maps/ServerMapDataSource.ts +7 -7
  197. package/src/maps/VectorMapViewComponent.tsx +2 -1
  198. package/src/maps/mapSymbols.ts +2 -0
  199. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  200. package/src/maps/vectorMaps.tsx +79 -74
  201. package/src/quickfilter/QuickfiltersComponent.ts +3 -3
  202. package/src/richtext/DropdownPaletteItem.tsx +144 -0
  203. package/src/richtext/FontColorPaletteItem.tsx +160 -0
  204. package/src/richtext/ItemsHtmlConverter.ts +15 -5
  205. package/src/richtext/RichTextComponent.tsx +274 -232
  206. package/src/valueFormatter.ts +5 -1
  207. package/src/wellknown.ts +286 -0
  208. package/src/widgets/DropdownWidgetComponent.tsx +75 -0
  209. package/src/widgets/MapWidget.ts +5 -2
  210. package/src/widgets/TOCWidget.ts +2 -1
  211. package/src/widgets/Widget.ts +3 -0
  212. package/src/widgets/WidgetDataSource.ts +3 -1
  213. package/src/widgets/charts/Chart.ts +1 -1
  214. package/src/widgets/charts/ChartViewComponent.ts +16 -3
  215. package/src/widgets/charts/ChartWidget.ts +3 -275
  216. package/src/widgets/charts/ChartWidgetComponent.tsx +281 -0
  217. package/src/widgets/charts/calendar/CalendarChartViewComponent.tsx +4 -4
  218. package/src/widgets/charts/layered/LayeredChart.ts +4 -6
  219. package/src/widgets/charts/layered/LayeredChartCompiler.ts +80 -63
  220. package/src/widgets/charts/layered/LayeredChartDesign.ts +7 -1
  221. package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +43 -10
  222. package/src/widgets/charts/layered/LayeredChartLayerDesignerComponent.tsx +6 -6
  223. package/src/widgets/charts/layered/LayeredChartViewComponent.ts +140 -88
  224. package/src/widgets/charts/pivot/IntersectionDesignerComponent.tsx +305 -221
  225. package/src/widgets/charts/pivot/PivotChart.ts +56 -18
  226. package/src/widgets/charts/pivot/PivotChartDesign.ts +12 -0
  227. package/src/widgets/charts/pivot/PivotChartDesignerComponent.tsx +4 -3
  228. package/src/widgets/charts/pivot/PivotChartLayoutBuilder.ts +39 -76
  229. package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +0 -1
  230. package/src/widgets/charts/pivot/PivotChartQueryBuilder.ts +230 -189
  231. package/src/widgets/charts/pivot/PivotChartUtils.ts +4 -4
  232. package/src/widgets/charts/pivot/{PivotChartViewComponent.ts → PivotChartViewComponent.tsx} +86 -89
  233. package/src/widgets/charts/table/TableChart.ts +8 -4
  234. package/src/widgets/charts/table/TableChartDesignerComponent.ts +4 -4
  235. package/src/widgets/charts/table/TableChartViewComponent.ts +13 -14
  236. package/src/widgets/text/TextComponent.tsx +47 -49
  237. package/src/widgets/text/TextWidget.ts +8 -3
  238. package/src/widgets/text/TextWidgetComponent.tsx +249 -0
  239. package/src/widgets/text/TextWidgetDesign.ts +22 -1
  240. package/src/ColorComponent.ts +0 -117
  241. package/src/dashboards/DashboardViewComponent.ts +0 -303
  242. package/src/dashboards/layoutOptions.ts +0 -40
  243. package/src/layout-styles.css +0 -263
  244. package/src/layouts/blocks/BlocksDisplayComponent.ts +0 -461
  245. package/src/layouts/grid/GridLayoutComponent.ts +0 -67
  246. package/src/layouts/grid/GridLayoutManager.ts +0 -185
  247. package/src/layouts/grid/LegoLayoutEngine.ts +0 -142
  248. package/src/layouts/grid/PaletteItemComponent.ts +0 -28
  249. package/src/layouts/grid/README.md +0 -14
  250. package/src/layouts/grid/WidgetContainerComponent.ts +0 -420
  251. package/src/richtext/FontColorPaletteItem.ts +0 -172
  252. package/src/richtext/FontSizePaletteItem.ts +0 -110
  253. package/src/widgets/DropdownWidgetComponent.ts +0 -78
  254. package/src/widgets/text/TextWidgetComponent.ts +0 -120
@@ -1,8 +1,9 @@
1
- import $ from "jquery"
2
- import querystring from "querystring"
3
1
  import DatagridDataSource from "./DatagridDataSource"
4
2
  import compressJson from "../compressJson"
5
- import { DatagridDesign } from ".."
3
+ import querystring from "querystring"
4
+ import { DatagridDesign, JsonQLFilter } from ".."
5
+ import { QuickfiltersDataSource } from "../quickfilter/QuickfiltersDataSource"
6
+ import { Expr, Row } from "@mwater/expressions"
6
7
 
7
8
  export interface ServerDatagridDataSourceOptions {
8
9
  /** API url to use for talking to mWater server */
@@ -38,42 +39,86 @@ export default class ServerDatagridDataSource implements DatagridDataSource {
38
39
  // Get the data that the widget needs. The widget should implement getData method (see above) to get the data from the server
39
40
  // design: design of the widget. Ignored in the case of server-side rendering
40
41
  // filters: array of filters to apply. Each is { table: table id, jsonql: jsonql condition with {alias} for tableAlias. Use injectAlias to correct
41
- getRows(design: DatagridDesign, offset: any, limit: any, filters: any, callback: any) {
42
- const query = {
42
+ async getRows(
43
+ design: DatagridDesign,
44
+ offset: number,
45
+ limit: number,
46
+ filters: JsonQLFilter[] | undefined,
47
+ callback: (error: any, rows?: Row[]) => void
48
+ ) {
49
+ const query: Record<string, any> = {
43
50
  client: this.options.client,
44
51
  share: this.options.share,
45
- filters: compressJson(filters),
46
52
  rev: this.options.rev,
47
53
  offset,
48
54
  limit
49
55
  }
50
56
 
51
- const url = this.options.apiUrl + `datagrids/${this.options.datagridId}/data?` + querystring.stringify(query)
52
-
53
- return $.getJSON(url, (data: any) => {
54
- return callback(null, data)
55
- }).fail((xhr: any) => {
56
- console.log(xhr.responseText)
57
- return callback(new Error(xhr.responseText))
58
- })
57
+ const filtersJson = JSON.stringify(filters)
58
+ const baseUrl = this.options.apiUrl + `datagrids/${this.options.datagridId}/data`
59
+
60
+ try {
61
+ let response: Response
62
+
63
+ // If the filters are too large, we need to send them in the body
64
+ if (filtersJson.length > 5000) {
65
+ response = await fetch(baseUrl + '?' + querystring.stringify(query), {
66
+ method: 'POST',
67
+ headers: { 'Content-Type': 'application/json' },
68
+ body: JSON.stringify({ filters: compressJson(filters) }),
69
+ })
70
+ } else {
71
+ query.filters = compressJson(filters)
72
+ const url = baseUrl + '?' + querystring.stringify(query)
73
+ response = await fetch(url)
74
+ }
75
+
76
+ if (!response.ok) {
77
+ throw new Error(`HTTP error! status: ${response.status}`)
78
+ }
79
+ const data = await response.json()
80
+ callback(null, data)
81
+ } catch (error) {
82
+ console.error(error)
83
+ callback(error)
84
+ }
59
85
  }
60
86
 
61
- countRows(design: DatagridDesign, filters: any, callback: any) {
62
- const query = {
87
+ async countRows(design: DatagridDesign, filters: any, callback: any) {
88
+ const query: Record<string, any> = {
63
89
  client: this.options.client,
64
90
  share: this.options.share,
65
- filters: compressJson(filters),
66
- rev: this.options.rev,
91
+ rev: this.options.rev
67
92
  }
68
93
 
69
- const url = this.options.apiUrl + `datagrids/${this.options.datagridId}/summary?` + querystring.stringify(query)
70
-
71
- return $.getJSON(url, (data: any) => {
72
- return callback(null, data?.[0]?.cnt)
73
- }).fail((xhr: any) => {
74
- console.log(xhr.responseText)
75
- return callback(new Error(xhr.responseText))
76
- })
94
+ const filtersJson = JSON.stringify(filters)
95
+ const baseUrl = this.options.apiUrl + `datagrids/${this.options.datagridId}/summary`
96
+
97
+ try {
98
+ let response: Response
99
+
100
+ // If the filters are too large, we need to send them in the body
101
+ if (filtersJson.length > 5000) {
102
+ response = await fetch(baseUrl + '?' + querystring.stringify(query), {
103
+ method: 'POST',
104
+ headers: { 'Content-Type': 'application/json' },
105
+ body: JSON.stringify({ filters: compressJson(filters) }),
106
+ })
107
+ } else {
108
+ query.filters = compressJson(filters)
109
+ const url = baseUrl + '?' + querystring.stringify(query)
110
+ response = await fetch(url)
111
+ }
112
+
113
+ if (!response.ok) {
114
+ throw new Error(`HTTP error! status: ${response.status}`)
115
+ }
116
+ const data = await response.json()
117
+ callback(null, data?.[0]?.cnt)
118
+ } catch (error) {
119
+ console.error(error)
120
+ callback(error)
121
+ }
77
122
  }
78
123
 
79
124
  getQuickfiltersDataSource() {
@@ -98,7 +143,7 @@ interface ServerQuickfilterDataSourceOptions {
98
143
  rev?: number
99
144
  }
100
145
 
101
- class ServerQuickfilterDataSource {
146
+ class ServerQuickfilterDataSource implements QuickfiltersDataSource {
102
147
  options: ServerQuickfilterDataSourceOptions
103
148
  // options:
104
149
  // apiUrl: API url to use for talking to mWater server
@@ -111,26 +156,44 @@ class ServerQuickfilterDataSource {
111
156
  }
112
157
 
113
158
  // Gets the values of the quickfilter at index
114
- getValues(index: any, expr: any, filters: any, offset: any, limit: any, callback: any) {
115
- const query = {
159
+ async getValues(index: number, expr: Expr, filters: JsonQLFilter[], offset: number | null, limit: number, callback: (error: any, values?: any[]) => void) {
160
+ const query: Record<string, any> = {
116
161
  client: this.options.client,
117
162
  share: this.options.share,
118
- filters: compressJson(filters),
119
- offset,
163
+ offset: offset ?? 0,
120
164
  limit,
121
165
  rev: this.options.rev
122
166
  }
123
167
 
124
- const url =
125
- this.options.apiUrl +
126
- `datagrids/${this.options.datagridId}/quickfilters/${index}/values?` +
127
- querystring.stringify(query)
128
-
129
- return $.getJSON(url, (data: any) => {
130
- return callback(null, data)
131
- }).fail((xhr: any) => {
132
- console.log(xhr.responseText)
133
- return callback(new Error(xhr.responseText))
134
- })
168
+ try {
169
+ let response: Response
170
+
171
+ const url = this.options.apiUrl + `datagrids/${this.options.datagridId}/quickfilters/${index}/values`
172
+
173
+ const filtersJson = JSON.stringify(filters)
174
+
175
+ // If the filters are too large, we need to send them in the body
176
+ if (filtersJson.length > 5000) {
177
+ query.filters = compressJson(filters)
178
+ response = await fetch(url + '?' + querystring.stringify(query), {
179
+ method: 'POST',
180
+ headers: { 'Content-Type': 'application/json' },
181
+ body: JSON.stringify({ filters: compressJson(filters) }),
182
+ })
183
+ } else {
184
+ query.filters = filtersJson
185
+ response = await fetch(url + '?' + querystring.stringify(query))
186
+ }
187
+
188
+ if (!response.ok) {
189
+ throw new Error(`HTTP error! status: ${response.status}`)
190
+ }
191
+
192
+ const data = await response.json()
193
+ callback(null, data)
194
+ } catch (error) {
195
+ console.error(error)
196
+ callback(error)
197
+ }
135
198
  }
136
- }
199
+ }
package/src/demo.ts CHANGED
@@ -42,14 +42,14 @@ $(function () {
42
42
  "div",
43
43
  { className: "container-fluid", style: { height: "100%", paddingLeft: 0, paddingRight: 0 } },
44
44
  R("style", null, "html, body, #main { height: 100% }"),
45
- R(MWaterDirectMapPane, { apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1) })
45
+ R(MWaterDirectDashboardPane, { apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1) })
46
+ //R(MWaterDashboardPane, {apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1), dashboardId: "38d803820a7a4bf5a1d5ef19cf8c64f3"})
47
+ // R(MWaterDirectMapPane, { apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1) })
46
48
  // R(RichTextPane)
47
49
  // R(MWaterMapPane, {apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1)})
48
50
  // R(TestPane, apiUrl: "https://api.mwater.co/v3/")
49
51
  // R(MWaterDashboardPane, apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1), dashboardId: "a855eb0587d845d3ac27aed03c463976", share: "817c76088c7649ec8cc0b8193e547a09")
50
52
  // R(MWaterDashboardPane, {apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1), dashboardId: "f99f206ddd4442a981761b8342c58058"})
51
- // R(MWaterDashboardPane, {apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1), dashboardId: "38d803820a7a4bf5a1d5ef19cf8c64f3"})
52
- // R(MWaterDirectDashboardPane, { apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1) })
53
53
  //R(MWaterDirectDashboardPane, { apiUrl: "http://localhost:1234/v3/", client: window.location.hash.substr(1) })
54
54
  //R(MWaterDatagridPane, { apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1) })
55
55
  // R(MWaterDirectMapPane, { apiUrl: "https://api.mwater.co/v3/", client: window.location.hash.substr(1) })
package/src/index.css CHANGED
@@ -1,3 +1,8 @@
1
+ /*
2
+ Lato, Lora, Inter, Merriweather, Roboto
3
+ */
4
+ @import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Lora:ital,wght@0,400..700;1,400..700&family=Merriweather:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
5
+
1
6
  /** Plain link with cursor pointer. Can be span or a */
2
7
  .link-plain {
3
8
  color: var(--bs-primary);
package/src/index.ts CHANGED
@@ -41,6 +41,7 @@ export { default as MWaterContextComponent } from "./MWaterContextComponent"
41
41
 
42
42
  export { default as mWaterLoader } from "./mWaterLoader"
43
43
 
44
+ export { WidgetDataSource } from "./widgets/WidgetDataSource"
44
45
  export { default as DirectWidgetDataSource } from "./widgets/DirectWidgetDataSource"
45
46
 
46
47
  import "leaflet/dist/leaflet.css"
@@ -50,7 +51,6 @@ import "./layouts/decorated-block.css"
50
51
  import "react-datepicker/dist/react-datepicker.css"
51
52
  import "billboard.js/dist/billboard.css"
52
53
  import "./index.css"
53
- import "./layout-styles.css"
54
54
 
55
55
  export { setMapTilerApiKey } from "./maps/vectorMaps"
56
56
 
@@ -1,47 +1,56 @@
1
1
  import { ReactElement, ReactNode } from "react"
2
- import { BlocksLayoutOptions } from "../dashboards/layoutOptions"
2
+ import { BlocksLayoutOptions, DashboardTheme } from "../dashboards/layoutOptions"
3
3
 
4
- /** Responsible for laying out items, rendering widgets and holding them in a data structure that is layout manager specific */
5
- export default class LayoutManager {
6
- /** Renders the layout as a react element */
7
- renderLayout(options: {
8
- /** width of layout */
9
- width?: number
4
+ /** Options for rendering a widget */
5
+ export interface RenderWidgetOptions {
6
+ id: string
7
+ type: string
8
+
9
+ design: any
10
+ onDesignChange?: (design: any) => void
11
+
12
+ width: number
13
+
14
+ /** height of widget. If not specified, is auto height */
15
+ height?: number
16
+
17
+ /** Priority of widget. Higher priority widgets are rendered first */
18
+ priority?: number
19
+ }
20
+
21
+ export interface RenderLayoutOptions {
22
+ /** width of layout */
23
+ width?: number
10
24
 
11
- /** opaque items object that layout manager understands */
12
- items: any
25
+ /** opaque items object that layout manager understands */
26
+ items: any
13
27
 
14
- /** Called when items changes */
15
- onItemsChange?: (items: any) => void
28
+ /** Called when items changes */
29
+ onItemsChange?: (items: any) => void
16
30
 
17
- /** called with ({ id:, type:, design:, onDesignChange:, width:, height: }) */
18
- renderWidget: (options: {
19
- id: string
20
- type: string
21
- design: any
22
- onDesignChange: (design: any) => void
23
- width: number
24
- height: number
25
- }) => ReactElement
31
+ /** called with ({ id:, type:, design:, onDesignChange:, width:, height: }) */
32
+ renderWidget: (options: RenderWidgetOptions) => ReactElement
26
33
 
27
- /** style to use for layout. null for default */
28
- style: string | null
34
+ /** layout options to use */
35
+ layoutOptions: BlocksLayoutOptions
29
36
 
30
- /** layout options to use */
31
- layoutOptions: BlocksLayoutOptions | null
37
+ /** true to disable maps */
38
+ disableMaps?: boolean
32
39
 
33
- /** true to disable maps */
34
- disableMaps?: boolean
40
+ /** clipboard contents */
41
+ clipboard?: any
35
42
 
36
- /** clipboard contents */
37
- clipboard: any
43
+ /** called when clipboard is changed */
44
+ onClipboardChange?: (clipboard: any) => void
38
45
 
39
- /** called when clipboard is changed */
40
- onClipboardChange: (clipboard: any) => void
46
+ /** message to display if clipboard can't be pasted into current dashboard */
47
+ cantPasteMessage?: string
48
+ }
41
49
 
42
- /** message to display if clipboard can't be pasted into current dashboard */
43
- cantPasteMessage: string
44
- }): ReactNode {
50
+ /** Responsible for laying out items, rendering widgets and holding them in a data structure that is layout manager specific */
51
+ export default class LayoutManager {
52
+ /** Renders the layout as a react element */
53
+ renderLayout(options: RenderLayoutOptions): ReactNode {
45
54
  return null
46
55
  }
47
56
 
@@ -61,19 +70,12 @@ export default class LayoutManager {
61
70
  }
62
71
 
63
72
  static createLayoutManager(type: string): LayoutManager {
64
- // Default is old grid type
65
- type = type || "grid"
73
+ type = type || "blocks"
66
74
 
67
75
  switch (type) {
68
- case "grid": // Old one
69
- var GridLayoutManager = require("./grid/GridLayoutManager").default
70
- return new GridLayoutManager()
71
- break
72
-
73
- case "blocks": // New one
76
+ case "blocks":
74
77
  var BlocksLayoutManager = require("./blocks/BlocksLayoutManager").default
75
78
  return new BlocksLayoutManager()
76
- break
77
79
 
78
80
  default:
79
81
  throw new Error(`Unknown layout manager type ${type}`)