@mwater/visualization 5.2.0 → 5.3.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 (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 +8 -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 +379 -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,5 +1,4 @@
1
1
  import _ from "lodash"
2
- import $ from "jquery"
3
2
  import { DataSource, Expr, injectTableAlias } from "@mwater/expressions"
4
3
  import { JsonQLFilter } from "../JsonQLFilter"
5
4
  import querystring from "querystring"
@@ -104,18 +103,23 @@ class ServerQuickfilterDataSource implements QuickfiltersDataSource {
104
103
  headers["Cache-Control"] = `max-age=${seconds}`
105
104
  }
106
105
 
107
- $.ajax({
108
- dataType: "json",
106
+ fetch(url, {
109
107
  method: "GET",
110
- url,
111
- headers
108
+ headers: headers
112
109
  })
113
- .done((data: any) => {
110
+ .then(async response => {
111
+ if (!response.ok) {
112
+ const text = await response.text()
113
+ throw new Error(text)
114
+ }
115
+ return response.json()
116
+ })
117
+ .then(data => {
114
118
  return callback(null, data)
115
119
  })
116
- .fail((xhr: any) => {
117
- console.log(xhr.responseText)
118
- return callback(new Error(xhr.responseText))
120
+ .catch(error => {
121
+ console.log(error.message)
122
+ return callback(error)
119
123
  })
120
124
  }
121
125
  }
@@ -158,18 +162,23 @@ class ServerWidgetDataSource {
158
162
  headers["Cache-Control"] = `max-age=${seconds}`
159
163
  }
160
164
 
161
- return $.ajax({
162
- dataType: "json",
165
+ fetch(url, {
163
166
  method: "GET",
164
- url,
165
- headers
167
+ headers: headers
166
168
  })
167
- .done((data: any) => {
169
+ .then(async response => {
170
+ if (!response.ok) {
171
+ const text = await response.text()
172
+ throw new Error(text)
173
+ }
174
+ return response.json()
175
+ })
176
+ .then(data => {
168
177
  return callback(null, data)
169
178
  })
170
- .fail((xhr: any) => {
171
- console.log(xhr.responseText)
172
- return callback(new Error(xhr.responseText))
179
+ .catch(error => {
180
+ console.log(error.message)
181
+ return callback(error)
173
182
  })
174
183
  }
175
184
 
@@ -242,18 +251,23 @@ class ServerWidgetMapDataSource implements MapDataSource {
242
251
  headers["Cache-Control"] = `max-age=${seconds}`
243
252
  }
244
253
 
245
- $.ajax({
246
- dataType: "json",
254
+ fetch(url, {
247
255
  method: "GET",
248
- url,
249
256
  headers
250
257
  })
251
- .done((data: any) => {
258
+ .then(async response => {
259
+ if (!response.ok) {
260
+ const text = await response.text()
261
+ throw new Error(text)
262
+ }
263
+ return response.json()
264
+ })
265
+ .then(data => {
252
266
  return callback(null, data)
253
267
  })
254
- .fail((xhr: any) => {
255
- console.log(xhr.responseText)
256
- return callback(new Error(xhr.responseText))
268
+ .catch(error => {
269
+ console.log(error.message)
270
+ return callback(error)
257
271
  })
258
272
  }
259
273
 
@@ -491,18 +505,23 @@ class ServerWidgetLayerPopupWidgetDataSource implements WidgetDataSource {
491
505
  headers["Cache-Control"] = `max-age=${seconds}`
492
506
  }
493
507
 
494
- $.ajax({
495
- dataType: "json",
508
+ fetch(url, {
496
509
  method: "GET",
497
- url,
498
- headers
510
+ headers: headers
499
511
  })
500
- .done((data: any) => {
501
- return callback(null, data)
512
+ .then(async response => {
513
+ if (!response.ok) {
514
+ const text = await response.text()
515
+ throw new Error(text)
516
+ }
517
+ return response.json()
518
+ })
519
+ .then(data => {
520
+ callback(null, data)
502
521
  })
503
- .fail((xhr: any) => {
504
- console.log(xhr.responseText)
505
- return callback(new Error(xhr.responseText))
522
+ .catch(error => {
523
+ console.log(error.message)
524
+ callback(error)
506
525
  })
507
526
  }
508
527
 
@@ -4,6 +4,7 @@ import { JsonQLFilter } from "../JsonQLFilter"
4
4
  import WidgetFactory from "../widgets/WidgetFactory"
5
5
  import { WidgetScope } from "../WidgetScope"
6
6
  import DashboardDataSource from "./DashboardDataSource"
7
+ import { WidgetDataSource } from "../widgets/WidgetDataSource"
7
8
 
8
9
  /**
9
10
  * Component which renders a widget and ensures that props do not change
@@ -21,8 +22,8 @@ export function WidgetComponent(props: {
21
22
  /** Called with new widget design. null/undefined for readonly **/
22
23
  onDesignChange?: { (design: object): void } | null
23
24
 
24
- /** Data source for dashboard */
25
- dashboardDataSource: DashboardDataSource
25
+ /** Data source for widget */
26
+ widgetDataSource: WidgetDataSource
26
27
 
27
28
  /** schema to use **/
28
29
  schema: Schema
@@ -66,14 +67,6 @@ export function WidgetComponent(props: {
66
67
  /** Change to force a refresh */
67
68
  refreshKey?: any
68
69
  }) {
69
- // Get and stabilize widget data source
70
- // TODO!!! There is a global problem with DashboardDataSources being re-created on each render.
71
- // TODO!!! This now only uses the type of the dashboard data source. They should be more stable in the future.
72
- const widgetDataSource = useMemo(
73
- () => props.dashboardDataSource.getWidgetDataSource(props.type, props.id),
74
- [props.dashboardDataSource.constructor, props.type, props.id, props.schema, props.dataSource, props.refreshKey]
75
- )
76
-
77
70
  const widget = WidgetFactory.createWidget(props.type)
78
71
 
79
72
  // Stabilize functions
@@ -89,7 +82,7 @@ export function WidgetComponent(props: {
89
82
  return widget.createViewElement({
90
83
  schema: props.schema,
91
84
  dataSource: props.dataSource,
92
- widgetDataSource,
85
+ widgetDataSource: props.widgetDataSource,
93
86
  design: props.design,
94
87
  scope,
95
88
  filters,
@@ -102,7 +95,8 @@ export function WidgetComponent(props: {
102
95
  namedStrings: props.namedStrings,
103
96
  tocEntries: props.tocEntries,
104
97
  onScrollToTOCEntry: props.onScrollToTOCEntry,
105
- widgetRef
98
+ widgetRef,
99
+ refreshKey: props.refreshKey
106
100
  })
107
101
  }
108
102
 
@@ -0,0 +1,82 @@
1
+ import PQueue from 'p-queue'
2
+ import DashboardDataSource from './DashboardDataSource'
3
+ import { WidgetDataSource } from '../widgets/WidgetDataSource'
4
+ import { JsonQLFilter } from '../JsonQLFilter'
5
+ import { MapDesign } from '../maps/MapDesign'
6
+
7
+ /**
8
+ * A class that prioritizes widget data sources based on the priority of the data source
9
+ * and ensures that only N requests is made at a time for a given widget data source.
10
+ */
11
+ export class WidgetDataSourcePrioritizer {
12
+ private queue: PQueue
13
+ private dashboardDataSource: DashboardDataSource
14
+
15
+ /**
16
+ * Key is widget type + ":" + widget id + ":" + priority
17
+ */
18
+ widgetDataSources: { [key: string]: WidgetDataSource }
19
+
20
+ constructor(dashboardDataSource: DashboardDataSource, concurrency: number) {
21
+ this.dashboardDataSource = dashboardDataSource
22
+ this.queue = new PQueue({ concurrency: concurrency })
23
+ this.widgetDataSources = {}
24
+ }
25
+
26
+ /** Get a widget data source with the given priority */
27
+ getWidgetDataSource(widgetType: string, widgetId: string, priority: number) {
28
+ let widgetDataSource = this.widgetDataSources[widgetType + ":" + widgetId + ":" + priority]
29
+ if (!widgetDataSource) {
30
+ const innerWidgetDataSource = this.dashboardDataSource.getWidgetDataSource(widgetType, widgetId)
31
+
32
+ widgetDataSource = {
33
+ getData: (design: any, filters: JsonQLFilter[], callback: (error: any, data?: any) => void): AbortController => {
34
+ const task = () => new Promise((resolve, reject) => {
35
+ innerWidgetDataSource.getData(design, filters, (error, data) => {
36
+ if (error) {
37
+ callback(error)
38
+ reject(error)
39
+ } else {
40
+ callback(null, data)
41
+ resolve(data)
42
+ }
43
+ })
44
+ })
45
+
46
+ // Create an abort controller for this task
47
+ const taskAbortController = new AbortController()
48
+
49
+ // Queue the task and handle errors
50
+ this.queue.add(task, { priority: priority, signal: taskAbortController.signal }).catch((e: any) => {
51
+ console.log("Task failed", e)
52
+ callback(e)
53
+ })
54
+
55
+ return taskAbortController
56
+ },
57
+
58
+ /** Get the url to download an image (by id from an image or imagelist column)
59
+ * Height, if specified, is minimum height needed. May return larger image */
60
+ getImageUrl: (imageId: string, height?: number): string => {
61
+ return innerWidgetDataSource.getImageUrl(imageId, height)
62
+ }
63
+ }
64
+
65
+ if (innerWidgetDataSource.getMapDataSource) {
66
+ widgetDataSource.getMapDataSource = (design: MapDesign) => {
67
+ return innerWidgetDataSource.getMapDataSource!(design)
68
+ }
69
+ }
70
+
71
+ this.widgetDataSources[widgetType + ":" + widgetId + ":" + priority] = widgetDataSource
72
+ }
73
+
74
+ return widgetDataSource
75
+ }
76
+
77
+ cancel() {
78
+ // Clear the queue
79
+ this.queue.clear()
80
+ }
81
+ }
82
+