@mwater/visualization 5.1.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 (305) 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/GlobalFilter.d.ts +13 -0
  10. package/lib/GlobalFilter.js +2 -0
  11. package/lib/LocaleContextInjector.d.ts +5 -11
  12. package/lib/LocaleContextInjector.js +4 -12
  13. package/lib/MWaterAddRelatedFormComponent.js +3 -3
  14. package/lib/MWaterAddRelatedIndicatorComponent.d.ts +1 -4
  15. package/lib/MWaterAddRelatedIndicatorComponent.js +6 -6
  16. package/lib/MWaterCompleteTableSelectComponent.d.ts +7 -25
  17. package/lib/MWaterCompleteTableSelectComponent.js +36 -36
  18. package/lib/MWaterContextComponent.d.ts +19 -9
  19. package/lib/MWaterContextComponent.js +38 -22
  20. package/lib/MWaterCustomTablesetListComponent.js +9 -3
  21. package/lib/MWaterGlobalFiltersComponent.d.ts +6 -5
  22. package/lib/MWaterGlobalFiltersComponent.js +4 -4
  23. package/lib/MWaterLoaderComponent.d.ts +15 -3
  24. package/lib/MWaterLoaderComponent.js +11 -2
  25. package/lib/MWaterTableSelectComponent.d.ts +1 -4
  26. package/lib/MWaterTableSelectComponent.js +10 -12
  27. package/lib/UIComponents.d.ts +2 -2
  28. package/lib/UIComponents.js +4 -12
  29. package/lib/axes/Axis.d.ts +20 -25
  30. package/lib/axes/AxisBuilder.d.ts +7 -4
  31. package/lib/axes/AxisBuilder.js +12 -8
  32. package/lib/axes/AxisComponent.d.ts +6 -9
  33. package/lib/axes/AxisComponent.js +1 -2
  34. package/lib/axes/ColorPaletteCollectionComponent.d.ts +5 -12
  35. package/lib/axes/ColorPaletteCollectionComponent.js +67 -36
  36. package/lib/dashboards/DashboardComponent.d.ts +4 -17
  37. package/lib/dashboards/DashboardComponent.js +20 -67
  38. package/lib/dashboards/DashboardDesign.d.ts +5 -20
  39. package/lib/dashboards/DashboardUpgrader.js +36 -1
  40. package/lib/dashboards/DashboardViewComponent.d.ts +5 -34
  41. package/lib/dashboards/DashboardViewComponent.js +112 -136
  42. package/lib/dashboards/FontStyleEditor.d.ts +8 -0
  43. package/lib/dashboards/FontStyleEditor.js +130 -0
  44. package/lib/dashboards/LayoutOptionsComponent.d.ts +0 -1
  45. package/lib/dashboards/LayoutOptionsComponent.js +209 -39
  46. package/lib/dashboards/ServerDashboardDataSource.d.ts +1 -2
  47. package/lib/dashboards/ServerDashboardDataSource.js +52 -33
  48. package/lib/dashboards/SettingsModalComponent.d.ts +4 -15
  49. package/lib/dashboards/SettingsModalComponent.js +24 -38
  50. package/lib/dashboards/WidgetComponent.d.ts +3 -3
  51. package/lib/dashboards/WidgetComponent.js +3 -6
  52. package/lib/dashboards/WidgetDataSourcePrioritizer.d.ts +20 -0
  53. package/lib/dashboards/WidgetDataSourcePrioritizer.js +72 -0
  54. package/lib/dashboards/layoutOptions.d.ts +83 -0
  55. package/lib/dashboards/layoutOptions.js +436 -10
  56. package/lib/datagrids/DatagridComponent.d.ts +2 -9
  57. package/lib/datagrids/DatagridDataSource.d.ts +3 -3
  58. package/lib/datagrids/DatagridDataSource.js +0 -14
  59. package/lib/datagrids/DatagridDesign.d.ts +7 -6
  60. package/lib/datagrids/DatagridDesignerComponent.d.ts +2 -93
  61. package/lib/datagrids/DatagridDesignerComponent.js +8 -6
  62. package/lib/datagrids/DatagridViewComponent.js +1 -1
  63. package/lib/datagrids/FindReplaceModalComponent.d.ts +4 -20
  64. package/lib/datagrids/FindReplaceModalComponent.js +27 -13
  65. package/lib/datagrids/ServerDatagridDataSource.d.ts +8 -7
  66. package/lib/datagrids/ServerDatagridDataSource.js +88 -36
  67. package/lib/demo.js +4 -4
  68. package/lib/index.css +5 -0
  69. package/lib/index.d.ts +2 -1
  70. package/lib/index.js +0 -1
  71. package/lib/layouts/LayoutManager.d.ts +33 -29
  72. package/lib/layouts/LayoutManager.js +2 -8
  73. package/lib/layouts/blocks/BlocksDisplayComponent.d.ts +26 -56
  74. package/lib/layouts/blocks/BlocksDisplayComponent.js +122 -205
  75. package/lib/layouts/blocks/BlocksLayoutManager.d.ts +6 -22
  76. package/lib/layouts/blocks/BlocksLayoutManager.js +5 -14
  77. package/lib/layouts/blocks/HorizontalBlockComponent.d.ts +5 -4
  78. package/lib/layouts/blocks/HorizontalBlockComponent.js +5 -5
  79. package/lib/layouts/grid/GridLayoutManager.d.ts +2 -1
  80. package/lib/mWaterLoader.d.ts +2 -0
  81. package/lib/mWaterLoader.js +2 -1
  82. package/lib/maps/AddLayerComponent.d.ts +6 -8
  83. package/lib/maps/AddLayerComponent.js +6 -6
  84. package/lib/maps/BingLayer.js +10 -20
  85. package/lib/maps/BufferLayer.js +5 -2
  86. package/lib/maps/ChoroplethLayer.js +2 -1
  87. package/lib/maps/ClusterLayer.js +3 -1
  88. package/lib/maps/DirectMapDataSource.d.ts +5 -2
  89. package/lib/maps/DirectMapDataSource.js +2 -1
  90. package/lib/maps/EditPopupComponent.js +2 -1
  91. package/lib/maps/GridLayer.js +5 -3
  92. package/lib/maps/GridLayerDesigner.js +0 -1
  93. package/lib/maps/LayerSwitcherComponent.js +1 -1
  94. package/lib/maps/MapComponent.d.ts +3 -11
  95. package/lib/maps/MapComponent.js +3 -3
  96. package/lib/maps/MapDesign.d.ts +2 -13
  97. package/lib/maps/MapFiltersDesignerComponent.d.ts +0 -4
  98. package/lib/maps/MapFiltersDesignerComponent.js +4 -5
  99. package/lib/maps/MarkersLayer.js +30 -25
  100. package/lib/maps/RasterMapViewComponent.d.ts +3 -13
  101. package/lib/maps/RasterMapViewComponent.js +3 -3
  102. package/lib/maps/RegionSelectComponent.d.ts +2 -1
  103. package/lib/maps/ServerMapDataSource.d.ts +3 -4
  104. package/lib/maps/ServerMapDataSource.js +5 -5
  105. package/lib/maps/VectorMapViewComponent.js +2 -1
  106. package/lib/maps/mapSymbols.js +2 -0
  107. package/lib/maps/symbols/font-awesome/cloud-rain.png +0 -0
  108. package/lib/maps/vectorMaps.d.ts +1 -0
  109. package/lib/maps/vectorMaps.js +70 -56
  110. package/lib/quickfilter/QuickfilterCompiler.d.ts +1 -1
  111. package/lib/quickfilter/QuickfiltersComponent.d.ts +1 -4
  112. package/lib/quickfilter/QuickfiltersComponent.js +3 -3
  113. package/lib/richtext/DropdownPaletteItem.d.ts +32 -0
  114. package/lib/richtext/DropdownPaletteItem.js +82 -0
  115. package/lib/richtext/FontColorPaletteItem.d.ts +1 -5
  116. package/lib/richtext/FontColorPaletteItem.js +32 -27
  117. package/lib/richtext/ItemsHtmlConverter.js +12 -3
  118. package/lib/richtext/RichTextComponent.d.ts +26 -52
  119. package/lib/richtext/RichTextComponent.js +166 -128
  120. package/lib/valueFormatter.js +6 -1
  121. package/lib/wellknown.d.ts +5 -0
  122. package/lib/wellknown.js +288 -0
  123. package/lib/widgets/DropdownWidgetComponent.d.ts +8 -25
  124. package/lib/widgets/DropdownWidgetComponent.js +48 -25
  125. package/lib/widgets/IFrameWidgetComponent.d.ts +3 -11
  126. package/lib/widgets/ImageWidgetComponent.d.ts +8 -27
  127. package/lib/widgets/MapWidget.d.ts +4 -7
  128. package/lib/widgets/MapWidget.js +2 -1
  129. package/lib/widgets/MarkdownWidget.d.ts +2 -7
  130. package/lib/widgets/TOCWidget.d.ts +2 -9
  131. package/lib/widgets/TOCWidget.js +2 -1
  132. package/lib/widgets/Widget.d.ts +2 -0
  133. package/lib/widgets/WidgetDataSource.d.ts +3 -1
  134. package/lib/widgets/charts/Chart.d.ts +0 -1
  135. package/lib/widgets/charts/ChartViewComponent.d.ts +4 -0
  136. package/lib/widgets/charts/ChartViewComponent.js +11 -3
  137. package/lib/widgets/charts/ChartWidget.d.ts +1 -74
  138. package/lib/widgets/charts/ChartWidget.js +4 -183
  139. package/lib/widgets/charts/ChartWidgetComponent.d.ts +51 -0
  140. package/lib/widgets/charts/ChartWidgetComponent.js +167 -0
  141. package/lib/widgets/charts/calendar/CalendarChartViewComponent.d.ts +1 -4
  142. package/lib/widgets/charts/calendar/CalendarChartViewComponent.js +4 -4
  143. package/lib/widgets/charts/imagemosaic/ImagePopupComponent.d.ts +2 -7
  144. package/lib/widgets/charts/layered/LayeredChart.d.ts +5 -10
  145. package/lib/widgets/charts/layered/LayeredChart.js +6 -7
  146. package/lib/widgets/charts/layered/LayeredChartCompiler.d.ts +4 -2
  147. package/lib/widgets/charts/layered/LayeredChartCompiler.js +46 -32
  148. package/lib/widgets/charts/layered/LayeredChartDesign.d.ts +4 -0
  149. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.d.ts +5 -31
  150. package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +21 -3
  151. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.d.ts +1 -7
  152. package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.js +2 -1
  153. package/lib/widgets/charts/layered/LayeredChartViewComponent.d.ts +1 -4
  154. package/lib/widgets/charts/layered/LayeredChartViewComponent.js +89 -38
  155. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.d.ts +5 -105
  156. package/lib/widgets/charts/pivot/IntersectionDesignerComponent.js +122 -166
  157. package/lib/widgets/charts/pivot/PivotChart.d.ts +6 -0
  158. package/lib/widgets/charts/pivot/PivotChart.js +47 -17
  159. package/lib/widgets/charts/pivot/PivotChartDesign.d.ts +11 -0
  160. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +11 -7
  161. package/lib/widgets/charts/pivot/PivotChartDesignerComponent.js +1 -1
  162. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.d.ts +2 -2
  163. package/lib/widgets/charts/pivot/PivotChartLayoutBuilder.js +20 -36
  164. package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +0 -1
  165. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.d.ts +23 -2
  166. package/lib/widgets/charts/pivot/PivotChartQueryBuilder.js +215 -181
  167. package/lib/widgets/charts/pivot/PivotChartUtils.d.ts +2 -2
  168. package/lib/widgets/charts/pivot/PivotChartViewComponent.d.ts +9 -47
  169. package/lib/widgets/charts/pivot/PivotChartViewComponent.js +20 -60
  170. package/lib/widgets/charts/pivot/SegmentDesignerComponent.d.ts +55 -58
  171. package/lib/widgets/charts/table/TableChart.js +8 -4
  172. package/lib/widgets/charts/table/TableChartDesignerComponent.js +3 -3
  173. package/lib/widgets/charts/table/TableChartViewComponent.js +30 -16
  174. package/lib/widgets/text/ExprInsertModalComponent.d.ts +2 -13
  175. package/lib/widgets/text/ExprUpdateModalComponent.d.ts +2 -13
  176. package/lib/widgets/text/TextComponent.d.ts +5 -12
  177. package/lib/widgets/text/TextComponent.js +19 -39
  178. package/lib/widgets/text/TextWidget.d.ts +2 -1
  179. package/lib/widgets/text/TextWidget.js +5 -1
  180. package/lib/widgets/text/TextWidgetComponent.d.ts +15 -3
  181. package/lib/widgets/text/TextWidgetComponent.js +76 -19
  182. package/lib/widgets/text/TextWidgetDesign.d.ts +16 -2
  183. package/lib/widgets/text/TextWidgetDesign.js +6 -0
  184. package/package.json +4 -4
  185. package/src/ColorComponent.tsx +177 -0
  186. package/src/ColorSchemeFactory.ts +12 -6
  187. package/src/CustomColorsContext.tsx +8 -0
  188. package/src/FiltersDesignerComponent.ts +3 -4
  189. package/src/GlobalFilter.ts +17 -0
  190. package/src/LocaleContextInjector.tsx +14 -13
  191. package/src/MWaterAddRelatedFormComponent.ts +3 -3
  192. package/src/MWaterAddRelatedIndicatorComponent.ts +6 -6
  193. package/src/MWaterCompleteTableSelectComponent.tsx +36 -36
  194. package/src/MWaterContextComponent.tsx +42 -33
  195. package/src/MWaterCustomTablesetListComponent.tsx +21 -3
  196. package/src/MWaterGlobalFiltersComponent.ts +8 -8
  197. package/src/MWaterLoaderComponent.ts +14 -4
  198. package/src/MWaterTableSelectComponent.tsx +11 -12
  199. package/src/{UIComponents.ts → UIComponents.tsx} +7 -15
  200. package/src/axes/Axis.ts +24 -25
  201. package/src/axes/AxisBuilder.ts +16 -13
  202. package/src/axes/AxisComponent.ts +3 -4
  203. package/src/axes/{ColorPaletteCollectionComponent.ts → ColorPaletteCollectionComponent.tsx} +87 -61
  204. package/src/dashboards/DashboardComponent.tsx +73 -147
  205. package/src/dashboards/DashboardDesign.ts +5 -25
  206. package/src/dashboards/DashboardUpgrader.ts +41 -1
  207. package/src/dashboards/DashboardViewComponent.tsx +313 -0
  208. package/src/dashboards/FontStyleEditor.tsx +166 -0
  209. package/src/dashboards/LayoutOptionsComponent.tsx +377 -71
  210. package/src/dashboards/ServerDashboardDataSource.ts +52 -33
  211. package/src/dashboards/SettingsModalComponent.tsx +170 -0
  212. package/src/dashboards/WidgetComponent.tsx +6 -12
  213. package/src/dashboards/WidgetDataSourcePrioritizer.ts +82 -0
  214. package/src/dashboards/layoutOptions.tsx +581 -0
  215. package/src/datagrids/DatagridDataSource.ts +6 -12
  216. package/src/datagrids/DatagridDesign.ts +8 -3
  217. package/src/datagrids/DatagridDesignerComponent.tsx +22 -18
  218. package/src/datagrids/DatagridViewComponent.ts +3 -3
  219. package/src/datagrids/ExprCellComponent.ts +0 -1
  220. package/src/datagrids/FindReplaceModalComponent.ts +39 -22
  221. package/src/datagrids/ServerDatagridDataSource.ts +107 -45
  222. package/src/demo.ts +4 -4
  223. package/src/index.css +5 -0
  224. package/src/index.ts +2 -1
  225. package/src/layouts/LayoutManager.ts +44 -42
  226. package/src/layouts/blocks/BlocksDisplayComponent.tsx +498 -0
  227. package/src/layouts/blocks/BlocksLayoutManager.ts +6 -15
  228. package/src/layouts/blocks/HorizontalBlockComponent.ts +9 -8
  229. package/src/mWaterLoader.ts +4 -1
  230. package/src/maps/AddLayerComponent.ts +9 -9
  231. package/src/maps/BingLayer.ts +16 -26
  232. package/src/maps/BufferLayer.ts +5 -2
  233. package/src/maps/ChoroplethLayer.ts +2 -1
  234. package/src/maps/ClusterLayer.ts +3 -1
  235. package/src/maps/DirectMapDataSource.ts +12 -3
  236. package/src/maps/EditPopupComponent.ts +2 -1
  237. package/src/maps/GridLayer.ts +5 -3
  238. package/src/maps/GridLayerDesigner.tsx +0 -1
  239. package/src/maps/LayerSwitcherComponent.tsx +1 -1
  240. package/src/maps/MapComponent.ts +3 -3
  241. package/src/maps/MapDesign.ts +2 -17
  242. package/src/maps/{MapFiltersDesignerComponent.ts → MapFiltersDesignerComponent.tsx} +25 -25
  243. package/src/maps/MarkersLayer.ts +38 -41
  244. package/src/maps/RasterMapViewComponent.ts +3 -3
  245. package/src/maps/ServerMapDataSource.ts +8 -8
  246. package/src/maps/VectorMapViewComponent.tsx +2 -2
  247. package/src/maps/mapSymbols.ts +2 -0
  248. package/src/maps/symbols/font-awesome/cloud-rain.png +0 -0
  249. package/src/maps/vectorMaps.tsx +88 -74
  250. package/src/quickfilter/QuickfilterCompiler.ts +1 -1
  251. package/src/quickfilter/QuickfiltersComponent.ts +3 -3
  252. package/src/richtext/DropdownPaletteItem.tsx +144 -0
  253. package/src/richtext/FontColorPaletteItem.tsx +160 -0
  254. package/src/richtext/ItemsHtmlConverter.ts +15 -5
  255. package/src/richtext/RichTextComponent.tsx +274 -232
  256. package/src/valueFormatter.ts +5 -1
  257. package/src/wellknown.ts +286 -0
  258. package/src/widgets/DropdownWidgetComponent.tsx +75 -0
  259. package/src/widgets/MapWidget.ts +5 -2
  260. package/src/widgets/TOCWidget.ts +2 -1
  261. package/src/widgets/Widget.ts +3 -0
  262. package/src/widgets/WidgetDataSource.ts +3 -1
  263. package/src/widgets/charts/Chart.ts +1 -1
  264. package/src/widgets/charts/ChartViewComponent.ts +16 -3
  265. package/src/widgets/charts/ChartWidget.ts +3 -275
  266. package/src/widgets/charts/ChartWidgetComponent.tsx +281 -0
  267. package/src/widgets/charts/calendar/CalendarChartViewComponent.tsx +4 -4
  268. package/src/widgets/charts/layered/LayeredChart.ts +4 -6
  269. package/src/widgets/charts/layered/LayeredChartCompiler.ts +80 -63
  270. package/src/widgets/charts/layered/LayeredChartDesign.ts +7 -1
  271. package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +43 -10
  272. package/src/widgets/charts/layered/LayeredChartLayerDesignerComponent.tsx +6 -6
  273. package/src/widgets/charts/layered/LayeredChartViewComponent.ts +140 -88
  274. package/src/widgets/charts/pivot/IntersectionDesignerComponent.tsx +305 -221
  275. package/src/widgets/charts/pivot/PivotChart.ts +56 -18
  276. package/src/widgets/charts/pivot/PivotChartDesign.ts +12 -0
  277. package/src/widgets/charts/pivot/PivotChartDesignerComponent.tsx +4 -3
  278. package/src/widgets/charts/pivot/PivotChartLayoutBuilder.ts +39 -76
  279. package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +0 -1
  280. package/src/widgets/charts/pivot/PivotChartQueryBuilder.ts +230 -189
  281. package/src/widgets/charts/pivot/PivotChartUtils.ts +4 -4
  282. package/src/widgets/charts/pivot/{PivotChartViewComponent.ts → PivotChartViewComponent.tsx} +86 -89
  283. package/src/widgets/charts/table/TableChart.ts +8 -4
  284. package/src/widgets/charts/table/TableChartDesignerComponent.ts +4 -4
  285. package/src/widgets/charts/table/TableChartViewComponent.ts +32 -19
  286. package/src/widgets/text/TextComponent.tsx +47 -49
  287. package/src/widgets/text/TextWidget.ts +8 -3
  288. package/src/widgets/text/TextWidgetComponent.tsx +249 -0
  289. package/src/widgets/text/TextWidgetDesign.ts +26 -2
  290. package/src/ColorComponent.ts +0 -117
  291. package/src/dashboards/DashboardViewComponent.ts +0 -304
  292. package/src/dashboards/SettingsModalComponent.ts +0 -169
  293. package/src/dashboards/layoutOptions.ts +0 -40
  294. package/src/layout-styles.css +0 -263
  295. package/src/layouts/blocks/BlocksDisplayComponent.ts +0 -461
  296. package/src/layouts/grid/GridLayoutComponent.ts +0 -67
  297. package/src/layouts/grid/GridLayoutManager.ts +0 -185
  298. package/src/layouts/grid/LegoLayoutEngine.ts +0 -142
  299. package/src/layouts/grid/PaletteItemComponent.ts +0 -28
  300. package/src/layouts/grid/README.md +0 -14
  301. package/src/layouts/grid/WidgetContainerComponent.ts +0 -420
  302. package/src/richtext/FontColorPaletteItem.ts +0 -172
  303. package/src/richtext/FontSizePaletteItem.ts +0 -110
  304. package/src/widgets/DropdownWidgetComponent.ts +0 -78
  305. package/src/widgets/text/TextWidgetComponent.ts +0 -120
