@sis-cc/dotstatsuite-components 22.0.1 → 22.0.3

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 (366) hide show
  1. package/dist/bridge-d3-react/src/index.js +18 -0
  2. package/dist/bridge-d3-react/src/index.js.map +1 -0
  3. package/dist/bridge-d3-react/src/react-chart-factory.js +44 -0
  4. package/dist/bridge-d3-react/src/react-chart-factory.js.map +1 -0
  5. package/dist/rules/src/chart/getAxisOptions.js +256 -0
  6. package/dist/rules/src/chart/getAxisOptions.js.map +1 -0
  7. package/dist/rules/src/chart/getBaseOptions.js +77 -0
  8. package/dist/rules/src/chart/getBaseOptions.js.map +1 -0
  9. package/dist/rules/src/chart/getChartOptions.js +120 -0
  10. package/dist/rules/src/chart/getChartOptions.js.map +1 -0
  11. package/dist/rules/src/chart/getGridOptions.js +46 -0
  12. package/dist/rules/src/chart/getGridOptions.js.map +1 -0
  13. package/dist/rules/src/chart/getTooltipOptions.js +223 -0
  14. package/dist/rules/src/chart/getTooltipOptions.js.map +1 -0
  15. package/dist/rules/src/constants.js +65 -0
  16. package/dist/rules/src/constants.js.map +1 -0
  17. package/dist/rules/src/date.js +121 -0
  18. package/dist/rules/src/date.js.map +1 -0
  19. package/dist/rules/src/dimension-utils.js +57 -0
  20. package/dist/rules/src/dimension-utils.js.map +1 -0
  21. package/dist/rules/src/factories/choro-series.js +68 -0
  22. package/dist/rules/src/factories/choro-series.js.map +1 -0
  23. package/dist/rules/src/factories/sample-focus.js +25 -0
  24. package/dist/rules/src/factories/sample-focus.js.map +1 -0
  25. package/dist/rules/src/factories/sample-series.js +53 -0
  26. package/dist/rules/src/factories/sample-series.js.map +1 -0
  27. package/dist/rules/src/factories/scatter-dimension.js +35 -0
  28. package/dist/rules/src/factories/scatter-dimension.js.map +1 -0
  29. package/dist/rules/src/factories/scatter-focus.js +42 -0
  30. package/dist/rules/src/factories/scatter-focus.js.map +1 -0
  31. package/dist/rules/src/factories/scatter-series.js +91 -0
  32. package/dist/rules/src/factories/scatter-series.js.map +1 -0
  33. package/dist/rules/src/factories/stacked-dimension.js +32 -0
  34. package/dist/rules/src/factories/stacked-dimension.js.map +1 -0
  35. package/dist/rules/src/factories/stacked-series.js +188 -0
  36. package/dist/rules/src/factories/stacked-series.js.map +1 -0
  37. package/dist/rules/src/factories/symbol-dimension.js +32 -0
  38. package/dist/rules/src/factories/symbol-dimension.js.map +1 -0
  39. package/dist/rules/src/factories/symbol-series.js +65 -0
  40. package/dist/rules/src/factories/symbol-series.js.map +1 -0
  41. package/dist/rules/src/factories/timeline-focus.js +21 -0
  42. package/dist/rules/src/factories/timeline-focus.js.map +1 -0
  43. package/dist/rules/src/factories/timeline-series.js +94 -0
  44. package/dist/rules/src/factories/timeline-series.js.map +1 -0
  45. package/dist/rules/src/get-values-enhanced.js +133 -0
  46. package/dist/rules/src/get-values-enhanced.js.map +1 -0
  47. package/dist/rules/src/header/getDefaultSubtitle.js +44 -0
  48. package/dist/rules/src/header/getDefaultSubtitle.js.map +1 -0
  49. package/dist/rules/src/header/getHeaderUnits.js +21 -0
  50. package/dist/rules/src/header/getHeaderUnits.js.map +1 -0
  51. package/dist/rules/src/header/getSubtitleFlags.js +47 -0
  52. package/dist/rules/src/header/getSubtitleFlags.js.map +1 -0
  53. package/dist/rules/src/header/getTitleFlags.js +12 -0
  54. package/dist/rules/src/header/getTitleFlags.js.map +1 -0
  55. package/dist/rules/src/index.js +379 -0
  56. package/dist/rules/src/index.js.map +1 -0
  57. package/dist/rules/src/layout.js +107 -0
  58. package/dist/rules/src/layout.js.map +1 -0
  59. package/dist/rules/src/observation-formater.js +86 -0
  60. package/dist/rules/src/observation-formater.js.map +1 -0
  61. package/dist/rules/src/preparators/formatValue.js +96 -0
  62. package/dist/rules/src/preparators/formatValue.js.map +1 -0
  63. package/dist/rules/src/preparators/getObservations.js +22 -0
  64. package/dist/rules/src/preparators/getObservations.js.map +1 -0
  65. package/dist/rules/src/preparators/getReportingYearStart.js +19 -0
  66. package/dist/rules/src/preparators/getReportingYearStart.js.map +1 -0
  67. package/dist/rules/src/properties/errors.js +22 -0
  68. package/dist/rules/src/properties/errors.js.map +1 -0
  69. package/dist/rules/src/properties/focus.js +72 -0
  70. package/dist/rules/src/properties/focus.js.map +1 -0
  71. package/dist/rules/src/properties/getAvailableChartTypes.js +31 -0
  72. package/dist/rules/src/properties/getAvailableChartTypes.js.map +1 -0
  73. package/dist/rules/src/properties/getHeaderProps.js +76 -0
  74. package/dist/rules/src/properties/getHeaderProps.js.map +1 -0
  75. package/dist/rules/src/properties/getInformationsStateFromNewProps.js +50 -0
  76. package/dist/rules/src/properties/getInformationsStateFromNewProps.js.map +1 -0
  77. package/dist/rules/src/properties/getObservationsType.js +28 -0
  78. package/dist/rules/src/properties/getObservationsType.js.map +1 -0
  79. package/dist/rules/src/properties/getStringifiedSubtitle.js +9 -0
  80. package/dist/rules/src/properties/getStringifiedSubtitle.js.map +1 -0
  81. package/dist/rules/src/properties/index.js +384 -0
  82. package/dist/rules/src/properties/index.js.map +1 -0
  83. package/dist/rules/src/properties/linear.js +123 -0
  84. package/dist/rules/src/properties/linear.js.map +1 -0
  85. package/dist/rules/src/properties/scatter.js +156 -0
  86. package/dist/rules/src/properties/scatter.js.map +1 -0
  87. package/dist/rules/src/properties/stacked.js +96 -0
  88. package/dist/rules/src/properties/stacked.js.map +1 -0
  89. package/dist/rules/src/properties/symbol.js +76 -0
  90. package/dist/rules/src/properties/symbol.js.map +1 -0
  91. package/dist/rules/src/properties/utils.js +86 -0
  92. package/dist/rules/src/properties/utils.js.map +1 -0
  93. package/dist/rules/src/sdmx-data/index.js +38 -0
  94. package/dist/rules/src/sdmx-data/index.js.map +1 -0
  95. package/dist/rules/src/table/factories/getCellValue.js +53 -0
  96. package/dist/rules/src/table/factories/getCellValue.js.map +1 -0
  97. package/dist/rules/src/v8-transformer.js +174 -0
  98. package/dist/rules/src/v8-transformer.js.map +1 -0
  99. package/dist/rules2/src/applyHierarchicalCodesToDim.js +126 -0
  100. package/dist/rules2/src/applyHierarchicalCodesToDim.js.map +1 -0
  101. package/dist/rules2/src/combinedValuesDisplay.js +77 -0
  102. package/dist/rules2/src/combinedValuesDisplay.js.map +1 -0
  103. package/dist/rules2/src/constants.js +9 -0
  104. package/dist/rules2/src/constants.js.map +1 -0
  105. package/dist/rules2/src/duplicateObservations.js +38 -0
  106. package/dist/rules2/src/duplicateObservations.js.map +1 -0
  107. package/dist/rules2/src/enhanceObservations.js +98 -0
  108. package/dist/rules2/src/enhanceObservations.js.map +1 -0
  109. package/dist/rules2/src/getAttributesSeries.js +39 -0
  110. package/dist/rules2/src/getAttributesSeries.js.map +1 -0
  111. package/dist/rules2/src/getCombinationDefinitions.js +50 -0
  112. package/dist/rules2/src/getCombinationDefinitions.js.map +1 -0
  113. package/dist/rules2/src/getDataflowAttributes.js +25 -0
  114. package/dist/rules2/src/getDataflowAttributes.js.map +1 -0
  115. package/dist/rules2/src/getDataflowTooltipAttributesIds.js +33 -0
  116. package/dist/rules2/src/getDataflowTooltipAttributesIds.js.map +1 -0
  117. package/dist/rules2/src/getDimensionValuesIndexes.js +16 -0
  118. package/dist/rules2/src/getDimensionValuesIndexes.js.map +1 -0
  119. package/dist/rules2/src/getHCodelistsRefsInData.js +35 -0
  120. package/dist/rules2/src/getHCodelistsRefsInData.js.map +1 -0
  121. package/dist/rules2/src/getHeaderCombinations.js +51 -0
  122. package/dist/rules2/src/getHeaderCombinations.js.map +1 -0
  123. package/dist/rules2/src/getHeaderCoordinates.js +10 -0
  124. package/dist/rules2/src/getHeaderCoordinates.js.map +1 -0
  125. package/dist/rules2/src/getHeaderSubtitle.js +37 -0
  126. package/dist/rules2/src/getHeaderSubtitle.js.map +1 -0
  127. package/dist/rules2/src/getHeaderTitle.js +18 -0
  128. package/dist/rules2/src/getHeaderTitle.js.map +1 -0
  129. package/dist/rules2/src/getMSDInformations.js +26 -0
  130. package/dist/rules2/src/getMSDInformations.js.map +1 -0
  131. package/dist/rules2/src/getManyValuesDimensions.js +37 -0
  132. package/dist/rules2/src/getManyValuesDimensions.js.map +1 -0
  133. package/dist/rules2/src/getMetadataCoordinates.js +40 -0
  134. package/dist/rules2/src/getMetadataCoordinates.js.map +1 -0
  135. package/dist/rules2/src/getNotDisplayedIds.js +56 -0
  136. package/dist/rules2/src/getNotDisplayedIds.js.map +1 -0
  137. package/dist/rules2/src/getOneValueDimensions.js +37 -0
  138. package/dist/rules2/src/getOneValueDimensions.js.map +1 -0
  139. package/dist/rules2/src/getSeriesCombinations.js +27 -0
  140. package/dist/rules2/src/getSeriesCombinations.js.map +1 -0
  141. package/dist/rules2/src/hasCellMetadata.js +17 -0
  142. package/dist/rules2/src/hasCellMetadata.js.map +1 -0
  143. package/dist/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js +60 -0
  144. package/dist/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js.map +1 -0
  145. package/dist/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js +38 -0
  146. package/dist/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js.map +1 -0
  147. package/dist/rules2/src/index.js +47 -0
  148. package/dist/rules2/src/index.js.map +1 -0
  149. package/dist/rules2/src/parseAttributes.js +44 -0
  150. package/dist/rules2/src/parseAttributes.js.map +1 -0
  151. package/dist/rules2/src/parseCombinations.js +105 -0
  152. package/dist/rules2/src/parseCombinations.js.map +1 -0
  153. package/dist/rules2/src/parseHierarchicalCodelist.js +34 -0
  154. package/dist/rules2/src/parseHierarchicalCodelist.js.map +1 -0
  155. package/dist/rules2/src/parseMetadataSeries.js +124 -0
  156. package/dist/rules2/src/parseMetadataSeries.js.map +1 -0
  157. package/dist/rules2/src/prepareData.js +78 -0
  158. package/dist/rules2/src/prepareData.js.map +1 -0
  159. package/dist/rules2/src/refineAttributes.js +19 -0
  160. package/dist/rules2/src/refineAttributes.js.map +1 -0
  161. package/dist/rules2/src/refineDimensions.js +21 -0
  162. package/dist/rules2/src/refineDimensions.js.map +1 -0
  163. package/dist/rules2/src/refineTimePeriod.js +130 -0
  164. package/dist/rules2/src/refineTimePeriod.js.map +1 -0
  165. package/dist/rules2/src/sdmx3.0DataFormatPatch.js +12 -0
  166. package/dist/rules2/src/sdmx3.0DataFormatPatch.js.map +1 -0
  167. package/dist/rules2/src/table/declineObservationsOverAttributes.js +35 -0
  168. package/dist/rules2/src/table/declineObservationsOverAttributes.js.map +1 -0
  169. package/dist/rules2/src/table/getCells.js +96 -0
  170. package/dist/rules2/src/table/getCells.js.map +1 -0
  171. package/dist/rules2/src/table/getCellsAttributesIds.js +41 -0
  172. package/dist/rules2/src/table/getCellsAttributesIds.js.map +1 -0
  173. package/dist/rules2/src/table/getCellsMetadataCoordinates.js +16 -0
  174. package/dist/rules2/src/table/getCellsMetadataCoordinates.js.map +1 -0
  175. package/dist/rules2/src/table/getCuratedCells.js +36 -0
  176. package/dist/rules2/src/table/getCuratedCells.js.map +1 -0
  177. package/dist/rules2/src/table/getFlagsAndNotes.js +26 -0
  178. package/dist/rules2/src/table/getFlagsAndNotes.js.map +1 -0
  179. package/dist/rules2/src/table/getIndexedCombinationsByDisplay.js +19 -0
  180. package/dist/rules2/src/table/getIndexedCombinationsByDisplay.js.map +1 -0
  181. package/dist/rules2/src/table/getLayout.js +87 -0
  182. package/dist/rules2/src/table/getLayout.js.map +1 -0
  183. package/dist/rules2/src/table/getLayoutData2.js +205 -0
  184. package/dist/rules2/src/table/getLayoutData2.js.map +1 -0
  185. package/dist/rules2/src/table/getSortedLayoutIndexes.js +141 -0
  186. package/dist/rules2/src/table/getSortedLayoutIndexes.js.map +1 -0
  187. package/dist/rules2/src/table/getTableLabelAccessor.js +11 -0
  188. package/dist/rules2/src/table/getTableLabelAccessor.js.map +1 -0
  189. package/dist/rules2/src/table/getTableLayoutIds.js +317 -0
  190. package/dist/rules2/src/table/getTableLayoutIds.js.map +1 -0
  191. package/dist/rules2/src/table/getTableProps.js +85 -0
  192. package/dist/rules2/src/table/getTableProps.js.map +1 -0
  193. package/dist/rules2/src/table/parseSeriesIndexesHierarchies.js +82 -0
  194. package/dist/rules2/src/table/parseSeriesIndexesHierarchies.js.map +1 -0
  195. package/dist/rules2/src/table/parseValueHierarchy.js +29 -0
  196. package/dist/rules2/src/table/parseValueHierarchy.js.map +1 -0
  197. package/dist/rules2/src/table/refineLayoutSize2.js +324 -0
  198. package/dist/rules2/src/table/refineLayoutSize2.js.map +1 -0
  199. package/dist/rules2/src/utils.js +29 -0
  200. package/dist/rules2/src/utils.js.map +1 -0
  201. package/dist/viewer/src/chart.js +50 -0
  202. package/dist/viewer/src/chart.js.map +1 -0
  203. package/dist/viewer/src/chartUtils/options.js +33 -0
  204. package/dist/viewer/src/chartUtils/options.js.map +1 -0
  205. package/dist/viewer/src/chartUtils/series.js +54 -0
  206. package/dist/viewer/src/chartUtils/series.js.map +1 -0
  207. package/dist/viewer/src/footer.js +39 -0
  208. package/dist/viewer/src/footer.js.map +1 -0
  209. package/dist/viewer/src/header.js +12 -0
  210. package/dist/viewer/src/header.js.map +1 -0
  211. package/dist/viewer/src/index.js +160 -0
  212. package/dist/viewer/src/index.js.map +1 -0
  213. package/dist/viewer/src/legends/AxisLegend.js +42 -0
  214. package/dist/viewer/src/legends/AxisLegend.js.map +1 -0
  215. package/dist/viewer/src/legends/ChartLegends.js +80 -0
  216. package/dist/viewer/src/legends/ChartLegends.js.map +1 -0
  217. package/dist/viewer/src/legends/FocusLegend.js +67 -0
  218. package/dist/viewer/src/legends/FocusLegend.js.map +1 -0
  219. package/dist/viewer/src/legends/Legend.js +51 -0
  220. package/dist/viewer/src/legends/Legend.js.map +1 -0
  221. package/dist/viewer/src/legends/SeriesLegend.js +77 -0
  222. package/dist/viewer/src/legends/SeriesLegend.js.map +1 -0
  223. package/dist/viewer/src/utils.js +24 -0
  224. package/dist/viewer/src/utils.js.map +1 -0
  225. package/package.json +1 -1
  226. package/src/app.js +13 -0
  227. package/src/bridge-d3-react/README.md +42 -0
  228. package/src/bridge-d3-react/src/app.js +64 -0
  229. package/src/bridge-d3-react/src/index.js +16 -0
  230. package/src/bridge-d3-react/src/mock-choro.js +394 -0
  231. package/src/bridge-d3-react/src/react-chart-factory.jsx +65 -0
  232. package/src/index.js +10 -0
  233. package/src/rules/README.md +23 -0
  234. package/src/rules/src/chart/getAxisOptions.js +263 -0
  235. package/src/rules/src/chart/getBaseOptions.js +84 -0
  236. package/src/rules/src/chart/getChartOptions.js +118 -0
  237. package/src/rules/src/chart/getGridOptions.js +52 -0
  238. package/src/rules/src/chart/getTooltipOptions.js +230 -0
  239. package/src/rules/src/constants.js +64 -0
  240. package/src/rules/src/date.js +118 -0
  241. package/src/rules/src/dimension-utils.js +54 -0
  242. package/src/rules/src/factories/choro-series.js +65 -0
  243. package/src/rules/src/factories/sample-focus.js +22 -0
  244. package/src/rules/src/factories/sample-series.js +50 -0
  245. package/src/rules/src/factories/scatter-dimension.js +32 -0
  246. package/src/rules/src/factories/scatter-focus.js +39 -0
  247. package/src/rules/src/factories/scatter-series.js +92 -0
  248. package/src/rules/src/factories/stacked-dimension.js +29 -0
  249. package/src/rules/src/factories/stacked-series.js +185 -0
  250. package/src/rules/src/factories/symbol-dimension.js +29 -0
  251. package/src/rules/src/factories/symbol-series.js +62 -0
  252. package/src/rules/src/factories/timeline-focus.js +18 -0
  253. package/src/rules/src/factories/timeline-series.js +91 -0
  254. package/src/rules/src/get-values-enhanced.js +134 -0
  255. package/src/rules/src/header/getDefaultSubtitle.js +40 -0
  256. package/src/rules/src/header/getHeaderUnits.js +17 -0
  257. package/src/rules/src/header/getSubtitleFlags.js +43 -0
  258. package/src/rules/src/header/getTitleFlags.js +8 -0
  259. package/src/rules/src/header/index.js +4 -0
  260. package/src/rules/src/index.js +400 -0
  261. package/src/rules/src/layout.js +113 -0
  262. package/src/rules/src/observation-formater.js +83 -0
  263. package/src/rules/src/preparators/enhanceObservations.js +152 -0
  264. package/src/rules/src/preparators/formatValue.js +93 -0
  265. package/src/rules/src/preparators/getObservations.js +19 -0
  266. package/src/rules/src/preparators/getReportingYearStart.js +16 -0
  267. package/src/rules/src/properties/errors.js +19 -0
  268. package/src/rules/src/properties/focus.js +69 -0
  269. package/src/rules/src/properties/getAvailableChartTypes.js +34 -0
  270. package/src/rules/src/properties/getHeaderProps.js +74 -0
  271. package/src/rules/src/properties/getInformationsStateFromNewProps.js +47 -0
  272. package/src/rules/src/properties/getObservationsType.js +29 -0
  273. package/src/rules/src/properties/getStringifiedSubtitle.js +6 -0
  274. package/src/rules/src/properties/index.js +424 -0
  275. package/src/rules/src/properties/information.js +84 -0
  276. package/src/rules/src/properties/linear.js +129 -0
  277. package/src/rules/src/properties/scatter.js +158 -0
  278. package/src/rules/src/properties/stacked.js +98 -0
  279. package/src/rules/src/properties/symbol.js +79 -0
  280. package/src/rules/src/properties/utils.js +110 -0
  281. package/src/rules/src/sdmx-data/index.js +39 -0
  282. package/src/rules/src/table/factories/getCellValue.js +50 -0
  283. package/src/rules/src/table/index.js +1 -0
  284. package/src/rules/src/v8-transformer.js +177 -0
  285. package/src/rules2/src/applyHierarchicalCodesToDim.js +123 -0
  286. package/src/rules2/src/combinedValuesDisplay.js +74 -0
  287. package/src/rules2/src/constants.js +6 -0
  288. package/src/rules2/src/duplicateObservations.js +35 -0
  289. package/src/rules2/src/enhanceObservations.js +95 -0
  290. package/src/rules2/src/getAdvAttrSeriesAtCoordinates.js +29 -0
  291. package/src/rules2/src/getAttributesSeries.js +36 -0
  292. package/src/rules2/src/getCombinationDefinitions.js +47 -0
  293. package/src/rules2/src/getDataflowAttributes.js +23 -0
  294. package/src/rules2/src/getDataflowTooltipAttributesIds.js +31 -0
  295. package/src/rules2/src/getDimensionValuesIndexes.js +13 -0
  296. package/src/rules2/src/getHCodelistsRefsInData.js +32 -0
  297. package/src/rules2/src/getHeaderCombinations.js +48 -0
  298. package/src/rules2/src/getHeaderCoordinates.js +7 -0
  299. package/src/rules2/src/getHeaderSubtitle.js +34 -0
  300. package/src/rules2/src/getHeaderTitle.js +15 -0
  301. package/src/rules2/src/getMSDInformations.js +23 -0
  302. package/src/rules2/src/getManyValuesDimensions.js +34 -0
  303. package/src/rules2/src/getMetadataCoordinates.js +37 -0
  304. package/src/rules2/src/getMetadataStructureFromData.js +17 -0
  305. package/src/rules2/src/getNotDisplayedIds.js +53 -0
  306. package/src/rules2/src/getOneValueDimensions.js +34 -0
  307. package/src/rules2/src/getSeriesCombinations.js +24 -0
  308. package/src/rules2/src/hasCellMetadata.js +14 -0
  309. package/src/rules2/src/hierarchiseDimensionWithAdvancedHierarchy2.js +57 -0
  310. package/src/rules2/src/hierarchiseDimensionWithNativeHierarchy2.js +35 -0
  311. package/src/rules2/src/index.js +50 -0
  312. package/src/rules2/src/parseAttributes.js +41 -0
  313. package/src/rules2/src/parseCombinations.js +102 -0
  314. package/src/rules2/src/parseHierarchicalCodelist.js +48 -0
  315. package/src/rules2/src/parseMetadataSeries.js +121 -0
  316. package/src/rules2/src/prepareData.js +75 -0
  317. package/src/rules2/src/refineAttributes.js +16 -0
  318. package/src/rules2/src/refineDimensions.js +18 -0
  319. package/src/rules2/src/refineMetadataCoordinates.js +28 -0
  320. package/src/rules2/src/refineTimePeriod.js +127 -0
  321. package/src/rules2/src/sdmx3.0DataFormatPatch.js +9 -0
  322. package/src/rules2/src/table/declineObservationsOverAttributes.js +32 -0
  323. package/src/rules2/src/table/getCells.js +93 -0
  324. package/src/rules2/src/table/getCellsAttributesIds.js +38 -0
  325. package/src/rules2/src/table/getCellsMetadataCoordinates.js +13 -0
  326. package/src/rules2/src/table/getCombinationDimensionsData.js +39 -0
  327. package/src/rules2/src/table/getCuratedCells.js +33 -0
  328. package/src/rules2/src/table/getFlagsAndNotes.js +23 -0
  329. package/src/rules2/src/table/getIndexedCombinationsByDisplay.js +16 -0
  330. package/src/rules2/src/table/getLayout.js +84 -0
  331. package/src/rules2/src/table/getLayoutData2.js +202 -0
  332. package/src/rules2/src/table/getSortedLayoutIndexes.js +138 -0
  333. package/src/rules2/src/table/getTableLabelAccessor.js +9 -0
  334. package/src/rules2/src/table/getTableLayoutIds.js +314 -0
  335. package/src/rules2/src/table/getTableProps.js +82 -0
  336. package/src/rules2/src/table/parseSeriesIndexesHierarchies.js +79 -0
  337. package/src/rules2/src/table/parseValueHierarchy.js +33 -0
  338. package/src/rules2/src/table/refineLayoutSize2.js +321 -0
  339. package/src/rules2/src/utils.js +37 -0
  340. package/src/viewer/mocks/bar.js +33 -0
  341. package/src/viewer/mocks/gpp-symbol.js +93 -0
  342. package/src/viewer/mocks/gpp-time.js +1103 -0
  343. package/src/viewer/mocks/row.js +39 -0
  344. package/src/viewer/mocks/scatter.js +93 -0
  345. package/src/viewer/mocks/stack.js +161 -0
  346. package/src/viewer/src/app/leg.js +36 -0
  347. package/src/viewer/src/app/nodata-res.js +22 -0
  348. package/src/viewer/src/app/nodata-sized.js +23 -0
  349. package/src/viewer/src/app/one-table-cell.js +70 -0
  350. package/src/viewer/src/app/table.js +423 -0
  351. package/src/viewer/src/app/use-case-1.js +33 -0
  352. package/src/viewer/src/app/use-case-2.js +38 -0
  353. package/src/viewer/src/app/use-case-3.js +18 -0
  354. package/src/viewer/src/app.js +116 -0
  355. package/src/viewer/src/chart.jsx +52 -0
  356. package/src/viewer/src/chartUtils/options.js +30 -0
  357. package/src/viewer/src/chartUtils/series.js +51 -0
  358. package/src/viewer/src/footer.jsx +23 -0
  359. package/src/viewer/src/header.jsx +10 -0
  360. package/src/viewer/src/index.jsx +158 -0
  361. package/src/viewer/src/legends/AxisLegend.jsx +41 -0
  362. package/src/viewer/src/legends/ChartLegends.jsx +66 -0
  363. package/src/viewer/src/legends/FocusLegend.jsx +63 -0
  364. package/src/viewer/src/legends/Legend.jsx +46 -0
  365. package/src/viewer/src/legends/SeriesLegend.jsx +78 -0
  366. package/src/viewer/src/utils.js +21 -0
