@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,230 @@
1
+ import * as R from 'ramda';
2
+ import numeral from 'numeral';
3
+ import { format } from 'date-fns';
4
+ import {
5
+ BAR,
6
+ CHORO,
7
+ H_SYMBOL,
8
+ ROW,
9
+ SCATTER,
10
+ STACKED_BAR,
11
+ STACKED_ROW,
12
+ TIMELINE,
13
+ V_SYMBOL
14
+ } from '../constants';
15
+ import { getTimeProc } from './getAxisOptions';
16
+
17
+ export const getTooltipOptions = (data, type, options, fonts={}, timeFormats={}, locale) => {
18
+ const primaryFonts = (color) => (`
19
+ font-size: ${R.pathOr(12, ['primary', 'fontSize'], fonts)}px;
20
+ font-family: ${R.pathOr('inherit', ['primary', 'fontFamily'], fonts)};
21
+ font-weight: ${R.pathOr('normal', ['primary', 'fontWeight'], fonts)};
22
+ color: ${color};
23
+ padding: 5px;
24
+ border: 1px solid ${color};
25
+ background: white;
26
+ opacity: .8;
27
+ `);
28
+
29
+ const secondaryFonts = `
30
+ font-family: ${R.pathOr('inherit', ['secondary', 'fontFamily'], fonts)};
31
+ font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;
32
+ font-weight: ${R.pathOr('normal', ['secondary', 'fontWeight'], fonts)};
33
+ `;
34
+
35
+ const valueFormatter = d => numeral(d).format('0,0.[00]');
36
+
37
+ const timeFormatter = R.pipe(
38
+ R.prop('frequency'),
39
+ freq => getTimeProc(freq, timeFormats, locale),
40
+ R.when(
41
+ R.anyPass([R.isNil, R.complement(R.is)(Function)]),
42
+ R.always(date => format(date, 'MMM YY'))
43
+ )
44
+ )(data);
45
+
46
+ return R.pipe(
47
+ R.pathOr({}, ['serie', 'tooltip']),
48
+ R.cond([
49
+ [
50
+ R.always(R.equals(BAR, type)),
51
+ R.mergeRight({
52
+ layout: (serie, datum, color) => (`
53
+ <div style="${primaryFonts(color)}">
54
+ <div style="text-align: right;">
55
+ ${datum.x}
56
+ </div>
57
+ <div style="text-align: right; ${secondaryFonts}">
58
+ ${datum.formatedValue || valueFormatter(datum.y)}
59
+ </div>
60
+ </div>
61
+ `)
62
+ })
63
+ ],
64
+ [
65
+ R.always(R.equals(ROW, type)),
66
+ R.mergeRight({
67
+ layout: (serie, datum, color) => (`
68
+ <div style="${primaryFonts(color)}">
69
+ <div style="text-align: right;">
70
+ ${datum.y}
71
+ </div>
72
+ <div style="text-align: right; ${secondaryFonts}">
73
+ ${datum.formatedValue || valueFormatter(datum.x)}
74
+ </div>
75
+ <div>
76
+ `)
77
+ })
78
+ ],
79
+ [
80
+ R.always(R.equals(SCATTER, type)),
81
+ R.mergeRight({
82
+ layout: (serie, datum, color) => (`
83
+ <div style="${primaryFonts(color)}">
84
+ <div style="text-align: right;">
85
+ ${R.pipe(R.propOr({}, 'dimensionValues'), R.values, R.pluck('name'), R.join(' '))(datum)}
86
+ </div>
87
+ <div style="text-align: right;">
88
+ ${R.path(['dimensionValues', 'x', 'name'], serie)}
89
+ <span style="${secondaryFonts}">
90
+ ${datum.xFormat || valueFormatter(datum.x)}
91
+ </span>
92
+ </div>
93
+ <div style="text-align: right;">
94
+ ${R.path(['dimensionValues', 'y', 'name'], serie)}
95
+ <span style="${secondaryFonts}">
96
+ ${datum.yFormat || valueFormatter(datum.y)}
97
+ </span>
98
+ </div>
99
+ </div>
100
+ `)
101
+ })
102
+ ],
103
+ [
104
+ R.always(R.equals(TIMELINE, type)),
105
+ R.mergeRight({
106
+ layout: (serie, datum, color) => (`
107
+ <div style="${primaryFonts(color)}">
108
+ <div style="text-align: right;">
109
+ ${R.pipe(R.propOr({}, 'dimensionValues'), R.values, R.pluck('name'), R.join('<br />'))(datum)}
110
+ </div>
111
+ <div style="text-align: right;">
112
+ ${datum.timeLabel}
113
+ </div>
114
+ <div style="text-align: right; ${secondaryFonts}">
115
+ ${datum.formatedValue || valueFormatter(datum.y)}
116
+ </div>
117
+ </div>
118
+ `)
119
+ })
120
+ ],
121
+ [
122
+ R.always(R.equals(H_SYMBOL, type)),
123
+ R.mergeRight({
124
+ layout: (serie, datum, color) => (`
125
+ <div style="${primaryFonts(color)}">
126
+ <div style="text-align: right;">
127
+ ${datum.y}
128
+ <br />
129
+ ${datum.symbolValue}
130
+ </div>
131
+ <div style="text-align: right; ${secondaryFonts}">
132
+ ${datum.formatedValue || valueFormatter(datum.x)}
133
+ </div>
134
+ </div>
135
+ `)
136
+ })
137
+ ],
138
+ [
139
+ R.always(R.equals(V_SYMBOL, type)),
140
+ R.mergeRight({
141
+ layout: (serie, datum, color) => (`
142
+ <div style="${primaryFonts(color)}">
143
+ <div style="text-align: right;">
144
+ ${datum.x}
145
+ <br />
146
+ ${datum.symbolValue}
147
+ </div>
148
+ <div style="text-align: right; ${secondaryFonts}">
149
+ ${datum.formatedValue || valueFormatter(datum.y)}
150
+ </div>
151
+ </div>
152
+ `)
153
+ })
154
+ ],
155
+ [
156
+ R.always(R.equals(STACKED_BAR, type)),
157
+ R.mergeRight({
158
+ layout: (serie, datum, color) => (`
159
+ <div style="${primaryFonts(color)}">
160
+ <div style="text-align: right;">
161
+ ${datum.x}
162
+ </div>
163
+ <div style="text-align: right;">
164
+ ${datum.layerLabel}
165
+ </div>
166
+ <div style="text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;">
167
+ Value:
168
+ <span style="${secondaryFonts}">
169
+ ${R.is(Function, datum.formater) ? datum.formater(datum.height) : valueFormatter(datum.height)}
170
+ </span>
171
+ </div>
172
+ <div style="text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;">
173
+ Cumulated:
174
+ <span style="${secondaryFonts}">
175
+ ${R.is(Function, datum.formater) ? datum.formater(datum.y) : valueFormatter(datum.y)}
176
+ </span>
177
+ </div>
178
+ </div>
179
+ `)
180
+ })
181
+ ],
182
+ [
183
+ R.always(R.equals(STACKED_ROW, type)),
184
+ R.mergeRight({
185
+ layout: (serie, datum, color) => (`
186
+ <div style="${primaryFonts(color)}">
187
+ <div style="text-align: right;">
188
+ ${datum.y}
189
+ </div>
190
+ <div style="text-align: right;">
191
+ ${datum.layerLabel}
192
+ </div>
193
+ <div style="text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;">
194
+ Value:
195
+ <span style="${secondaryFonts}">
196
+ ${R.is(Function, datum.formater) ? datum.formater(datum.width) : valueFormatter(datum.width)}
197
+ </span>
198
+ </div>
199
+ <div style="text-align: right; font-size: ${R.pathOr(12, ['secondary', 'fontSize'], fonts)}px;">
200
+ Cumulated:
201
+ <span style="${secondaryFonts}">
202
+ ${R.is(Function, datum.formater) ? datum.formater(datum.x) : valueFormatter(datum.x)}
203
+ </span>
204
+ </div>
205
+ </div>
206
+ `)
207
+ })
208
+ ],
209
+ [
210
+ R.always(R.equals(CHORO, type)),
211
+ R.mergeRight({
212
+ layout: (serie, datum, color) => (`
213
+ <div style="${primaryFonts(color)}">
214
+ <div style="text-align: right;">
215
+ ${R.pathOr('', ['properties', 'label'], datum)}
216
+ </div>
217
+ <div style="text-align: right;">
218
+ ${R.pathOr('', ['properties', 'category'], datum)}
219
+ </div>
220
+ <div style="text-align: right; ${secondaryFonts}">
221
+ ${R.pipe(R.pathOr(null, ['properties', 'value']), valueFormatter)(datum)}
222
+ </div>
223
+ </div>
224
+ `)
225
+ })
226
+ ],
227
+ [R.T, R.identity]
228
+ ])
229
+ )(options);
230
+ };
@@ -0,0 +1,64 @@
1
+ export const BAR = 'BarChart';
2
+ export const ROW = 'RowChart';
3
+ export const SCATTER = 'ScatterChart';
4
+ export const TIMELINE = 'TimelineChart';
5
+ export const H_SYMBOL = 'HorizontalSymbolChart';
6
+ export const V_SYMBOL = 'VerticalSymbolChart';
7
+ export const STACKED_BAR = 'StackedBarChart';
8
+ export const STACKED_ROW = 'StackedRowChart';
9
+ export const CHORO = 'ChoroplethChart';
10
+ export const PERCENT = 'percent';
11
+ export const VALUES = 'values';
12
+ export const TYPES = {
13
+ [BAR]: BAR,
14
+ [ROW]: ROW,
15
+ [SCATTER]: SCATTER,
16
+ [TIMELINE]: TIMELINE,
17
+ [H_SYMBOL]: H_SYMBOL,
18
+ [V_SYMBOL]: V_SYMBOL,
19
+ [STACKED_BAR]: STACKED_BAR,
20
+ [STACKED_ROW]: STACKED_ROW,
21
+ [CHORO]: CHORO,
22
+ };
23
+ export const FREQ_A = 'annual';
24
+ export const FREQ_S = 'semesterly';
25
+ export const FREQ_Q = 'quarterly';
26
+ export const FREQ_M = 'monthly';
27
+ export const DEFAULT_UPR_IDS = {
28
+ U: ['UNIT', 'UNIT_MEASURE', 'UNIT_MEAS', 'UNITS'],
29
+ P: ['UNIT_MULT', 'POWERCODE', 'POWER', 'MAGNITUDE', 'SCALE'],
30
+ R: ['REF_PERIOD', 'REFERENCEPERIOD', 'BASE_PER']
31
+ };
32
+
33
+ export const DEFAULT_REJECTED_UPR_VALUES_IDS = {
34
+ U: [],
35
+ P: ['0'],
36
+ R: []
37
+ };
38
+
39
+ export const DEFAULT_REJECTED_SUBTITLE_IDS = ['_L', '_T', '_Z'];
40
+
41
+ export const DIMENSION_DISPLAY_PARTS = {
42
+ DESCRIPTION: 'description',
43
+ CODE: 'code',
44
+ BOTH: 'both',
45
+ };
46
+
47
+ export const DEFAULT_MAJOR_ATTRIBUTES = {
48
+ DECIMALS: {
49
+ ID: 'DECIMALS',
50
+ ROLE: 'DECIMALS'
51
+ },
52
+ SCALE: {
53
+ ID: 'SCALE'
54
+ }
55
+ };
56
+
57
+ export const V8_SDMX_JSON = "application/vnd.sdmx.data+json;version=1.0.0-wd";
58
+
59
+ export const OBS_TYPE_NUMBER = 'OBS_TYPE_NUMBER';
60
+ export const OBS_TYPE_NUMERICAL_STRING = 'OBS_TYPE_NUMERICAL_STRING';
61
+ export const OBS_TYPE_STRING = 'OBS_TYPE_STRING';
62
+ export const REPORTING_YEAR_START_DAY = 'REPORTING_YEAR_START_DAY';
63
+ export const REPYEARSTART = 'REPYEARSTART';
64
+
@@ -0,0 +1,118 @@
1
+ import * as R from 'ramda';
2
+ import dateFns from 'date-fns';
3
+ import fr from 'date-fns/locale/fr';
4
+ import de from 'date-fns/locale/de';
5
+ import en from 'date-fns/locale/en';
6
+ import es from 'date-fns/locale/es';
7
+ import ar from 'date-fns/locale/ar';
8
+ import it from 'date-fns/locale/it';
9
+ import nl from 'date-fns/locale/nl';
10
+ import th from 'date-fns/locale/th';
11
+
12
+ const isValidDate = period =>
13
+ R.and(dateFns.isDate, date => R.not(R.equals(date.getTime(date), NaN)))(new Date(period));
14
+
15
+ export const dateWithoutTZ = date => dateFns.addMinutes(date, date.getTimezoneOffset());
16
+
17
+ export const getLocale = R.cond([
18
+ [R.equals('fr'), R.always(fr)],
19
+ [R.equals('de'), R.always(de)],
20
+ [R.equals('es'), R.always(es)],
21
+ [R.equals('ar'), R.always(ar)],
22
+ [R.equals('it'), R.always(it)],
23
+ [R.equals('nl'), R.always(nl)],
24
+ [R.equals('th'), R.always(th)],
25
+ [R.T, R.always(en)]
26
+ ]);
27
+
28
+ const formaterPeriod = (locale, format) => date => dateFns.format(date, format, { locale: getLocale(locale) });
29
+
30
+ export const getReportedTimePeriodLabel = (freq, _format, locale) => (reportYearStart, { id, start, reportedStart }) => {
31
+ const year = dateFns.getYear(start);
32
+ const reportStartDate = new Date(year, reportYearStart.month, reportYearStart.day);
33
+ const isReportFirstDate = dateFns.isEqual(reportStartDate, new Date(year, 1, 1));
34
+ if (isReportFirstDate || freq === 'D') {
35
+ return R.isNil(_format) || freq !== 'M'
36
+ ? id : dateFns.format(start, _format, { locale: getLocale(locale) });
37
+ }
38
+ const nextYear = year + 1;
39
+ if (freq === 'A') {
40
+ return `${year}/${nextYear}`;
41
+ }
42
+ if (freq === 'S') {
43
+ const [semester] = R.match(/S\d/, id);
44
+ return `${year}/${nextYear}-${semester}`;
45
+ }
46
+ if (freq === 'Q') {
47
+ const [quarter] = R.match(/Q\d/, id);
48
+ return `${year}/${nextYear}-${quarter}`;
49
+ }
50
+ if (freq === 'M') {
51
+ const isFirstDayOfMonth = dateFns.isFirstDayOfMonth(reportedStart);
52
+ if (isFirstDayOfMonth) {
53
+ return R.isNil(_format) ? id : dateFns.format(reportedStart, _format, { locale: getLocale(locale) });
54
+ }
55
+ const [month] = R.match(/M[\d]{2}/, id);
56
+ return `${year}/${nextYear}-${month}`;
57
+ }
58
+ const [week] = R.match(/W[\d]{2}/, id)
59
+ return `${year}/${nextYear}-${week}`;
60
+ };
61
+
62
+ export const getReportedTimePeriod = (reportYearStart, value, freq) => {
63
+ let start = new Date(R.prop('start', value));
64
+ let end = dateWithoutTZ(new Date(R.prop('end', value)));
65
+ if(reportYearStart.month === '01' && reportYearStart.day === '01') {
66
+ return ({ start, end });
67
+ }
68
+ start = dateFns.addMonths(start, reportYearStart.month - 1);
69
+ start = dateFns.addDays(start, reportYearStart.day - 1);
70
+ if (freq === 'A') {
71
+ end = dateFns.addYears(start, 1);
72
+ }
73
+ if (freq === 'S') {
74
+ end = dateFns.addMonths(start, 6);
75
+ }
76
+ if (freq === 'Q') {
77
+ end = dateFns.addMonths(start, 3);
78
+ }
79
+ if (freq === 'M') {
80
+ end = dateFns.addMonths(start, 6);
81
+ }
82
+ if (freq === 'W' || freq === 'B') {
83
+ end = dateFns.addDays(start, 7);
84
+ }
85
+ if (freq === 'D') {
86
+ end = dateFns.addDays(start, 1);
87
+ }
88
+ if (freq === 'H') {
89
+ end = dateFns.addHours(start, 1);
90
+ }
91
+ if (freq === 'N') {
92
+ end = dateFns.addMinutes(start, 1);
93
+ }
94
+ end = dateFns.subSeconds(end, 1);
95
+ return ({ start, end });
96
+ };
97
+
98
+ export const getReportedTimePeriodNote = (reportYearStart, start, end, freq) => {
99
+ if(reportYearStart.month === '01' && reportYearStart.day === '01') {
100
+ return null;
101
+ }
102
+ if (R.includes(freq, ['D', 'H', 'N'])) {
103
+ return null;
104
+ }
105
+ const isFirstDayOfMonth = dateFns.isFirstDayOfMonth(start);
106
+ if (freq === 'M' && isFirstDayOfMonth) {
107
+ return null;
108
+ }
109
+ const formatedStart = dateFns.format(start, 'YYYY-MM-DD');
110
+ const formatedEnd = dateFns.format(end, 'YYYY-MM-DD');
111
+ return ({ value: { name: `${formatedStart} - ${formatedEnd}` } });
112
+ };
113
+
114
+
115
+ export const getTimePeriodLabel = (locale, format = 'YYYY MMM') => R.pipe(
116
+ R.when(R.isNil, R.always('')),
117
+ R.when(isValidDate, formaterPeriod(locale, format)),
118
+ );
@@ -0,0 +1,54 @@
1
+ import { isEmpty, isNil, get, has, reduce } from 'lodash';
2
+
3
+ export const dimensionValueDisplay =
4
+ (display, accessors = {}) =>
5
+ (dimensionValue) => {
6
+ const id = get(dimensionValue, accessors.id || 'id', '');
7
+ const name = get(dimensionValue, accessors.name || 'name', '');
8
+ // a non-coded component (dim | attr) has no name, names nor label
9
+ // the only valid thing to display is the id
10
+ if (get(dimensionValue, 'isNonCoded', false)) return id;
11
+ //auto-generated flags have no id nor name
12
+ if (isEmpty(id) && isEmpty(name)) return ''
13
+ switch (display) {
14
+ case 'label':
15
+ return isEmpty(name) ? `[${id}]` : name;
16
+ case 'code':
17
+ return id;
18
+ case 'both':
19
+ if (isNil(id) || isEmpty(id)) return name;
20
+ return `(${id}) ${name}`;
21
+ default:
22
+ return null;
23
+ }
24
+ };
25
+
26
+ export const dimensionValueDisplayAt = (dimension, index, display) => {
27
+ const dimensionValue = get(dimension, `values[${Number(index)}]`, {});
28
+ return dimensionValueDisplay(display)(dimensionValue);
29
+ };
30
+
31
+ export const categoryDisplay = (
32
+ splitObservationKey,
33
+ dimensions,
34
+ dimensionsWithValuesIndexedById,
35
+ rejectedId,
36
+ display,
37
+ ) => {
38
+ return reduce(
39
+ splitObservationKey,
40
+ (memo, dimensionValueIndex, dimensionIndex) => {
41
+ const dimension = get(dimensions, `[${dimensionIndex}]`, {});
42
+ if (
43
+ has(dimensionsWithValuesIndexedById, dimension.id) &&
44
+ dimension.id !== rejectedId
45
+ ) {
46
+ memo.push(
47
+ dimensionValueDisplayAt(dimension, dimensionValueIndex, display),
48
+ );
49
+ }
50
+ return memo;
51
+ },
52
+ [],
53
+ ).join(' - ');
54
+ };
@@ -0,0 +1,65 @@
1
+ import { get, has, head, isUndefined, map, split, transform } from 'lodash';
2
+ import { getRefAreaDimension } from '@sis-cc/dotstatsuite-sdmxjs';
3
+ import { categoryDisplay, dimensionValueDisplay } from '../dimension-utils';
4
+
5
+ const parseByAreas = (observations, refAreaDimension) => {
6
+ if (isUndefined(refAreaDimension)) {
7
+ return null;
8
+ }
9
+ const refAreaDimIndex = get(refAreaDimension, 'index');
10
+ const refAreaValues = refAreaDimension.values;
11
+
12
+ return transform(
13
+ observations,
14
+ (acc, value, key) => {
15
+ const splitedKey = split(key, ':');
16
+ const areaValueIndex = get(splitedKey, `[${refAreaDimIndex}]`, null);
17
+ const areaValue = get(refAreaValues, `[${areaValueIndex}]`, null);
18
+ const areaId = get(areaValue, 'id', null);
19
+ if (!has(acc, areaId)) {
20
+ acc[areaId] = [];
21
+ }
22
+ acc[areaId].push({ splitedKey, value, areaValueIndex });
23
+ },
24
+ {}
25
+ );
26
+ };
27
+
28
+ export default ({ observations, dimensions }, dimensionsWithValuesIndexedById, topoMap, display) => {
29
+ const refAreaDimension = getRefAreaDimension({ dimensions });
30
+ const observationsByAreas = parseByAreas(observations, refAreaDimension);
31
+ const topology = get(topoMap, 'topology', {});
32
+ const areaSelection = get(topoMap, 'areaSelection', null);
33
+ const topoAreas = get(topology, `objects.${areaSelection}`, null);
34
+ if (!observationsByAreas || !topoAreas) {
35
+ return null;
36
+ }
37
+ const topoAreasWithData = map(
38
+ topoAreas.geometries,
39
+ (areaGeometry) => {
40
+ const areaObservation = head(get(observationsByAreas, get(areaGeometry, 'properties.id', null), []));
41
+ const areaValueIndex = get(areaObservation, 'areaValueIndex', null);
42
+ const areaValue = get(refAreaDimension, `values[${areaValueIndex}]`, null);
43
+ return {
44
+ ...areaGeometry,
45
+ properties: {
46
+ ...get(areaGeometry, 'properties', {}),
47
+ label: dimensionValueDisplay(display)(areaValue),
48
+ value: head(get(areaObservation, 'value', [])),
49
+ category: categoryDisplay(get(areaObservation, 'splitedKey', null), dimensions, dimensionsWithValuesIndexedById, refAreaDimension.id, display),
50
+ }
51
+ };
52
+ }
53
+ );
54
+ return ({
55
+ objects: {
56
+ areas: {
57
+ type: topoAreas.type,
58
+ geometries: topoAreasWithData
59
+ }
60
+ },
61
+ arcs: topology.arcs,
62
+ bbox: topology.bbox,
63
+ transform: topology.transform
64
+ });
65
+ }
@@ -0,0 +1,22 @@
1
+ import { map, each, get, omit, isArray, keys, head } from 'lodash';
2
+
3
+ export default function focus(series, focusSelections) {
4
+ const serie = head(series);
5
+ const datapoints = get(serie, 'datapoints', []);
6
+
7
+ const _datapoints = map(datapoints, (datapoint) => {
8
+ let _datapoint = omit(datapoint, map(keys(focusSelections), focusKey => `${focusKey}Index`));
9
+
10
+ each(focusSelections, (focusSelection, focusKey) => {
11
+ const _focusKey = `${focusKey}Index`;
12
+
13
+ each(isArray(focusSelection) ? focusSelection : [focusSelection], (focus, index) => {
14
+ if (get(focus, 'value') === _datapoint.key) _datapoint[_focusKey] = index;
15
+ });
16
+ });
17
+
18
+ return _datapoint;
19
+ });
20
+
21
+ return [{ ...serie, datapoints: _datapoints }];
22
+ }
@@ -0,0 +1,50 @@
1
+ import { map, sortBy, head, isEmpty, isNil, split } from 'lodash';
2
+ import { categoryDisplay } from '../dimension-utils';
3
+
4
+ export const getDatapoints = (
5
+ keys, observations, dimensions, dimensionsWithValuesIndexedById, sortDirection, display, formaterAttrs, getFormatedObservation,
6
+ ) => {
7
+ const [categoryKey, valueKey] = keys;
8
+ const sortFunc = dp => dp[valueKey] * sortDirection;
9
+
10
+ return sortBy(
11
+ map(
12
+ observations,
13
+ (observationValue, observationKey) => {
14
+ const value = head(observationValue);
15
+ const category = categoryDisplay(split(observationKey, ':'), dimensions, dimensionsWithValuesIndexedById, null, display);
16
+ const categoryIds = categoryDisplay(split(observationKey, ':'), dimensions, dimensionsWithValuesIndexedById, null, 'code');
17
+ const formatedValue = getFormatedObservation(observationValue, formaterAttrs);
18
+
19
+ let key = categoryIds;
20
+ if (isNil(key) || isEmpty(key)) {
21
+ key = 'uniq-dp';
22
+ }
23
+
24
+ return { value, category, [valueKey]: value, [categoryKey]: category, key, formatedValue };
25
+ }
26
+ ),
27
+ sortFunc
28
+ );
29
+ };
30
+
31
+ export const series = (
32
+ keys, observations, dimensions, dimensionsWithValuesIndexedById, sortDirection, display, formaterAttrs, getFormatedObservation
33
+ ) => {
34
+ return [{
35
+ datapoints: getDatapoints(
36
+ keys, observations, dimensions, dimensionsWithValuesIndexedById, sortDirection, display, formaterAttrs, getFormatedObservation
37
+ )
38
+ }]
39
+ };
40
+
41
+ export default (chartType, { observations, dimensions }, dimensionsWithValuesIndexedById, display, formaterAttrs, getFormatedObservation) => {
42
+ switch(chartType) {
43
+ case 'BarChart':
44
+ return series(['x', 'y'], observations, dimensions, dimensionsWithValuesIndexedById, 1, display, formaterAttrs, getFormatedObservation);
45
+ case 'RowChart':
46
+ return series(['y', 'x'], observations, dimensions, dimensionsWithValuesIndexedById, -1, display, formaterAttrs, getFormatedObservation);
47
+ default:
48
+ return [];
49
+ }
50
+ };
@@ -0,0 +1,32 @@
1
+ import * as R from 'ramda';
2
+ import { isRefAreaDimension } from '@sis-cc/dotstatsuite-sdmxjs';
3
+
4
+ export default (dimensions, { id, xId, yId }) => {
5
+ if (R.isEmpty(dimensions))
6
+ return;
7
+
8
+ let chartDimension;
9
+ if (!R.isNil(id))
10
+ chartDimension = R.find(R.propEq('id', id), dimensions);
11
+
12
+ if (R.isNil(chartDimension)) {
13
+ const _dimensions = R.reject(isRefAreaDimension, dimensions);
14
+ chartDimension = R.head(R.isEmpty(_dimensions) ? dimensions : _dimensions);
15
+ }
16
+
17
+ const chartDimensionId = R.prop('id', chartDimension || {});
18
+ const values = R.propOr([], 'values', chartDimension || {});
19
+
20
+ const xValue = R.find(R.propEq('id', xId), values);
21
+ const yValue = R.find(v => R.propEq('id', yId, v) && v.id !== xId, values);
22
+ //if same xId & yId provided, xId is taken in account
23
+ const _xId = R.isNil(xValue)
24
+ ? R.pipe(R.reject(R.propEq('id', R.prop('id', yValue || {}))), R.head, R.prop('id'))(values) : xValue.id;
25
+ const _yId = R.isNil(yValue) ? R.pipe(R.find(v => v.id !== _xId), R.prop('id'))(values) : yValue.id;
26
+
27
+ return {
28
+ id: chartDimensionId,
29
+ xId: _xId,
30
+ yId: _yId,
31
+ };
32
+ };
@@ -0,0 +1,39 @@
1
+ import { map, each, omit, get, split, reduce, isEmpty, keys } from 'lodash';
2
+
3
+ export default function focus(series, focusSelections) {
4
+ // scatter has only 1 serie
5
+ const serie = get(series, '[0]', {});
6
+
7
+ const _focusSelections = reduce(
8
+ focusSelections,
9
+ (memo, focusSelection, focusKey) => {
10
+ if (!isEmpty(focusSelection)) memo[focusKey] = focusSelection;
11
+ return memo;
12
+ },
13
+ {}
14
+ );
15
+
16
+ if (isEmpty(_focusSelections)) return series;
17
+
18
+ const datapoints = get(serie, 'datapoints', []);
19
+
20
+ let _datapoints = map(datapoints, (datapoint) => (
21
+ omit(datapoint, map(keys(focusSelections), focusKey => `${focusKey}Index`))
22
+ ));
23
+
24
+ const __datapoints = map(_datapoints, (datapoint) => {
25
+ each(_focusSelections, (focusSelection, focusKey) => {
26
+ const _focusKey = `${focusKey}Index`;
27
+
28
+ each(focusSelection, (focus, i) => {
29
+ const _focus = get(focus, 'options', {});
30
+ const dimensionValueId = get(datapoint, `dimensionValues.${_focus.dimensionId}.id`);
31
+ if (dimensionValueId === _focus.dimensionValueId) datapoint[_focusKey] = i;
32
+ });
33
+ });
34
+
35
+ return datapoint;
36
+ });
37
+
38
+ return [{ ...serie, datapoints: __datapoints }];
39
+ }