@@ -1,7 +1,5 @@
1
1
  import _ from "lodash"
2
2
  import React from "react"
3
- const R = React.createElement
4
- import async from "async"
5
3
  import uuid from "uuid"
6
4
  import { default as produce } from "immer"
7
5
  import { original } from "immer"
@@ -36,9 +34,12 @@ export default class PivotChart extends Chart {
36
34
  draft.rows = design.rows || []
37
35
  draft.columns = design.columns || []
38
36
  draft.intersections = design.intersections || {}
39
- draft.header = design.header || { style: "footer", items: [] }
37
+ draft.header = design.header || { style: "header", items: [] }
40
38
  draft.footer = design.footer || { style: "footer", items: [] }
41
39
 
40
+ // Fix style of header
41
+ draft.header.style = "header"
42
+
42
43
  if (design.table) {
43
44
  // Add default row and column
44
45
  let intersectionId, segment
@@ -93,10 +94,12 @@ export default class PivotChart extends Chart {
93
94
  // Clean all intersections
94
95
  for (intersectionId in draft.intersections) {
95
96
  const intersection = draft.intersections[intersectionId]
97
+ const intersectionTable = intersection.tableOverride || design.table
98
+
96
99
  if (intersection.valueAxis) {
97
100
  intersection.valueAxis = axisBuilder.cleanAxis({
98
101
  axis: intersection.valueAxis ? original(intersection.valueAxis) : null,
99
- table: design.table,
102
+ table: intersectionTable,
100
103
  aggrNeed: "required",
101
104
  types: ["enum", "text", "boolean", "date", "number"]
102
105
  })
@@ -105,7 +108,7 @@ export default class PivotChart extends Chart {
105
108
  if (intersection.backgroundColorAxis) {
106
109
  intersection.backgroundColorAxis = axisBuilder.cleanAxis({
107
110
  axis: intersection.backgroundColorAxis ? original(intersection.backgroundColorAxis) : null,
108
- table: design.table,
111
+ table: intersectionTable,
109
112
  aggrNeed: "required",
110
113
  types: ["enum", "text", "boolean", "date"]
111
114
  })
@@ -117,7 +120,7 @@ export default class PivotChart extends Chart {
117
120
 
118
121
  for (const colorCondition of intersection.backgroundColorConditions || []) {
119
122
  colorCondition.condition = exprCleaner.cleanExpr(colorCondition.condition ? original(colorCondition.condition)! : null, {
120
- table: design.table,
123
+ table: intersectionTable,
121
124
  types: ["boolean"],
122
125
  aggrStatuses: ["aggregate", "literal"]
123
126
  })
@@ -125,10 +128,44 @@ export default class PivotChart extends Chart {
125
128
 
126
129
  if (intersection.filter) {
127
130
  intersection.filter = exprCleaner.cleanExpr(intersection.filter ? original(intersection.filter)! : null, {
128
- table: design.table,
131
+ table: intersectionTable,
129
132
  types: ["boolean"]
130
133
  })
131
134
  }
135
+
136
+ if (intersection.tableOverride) {
137
+ const allSegments = PivotChartUtils.getAllSegments(design.rows).concat(PivotChartUtils.getAllSegments(design.columns))
138
+
139
+ // Clean segment value axis overrides
140
+ intersection.segmentValueAxisOverrides = intersection.segmentValueAxisOverrides || {}
141
+ for (const segmentId of Object.keys(intersection.segmentValueAxisOverrides)) {
142
+ // Find segment
143
+ const segment = allSegments.find((s: PivotChartSegment) => s.id === segmentId)
144
+ if (!segment || !segment.valueAxis) {
145
+ delete intersection.segmentValueAxisOverrides[segmentId]
146
+ continue
147
+ }
148
+
149
+ // Get type of the segment
150
+ const segmentValueAxisType = axisBuilder.getAxisType(segment.valueAxis!)!
151
+
152
+ intersection.segmentValueAxisOverrides[segmentId] = axisBuilder.cleanAxis({
153
+ axis: intersection.segmentValueAxisOverrides[segmentId] ? original(intersection.segmentValueAxisOverrides[segmentId]) : null,
154
+ table: intersectionTable,
155
+ aggrNeed: "none",
156
+ types: [segmentValueAxisType]
157
+ })
158
+ }
159
+
160
+ // Determine all required segment overrides
161
+ const intersectingSegmentIds = intersectionId.split(/[,:]/).filter(id => id !== "")
162
+ const intersectingSegments = allSegments.filter(segment => intersectingSegmentIds.includes(segment.id) && segment.valueAxis)
163
+
164
+ intersection.segmentValueAxisOverridesComplete = intersectingSegments.every(segment => intersection.segmentValueAxisOverrides![segment.id])
165
+ }
166
+ else {
167
+ delete intersection.segmentValueAxisOverridesComplete
168
+ }
132
169
  }
133
170
 
134
171
  // Get all intersection ids
@@ -201,6 +238,12 @@ export default class PivotChart extends Chart {
201
238
  if (intersection.valueAxis) {
202
239
  error = error || axisBuilder.validateAxis({ axis: intersection.valueAxis })
203
240
  }
241
+
242
+ if (intersection.segmentValueAxisOverrides) {
243
+ for (const segmentId of Object.keys(intersection.segmentValueAxisOverrides)) {
244
+ error = error || axisBuilder.validateAxis({ axis: intersection.segmentValueAxisOverrides[segmentId] })
245
+ }
246
+ }
204
247
  }
205
248
 
206
249
  return error
@@ -314,17 +357,12 @@ export default class PivotChart extends Chart {
314
357
  }
315
358
  }
316
359
 
317
- // Create a view element for the chart
318
- // Options include:
319
- // schema: schema to use
320
- // dataSource: dataSource to use
321
- // design: design of the chart
322
- // onDesignChange: when design changes
323
- // data: results from queries
324
- // width, height: size of the chart view
325
- // scope: current scope of the view element
326
- // onScopeChange: called when scope changes with new scope
327
- // filters: array of filters
360
+ /**
361
+ * Create a view element for the chart
362
+ *
363
+ * @param options - Options for the view element
364
+ * @returns - React element
365
+ */
328
366
  createViewElement(options: ChartCreateViewElementOptions) {
329
367
  const PivotChartViewComponent = require("./PivotChartViewComponent").default
330
368
 
@@ -112,4 +112,16 @@ export interface PivotChartIntersection {
112
112
 
113
113
  /** true if italic */
114
114
  italic?: boolean
115
+
116
+ /** Overrides table */
117
+ tableOverride?: string
118
+
119
+ /** If table is overridden, each related segment needs to have its valueAxis overridden */
120
+ segmentValueAxisOverrides?: { [id: string]: Axis | null }
121
+
122
+ /** Set true when overrides are all present. If false and tableOverride is not null, then intersection cannot be rendered.
123
+ * This is set by cleanDesign. If some are missing, the design is still valid, but the intersection will not be queried
124
+ * and the intersection will be shaded red in design mode.
125
+ */
126
+ segmentValueAxisOverridesComplete?: boolean
115
127
  }
@@ -8,6 +8,7 @@ import { FilterExprComponent } from "@mwater/expressions-ui"
8
8
  import { TableSelectComponent } from "@mwater/expressions-ui"
9
9
  import AxisComponent from "../../../axes/AxisComponent"
10
10
  import { DataSource, Schema } from "@mwater/expressions"
11
+ import { PivotChartIntersection } from "./PivotChartDesign"
11
12
 
12
13
  export interface PivotChartDesignerComponentProps {
13
14
  design: any
@@ -45,10 +46,10 @@ export default class PivotChartDesignerComponent extends React.Component<
45
46
  const row = { id: uuid(), label: "" }
46
47
  const column = { id: uuid(), label: "" }
47
48
 
48
- const intersections = {}
49
+ const intersections: { [key: string]: PivotChartIntersection } = {}
49
50
  intersections[`${row.id}:${column.id}`] = { valueAxis: { expr: { type: "op", op: "count", table, exprs: [] } } }
50
51
 
51
- return this.updateDesign({
52
+ this.updateDesign({
52
53
  table,
53
54
  rows: [row],
54
55
  columns: [column],
@@ -71,7 +72,7 @@ export default class PivotChartDesignerComponent extends React.Component<
71
72
  handleIntersectionValueAxisChange = (valueAxis: any) => {
72
73
  const intersectionId = `${this.props.design.rows[0].id}:${this.props.design.columns[0].id}`
73
74
 
74
- const intersections = {}
75
+ const intersections: { [key: string]: PivotChartIntersection } = {}
75
76
  intersections[intersectionId] = { valueAxis }
76
77
  return this.updateDesign({ intersections })
77
78
  }
@@ -118,7 +118,7 @@ export default class PivotChartLayoutBuilder {
118
118
  for (let row of rows) {
119
119
  // Emit special row header for any segments that have changed and have both axis and label
120
120
  const needsSpecialRowHeader = []
121
- for (let depth = 0; depth < rowsDepth; depth++) {
121
+ for (let depth = 0; depth < rowsDepth; depth++) {
122
122
  if (
123
123
  row[depth] &&
124
124
  rowSegments[depth] !== row[depth].segment &&
@@ -210,7 +210,7 @@ export default class PivotChartLayoutBuilder {
210
210
 
211
211
  // Set up section top/left/bottom/right info
212
212
  for (let columnIndex = 0; columnIndex < layout.rows[0].cells.length; columnIndex++) {
213
- for (let rowIndex = 0; rowIndex < layout.rows.length; rowIndex++) {
213
+ for (let rowIndex = 0; rowIndex < layout.rows.length; rowIndex++) {
214
214
  cell = layout.rows[rowIndex].cells[columnIndex]
215
215
 
216
216
  cell.sectionTop =
@@ -349,10 +349,10 @@ export default class PivotChartLayoutBuilder {
349
349
  // from getRowsOrColumns
350
350
  // dataIndexed is created above. See there for format
351
351
  buildIntersectionCell(
352
- design: PivotChartDesign,
353
- dataIndexed: any,
354
- locale: string,
355
- row: { segment: PivotChartSegment, label: string, value: any }[],
352
+ design: PivotChartDesign,
353
+ dataIndexed: any,
354
+ locale: string,
355
+ row: { segment: PivotChartSegment, label: string, value: any }[],
356
356
  column: { segment: PivotChartSegment, label: string, value: any }[]) {
357
357
 
358
358
  // Get intersection id
@@ -420,7 +420,12 @@ export default class PivotChartLayoutBuilder {
420
420
  }
421
421
 
422
422
  if (!backgroundColor && intersection.backgroundColor && !intersection.backgroundColorAxis) {
423
- ;({ backgroundColor } = intersection)
423
+ ; ({ backgroundColor } = intersection)
424
+ }
425
+
426
+ // Override to light red if segment value axis overrides are incomplete
427
+ if (intersection.tableOverride && !intersection.segmentValueAxisOverridesComplete) {
428
+ backgroundColor = "#FFCDCD"
424
429
  }
425
430
 
426
431
  if (backgroundColor) {
@@ -433,29 +438,20 @@ export default class PivotChartLayoutBuilder {
433
438
 
434
439
  // Determine summarize value for unconfigured cells
435
440
  setupSummarize(design: any, layout: any) {
436
- return __range__(0, layout.rows[0].cells.length, false).map((columnIndex) =>
437
- (() => {
438
- const result = []
439
- for (
440
- let rowIndex = 0, end = layout.rows.length, asc = 0 <= end;
441
- asc ? rowIndex < end : rowIndex > end;
442
- asc ? rowIndex++ : rowIndex--
443
- ) {
444
- const cell = layout.rows[rowIndex].cells[columnIndex]
441
+ for (let columnIndex = 0; columnIndex < layout.rows[0].cells.length; columnIndex++) {
442
+ for (let rowIndex = 0; rowIndex < layout.rows.length; rowIndex++) {
443
+ const cell = layout.rows[rowIndex].cells[columnIndex]
445
444
 
446
- if (cell.unconfigured && cell.type === "row") {
447
- cell.summarize = PivotChartUtils.canSummarizeSegment(design.rows, cell.section)
448
- }
445
+ if (cell.unconfigured && cell.type === "row") {
446
+ cell.summarize = PivotChartUtils.canSummarizeSegment(design.rows, cell.section)
447
+ }
449
448
 
450
- if (cell.unconfigured && cell.type === "column") {
451
- result.push((cell.summarize = PivotChartUtils.canSummarizeSegment(design.columns, cell.section)))
452
- } else {
453
- result.push(undefined)
454
- }
449
+ if (cell.unconfigured && cell.type === "column") {
450
+ cell.summarize = PivotChartUtils.canSummarizeSegment(design.columns, cell.section)
455
451
  }
456
- return result
457
- })()
458
- )
452
+ }
453
+
454
+ }
459
455
  }
460
456
 
461
457
  // Determine borders, mutating cells
@@ -463,7 +459,6 @@ export default class PivotChartLayoutBuilder {
463
459
  // Set up borders for row and column cells
464
460
  let cell, columnIndex, rowIndex
465
461
  let asc, end
466
- let asc2, end2
467
462
  const borderTops: any = [] // Array of border top information for intersections. index is layout row number
468
463
  const borderBottoms: any = [] // Array of border bottom information for intersections. index is layout row number
469
464
  const borderLefts: any = [] // Array of border left information for intersections. index is layout column number
@@ -584,17 +579,8 @@ export default class PivotChartLayoutBuilder {
584
579
  }
585
580
 
586
581
  // Propagate borders across row cells and down column cells so that heavier border win
587
- for (
588
- columnIndex = 1, end2 = layout.rows[0].cells.length, asc2 = 1 <= end2;
589
- asc2 ? columnIndex < end2 : columnIndex > end2;
590
- asc2 ? columnIndex++ : columnIndex--
591
- ) {
592
- var asc3, end3
593
- for (
594
- rowIndex = 1, end3 = layout.rows.length, asc3 = 1 <= end3;
595
- asc3 ? rowIndex < end3 : rowIndex > end3;
596
- asc3 ? rowIndex++ : rowIndex--
597
- ) {
582
+ for (let columnIndex = 1; columnIndex < layout.rows[0].cells.length; columnIndex++) {
583
+ for (let rowIndex = 1; rowIndex < layout.rows.length; rowIndex++) {
598
584
  cell = layout.rows[rowIndex].cells[columnIndex]
599
585
 
600
586
  if (cell.type === "row") {
@@ -610,41 +596,19 @@ export default class PivotChartLayoutBuilder {
610
596
  }
611
597
 
612
598
  // Setup borders of intersections
613
- return (() => {
614
- let asc4, end4
615
- const result = []
616
- for (
617
- columnIndex = 0, end4 = layout.rows[0].cells.length, asc4 = 0 <= end4;
618
- asc4 ? columnIndex < end4 : columnIndex > end4;
619
- asc4 ? columnIndex++ : columnIndex--
620
- ) {
621
- result.push(
622
- (() => {
623
- let asc5, end5
624
- const result1 = []
625
- for (
626
- rowIndex = 0, end5 = layout.rows.length, asc5 = 0 <= end5;
627
- asc5 ? rowIndex < end5 : rowIndex > end5;
628
- asc5 ? rowIndex++ : rowIndex--
629
- ) {
630
- cell = layout.rows[rowIndex].cells[columnIndex]
631
-
632
- if (cell.type === "intersection") {
633
- cell.borderLeft = borderLefts[columnIndex]
634
- cell.borderRight = borderRights[columnIndex]
635
-
636
- cell.borderTop = borderTops[rowIndex]
637
- result1.push((cell.borderBottom = borderBottoms[rowIndex]))
638
- } else {
639
- result1.push(undefined)
640
- }
641
- }
642
- return result1
643
- })()
644
- )
599
+ for (let columnIndex = 0; columnIndex < layout.rows[0].cells.length; columnIndex++) {
600
+ for (let rowIndex = 0; rowIndex < layout.rows.length; rowIndex++) {
601
+ cell = layout.rows[rowIndex].cells[columnIndex]
602
+
603
+ if (cell.type === "intersection") {
604
+ cell.borderLeft = borderLefts[columnIndex]
605
+ cell.borderRight = borderRights[columnIndex]
606
+
607
+ cell.borderTop = borderTops[rowIndex]
608
+ cell.borderBottom = borderBottoms[rowIndex]
609
+ }
645
610
  }
646
- return result
647
- })()
611
+ }
648
612
  }
649
613
 
650
614
  // Get rows or columns in format of array of
@@ -652,8 +616,7 @@ export default class PivotChartLayoutBuilder {
652
616
  // For segments with no children, there will be an array of single value array entries (array of array)
653
617
  // data is lookup of query results by intersection id
654
618
  // parentSegments are ancestry of current segment, starting with root
655
- getRowsOrColumns(isRow: boolean, segment: PivotChartSegment, data: { [intersectionId: string]: any[] }, locale: string, parentSegments: PivotChartSegment[] = [], parentValues: any[] = []):
656
- { segment: PivotChartSegment, label: string, value: any }[][] {
619
+ getRowsOrColumns(isRow: boolean, segment: PivotChartSegment, data: { [intersectionId: string]: any[] }, locale: string, parentSegments: PivotChartSegment[] = [], parentValues: any[] = []): { segment: PivotChartSegment, label: string, value: any }[][] {
657
620
  // If no axis, categories are just null
658
621
  let categories, value
659
622
  if (!segment.valueAxis) {
@@ -710,7 +673,7 @@ export default class PivotChartLayoutBuilder {
710
673
 
711
674
  // Get categories, mapping label
712
675
  categories = _.map(this.axisBuilder.getCategories(segment.valueAxis, allValues, { locale, onlyValuesPresent: segment.valueAxisOnlyValuesPresent }), (category) => {
713
- return { value: category.value, label: this.axisBuilder.formatCategory(segment.valueAxis, category) }
676
+ return { value: category.value, label: this.axisBuilder.formatCategory(segment.valueAxis!, category) }
714
677
  })
715
678
 
716
679
  // Filter excluded values
@@ -287,7 +287,6 @@ position: relative;
287
287
  .pivot-chart-table .cell {
288
288
  padding: 5px;
289
289
  vertical-align: top;
290
- background-color: white;
291
290
  }
292
291
 
293
292
  .pivot-chart-table .bt1 { border-top: solid 1px #f4f4f4 }