@@ -0,0 +1,30 @@
1
+ import * as R from 'ramda';
2
+ import { getChartOptions } from '../../../rules/src/chart/getChartOptions';
3
+ import { getFontFromTheme, getOptionsFromFont } from '../utils';
4
+
5
+ export default (options, data, type, theme, timeFormats, locale) => {
6
+ const axisFontOptions = R.pipe(getFontFromTheme(['axis']), getOptionsFromFont)(theme);
7
+ const annotationFontOptions = R.pipe(getFontFromTheme(['annotation']), getOptionsFromFont)(theme);
8
+ const tooltipFonts = {
9
+ primary: getFontFromTheme(['tooltip', 'primary'])(theme),
10
+ secondary: getFontFromTheme(['tooltip', 'secondary'])(theme)
11
+ };
12
+ const optionsWithFonts = R.evolve({
13
+ axis: R.pipe(
14
+ R.over(
15
+ R.lensPath(['x', 'font']),
16
+ R.pipe(R.when(R.isNil, R.always({})), R.mergeRight(axisFontOptions))
17
+ ),
18
+ R.over(
19
+ R.lensPath(['y', 'font']),
20
+ R.pipe(R.when(R.isNil, R.always({})), R.mergeRight(axisFontOptions))
21
+ )
22
+ ),
23
+ serie: R.over(
24
+ R.lensPath(['annotation', 'font']),
25
+ R.pipe(R.when(R.isNil, R.always({})), R.mergeRight(annotationFontOptions))
26
+ )
27
+ })(options);
28
+
29
+ return getChartOptions(data, type, optionsWithFonts, tooltipFonts, timeFormats, locale);
30
+ };
@@ -0,0 +1,51 @@
1
+ import * as R from 'ramda';
2
+ import { H_SYMBOL, TIMELINE, V_SYMBOL } from '../../../rules/src/constants';
3
+
4
+ const isFocused = (obj) => {
5
+ const highlightIndex = R.propOr(-1, 'highlightIndex', obj);
6
+ const baselineIndex = R.propOr(-1, 'baselineIndex', obj);
7
+ return ((highlightIndex > -1) || (baselineIndex > -1));
8
+ };
9
+
10
+ const sampleFilterSeries = (series) => (
11
+ R.map(
12
+ serie => {
13
+ const _datapoints = R.filter(isFocused, serie.datapoints);
14
+ return { ...serie, datapoints: _datapoints };
15
+ },
16
+ series
17
+ )
18
+ );
19
+
20
+ const lineFilterSeries = R.filter(isFocused);
21
+
22
+ export default (series, type, options) => {
23
+ const responsiveFocusFilter = R.pathOr(true, ['serie', 'responsiveFocusFilter'], options);
24
+ if (!responsiveFocusFilter) {
25
+ return series;
26
+ }
27
+ const height = R.path(['base', 'height'], options);
28
+ const width = R.path(['base', 'width'], options);
29
+ const minWidth = R.path(['base', 'minDisplayWidth'], options);
30
+ const minHeight = R.path(['base', 'minDisplayHeight'], options);
31
+ let filtered;
32
+ if (type === H_SYMBOL) {
33
+ if (height < minHeight) {
34
+ filtered = sampleFilterSeries(series);
35
+ return R.isEmpty(filtered[0].datapoints) ? series : filtered;
36
+ }
37
+ }
38
+ else if (type === TIMELINE) {
39
+ if (height < minHeight) {
40
+ filtered = lineFilterSeries(series);
41
+ return R.isEmpty(filtered) ? series : filtered;
42
+ }
43
+ }
44
+ else if (type === V_SYMBOL) {
45
+ if (width < minWidth) {
46
+ filtered = sampleFilterSeries(series);
47
+ return R.isEmpty(filtered[0].datapoints) ? series : filtered;
48
+ }
49
+ }
50
+ return series;
51
+ };
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { DataFooter } from '@sis-cc/dotstatsuite-visions';
3
+ import ChartLegends from './legends/ChartLegends.jsx';
4
+ import { isChartNoData } from './utils';
5
+
6
+ const Footer = ({ type, chartData, source, logo, copyright, chartOptions, isSticky, target, width }) => {
7
+ const hasNoLegend = type === 'table' || isChartNoData({ data: chartData, type });
8
+ const legend = hasNoLegend ? null : <ChartLegends data={chartData} options={chartOptions} type={type} width={width} />;
9
+
10
+ return (
11
+ <div {...(target ? { ref: target } : {})}>
12
+ <DataFooter
13
+ source={source}
14
+ logo={logo}
15
+ copyright={copyright}
16
+ legend={legend}
17
+ isSticky={isSticky}
18
+ />
19
+ </div>
20
+ );
21
+ };
22
+
23
+ export default Footer;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { DataHeader } from '@sis-cc/dotstatsuite-visions';
3
+
4
+ const Header = ({ target, ...props }) => (
5
+ <div {...(target ? { ref: target } : {})}>
6
+ <DataHeader {...props} />
7
+ </div>
8
+ );
9
+
10
+ export default Header;
@@ -0,0 +1,158 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import * as R from 'ramda';
3
+ import useSize from '@react-hook/size';
4
+ import { Loading, NoData, TableHtml5 } from '@sis-cc/dotstatsuite-visions';
5
+ import { makeStyles, useTheme } from '@mui/styles';
6
+ import getChartOptions from './chartUtils/options.js';
7
+ import Header from './header.jsx';
8
+ import Chart from './chart.jsx';
9
+ import Footer from './footer.jsx';
10
+ import { isChartDataNotReady } from './utils.js';
11
+
12
+ const useStyles = makeStyles(() => ({
13
+ container: {
14
+ borderColor: '#007bc7',
15
+ borderBottomWidth: 1,
16
+ borderLeftWidth: 0,
17
+ borderTopWidth: 1,
18
+ borderRightWidth: 0,
19
+ borderStyle: 'solid',
20
+ '& svg text::selection': {
21
+ background: 'none'
22
+ }
23
+ },
24
+ tableContainer: {
25
+ minWidth: '100%',
26
+ minHeight: '100%',
27
+ willChange: 'transform, opacity'
28
+ },
29
+ chartContainer: {
30
+ width: ({ fixedWidth }) => fixedWidth || '100%',
31
+ height: ({ fixedHeight }) => fixedHeight || '100%',
32
+ overflow: 'hidden',
33
+ position: 'relative'
34
+ }
35
+ }));
36
+
37
+ const ViewContent = ({ loading, loadingProps = {}, type, width, errorMessage, ...rest }) => {
38
+ if (loading)
39
+ return <Loading message={loading} {...loadingProps} />;
40
+ if (errorMessage)
41
+ return <NoData message={errorMessage} />;
42
+
43
+ if (type === 'table') {
44
+ const tableProps = R.propOr({}, 'tableProps', rest);
45
+ const hasNoObs = R.pipe(R.prop('cells'), R.anyPass([R.isNil, R.isEmpty]))(tableProps);
46
+ if (hasNoObs) return <Loading />;
47
+
48
+ return <TableHtml5 isRtl={R.prop('isRtl', rest)} {...tableProps} />;
49
+ }
50
+ if (isChartDataNotReady({ data: R.prop('chartData', rest) }) || !width) {
51
+ return <Loading />;
52
+ }
53
+ return (
54
+ <Chart
55
+ data={R.prop('chartData', rest)}
56
+ getAxisOptions={R.prop('getAxisOptions', rest)}
57
+ heightOffsets={R.prop('heightOffsets', rest)}
58
+ options={R.prop('chartOptions', rest)}
59
+ type={type}
60
+ width={width}
61
+ />
62
+ );
63
+ };
64
+
65
+ const Viewer = ({ type, targets = {}, width, ...rest }) => {
66
+ const classes = useStyles({
67
+ fixedWidth: rest.fixedWidth,
68
+ fixedHeight: rest.fixedHeight
69
+ });
70
+
71
+ return (
72
+ <div
73
+ {...(targets.viewer ? { ref: targets.viewer } : {})}
74
+ className={R.join(' ')(
75
+ [classes.container,
76
+ type === 'table' ? classes.tableContainer : classes.chartContainer]
77
+ )}
78
+ >
79
+ <Header
80
+ target={targets.header}
81
+ {...R.propOr({}, 'headerProps', rest)}
82
+ />
83
+ <ViewContent type={type} width={width} {...rest} />
84
+ <Footer
85
+ width={width}
86
+ target={targets.footer}
87
+ type={type}
88
+ chartData={R.prop('chartData', rest)}
89
+ chartOptions={R.prop('chartOptions', rest)}
90
+ {...R.prop('footerProps', rest)}
91
+ />
92
+ </div>
93
+ );
94
+ };
95
+
96
+ const defaultChartHeight = chartOptions => R.pipe(
97
+ R.path(['base', 'height']),
98
+ h => (R.isNil(h) || isNaN(h)) ? 0 : h
99
+ )(chartOptions);
100
+
101
+ const ViewerWrapper = ({ chartOptions, type, getResponsiveSize, ...props }) => {
102
+ const theme = useTheme();
103
+ const viewerTarget = React.useRef(null);
104
+ const headerTarget = React.useRef(null);
105
+ const footerTarget = React.useRef(null);
106
+ const [viewerWidth, viewerHeight] = useSize(viewerTarget);
107
+ const [_, headerHeight] = useSize(headerTarget, { initialHeight: -1 });
108
+ const [___, footerHeight] = useSize(footerTarget, { initialHeight: -1 });
109
+ const [chartSvgHeight, setChartSvgHeight] = useState(0);
110
+ const defChartHeight = defaultChartHeight(chartOptions);
111
+
112
+ useEffect(() => {
113
+ if (R.is(Function, getResponsiveSize) && viewerWidth && headerHeight !== -1 && footerHeight !== -1) {
114
+ getResponsiveSize({
115
+ responsiveWidth: viewerWidth,
116
+ responsiveHeight: viewerHeight
117
+ });
118
+ }
119
+ }, [viewerWidth, viewerHeight]);
120
+
121
+ useEffect(() => {
122
+ if (headerHeight !== -1 && footerHeight !== -1 && !isNaN(headerHeight) && !isNaN(footerHeight)) {
123
+ const nextHeight = defChartHeight - headerHeight - footerHeight - 2;
124
+ setChartSvgHeight(nextHeight);
125
+ }
126
+ }, [headerHeight, footerHeight, defChartHeight]);
127
+
128
+
129
+ if (type === 'table') {
130
+ return <Viewer
131
+ {...props}
132
+ width={viewerWidth}
133
+ type={type}
134
+ />;
135
+ }
136
+
137
+ const preparedChartOptions = R.pipe(
138
+ R.over(R.lensPath(['base', 'width']), R.when(R.anyPass([R.isNil, isNaN]), R.always(viewerWidth || 0))),
139
+ R.set(R.lensPath(['base', 'height']), chartSvgHeight),
140
+ chartOptions => getChartOptions(chartOptions, props.chartData, type, theme, props.timeFormats, props.locale),
141
+ )(chartOptions);
142
+
143
+ return <Viewer
144
+ {...props}
145
+ type={type}
146
+ chartOptions={preparedChartOptions}
147
+ fixedWidth={R.path(['base', 'width'], chartOptions)}
148
+ fixedHeight={defChartHeight}
149
+ targets={{
150
+ viewer: viewerTarget,
151
+ header: headerTarget,
152
+ footer: footerTarget
153
+ }}
154
+ width={viewerWidth}
155
+ />;
156
+ };
157
+
158
+ export default ViewerWrapper;
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import * as R from 'ramda';
3
+ import makeStyles from '@mui/styles/makeStyles';
4
+ import { SCATTER } from '../../../rules/src/constants';
5
+ import { getFontFromTheme } from '../utils';
6
+
7
+ const useStyles = makeStyles(theme => {
8
+ const legendFont = getFontFromTheme(['axisLegend'])(theme);
9
+ return ({
10
+ xLegend: legendFont,
11
+ yLegend: {
12
+ ...legendFont,
13
+ left: 10,
14
+ position: 'absolute',
15
+ zIndex: 1,
16
+ }
17
+ })
18
+ });
19
+
20
+ const getAxisLabel = axis => R.pipe(
21
+ R.propOr([], 'series'),
22
+ R.head,
23
+ R.when(R.isNil, R.always({})),
24
+ R.path(['dimensionValues', axis, 'name'])
25
+ );
26
+
27
+ const AxisLegend = ({ axis, data, type }) => {
28
+ const classes = useStyles();
29
+ if (!R.equals(SCATTER, type))
30
+ return null;
31
+ switch (axis) {
32
+ case 'x':
33
+ return <span className={classes.xLegend}>→ {getAxisLabel('x')(data)}</span>;
34
+ case 'y':
35
+ return <span className={classes.yLegend}>↑ {getAxisLabel('y')(data)}</span>;
36
+ default:
37
+ return null;
38
+ }
39
+ };
40
+
41
+ export default AxisLegend;
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import * as R from 'ramda';
3
+ import numeral from 'numeral';
4
+ import { computeOptions } from '@sis-cc/dotstatsuite-d3-charts';
5
+ import { ChoroplethLegend } from '../../../bridge-d3-react/src';
6
+ import { useTheme } from '@mui/material/styles';
7
+ import AxisLegend from './AxisLegend.jsx';
8
+ import FocusLegend from './FocusLegend.jsx';
9
+ import SeriesLegend from './SeriesLegend.jsx';
10
+ import { CHORO } from '../../../rules/src/constants';
11
+ import { getFontFromTheme, getOptionsFromFont } from '../utils';
12
+
13
+
14
+ const ChoroLegend = ({ type, options, data }) => {
15
+ if (type !== CHORO) {
16
+ return null;
17
+ }
18
+ const theme = useTheme();
19
+ const fontOptions = R.pipe(getFontFromTheme(['mapLegend']), getOptionsFromFont)(theme);
20
+ const legendOptions = R.mergeDeepLeft(
21
+ options,
22
+ {
23
+ legend: {
24
+ choropleth: {
25
+ width: 300,
26
+ height: 30,
27
+ margin: { left: 15, right: 15 },
28
+ axis: {
29
+ thickness: 0,
30
+ orient: 'bottom',
31
+ font: fontOptions,
32
+ tick: {
33
+ size: 5,
34
+ thickness: 0
35
+ },
36
+ format: {
37
+ proc: d => numeral(d).format('0,0.[00]')
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ );
44
+
45
+ return (
46
+ <ChoroplethLegend options={legendOptions} data={data.series} />
47
+ );
48
+ }
49
+
50
+ const ChartLegends = ({ data, options, type, width }) => {
51
+ const engineOptions = R.pipe(
52
+ R.assocPath(['serie', 'stacked', 'layerSeries'], R.pathOr([], ['series', 0, 'layerSeries'], data)),
53
+ computeOptions
54
+ )(options);
55
+
56
+ return (
57
+ <div>
58
+ <AxisLegend axis="x" data={data} type={type} />
59
+ <FocusLegend data={data} options ={engineOptions} type={type} width={width} />
60
+ <SeriesLegend data={data} options={engineOptions} type={type} />
61
+ <ChoroLegend data={data} options={options} type={type} />
62
+ </div>
63
+ );
64
+ };
65
+
66
+ export default ChartLegends;
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import * as R from 'ramda';
3
+ import Legend from './Legend.jsx';
4
+ import { SCATTER, TIMELINE } from '../../../rules/src/constants';
5
+
6
+ export const REDUCED_THRESHOLD = 160;
7
+
8
+ const scatterRenderer = ({ color }) => (
9
+ <svg width='12' height='14'>
10
+ <circle cx='7' cy='7' r='4' stroke={color} fill={color} />
11
+ </svg>
12
+ );
13
+
14
+ const lineRenderer = ({ color }) => (
15
+ <svg width='12' height='14'>
16
+ <line x1='0' y1='7' x2='11' y2='7' stroke={color} strokeWidth='2' />
17
+ </svg>
18
+ );
19
+
20
+ const FocusLegend = ({ data, options, type, width }) => {
21
+ if (width < REDUCED_THRESHOLD) {
22
+ return null;
23
+ }
24
+
25
+ const itemRenderer = R.pipe(
26
+ R.when(R.always(type === SCATTER), R.always(scatterRenderer)),
27
+ R.when(R.always(type === TIMELINE), R.always(lineRenderer)),
28
+ )(null);
29
+
30
+ const getItemLabel = R.ifElse(
31
+ R.equals(SCATTER),
32
+ R.always(R.pipe(R.prop('label'), R.split(' - '), R.last)),
33
+ R.always(R.prop('label'))
34
+ )(type);
35
+
36
+ const items = R.pipe(
37
+ R.pathOr({}, ['share', 'focused']),
38
+ R.mapObjIndexed((selection, key) => {
39
+ if (R.isNil(selection)) {
40
+ return null;
41
+ }
42
+ const colors = R.pathOr([], ['serie', `${key}Colors`], options);
43
+ const nColors = R.length(colors);
44
+ return R.pipe(
45
+ R.addIndex(R.map)((entry, index) => {
46
+ if (entry.value === 'uniq-dp') {
47
+ return null;
48
+ }
49
+ const color = R.nth(index % nColors, colors);
50
+ return ({ color, label: getItemLabel(entry) });
51
+ }),
52
+ R.filter(R.identity)
53
+ )(selection);
54
+ }),
55
+ R.props(['baseline', 'highlight']),
56
+ R.filter(R.identity),
57
+ R.unnest
58
+ )(data)
59
+
60
+ return (<Legend items={items} itemRenderer={itemRenderer} />);
61
+ }
62
+
63
+ export default FocusLegend;
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import * as R from 'ramda';
3
+ import makeStyles from '@mui/styles/makeStyles';
4
+ import { getFontFromTheme } from '../utils';
5
+
6
+ const useStyles = makeStyles(theme => ({
7
+ legend: {
8
+ ...getFontFromTheme(['chartLegend'])(theme),
9
+ display: 'flex',
10
+ flexDirection: 'row',
11
+ flexWrap: 'wrap',
12
+ justifyContent: 'flex-start',
13
+ },
14
+ entry: {
15
+ alignItems: 'center',
16
+ display: 'flex',
17
+ flexDirection: 'row',
18
+ flexWrap: 'wrap',
19
+ marginLeft: 10,
20
+ },
21
+ text: { marginLeft: 5 }
22
+ }));
23
+
24
+ const Legend = ({ items, itemRenderer }) => {
25
+ if (!R.is(Function, (itemRenderer)) || R.isNil(items) || R.isEmpty(items)) {
26
+ return null;
27
+ }
28
+
29
+ const classes = useStyles();
30
+
31
+ const legendEntries = R.addIndex(R.map)(
32
+ (entry, index) => {
33
+ const style = R.isNil(entry.color) ? {} : { color: entry.color };
34
+ return (
35
+ <div className={classes.entry} style={style} key={index}>
36
+ {itemRenderer(entry)}
37
+ <div className={classes.text} >{R.prop('label', entry)}</div>
38
+ </div>
39
+ );
40
+ }
41
+ )(items);
42
+
43
+ return (<div className={classes.legend} >{legendEntries}</div>);
44
+ };
45
+
46
+ export default Legend;
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import * as R from 'ramda';
3
+ import Legend from './Legend.jsx';
4
+ import { H_SYMBOL, STACKED_BAR, STACKED_ROW, V_SYMBOL } from '../../../rules/src/constants';
5
+
6
+ const getSymbolSeriesItems = ({ data, options }) => {
7
+ const symbolMarkers = R.path(['serie', 'symbol', 'markers'], options);
8
+ const nMarkers = R.length(symbolMarkers);
9
+ const markerSize = Number(R.path(['serie', 'symbol', 'markerDefaultSize'], options));
10
+ const strokeWidth = R.path(['serie', 'symbol', 'markerDefaultStrokeWidth'], options);
11
+ const size = Math.round(Math.sqrt(markerSize)) + 8;
12
+ return R.pipe(
13
+ R.pathOr([], ['series', 0, 'symbolValues']),
14
+ R.addIndex(R.map)(
15
+ (label, serieIndex) => {
16
+ const marker = R.nth(serieIndex % nMarkers, symbolMarkers);
17
+ return ({
18
+ d: marker.path(markerSize),
19
+ transform: `translate(${size / 2}, ${size / 2}) rotate(${R.propOr(0, 'rotate', marker)})`,
20
+ style: R.pipe(
21
+ R.mergeRight({ strokeWidth }),
22
+ R.when(
23
+ s => s.fill !== s.stroke,
24
+ R.assoc('fill', 'white')
25
+ )
26
+ )(marker.style),
27
+ size,
28
+ label
29
+ })
30
+ }
31
+ )
32
+ )(data);
33
+ };
34
+
35
+ const getStackedSeriesItems = R.pipe(
36
+ R.pathOr([], ['options', 'serie', 'stacked', 'layerSeries']),
37
+ R.when(s => R.length(s) === 1, R.always([]))
38
+ );
39
+
40
+ const stackedLayerRenderer = ({ baseColor }) => (
41
+ <svg width="21" height="14">
42
+ <rect x='0' y='0' width='21' height='14' fill={baseColor} />
43
+ </svg>
44
+ );
45
+
46
+ const symbolRenderer = ({ d, size, style, transform }) => (
47
+ <svg width={size} height={size}>
48
+ <path
49
+ d={d}
50
+ transform={transform}
51
+ {...style}
52
+ />
53
+ </svg>
54
+ );
55
+
56
+ // stacked entries = [{ label, color }];
57
+
58
+ const SeriesLegend = ({ data, options, type }) => {
59
+ const itemRenderer = R.pipe(
60
+ R.when(R.always(type === H_SYMBOL || type === V_SYMBOL), R.always(symbolRenderer)),
61
+ R.when(R.always(type === STACKED_BAR || type === STACKED_ROW), R.always(stackedLayerRenderer))
62
+ )(null);
63
+
64
+ if (R.isNil(itemRenderer)) {
65
+ return null;
66
+ }
67
+
68
+ const seriesItems = R.pipe(
69
+ R.when(R.always(type === H_SYMBOL || type === V_SYMBOL), getSymbolSeriesItems),
70
+ R.when(R.always(type === STACKED_BAR || type === STACKED_ROW), getStackedSeriesItems)
71
+ )({ data, options });
72
+
73
+ return (
74
+ <Legend items={seriesItems} itemRenderer={itemRenderer} />
75
+ );
76
+ };
77
+
78
+ export default SeriesLegend;
@@ -0,0 +1,21 @@
1
+ import * as R from 'ramda';
2
+
3
+ export const isChartNoData = R.anyPass([
4
+ R.pipe(R.path(['data', 'series']), R.isEmpty),
5
+ R.allPass([
6
+ R.pipe(R.prop('type'), R.equals('ChoroplethChart'), R.not),
7
+ R.pipe(R.path(['data', 'series', 0, 'datapoints']), R.anyPass([R.isNil, R.isEmpty]))
8
+ ])
9
+ ]);
10
+
11
+ export const isChartDataNotReady = R.pipe(R.path(['data', 'series']), R.isNil);
12
+
13
+ export const getFontFromTheme = customPath => R.converge(
14
+ R.mergeRight,
15
+ [R.pathOr({}, ['mixins', 'chart', 'main']), R.pathOr({}, R.concat(['mixins', 'chart'], customPath))]
16
+ );
17
+
18
+ export const getOptionsFromFont = R.pipe(
19
+ R.props(['color', 'fontFamily', 'fontSize', 'fontWeight']),
20
+ ([color, family, size, weight]) => ({ color, size, family, weight })
21
+ );