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