@sis-cc/dotstatsuite-components 22.0.1 → 22.0.2

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 +378 -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 +398 -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,17 @@
1
+ import * as R from 'ramda';
2
+ import { dimensionValueDisplay, parseDisplay } from '../';
3
+
4
+ export const getHeaderUnits = ({ units, display }) => {
5
+ const _display = parseDisplay(display);
6
+ return R.converge(
7
+ (header, label) => R.isEmpty(label) ? null : { header, label },
8
+ [
9
+ (units) => `${dimensionValueDisplay(_display)(units)}:`,
10
+ R.pipe(
11
+ R.propOr([], 'values'),
12
+ R.map(R.pipe(R.propOr({}, 'value'), dimensionValueDisplay(_display))),
13
+ R.join(', ')
14
+ )
15
+ ]
16
+ )(units);
17
+ };
@@ -0,0 +1,43 @@
1
+ import * as R from 'ramda';
2
+ import { dimensionValueDisplay, getFlags, parseDisplay } from '../';
3
+ import { DEFAULT_REJECTED_SUBTITLE_IDS } from '../constants';
4
+
5
+ export const getSubtitleFlags = ({ customAttributes, dimensions, display, units }) => {
6
+ const _display = parseDisplay(display);
7
+ const formatter = dimensionValueDisplay(_display);
8
+ const _getFlags = getFlags(customAttributes, formatter, {});
9
+ const unitsValuesIds = R.pipe(R.propOr([], 'values'), R.pluck('id'))(units);
10
+
11
+ return R.pipe(
12
+ R.propOr([], 'one'),
13
+ R.values,
14
+ R.sortBy(R.prop('__index')),
15
+ R.reduce(
16
+ (acc, dim) => {
17
+ if (!R.propOr(true, 'display', dim)) {
18
+ return acc;
19
+ }
20
+ if (R.includes(dim.id, unitsValuesIds)) {
21
+ return acc;
22
+ }
23
+ const value = R.path(['values', 0], dim);
24
+
25
+ if (R.includes(value.id, DEFAULT_REJECTED_SUBTITLE_IDS) || !R.propOr(true, 'display', value)) {
26
+ return acc;
27
+ }
28
+
29
+ const flags = _getFlags({ attributes: R.propOr({}, 'attributes', value), notes: R.propOr([], 'notes', value) });
30
+ if (R.isEmpty(flags)) {
31
+ return acc;
32
+ }
33
+
34
+ return R.append({
35
+ header: `${formatter(dim)}:`,
36
+ label: formatter(value),
37
+ sub: flags
38
+ }, acc);
39
+ },
40
+ []
41
+ )
42
+ )(dimensions);
43
+ };
@@ -0,0 +1,8 @@
1
+ import * as R from 'ramda';
2
+ import { parseDisplay, dimensionValueDisplay, getFlags } from '../';
3
+
4
+ export const getTitleFlags = ({ customAttributes, dataflowAttributes, display }) => {
5
+ const _display = parseDisplay(display);
6
+ const formatter = dimensionValueDisplay(_display);
7
+ return getFlags(customAttributes, formatter, {})({ attributes: dataflowAttributes });
8
+ };
@@ -0,0 +1,4 @@
1
+ export { getDefaultSubtitle } from './getDefaultSubtitle';
2
+ export { getSubtitleFlags } from './getSubtitleFlags';
3
+ export { getHeaderUnits } from './getHeaderUnits';
4
+ export { getTitleFlags } from './getTitleFlags';
@@ -0,0 +1,398 @@
1
+ import {
2
+ get, partition, reject, isEmpty, map, compact, size, keyBy, pick, omit, isNil, flatten, reduce,
3
+ filter, find, includes, isArray, findIndex, isEqual
4
+ } from 'lodash';
5
+ import * as R from 'ramda';
6
+ import memoizee from 'memoizee';
7
+ import __sampleSeries from './factories/sample-series';
8
+ import __sampleFocus from './factories/sample-focus';
9
+ import __scatterSeries from './factories/scatter-series';
10
+ import __scatterFocus from './factories/scatter-focus';
11
+ import __scatterDimension from './factories/scatter-dimension';
12
+ import __symbolSeries from './factories/symbol-series';
13
+ import __symbolDimension from './factories/symbol-dimension';
14
+ import __timelineSeries from './factories/timeline-series';
15
+ import __timelineFocus from './factories/timeline-focus';
16
+ import __stackedSeries from './factories/stacked-series';
17
+ import __stackedDimension from './factories/stacked-dimension';
18
+ import __choroSeries from './factories/choro-series';
19
+ import {
20
+ DEFAULT_UPR_IDS, DEFAULT_REJECTED_UPR_VALUES_IDS, DEFAULT_REJECTED_SUBTITLE_IDS,
21
+ FREQ_A, FREQ_Q, FREQ_M
22
+ } from './constants';
23
+ import { dimensionValueDisplay } from './dimension-utils';
24
+ import { getObservationsFormaterAttributes } from './observation-formater';
25
+
26
+ export const freqA = FREQ_A;
27
+ export const freqQ = FREQ_Q;
28
+ export const freqM = FREQ_M;
29
+
30
+ // --------------------------------------------------------------------------------extractSdmxErrors
31
+ const _extractSdmxErrors = (data) => R.compose(
32
+ (errors) => map(errors, (error) => ({ label: error.code, description: error.message })),
33
+ (data) => get(data, 'errors', [])
34
+ );
35
+ export const extractSdmxErrors = memoizee(_extractSdmxErrors);
36
+
37
+ export const extractDataName = (data) => R.pathOr(null, ['structure', 'name'], data);
38
+
39
+ // -----------------------------------------------------------------------------extractSdmxArtefacts
40
+ const _extractSdmxArtefacts = (data) => {
41
+ const parseStructure = (data) => get(data, 'structure', {});
42
+ const parseItem = (item) => parseComponents(get(item, 'observation', []));
43
+ const parseDimensions = (structure) => parseItem(get(structure, 'dimensions', {}));
44
+ const parseAttributes = (structure) => parseItem(get(structure, 'attributes', {}));
45
+ const parseComponents = (components) => map(components, parseComponent);
46
+ const parseComponent = (component, index) => {
47
+ let parsed = { ...pick(component, 'id', 'name', 'values', 'role', 'isHidden'), index };
48
+ if (isEmpty(parsed))
49
+ return parsed;
50
+ if (isNil(parsed.role))
51
+ parsed.role = parsed.id;
52
+ parsed.values = R.sortBy(R.prop('__index'))(parsed.values);
53
+ return parsed;
54
+ };
55
+ const parseDatasetItem = (item) => parseComponents(get(item, 'dataSet', []));
56
+ const parseDatasetAttributes = (structure) => parseDatasetItem(get(structure, 'attributes', {}));
57
+
58
+ return {
59
+ attributes: parseAttributes(parseStructure(data)),
60
+ datasetAttributes: parseDatasetAttributes(parseStructure(data)),
61
+ dimensions: parseDimensions(parseStructure(data)),
62
+ id: get(data, 'header.id', null),
63
+ name: extractDataName(data),
64
+ observations: R.pipe(
65
+ R.pathOr({}, ['dataSets', 0, 'observations']),
66
+ R.mapObjIndexed(obs => R.over(R.lensIndex(0), val => R.isNil(val) ? null : Number(val))(obs)),
67
+ R.reject(R.pipe(R.head, R.anyPass([R.isNil, isNaN]))),
68
+ )(data),
69
+ source: get(data, 'header.links[0].href', null),
70
+ };
71
+ };
72
+ export const extractSdmxArtefacts = memoizee(_extractSdmxArtefacts);
73
+
74
+ const _getRelevantsDatasetAttributes = (data) => {
75
+ const { datasetAttributes } = extractSdmxArtefacts(data);
76
+ return filter(datasetAttributes, attr => size(attr.values) === 1);
77
+ };
78
+ export const getRelevantsDatasetAttributes = memoizee(_getRelevantsDatasetAttributes);
79
+
80
+ // -------------------------------------------------------------------------------getDimensionValues
81
+ export const getDimensionValues = (dimension) => get(dimension, 'values', []);
82
+
83
+ // ----------------------------------------------------------------------------------splitDimensions
84
+ const _splitDimensions = (data) => {
85
+ const { dimensions } = extractSdmxArtefacts(data);
86
+ const [value, values] = partition(
87
+ reject(dimensions, R.compose(isEmpty, getDimensionValues)),
88
+ R.compose((values) => size(values) === 1, getDimensionValues)
89
+ );
90
+ return { value, values };
91
+ }
92
+ export const splitDimensions = memoizee(_splitDimensions);
93
+
94
+ // ------------------------------------------------------------------dimensionsWithValuesIndexedById
95
+ const _dimensionsWithValuesIndexedById = (data) => R.compose(
96
+ (dimensionsWithValues) => keyBy(dimensionsWithValues, 'id'),
97
+ (split) => split.values,
98
+ splitDimensions
99
+ )(data);
100
+ export const dimensionsWithValuesIndexedById = memoizee(_dimensionsWithValuesIndexedById);
101
+
102
+ // -------------------------------------------------------------------------------------parseDisplay
103
+ const _parseDisplay = (display) =>
104
+ (isNil(display) || !(includes(['both', 'code'], display)))
105
+ ? 'label' : display;
106
+ export const parseDisplay = memoizee(_parseDisplay);
107
+
108
+ // -------------------------------------------------------------------------------------sampleSeries
109
+ const _sampleSeries = (data, type, display, formaterIds) => __sampleSeries(
110
+ type,
111
+ extractSdmxArtefacts(data),
112
+ dimensionsWithValuesIndexedById(data),
113
+ parseDisplay(display),
114
+ getObservationsFormaterAttributes(data, formaterIds)
115
+ );
116
+ export const sampleSeries = memoizee(_sampleSeries);
117
+
118
+ // ---------------------------------------------------------------------------------scatterDimension
119
+ const _scatterDimension = (data, ids) => {
120
+ const { values } = splitDimensions(data);
121
+ return __scatterDimension(values, ids);
122
+ };
123
+ export const scatterDimension = memoizee(_scatterDimension);
124
+
125
+ // ----------------------------------------------------------------------------------symbolDimension
126
+ const _symbolDimension = (data, ids) => {
127
+ const { values } = splitDimensions(data);
128
+ return __symbolDimension(values, ids);
129
+ };
130
+ export const symbolDimension = memoizee(_symbolDimension);
131
+
132
+ const _stackedDimension = (data, singularity) => {
133
+ return __stackedDimension(splitDimensions(data), singularity);
134
+ }
135
+ export const stackedDimension = memoizee(_stackedDimension);
136
+
137
+ // ------------------------------------------------------------------------------------scatterSeries
138
+ const _scatterSeries = (data, ids, display, formaterIds) => __scatterSeries(
139
+ extractSdmxArtefacts(data),
140
+ dimensionsWithValuesIndexedById(data),
141
+ scatterDimension(data, ids),
142
+ parseDisplay(display),
143
+ getObservationsFormaterAttributes(data, formaterIds)
144
+ );
145
+ export const scatterSeries = memoizee(_scatterSeries);
146
+
147
+ // -------------------------------------------------------------------------------------symbolSeries
148
+ const _symbolSeries = (data, type, ids, display, formaterIds) => __symbolSeries(
149
+ extractSdmxArtefacts(data),
150
+ type,
151
+ dimensionsWithValuesIndexedById(data),
152
+ symbolDimension(data, ids),
153
+ parseDisplay(display),
154
+ getObservationsFormaterAttributes(data, formaterIds)
155
+ );
156
+ export const symbolSeries = memoizee(_symbolSeries);
157
+
158
+ // -----------------------------------------------------------------------------------timelineSeries
159
+ const _timelineSeries = (data, display, formaterIds) => __timelineSeries(
160
+ extractSdmxArtefacts(data),
161
+ dimensionsWithValuesIndexedById(data),
162
+ parseDisplay(display),
163
+ getObservationsFormaterAttributes(data, formaterIds)
164
+ );
165
+ export const timelineSeries = memoizee(_timelineSeries);
166
+
167
+ const _stackedSeries = (data, singularity, display, formaterIds, [stackKey, categoryKey]) => __stackedSeries(
168
+ extractSdmxArtefacts(data),
169
+ dimensionsWithValuesIndexedById(data),
170
+ stackedDimension(data, singularity),
171
+ parseDisplay(display),
172
+ getObservationsFormaterAttributes(data, formaterIds),
173
+ [stackKey, categoryKey]
174
+ );
175
+ export const stackedSeries = memoizee(_stackedSeries);
176
+
177
+ // --------------------------------------------------------------------------------------choroSeries
178
+ const _choroSeries = (data, map, display) => __choroSeries(
179
+ extractSdmxArtefacts(data),
180
+ dimensionsWithValuesIndexedById(data),
181
+ map,
182
+ parseDisplay(display)
183
+ );
184
+ export const choroSeries = memoizee(_choroSeries);
185
+
186
+ // -------------------------------------------------------------------------------------------series
187
+ const _series = (data, type, focus, singularity, map, display, formaterIds) => {
188
+ switch(type) {
189
+ case 'RowChart': case 'BarChart':
190
+ return __sampleFocus(sampleSeries(data, type, display, formaterIds), focus);
191
+ case 'ScatterChart':
192
+ return __scatterFocus(scatterSeries(data, singularity, display, formaterIds), focus);
193
+ case 'HorizontalSymbolChart': case 'VerticalSymbolChart':
194
+ return __sampleFocus(symbolSeries(data, type, singularity, display, formaterIds), focus);
195
+ case 'TimelineChart':
196
+ return __timelineFocus(timelineSeries(data, display, formaterIds), focus);
197
+ case 'StackedBarChart':
198
+ return __sampleFocus(stackedSeries(data, singularity, display, formaterIds, ['y', 'x']), focus);
199
+ case 'StackedRowChart':
200
+ return __sampleFocus(stackedSeries(data, singularity, display, formaterIds, ['x', 'y']), focus);
201
+ case 'ChoroplethChart':
202
+ return choroSeries(data, map, display);
203
+ }
204
+ };
205
+ export const series = memoizee(_series);
206
+
207
+ // -------------------------------------------------------------------------------------------source
208
+ const _source = (data, config, meta) => {
209
+ const hasSource = get(meta, 'hasSource', true);
210
+ if (!hasSource)
211
+ return null;
212
+ const source = get(config, 'source', null);
213
+ if (source && !(isEmpty(source)))
214
+ return source;
215
+ const artefacts = extractSdmxArtefacts(data);
216
+ const uri = get(artefacts, 'source');
217
+ if (!uri)
218
+ return get(config, 'defaultSource', null);
219
+ const match = uri.match(/(^http.*)\/SDMX-JSON\/data\/([^\/]+)\//);
220
+ if (size(match) !== 3)
221
+ return null;
222
+ const [m, domain, dataset] = match;
223
+ return `${domain}/Index.aspx?DataSetCode=${dataset}`; //tmp
224
+ };
225
+ export const source = memoizee(_source);
226
+
227
+ // --------------------------------------------------------------------------------------------focus
228
+ const _focus = (data, type, dimension, _display) => {
229
+ const display = parseDisplay(_display);
230
+ switch(type) {
231
+ case 'RowChart': case 'BarChart':
232
+ case 'HorizontalSymbolChart': case 'VerticalSymbolChart':
233
+ case 'StackedBarChart': case 'StackedRowChart':
234
+ return R.compose(
235
+ (datapoints) => map(datapoints, (dp) => ({ label: dp.category, value: dp.key })),
236
+ (series) => series[0].datapoints,
237
+ series
238
+ )(data, type, null, dimension, null, display);
239
+ case 'TimelineChart':
240
+ return R.compose(
241
+ (series) => map(series, (serie) => ({ label: serie.category, value: serie.key })),
242
+ series
243
+ )(data, type, null, dimension, null, display)
244
+ case 'ScatterChart':
245
+ const id = get(dimension, 'id');
246
+ if (isNil(id)) return [];
247
+ const dimensions = R.compose(
248
+ (dimensions) => omit(dimensions, id),
249
+ dimensionsWithValuesIndexedById
250
+ )(data);
251
+ return flatten(map(
252
+ dimensions,
253
+ (dimension) => {
254
+ return map(
255
+ get(dimension, 'values'),
256
+ (value) => ({
257
+ label: `${dimensionValueDisplay(display)(dimension)} - ${dimensionValueDisplay(display)(value)}`,
258
+ options: { dimensionId: dimension.id, dimensionValueId: value.id },
259
+ value: `${dimension.id}-${value.id}`
260
+ })
261
+ )
262
+ }
263
+ ));
264
+ }
265
+ };
266
+ export const focus = memoizee(_focus);
267
+
268
+ const _parseFocus = (data, type, dimension, display, { baseline, highlight }) => {
269
+ const options = focus(data, type, dimension, display);
270
+
271
+ const parseSelection = selection => compact(map(selection, ({ value }) => find(options, option => isEqual(option.value, value))));
272
+ return ({ baseline: parseSelection(baseline), highlight: parseSelection(highlight) });
273
+ };
274
+ export const parseFocus = memoizee(_parseFocus);
275
+
276
+ const _defaultSubtitle = (data, display, REJECTED_SUBTITLE_IDS = DEFAULT_REJECTED_SUBTITLE_IDS) => {
277
+ const { value } = splitDimensions(data);
278
+ const values = reduce(
279
+ R.reject(R.prop('isHidden'))(value),
280
+ (memo, d) => {
281
+ const dvId = get(d, 'values[0].id');
282
+ if (!includes(REJECTED_SUBTITLE_IDS, dvId)) {
283
+ memo.push(`${dimensionValueDisplay(display)(d)}: ${dimensionValueDisplay(display)(get(d, 'values[0]'))}`);
284
+ }
285
+ return memo;
286
+ },
287
+ []
288
+ );
289
+ return values;
290
+ }
291
+ export const defaultSubtitle = memoizee(_defaultSubtitle);
292
+
293
+ const _uprAttributes = (attributes, UPR_IDS = DEFAULT_UPR_IDS) => (
294
+ reduce(
295
+ UPR_IDS,
296
+ (memo, ids, uprKey) => {
297
+ const attr = find(attributes, attribute => includes(ids, get(attribute, 'id')));
298
+ if (attr) {
299
+ memo[uprKey] = attr;
300
+ }
301
+ return memo;
302
+ },
303
+ {}
304
+ )
305
+ );
306
+ export const uprAttributes = memoizee(_uprAttributes);
307
+
308
+ const _uprAttributesWithOneRelevantValue = (uprAttributes, UPR_IDS = DEFAULT_UPR_IDS, REJECTED_UPR_VALUES_IDS = DEFAULT_REJECTED_UPR_VALUES_IDS) => reduce(
309
+ uprAttributes,
310
+ (memo, attr, key) => {
311
+ if (size(get(attr, 'values', [])) === 1 && !(includes(REJECTED_UPR_VALUES_IDS[key], get(attr, 'values[0].id', ''))))
312
+ memo[key] = attr;
313
+ return memo;
314
+ },
315
+ {}
316
+ );
317
+ export const uprAttributesWithOneRelevantValue = memoizee(_uprAttributesWithOneRelevantValue);
318
+
319
+ export const headerUprsLabel = display => uprAttributes => {
320
+ return map(
321
+ uprAttributes,
322
+ attr => dimensionValueDisplay(display)(get(attr, 'values[0]'))
323
+ ).join(', ');
324
+ }
325
+
326
+ export const getUprs = (data, display) => R.compose(
327
+ headerUprsLabel(parseDisplay(display)),
328
+ uprAttributesWithOneRelevantValue,
329
+ ({ attributes }) => uprAttributes(attributes),
330
+ extractSdmxArtefacts
331
+ )(data);
332
+
333
+ const _header = (data, _title, _subtitle, _display) => {
334
+ const display = parseDisplay(_display);
335
+ const title = (isNil(_title) || isEmpty(_title)) ? get(data, 'structure.name') : _title;
336
+ const subtitle = (isNil(_subtitle) || isEmpty(_subtitle)) ? defaultSubtitle(data, display) : _subtitle;
337
+ return ({
338
+ title,
339
+ subtitle: isArray(subtitle) ? subtitle : [subtitle],
340
+ uprs: R.compose(
341
+ headerUprsLabel(display),
342
+ uprAttributesWithOneRelevantValue,
343
+ ({ attributes }) => uprAttributes(attributes),
344
+ extractSdmxArtefacts
345
+ )(data)
346
+ });
347
+ };
348
+ export const header = memoizee(_header);
349
+
350
+ const _sourceLabel = (data, label) => (
351
+ (isNil(label) || isEmpty(label)) ? extractSdmxArtefacts(data).name : label
352
+ );
353
+ export const sourceLabel = memoizee(_sourceLabel);
354
+
355
+ const _getTopologyAreasCollections = (topology) => map(topology.objects, (entry, key) => key);
356
+ export const getTopologyAreasCollections = memoizee(_getTopologyAreasCollections);
357
+
358
+ const _isNonIdealState = (data, type, map) => {
359
+ const defaultSeries = series(data, type, null, null, map);
360
+ if (type === 'ChoroplethChart')
361
+ {
362
+ return findIndex(get(defaultSeries, 'objects.areas.geometries', []), geometry => get(geometry, 'properties.value', null)) === -1;
363
+ }
364
+ return isEmpty(get(defaultSeries, '[0].datapoints', []));
365
+ }
366
+ export const isNonIdealState = memoizee(_isNonIdealState);
367
+
368
+ export { dimensionValueDisplay } from './dimension-utils';
369
+ export { DEFAULT_UPR_IDS, DIMENSION_DISPLAY_PARTS, DEFAULT_MAJOR_ATTRIBUTES, V8_SDMX_JSON,
370
+ TYPES as chartTypes } from './constants';
371
+ export {
372
+ initialState,
373
+ stateFromNewProps,
374
+ onChangeProperties,
375
+ toChartData,
376
+ toChartOptions,
377
+ toProperties,
378
+ getErrors,
379
+ toSingularity
380
+ } from './properties';
381
+ export { dataTransformer as v8Transformer } from './v8-transformer';
382
+ export {
383
+ getCellValue,
384
+ } from './table';
385
+ export {
386
+ getFullName,
387
+ } from './sdmx-data';
388
+ export { getTimePeriodLabel } from './date';
389
+ export { getHeaderProps, getFooterProps, } from './properties/getHeaderProps';
390
+ export { getInformationsStateFromNewProps } from './properties/getInformationsStateFromNewProps';
391
+ export { getObservationsType } from './properties/getObservationsType';
392
+ export { getAvailableChartTypes } from './properties/getAvailableChartTypes';
393
+ export { isSharedLayoutCompatible } from './layout';
394
+
395
+ export { getObservations } from './preparators/getObservations';
396
+
397
+ export const getFlags = R.identity;
398
+ export const prepareData = R.identity;
@@ -0,0 +1,113 @@
1
+ import * as R from 'ramda';
2
+ import {
3
+ H_SYMBOL,
4
+ SCATTER,
5
+ STACKED_BAR,
6
+ STACKED_ROW,
7
+ V_SYMBOL
8
+ } from './constants';
9
+ import {
10
+ getCombinationDefinitions,
11
+ refineDimensions,
12
+ parseCombinationDefinition
13
+ } from '../../rules2/src';
14
+
15
+ const isTableLayoutCompatible = (data, layout, combinationsDefinitions = [], dataquery = '') => {
16
+ const indexedCombinations = R.indexBy(R.prop('id'), combinationsDefinitions);
17
+ const indexedManyValuesDimensions = R.pipe(
18
+ R.pathOr([], ['structure', 'dimensions', 'observation']),
19
+ dimensions => refineDimensions(dimensions, dataquery),
20
+ R.reject(d => R.prop('header', d) || !R.length(d.values || [])),
21
+ R.indexBy(R.prop('id'))
22
+ )(data);
23
+ let remainings = indexedManyValuesDimensions;
24
+ const layoutIds = R.pipe(R.values, R.unnest)(layout);
25
+ let hasFoundIrrelevant = false;
26
+ R.forEach(id => {
27
+ if (R.has(id, indexedManyValuesDimensions)) {
28
+ remainings = R.dissoc(id, remainings);
29
+ }
30
+ else if (R.has(id, indexedCombinations)) {
31
+ remainings = R.omit(R.pathOr([], [id, 'concepts'], indexedCombinations), remainings);
32
+ }
33
+ else if (id !== 'OBS_ATTRIBUTES') {
34
+ hasFoundIrrelevant = true;
35
+ }
36
+ }, layoutIds);
37
+ return R.isEmpty(remainings) && !hasFoundIrrelevant;
38
+ };
39
+
40
+
41
+ const isScatterLayoutCompatible = (data, chartDimension) => {
42
+ const { id, xId, yId } = chartDimension;
43
+
44
+ const dimensions = R.pathOr([], ['structure', 'dimensions', 'observation'], data);
45
+
46
+ const dimension = R.find(R.propEq('id', id), dimensions);
47
+ if (R.isNil(dimension)) {
48
+ return false;
49
+ }
50
+ return R.pipe(
51
+ R.propOr([], 'values'),
52
+ R.indexBy(R.prop('id')),
53
+ R.pick([xId, yId]),
54
+ R.values,
55
+ R.length,
56
+ R.equals(2)
57
+ )(dimension);
58
+ };
59
+
60
+ const isSymbolLayoutCompatible = (data, chartDimension) => {
61
+ const { id, serie } = chartDimension;
62
+ const serieIds = R.pluck('id',serie);
63
+
64
+ return R.pipe(
65
+ R.pathOr([], ['structure', 'dimensions', 'observation']),
66
+ R.indexBy(R.prop('id')),
67
+ R.pathOr([], [id, 'values']),
68
+ R.indexBy(R.prop('id')),
69
+ R.pick(serieIds),
70
+ R.values,
71
+ R.length,
72
+ R.equals(R.length(serieIds))
73
+ )(data);
74
+ };
75
+
76
+ const isStackedLayoutCompatible = (data, chartDimension) => {
77
+ const { id } = chartDimension;
78
+
79
+ return R.pipe(
80
+ R.pathOr([], ['structure', 'dimensions', 'observation']),
81
+ R.filter(R.pipe(R.propOr([], 'values'), R.length, R.lt(1))),
82
+ R.indexBy(R.prop('id')),
83
+ R.has(id)
84
+ )(data);
85
+ };
86
+
87
+ const isChartLayoutCompatible = (data, type, chartDimension) => {
88
+ return R.cond([
89
+ [R.always(R.equals(SCATTER, type)), isScatterLayoutCompatible],
90
+ [R.always(R.equals(H_SYMBOL, type) || R.equals(V_SYMBOL, type)), isSymbolLayoutCompatible],
91
+ [R.always(R.anyPass([R.equals(STACKED_BAR), R.equals(STACKED_ROW)])(type)), isStackedLayoutCompatible],
92
+ [R.T, R.T]
93
+ ])(data, chartDimension);
94
+ };
95
+
96
+ export const isSharedLayoutCompatible = (sdmxData, sharedData) => {
97
+ const type = R.prop('type', sharedData);
98
+ if (type === 'table') {
99
+ const layoutIds = R.pathOr({}, ['config', 'table', 'layoutIds'], sharedData);
100
+ const dataquery = R.path(['config', 'sdmxSource', 'dataquery'], sharedData);
101
+ const annotations = R.pathOr({}, ['structure', 'annotations'], sdmxData)
102
+ const locale = R.pathOr({}, ['config', 'table', 'locale'], sharedData);
103
+ const rawDefaultCombinationsDefinition = R.pathOr({}, ['config', 'defaultCombinations'], sharedData);
104
+ const { concepts='', names='' } = rawDefaultCombinationsDefinition;
105
+ const defaultCombinationsDefinition = parseCombinationDefinition(locale)(concepts, names);
106
+ const customCombinationsDefinitions = getCombinationDefinitions(annotations, locale);
107
+ const combinationsDefinitions = R.isNil(customCombinationsDefinitions) || R.isEmpty(customCombinationsDefinitions)
108
+ ? defaultCombinationsDefinition : customCombinationsDefinitions;
109
+ return isTableLayoutCompatible(sdmxData, layoutIds, combinationsDefinitions, dataquery);
110
+ }
111
+ const chartDimension = R.pathOr({}, ['config', 'chart', 'chartDimension'], sharedData);
112
+ return isChartLayoutCompatible(sdmxData, type, chartDimension);
113
+ };
@@ -0,0 +1,83 @@
1
+ import memoizee from 'memoizee';
2
+ import numeral from 'numeral';
3
+ import * as R from 'ramda';
4
+ import { extractSdmxArtefacts } from './';
5
+
6
+ export const DEFAULT_PREFSCALE_ATTR_IDS = ["PREF_SCALE"];
7
+
8
+ export const DEFAULT_DECIMALS_ATTR_IDS = ["DECIMALS"];
9
+
10
+ export const getFormaterAttribute = (ids, attributes) => R.find(
11
+ (attr) => R.includes(attr.id, ids),
12
+ attributes
13
+ );
14
+
15
+ export const parseAttributeFormaterIds = (ids = {}) => {
16
+ let prefscale = R.prop('prefscale', ids);
17
+ let decimals = R.prop('decimals', ids);
18
+ decimals = R.isNil(decimals) ? DEFAULT_DECIMALS_ATTR_IDS : decimals;
19
+ prefscale = R.isNil(prefscale) ? DEFAULT_PREFSCALE_ATTR_IDS : prefscale;
20
+ return ({
21
+ decimals: R.is(Array, decimals) ? decimals : [decimals],
22
+ prefscale: R.is(Array, prefscale) ? prefscale : [prefscale],
23
+ });
24
+ }
25
+
26
+ export const _getObservationsFormaterAttributes = (data, ids) => R.pipe(
27
+ extractSdmxArtefacts,
28
+ ({ attributes }) => {
29
+ const { decimals, prefscale } = parseAttributeFormaterIds(ids);
30
+ return ({
31
+ decimals: getFormaterAttribute(decimals, attributes),
32
+ prefscale: getFormaterAttribute(prefscale, attributes)
33
+ });
34
+ }
35
+ )(data);
36
+ export const getObservationsFormaterAttributes = memoizee(_getObservationsFormaterAttributes);
37
+
38
+ export const getObservationFormaterValue = (observation, attribute) => {
39
+ const attributeIndex = R.prop('index', attribute);
40
+ const attributeValueIndex = R.nth(attributeIndex, observation);
41
+ return R.nth(attributeValueIndex, R.propOr([], 'values', attribute));
42
+ }
43
+
44
+ export const getObservationFormaterValues = (formaterAttributes) => (observation) => ({
45
+ decimals: getObservationFormaterValue(observation, R.prop('decimals', formaterAttributes)),
46
+ prefscale: getObservationFormaterValue(observation, R.prop('prefscale', formaterAttributes)),
47
+ });
48
+
49
+ export const makeObservationFormater = (formaterValues) => {
50
+ let prefscale = 0;
51
+ if (!R.isNil(R.prop('prefscale', formaterValues))) {
52
+ prefscale = Number(R.propOr('0', 'id', formaterValues.prefscale));
53
+ }
54
+ let decimals = null;
55
+ if (!R.isNil(R.prop('decimals', formaterValues))) {
56
+ let _decimals = Number(R.prop('id', formaterValues.decimals));
57
+ decimals = R.is(Number, _decimals) && !Number.isNaN(_decimals)
58
+ ? _decimals : null;
59
+ }
60
+ let format = '0,0';
61
+ if (R.isNil(decimals)) {
62
+ format = R.concat(format, '.[0000000]');
63
+ }
64
+ else if (decimals > 0) {
65
+ format = R.concat(format, `.[${'0'.repeat(decimals)}]`);
66
+ }
67
+ return value => numeral(Number(value))
68
+ .multiply(Math.pow(10, R.negate(prefscale)))
69
+ .format(format);
70
+ };
71
+
72
+ export const getObservationFormater = (observation, formaterAttributes) => {
73
+ return R.pipe(
74
+ R.tail,
75
+ getObservationFormaterValues(formaterAttributes),
76
+ makeObservationFormater
77
+ )(observation);
78
+ }
79
+
80
+ export const getFormatedObservation = (observation, formaterAttributes) => {
81
+ const formater = getObservationFormater(observation, formaterAttributes);
82
+ return formater(R.head(observation));
83
+ };