@hisptz/dhis2-analytics 2.0.32 → 2.0.34

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 (249) hide show
  1. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js.map +1 -1
  2. package/dist/components/Scorecard/Scorecard.stories.js +150 -879
  3. package/dist/components/Scorecard/Scorecard.stories.js.map +1 -1
  4. package/dist/components/Scorecard/ScorecardContext.stories.js +422 -0
  5. package/dist/components/Scorecard/ScorecardContext.stories.js.map +1 -0
  6. package/dist/components/Scorecard/components/DataProvider.js +4 -19
  7. package/dist/components/Scorecard/components/DataProvider.js.map +1 -1
  8. package/dist/components/Scorecard/components/LoadingIndicator.js +27 -0
  9. package/dist/components/Scorecard/components/LoadingIndicator.js.map +1 -0
  10. package/dist/components/Scorecard/components/MetaProvider.js +10 -2
  11. package/dist/components/Scorecard/components/MetaProvider.js.map +1 -1
  12. package/dist/components/Scorecard/components/ScorecardContext.js +52 -1
  13. package/dist/components/Scorecard/components/ScorecardContext.js.map +1 -1
  14. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.js +33 -14
  15. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.js.map +1 -1
  16. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.module.css +18 -0
  17. package/dist/components/Scorecard/components/ScorecardTable/ScorecardTable.module.css.map +1 -1
  18. package/dist/components/Scorecard/components/ScorecardTable/components/AverageCell.js +47 -14
  19. package/dist/components/Scorecard/components/ScorecardTable/components/AverageCell.js.map +1 -1
  20. package/dist/components/Scorecard/components/ScorecardTable/components/AverageFooterCell.js +39 -8
  21. package/dist/components/Scorecard/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
  22. package/dist/components/Scorecard/components/ScorecardTable/components/CellLoader.js +12 -0
  23. package/dist/components/Scorecard/components/ScorecardTable/components/CellLoader.js.map +1 -0
  24. package/dist/components/Scorecard/components/ScorecardTable/components/DataContainer.js +24 -4
  25. package/dist/components/Scorecard/components/ScorecardTable/components/DataContainer.js.map +1 -1
  26. package/dist/components/Scorecard/components/ScorecardTable/components/DataFooterCell.js +125 -32
  27. package/dist/components/Scorecard/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
  28. package/dist/components/Scorecard/components/ScorecardTable/components/DataRow.js +17 -7
  29. package/dist/components/Scorecard/components/ScorecardTable/components/DataRow.js.map +1 -1
  30. package/dist/components/Scorecard/components/ScorecardTable/components/DataValue.js +8 -5
  31. package/dist/components/Scorecard/components/ScorecardTable/components/DataValue.js.map +1 -1
  32. package/dist/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js +16 -3
  33. package/dist/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js.map +1 -1
  34. package/dist/components/Scorecard/components/ScorecardTable/components/LinkedCell.js +8 -2
  35. package/dist/components/Scorecard/components/ScorecardTable/components/LinkedCell.js.map +1 -1
  36. package/dist/components/Scorecard/components/ScorecardTable/components/LinkedDataCell.js.map +1 -1
  37. package/dist/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js +5 -3
  38. package/dist/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js.map +1 -1
  39. package/dist/components/Scorecard/components/ScorecardTable/components/SingleDataCell.js +2 -2
  40. package/dist/components/Scorecard/components/ScorecardTable/components/SingleDataCell.js.map +1 -1
  41. package/dist/components/Scorecard/components/ScorecardTable/components/TableBody.js +8 -3
  42. package/dist/components/Scorecard/components/ScorecardTable/components/TableBody.js.map +1 -1
  43. package/dist/components/Scorecard/components/ScorecardTable/components/TableFoot.js +8 -5
  44. package/dist/components/Scorecard/components/ScorecardTable/components/TableFoot.js.map +1 -1
  45. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/TableHeader.js +7 -8
  46. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/TableHeader.js.map +1 -1
  47. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/AverageHeaderCell.js +6 -8
  48. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/AverageHeaderCell.js.map +1 -1
  49. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +13 -4
  50. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
  51. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/FilterArea.js +4 -2
  52. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/FilterArea.js.map +1 -1
  53. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js +4 -2
  54. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js.map +1 -1
  55. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/MetaHeaderCell.js +6 -7
  56. package/dist/components/Scorecard/components/ScorecardTable/components/TableHeader/components/MetaHeaderCell.js.map +1 -1
  57. package/dist/components/Scorecard/components/StateProvider.js +8 -0
  58. package/dist/components/Scorecard/components/StateProvider.js.map +1 -1
  59. package/dist/components/Scorecard/hooks/cellData.js +3 -4
  60. package/dist/components/Scorecard/hooks/cellData.js.map +1 -1
  61. package/dist/components/Scorecard/hooks/columns.js +106 -89
  62. package/dist/components/Scorecard/hooks/columns.js.map +1 -1
  63. package/dist/components/Scorecard/hooks/data.js +128 -31
  64. package/dist/components/Scorecard/hooks/data.js.map +1 -1
  65. package/dist/components/Scorecard/hooks/metadata.js +23 -13
  66. package/dist/components/Scorecard/hooks/metadata.js.map +1 -1
  67. package/dist/components/Scorecard/hooks/table.js +137 -5
  68. package/dist/components/Scorecard/hooks/table.js.map +1 -1
  69. package/dist/components/Scorecard/hooks/value.js +198 -0
  70. package/dist/components/Scorecard/hooks/value.js.map +1 -0
  71. package/dist/components/Scorecard/schemas/config.js +27 -12
  72. package/dist/components/Scorecard/schemas/config.js.map +1 -1
  73. package/dist/components/Scorecard/utils/analytics.js +4 -3
  74. package/dist/components/Scorecard/utils/analytics.js.map +1 -1
  75. package/dist/components/Scorecard/utils/columns.js +66 -104
  76. package/dist/components/Scorecard/utils/columns.js.map +1 -1
  77. package/dist/components/Scorecard/utils/data.js +10 -100
  78. package/dist/components/Scorecard/utils/data.js.map +1 -1
  79. package/dist/components/Scorecard/utils/dataEngine.js +35 -0
  80. package/dist/components/Scorecard/utils/dataEngine.js.map +1 -0
  81. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js.map +1 -1
  82. package/dist/esm/components/Scorecard/Scorecard.stories.js +148 -876
  83. package/dist/esm/components/Scorecard/Scorecard.stories.js.map +1 -1
  84. package/dist/esm/components/Scorecard/ScorecardContext.stories.js +417 -0
  85. package/dist/esm/components/Scorecard/ScorecardContext.stories.js.map +1 -0
  86. package/dist/esm/components/Scorecard/components/DataProvider.js +4 -19
  87. package/dist/esm/components/Scorecard/components/DataProvider.js.map +1 -1
  88. package/dist/esm/components/Scorecard/components/LoadingIndicator.js +25 -0
  89. package/dist/esm/components/Scorecard/components/LoadingIndicator.js.map +1 -0
  90. package/dist/esm/components/Scorecard/components/MetaProvider.js +6 -2
  91. package/dist/esm/components/Scorecard/components/MetaProvider.js.map +1 -1
  92. package/dist/esm/components/Scorecard/components/ScorecardContext.js +49 -2
  93. package/dist/esm/components/Scorecard/components/ScorecardContext.js.map +1 -1
  94. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.js +34 -15
  95. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.js.map +1 -1
  96. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.module.css +18 -0
  97. package/dist/esm/components/Scorecard/components/ScorecardTable/ScorecardTable.module.css.map +1 -1
  98. package/dist/esm/components/Scorecard/components/ScorecardTable/components/AverageCell.js +47 -14
  99. package/dist/esm/components/Scorecard/components/ScorecardTable/components/AverageCell.js.map +1 -1
  100. package/dist/esm/components/Scorecard/components/ScorecardTable/components/AverageFooterCell.js +40 -9
  101. package/dist/esm/components/Scorecard/components/ScorecardTable/components/AverageFooterCell.js.map +1 -1
  102. package/dist/esm/components/Scorecard/components/ScorecardTable/components/CellLoader.js +10 -0
  103. package/dist/esm/components/Scorecard/components/ScorecardTable/components/CellLoader.js.map +1 -0
  104. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataContainer.js +25 -5
  105. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataContainer.js.map +1 -1
  106. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataFooterCell.js +127 -34
  107. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataFooterCell.js.map +1 -1
  108. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataRow.js +18 -8
  109. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataRow.js.map +1 -1
  110. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataValue.js +10 -7
  111. package/dist/esm/components/Scorecard/components/ScorecardTable/components/DataValue.js.map +1 -1
  112. package/dist/esm/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js +16 -3
  113. package/dist/esm/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.js.map +1 -1
  114. package/dist/esm/components/Scorecard/components/ScorecardTable/components/LinkedCell.js +8 -2
  115. package/dist/esm/components/Scorecard/components/ScorecardTable/components/LinkedCell.js.map +1 -1
  116. package/dist/esm/components/Scorecard/components/ScorecardTable/components/LinkedDataCell.js.map +1 -1
  117. package/dist/esm/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js +6 -4
  118. package/dist/esm/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.js.map +1 -1
  119. package/dist/esm/components/Scorecard/components/ScorecardTable/components/SingleDataCell.js +2 -2
  120. package/dist/esm/components/Scorecard/components/ScorecardTable/components/SingleDataCell.js.map +1 -1
  121. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableBody.js +9 -4
  122. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableBody.js.map +1 -1
  123. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableFoot.js +9 -6
  124. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableFoot.js.map +1 -1
  125. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/TableHeader.js +7 -8
  126. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/TableHeader.js.map +1 -1
  127. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/AverageHeaderCell.js +7 -9
  128. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/AverageHeaderCell.js.map +1 -1
  129. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js +14 -6
  130. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.js.map +1 -1
  131. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/FilterArea.js +5 -3
  132. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/FilterArea.js.map +1 -1
  133. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js +5 -3
  134. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.js.map +1 -1
  135. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/MetaHeaderCell.js +7 -8
  136. package/dist/esm/components/Scorecard/components/ScorecardTable/components/TableHeader/components/MetaHeaderCell.js.map +1 -1
  137. package/dist/esm/components/Scorecard/components/StateProvider.js +9 -2
  138. package/dist/esm/components/Scorecard/components/StateProvider.js.map +1 -1
  139. package/dist/esm/components/Scorecard/hooks/cellData.js +1 -2
  140. package/dist/esm/components/Scorecard/hooks/cellData.js.map +1 -1
  141. package/dist/esm/components/Scorecard/hooks/columns.js +107 -90
  142. package/dist/esm/components/Scorecard/hooks/columns.js.map +1 -1
  143. package/dist/esm/components/Scorecard/hooks/data.js +132 -35
  144. package/dist/esm/components/Scorecard/hooks/data.js.map +1 -1
  145. package/dist/esm/components/Scorecard/hooks/metadata.js +24 -14
  146. package/dist/esm/components/Scorecard/hooks/metadata.js.map +1 -1
  147. package/dist/esm/components/Scorecard/hooks/table.js +138 -6
  148. package/dist/esm/components/Scorecard/hooks/table.js.map +1 -1
  149. package/dist/esm/components/Scorecard/hooks/value.js +194 -0
  150. package/dist/esm/components/Scorecard/hooks/value.js.map +1 -0
  151. package/dist/esm/components/Scorecard/schemas/config.js +24 -12
  152. package/dist/esm/components/Scorecard/schemas/config.js.map +1 -1
  153. package/dist/esm/components/Scorecard/utils/analytics.js +4 -3
  154. package/dist/esm/components/Scorecard/utils/analytics.js.map +1 -1
  155. package/dist/esm/components/Scorecard/utils/columns.js +67 -106
  156. package/dist/esm/components/Scorecard/utils/columns.js.map +1 -1
  157. package/dist/esm/components/Scorecard/utils/data.js +11 -101
  158. package/dist/esm/components/Scorecard/utils/data.js.map +1 -1
  159. package/dist/esm/components/Scorecard/utils/dataEngine.js +33 -0
  160. package/dist/esm/components/Scorecard/utils/dataEngine.js.map +1 -0
  161. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.d.ts +1 -1
  162. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.d.ts.map +1 -1
  163. package/dist/types/components/Scorecard/components/DataProvider.d.ts +3 -3
  164. package/dist/types/components/Scorecard/components/DataProvider.d.ts.map +1 -1
  165. package/dist/types/components/Scorecard/components/LoadingIndicator.d.ts +2 -0
  166. package/dist/types/components/Scorecard/components/LoadingIndicator.d.ts.map +1 -0
  167. package/dist/types/components/Scorecard/components/MetaProvider.d.ts.map +1 -1
  168. package/dist/types/components/Scorecard/components/ScorecardContext.d.ts +1 -1
  169. package/dist/types/components/Scorecard/components/ScorecardContext.d.ts.map +1 -1
  170. package/dist/types/components/Scorecard/components/ScorecardTable/ScorecardTable.d.ts +2 -1
  171. package/dist/types/components/Scorecard/components/ScorecardTable/ScorecardTable.d.ts.map +1 -1
  172. package/dist/types/components/Scorecard/components/ScorecardTable/components/AverageCell.d.ts +4 -13
  173. package/dist/types/components/Scorecard/components/ScorecardTable/components/AverageCell.d.ts.map +1 -1
  174. package/dist/types/components/Scorecard/components/ScorecardTable/components/AverageFooterCell.d.ts.map +1 -1
  175. package/dist/types/components/Scorecard/components/ScorecardTable/components/CellLoader.d.ts +2 -0
  176. package/dist/types/components/Scorecard/components/ScorecardTable/components/CellLoader.d.ts.map +1 -0
  177. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataContainer.d.ts +2 -2
  178. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataContainer.d.ts.map +1 -1
  179. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataFooterCell.d.ts +2 -2
  180. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataFooterCell.d.ts.map +1 -1
  181. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataRow.d.ts.map +1 -1
  182. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataValue.d.ts +6 -5
  183. package/dist/types/components/Scorecard/components/ScorecardTable/components/DataValue.d.ts.map +1 -1
  184. package/dist/types/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.d.ts +2 -1
  185. package/dist/types/components/Scorecard/components/ScorecardTable/components/ExpandedScorecardTable.d.ts.map +1 -1
  186. package/dist/types/components/Scorecard/components/ScorecardTable/components/LinkedCell.d.ts +3 -3
  187. package/dist/types/components/Scorecard/components/ScorecardTable/components/LinkedCell.d.ts.map +1 -1
  188. package/dist/types/components/Scorecard/components/ScorecardTable/components/LinkedDataCell.d.ts +2 -2
  189. package/dist/types/components/Scorecard/components/ScorecardTable/components/LinkedDataCell.d.ts.map +1 -1
  190. package/dist/types/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.d.ts +1 -3
  191. package/dist/types/components/Scorecard/components/ScorecardTable/components/MetaFooterCell.d.ts.map +1 -1
  192. package/dist/types/components/Scorecard/components/ScorecardTable/components/SingleDataCell.d.ts +2 -2
  193. package/dist/types/components/Scorecard/components/ScorecardTable/components/SingleDataCell.d.ts.map +1 -1
  194. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableBody.d.ts +2 -1
  195. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableBody.d.ts.map +1 -1
  196. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableFoot.d.ts.map +1 -1
  197. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/TableHeader.d.ts +2 -1
  198. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/TableHeader.d.ts.map +1 -1
  199. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/AverageHeaderCell.d.ts +1 -1
  200. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/AverageHeaderCell.d.ts.map +1 -1
  201. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.d.ts +1 -0
  202. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/DataHeaderCell.d.ts.map +1 -1
  203. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/FilterArea.d.ts.map +1 -1
  204. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/LabelCell.d.ts.map +1 -1
  205. package/dist/types/components/Scorecard/components/ScorecardTable/components/TableHeader/components/MetaHeaderCell.d.ts.map +1 -1
  206. package/dist/types/components/Scorecard/components/StateProvider.d.ts +1 -0
  207. package/dist/types/components/Scorecard/components/StateProvider.d.ts.map +1 -1
  208. package/dist/types/components/Scorecard/components/TableStateProvider.d.ts +0 -6
  209. package/dist/types/components/Scorecard/components/TableStateProvider.d.ts.map +1 -1
  210. package/dist/types/components/Scorecard/hooks/cellData.d.ts +2 -2
  211. package/dist/types/components/Scorecard/hooks/cellData.d.ts.map +1 -1
  212. package/dist/types/components/Scorecard/hooks/columns.d.ts +2 -8
  213. package/dist/types/components/Scorecard/hooks/columns.d.ts.map +1 -1
  214. package/dist/types/components/Scorecard/hooks/data.d.ts +11 -53
  215. package/dist/types/components/Scorecard/hooks/data.d.ts.map +1 -1
  216. package/dist/types/components/Scorecard/hooks/metadata.d.ts +1 -0
  217. package/dist/types/components/Scorecard/hooks/metadata.d.ts.map +1 -1
  218. package/dist/types/components/Scorecard/hooks/table.d.ts.map +1 -1
  219. package/dist/types/components/Scorecard/hooks/value.d.ts +87 -0
  220. package/dist/types/components/Scorecard/hooks/value.d.ts.map +1 -0
  221. package/dist/types/components/Scorecard/schemas/config.d.ts +666 -62
  222. package/dist/types/components/Scorecard/schemas/config.d.ts.map +1 -1
  223. package/dist/types/components/Scorecard/utils/analytics.d.ts +3 -2
  224. package/dist/types/components/Scorecard/utils/analytics.d.ts.map +1 -1
  225. package/dist/types/components/Scorecard/utils/columns.d.ts +19 -59
  226. package/dist/types/components/Scorecard/utils/columns.d.ts.map +1 -1
  227. package/dist/types/components/Scorecard/utils/data.d.ts +6 -4
  228. package/dist/types/components/Scorecard/utils/data.d.ts.map +1 -1
  229. package/dist/types/components/Scorecard/utils/dataEngine.d.ts +14 -0
  230. package/dist/types/components/Scorecard/utils/dataEngine.d.ts.map +1 -0
  231. package/package.json +5 -5
  232. package/dist/components/Scorecard/components/ScorecardTable/components/LinkedDataFooterCell.js +0 -45
  233. package/dist/components/Scorecard/components/ScorecardTable/components/LinkedDataFooterCell.js.map +0 -1
  234. package/dist/components/Scorecard/components/ScorecardTable/components/SingleDataFooterCell.js +0 -38
  235. package/dist/components/Scorecard/components/ScorecardTable/components/SingleDataFooterCell.js.map +0 -1
  236. package/dist/components/Scorecard/hooks/average.js +0 -50
  237. package/dist/components/Scorecard/hooks/average.js.map +0 -1
  238. package/dist/esm/components/Scorecard/components/ScorecardTable/components/LinkedDataFooterCell.js +0 -43
  239. package/dist/esm/components/Scorecard/components/ScorecardTable/components/LinkedDataFooterCell.js.map +0 -1
  240. package/dist/esm/components/Scorecard/components/ScorecardTable/components/SingleDataFooterCell.js +0 -36
  241. package/dist/esm/components/Scorecard/components/ScorecardTable/components/SingleDataFooterCell.js.map +0 -1
  242. package/dist/esm/components/Scorecard/hooks/average.js +0 -48
  243. package/dist/esm/components/Scorecard/hooks/average.js.map +0 -1
  244. package/dist/types/components/Scorecard/components/ScorecardTable/components/LinkedDataFooterCell.d.ts +0 -6
  245. package/dist/types/components/Scorecard/components/ScorecardTable/components/LinkedDataFooterCell.d.ts.map +0 -1
  246. package/dist/types/components/Scorecard/components/ScorecardTable/components/SingleDataFooterCell.d.ts +0 -6
  247. package/dist/types/components/Scorecard/components/ScorecardTable/components/SingleDataFooterCell.d.ts.map +0 -1
  248. package/dist/types/components/Scorecard/hooks/average.d.ts +0 -14
  249. package/dist/types/components/Scorecard/hooks/average.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/columns.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ColumnDef, createColumnHelper } from \"@tanstack/react-table\";\nimport {\n\tuseScorecardConfig,\n\tuseScorecardMeta,\n\tuseScorecardState,\n} from \"../components\";\nimport { useMemo } from \"react\";\nimport {\n\ttype ScorecardTableCellData,\n\ttype ScorecardTableData,\n} from \"../schemas/config\";\nimport {\n\tgetAverageColumn,\n\tgetDataColumnHeaders,\n\tgetOrgUnitColumnHeaders,\n} from \"../utils/columns\";\nimport { LabelCell } from \"../components/ScorecardTable/components/TableHeader/components/LabelCell\";\nimport { ExpandCell } from \"../components/ScorecardTable/components/TableHeader/components/ExpandCell\";\nimport { NumberCell } from \"../components/ScorecardTable/components/TableHeader/components/NumberCell\";\nimport { MetaHeaderCell } from \"../components/ScorecardTable/components/TableHeader/components/MetaHeaderCell\";\nimport { useCalendar } from \"./metadata\";\nimport { MetaFooterCell } from \"../components/ScorecardTable/components/MetaFooterCell\";\nimport { getOrgUnitLevel } from \"../utils/orgUnits\";\nimport { useLowestOrgUnitLevel } from \"./orgUnit\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nexport function useMetaColumns() {\n\tconst state = useScorecardState();\n\n\tconst lowestLevel = useLowestOrgUnitLevel();\n\n\tconst metaColumns: ColumnDef<ScorecardTableData, any>[] = [\n\t\tcolumnHelper.accessor(\n\t\t\t(rowData) => {\n\t\t\t\tif (state?.options?.disableExpanding) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst dataInRows = state?.options?.showDataInRows;\n\t\t\t\tif (dataInRows) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (!lowestLevel) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst orgUnit = rowData.orgUnit;\n\t\t\t\tif (!orgUnit) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst ouLevel = getOrgUnitLevel(orgUnit);\n\n\t\t\t\treturn ouLevel !== lowestLevel.level;\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"expand\",\n\t\t\t\theader: () => null,\n\t\t\t\tmeta: {\n\t\t\t\t\tisMeta: true,\n\t\t\t\t\tfixed: true,\n\t\t\t\t\tlabel: \"\",\n\t\t\t\t},\n\t\t\t\tenableColumnFilter: false,\n\t\t\t\tcell: ExpandCell,\n\t\t\t\tfooter: () => null,\n\t\t\t},\n\t\t),\n\t\tcolumnHelper.accessor(\n\t\t\t(_, index) => {\n\t\t\t\treturn index + 1;\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"count\",\n\t\t\t\theader: () => null,\n\t\t\t\tmeta: {\n\t\t\t\t\tisMeta: true,\n\t\t\t\t\tfixed: true,\n\t\t\t\t\tlabel: \"\",\n\t\t\t\t},\n\t\t\t\tenableColumnFilter: false,\n\t\t\t\tcell: NumberCell,\n\t\t\t\tfooter: () => null,\n\t\t\t},\n\t\t),\n\t];\n\n\tif (state?.options?.showDataInRows) {\n\t\tmetaColumns.push(\n\t\t\tcolumnHelper.accessor(\"label\", {\n\t\t\t\theader: () => null,\n\t\t\t\tid: \"dataItems\",\n\t\t\t\tmeta: {\n\t\t\t\t\tfilterable: true,\n\t\t\t\t},\n\t\t\t\tenableColumnFilter: true,\n\t\t\t\tcell: LabelCell,\n\t\t\t\tfooter: MetaFooterCell,\n\t\t\t}),\n\t\t);\n\t} else {\n\t\tmetaColumns.push(\n\t\t\tcolumnHelper.accessor(\"label\", {\n\t\t\t\theader: () => null,\n\t\t\t\tid: \"orgUnits\",\n\t\t\t\tenableColumnFilter: true,\n\t\t\t\tmeta: {\n\t\t\t\t\tisMeta: true,\n\t\t\t\t\tfixed: true,\n\t\t\t\t},\n\t\t\t\tcell: LabelCell,\n\t\t\t\tfooter: MetaFooterCell,\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn metaColumns;\n}\n\nexport function useTableColumns(): ColumnDef<\n\tScorecardTableData,\n\tScorecardTableCellData\n>[] {\n\tconst config = useScorecardConfig();\n\tconst meta = useScorecardMeta();\n\tconst state = useScorecardState();\n\tconst metaColumns = useMetaColumns();\n\tconst calendar = useCalendar();\n\n\tif (!config || !meta || !state) {\n\t\treturn [];\n\t}\n\treturn useMemo(() => {\n\t\tconst columns: ColumnDef<ScorecardTableData, any>[] = [\n\t\t\tcolumnHelper.group({\n\t\t\t\tid: \"metaHeader\",\n\t\t\t\tcolumns: metaColumns,\n\t\t\t\theader: MetaHeaderCell,\n\t\t\t\tfooter: () => null,\n\t\t\t}),\n\t\t];\n\n\t\tif (state.options.showDataInRows) {\n\t\t\tcolumns.push(\n\t\t\t\t...getOrgUnitColumnHeaders({\n\t\t\t\t\tmeta,\n\t\t\t\t\tcalendar,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tcolumns.push(\n\t\t\t\t...getDataColumnHeaders({\n\t\t\t\t\tmeta,\n\t\t\t\t\tconfig,\n\t\t\t\t\tcalendar,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tcolumns.push(\n\t\t\tgetAverageColumn({\n\t\t\t\tmeta,\n\t\t\t\tconfig,\n\t\t\t}),\n\t\t);\n\n\t\treturn columns;\n\t}, [\n\t\tstate.options.showDataInRows,\n\t\tstate.periodSelection,\n\t\tstate.orgUnitSelection,\n\t]);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/columns.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ColumnDef, createColumnHelper } from \"@tanstack/react-table\";\nimport {\n\tuseScorecardConfig,\n\tuseScorecardMeta,\n\tuseScorecardStateSelector,\n} from \"../components\";\nimport { useMemo } from \"react\";\nimport {\n\ttype ScorecardState,\n\ttype ScorecardTableCellConfig,\n\ttype ScorecardTableData,\n} from \"../schemas/config\";\nimport {\n\tgetAverageColumn,\n\tgetDataColumnHeaders,\n\tgetOrgUnitColumnHeaders,\n} from \"../utils/columns\";\nimport { LabelCell } from \"../components/ScorecardTable/components/TableHeader/components/LabelCell\";\nimport { ExpandCell } from \"../components/ScorecardTable/components/TableHeader/components/ExpandCell\";\nimport { NumberCell } from \"../components/ScorecardTable/components/TableHeader/components/NumberCell\";\nimport { MetaHeaderCell } from \"../components/ScorecardTable/components/TableHeader/components/MetaHeaderCell\";\nimport { useCalendar } from \"./metadata\";\nimport { MetaFooterCell } from \"../components/ScorecardTable/components/MetaFooterCell\";\nimport { getOrgUnitLevel } from \"../utils/orgUnits\";\nimport { useLowestOrgUnitLevel } from \"./orgUnit\";\nimport { useScorecardData } from \"../components/DataProvider\";\n\nconst columnHelper = createColumnHelper<ScorecardTableData>();\n\nexport function useMetaColumns() {\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\n\tconst disableExpanding = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"disableExpanding\",\n\t]);\n\n\tconst lowestLevel = useLowestOrgUnitLevel();\n\n\treturn useMemo(() => {\n\t\tconst metaColumns: ColumnDef<ScorecardTableData, any>[] = [\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(rowData) => {\n\t\t\t\t\tif (disableExpanding) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (showDataInRows) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!lowestLevel) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst orgUnit = rowData.orgUnit;\n\t\t\t\t\tif (!orgUnit) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst ouLevel = getOrgUnitLevel(orgUnit);\n\n\t\t\t\t\treturn ouLevel !== lowestLevel.level;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"expand\",\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tisMeta: true,\n\t\t\t\t\t\tfixed: true,\n\t\t\t\t\t\tlabel: \"\",\n\t\t\t\t\t},\n\t\t\t\t\tenableColumnFilter: false,\n\t\t\t\t\tcell: ExpandCell,\n\t\t\t\t\tfooter: () => null,\n\t\t\t\t},\n\t\t\t),\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(_, index) => {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"count\",\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tisMeta: true,\n\t\t\t\t\t\tfixed: true,\n\t\t\t\t\t\tlabel: \"\",\n\t\t\t\t\t},\n\t\t\t\t\tenableColumnFilter: false,\n\t\t\t\t\tcell: NumberCell,\n\t\t\t\t\tfooter: () => null,\n\t\t\t\t},\n\t\t\t),\n\t\t];\n\n\t\tif (showDataInRows) {\n\t\t\tmetaColumns.push(\n\t\t\t\tcolumnHelper.accessor(\"label\", {\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tid: \"dataItems\",\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tfilterable: true,\n\t\t\t\t\t},\n\t\t\t\t\tenableColumnFilter: true,\n\t\t\t\t\tcell: LabelCell,\n\t\t\t\t\tfooter: MetaFooterCell,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tmetaColumns.push(\n\t\t\t\tcolumnHelper.accessor(\"label\", {\n\t\t\t\t\theader: () => null,\n\t\t\t\t\tid: \"orgUnits\",\n\t\t\t\t\tenableColumnFilter: true,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tisMeta: true,\n\t\t\t\t\t\tfixed: true,\n\t\t\t\t\t},\n\t\t\t\t\tcell: LabelCell,\n\t\t\t\t\tfooter: MetaFooterCell,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn metaColumns;\n\t}, [showDataInRows, disableExpanding]);\n}\n\nexport function useTableColumns(): ColumnDef<\n\tScorecardTableData,\n\tScorecardTableCellConfig\n>[] {\n\tconst config = useScorecardConfig();\n\tconst { data: dataEngine } = useScorecardData();\n\tconst meta = useScorecardMeta();\n\tconst metaColumns = useMetaColumns();\n\tconst calendar = useCalendar();\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\tconst periodSelection =\n\t\tuseScorecardStateSelector<ScorecardState[\"periodSelection\"]>(\n\t\t\t\"periodSelection\",\n\t\t);\n\n\tconst orgUnitSelection =\n\t\tuseScorecardStateSelector<ScorecardState[\"orgUnitSelection\"]>(\n\t\t\t\"orgUnitSelection\",\n\t\t);\n\n\tif (!config || !meta) {\n\t\treturn [];\n\t}\n\treturn useMemo(() => {\n\t\tconst columns: ColumnDef<ScorecardTableData, any>[] = [\n\t\t\tcolumnHelper.group({\n\t\t\t\tid: \"metaHeader\",\n\t\t\t\tcolumns: metaColumns,\n\t\t\t\theader: MetaHeaderCell,\n\t\t\t\tfooter: () => null,\n\t\t\t}),\n\t\t];\n\n\t\tif (showDataInRows) {\n\t\t\tcolumns.push(\n\t\t\t\t...getOrgUnitColumnHeaders({\n\t\t\t\t\tmeta,\n\t\t\t\t\tcalendar,\n\t\t\t\t\tdataEngine,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tcolumns.push(\n\t\t\t\t...getDataColumnHeaders({\n\t\t\t\t\tmeta,\n\t\t\t\t\tconfig,\n\t\t\t\t\tcalendar,\n\t\t\t\t\tdataEngine,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tcolumns.push(\n\t\t\tgetAverageColumn({\n\t\t\t\tmeta,\n\t\t\t\tconfig,\n\t\t\t}),\n\t\t);\n\n\t\treturn columns;\n\t}, [showDataInRows, periodSelection, orgUnitSelection]);\n}\n"]}
@@ -1,11 +1,14 @@
1
- import { useScorecardConfig, useScorecardMeta, useScorecardState } from '../components';
2
- import { useMemo } from 'react';
1
+ import { useScorecardConfig, useScorecardMeta } from '../components';
2
+ import { useState, useRef, useMemo, useEffect } from 'react';
3
3
  import { getDimensionsFromMeta } from '../utils/analytics';
4
4
  import { useDataQuery } from '@dhis2/app-runtime';
5
5
  import { getAdjacentFixedPeriods, createFixedPeriodFromPeriodId } from '@dhis2/multi-calendar-dates';
6
- import { uniq, isEmpty } from 'lodash';
7
- import { sanitizeAnalyticsData, getTableDataFromAnalytics } from '../utils/data';
6
+ import { uniq, maxBy, chunk } from 'lodash';
7
+ import { sanitizeAnalyticsData } from '../utils/data';
8
8
  import { useCalendar } from './metadata';
9
+ import { createScorecardDataEngine } from '../utils/dataEngine';
10
+ import { queue } from 'async-es';
11
+ import { asyncify } from 'async';
9
12
 
10
13
  const query = {
11
14
  data: {
@@ -26,19 +29,42 @@ const query = {
26
29
  }
27
30
  }
28
31
  };
32
+ const chunkSize = 5;
29
33
  function useGetScorecardData() {
34
+ const [totalRequests, setTotalRequests] = useState(0);
35
+ const [noOfCompleteRequests, setNoOfCompleteRequests] = useState(0);
36
+ const data = useRef(createScorecardDataEngine());
37
+ const fetchData = async ({
38
+ periods,
39
+ dataItems,
40
+ orgUnits
41
+ }) => {
42
+ const rawAnalyticsData = await refetch({
43
+ periods,
44
+ dataItems,
45
+ orgUnits
46
+ });
47
+ if (!rawAnalyticsData)
48
+ return [];
49
+ const tableData = getTableData(rawAnalyticsData);
50
+ data.current.updateData(tableData);
51
+ setNoOfCompleteRequests((prev) => prev + 1);
52
+ };
53
+ const dataFetchQueue = useRef(queue(asyncify(fetchData)));
30
54
  const config = useScorecardConfig();
31
55
  const meta = useScorecardMeta();
32
- const state = useScorecardState();
33
56
  const calendar = useCalendar();
34
- if (!config || !state || !meta) {
57
+ if (!config || !meta) {
35
58
  throw new Error(
36
59
  "Invalid scorecard setup. Make sure the valid config and state props are passed."
37
60
  );
38
61
  }
39
- const { dataItemsIds, orgUnitsIds, periodsIds } = getDimensionsFromMeta({
40
- meta
41
- });
62
+ const { dataItemsIds, orgUnitsIds, periodsIds } = useMemo(
63
+ () => getDimensionsFromMeta({
64
+ meta
65
+ }),
66
+ [meta]
67
+ );
42
68
  const analyticsPeriod = useMemo(() => {
43
69
  const pastPeriods = periodsIds.map((periodId) => {
44
70
  const pe = getAdjacentFixedPeriods({
@@ -53,37 +79,108 @@ function useGetScorecardData() {
53
79
  }).flat();
54
80
  return uniq([...periodsIds, ...pastPeriods]);
55
81
  }, [periodsIds]);
56
- const { loading, data: rawAnalyticsData } = useDataQuery(query, {
57
- variables: {
58
- periods: analyticsPeriod,
59
- dataItems: dataItemsIds,
60
- orgUnits: orgUnitsIds
82
+ const { refetch, called } = useDataQuery(
83
+ query,
84
+ {
85
+ variables: {
86
+ periods: analyticsPeriod,
87
+ dataItems: dataItemsIds,
88
+ orgUnits: orgUnitsIds
89
+ },
90
+ lazy: true
61
91
  }
62
- });
63
- const rawData = useMemo(() => {
64
- if (!rawAnalyticsData)
65
- return [];
92
+ );
93
+ const progress = useMemo(() => {
94
+ return noOfCompleteRequests / totalRequests;
95
+ }, [totalRequests, noOfCompleteRequests]);
96
+ const getTableData = (rawAnalyticsData) => {
66
97
  return sanitizeAnalyticsData(rawAnalyticsData);
67
- }, [rawAnalyticsData]);
68
- const data = useMemo(() => {
69
- if (rawAnalyticsData) {
70
- const data2 = getTableDataFromAnalytics(rawAnalyticsData, {
71
- meta,
72
- state,
73
- config
74
- });
75
- if (!!state.options.emptyRows) {
76
- return data2;
77
- } else {
78
- return data2.filter(({ dataValues }) => !isEmpty(dataValues));
98
+ };
99
+ const initializeFetch = async () => {
100
+ const getTheLongestDimension = () => {
101
+ const dimensions = [
102
+ {
103
+ dimension: "pe",
104
+ length: analyticsPeriod.length
105
+ },
106
+ {
107
+ dimension: "dx",
108
+ length: dataItemsIds.length
109
+ },
110
+ {
111
+ dimension: "ou",
112
+ length: orgUnitsIds.length
113
+ }
114
+ ];
115
+ return maxBy(dimensions, "length").dimension;
116
+ };
117
+ const getChunkedData = async (maxItem) => {
118
+ switch (maxItem) {
119
+ case "dx":
120
+ const dataItemChunks = chunk(dataItemsIds, chunkSize);
121
+ setTotalRequests(dataItemChunks.length);
122
+ for (const dataItemChunk of dataItemChunks) {
123
+ dataFetchQueue.current.push({
124
+ periods: analyticsPeriod,
125
+ dataItems: dataItemChunk,
126
+ orgUnits: orgUnitsIds
127
+ });
128
+ }
129
+ break;
130
+ case "pe":
131
+ const periodChunks = chunk(analyticsPeriod, chunkSize);
132
+ setTotalRequests(periodChunks.length);
133
+ for (const periodChunk of periodChunks) {
134
+ dataFetchQueue.current.push({
135
+ periods: periodChunk,
136
+ dataItems: dataItemsIds,
137
+ orgUnits: orgUnitsIds
138
+ });
139
+ }
140
+ break;
141
+ case "ou":
142
+ const orgUnitChunks = chunk(orgUnitsIds, chunkSize);
143
+ setTotalRequests(orgUnitChunks.length);
144
+ for (const orgUnitChunk of orgUnitChunks) {
145
+ dataFetchQueue.current.push({
146
+ periods: analyticsPeriod,
147
+ dataItems: dataItemsIds,
148
+ orgUnits: orgUnitChunk
149
+ });
150
+ }
151
+ break;
79
152
  }
153
+ };
154
+ setTotalRequests(0);
155
+ setNoOfCompleteRequests(0);
156
+ dataFetchQueue.current.remove(() => true);
157
+ dataFetchQueue.current.drain(() => {
158
+ data.current.complete();
159
+ });
160
+ data.current.clear();
161
+ if (analyticsPeriod.length <= 5 && dataItemsIds.length <= 5 && orgUnitsIds.length <= 5) {
162
+ setTotalRequests(1);
163
+ setNoOfCompleteRequests(0);
164
+ await fetchData({
165
+ periods: analyticsPeriod,
166
+ dataItems: dataItemsIds,
167
+ orgUnits: orgUnitsIds
168
+ });
169
+ setNoOfCompleteRequests(1);
170
+ data.current.complete();
171
+ return;
80
172
  }
81
- return [];
82
- }, [rawAnalyticsData, meta]);
173
+ setNoOfCompleteRequests(0);
174
+ const dimensionWithMaxItems = getTheLongestDimension();
175
+ await getChunkedData(dimensionWithMaxItems);
176
+ };
177
+ useEffect(() => {
178
+ initializeFetch();
179
+ }, []);
83
180
  return {
84
- loading,
85
- data,
86
- rawData
181
+ data: data.current,
182
+ rawData: [],
183
+ progress
87
184
  };
88
185
  }
89
186
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/data.ts"],"names":["data"],"mappings":"AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,eAAe;AACxB,SAAS,6BAA6B;AACtC,SAAS,oBAAoB;AAC7B;AAAA,EACC;AAAA,EACA;AAAA,OACM;AACP,SAAS,SAAS,YAAY;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OACM;AACP,SAAS,mBAAmB;AAE5B,MAAM,QAAa;AAAA,EAClB,MAAM;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACD,MAIM;AACL,aAAO;AAAA,QACN,UAAU;AAAA,QACV,WAAW;AAAA,UACV,MAAM,QAAQ,KAAK,GAAG,CAAC;AAAA,UACvB,MAAM,UAAU,KAAK,GAAG,CAAC;AAAA,UACzB,MAAM,SAAS,KAAK,GAAG,CAAC;AAAA,QACzB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAkBO,SAAS,sBAAsB;AACrC,QAAM,SAAS,mBAAmB;AAClC,QAAM,OAAO,iBAAiB;AAC9B,QAAM,QAAQ,kBAAkB;AAChC,QAAM,WAAW,YAAY;AAC7B,MAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;AAC/B,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AACA,QAAM,EAAE,cAAc,aAAa,WAAW,IAAI,sBAAsB;AAAA,IACvE;AAAA,EACD,CAAC;AAGD,QAAM,kBAAkB,QAAQ,MAAM;AACrC,UAAM,cAAc,WAClB,IAAI,CAAC,aAAa;AAClB,YAAM,KAAK,wBAAwB;AAAA,QAClC;AAAA,QACA,OAAO;AAAA,QACP,QAAQ,8BAA8B;AAAA,UACrC;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF,CAAC;AACD,aAAO,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;AAAA,IAC7B,CAAC,EACA,KAAK;AAEP,WAAO,KAAK,CAAC,GAAG,YAAY,GAAG,WAAW,CAAC;AAAA,EAC5C,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,EAAE,SAAS,MAAM,iBAAiB,IACvC,aAAyC,OAAO;AAAA,IAC/C,WAAW;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,IACX;AAAA,EACD,CAAC;AAEF,QAAM,UAAU,QAAQ,MAAM;AAC7B,QAAI,CAAC;AAAkB,aAAO,CAAC;AAC/B,WAAO,sBAAsB,gBAAgB;AAAA,EAC9C,GAAG,CAAC,gBAAgB,CAAC;AAErB,QAAM,OAAO,QAAQ,MAAM;AAC1B,QAAI,kBAAkB;AACrB,YAAMA,QAAO,0BAA0B,kBAAkB;AAAA,QACxD;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AACD,UAAI,CAAC,CAAC,MAAM,QAAQ,WAAW;AAC9B,eAAOA;AAAA,MACR,OAAO;AACN,eAAOA,MAAK,OAAO,CAAC,EAAE,WAAW,MAAM,CAAC,QAAQ,UAAU,CAAC;AAAA,MAC5D;AAAA,IACD;AACA,WAAO,CAAC;AAAA,EACT,GAAG,CAAC,kBAAkB,IAAI,CAAC;AAE3B,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD","sourcesContent":["import {\n\tuseScorecardConfig,\n\tuseScorecardMeta,\n\tuseScorecardState,\n} from \"../components\";\nimport { useMemo } from \"react\";\nimport { getDimensionsFromMeta } from \"../utils/analytics\";\nimport { useDataQuery } from \"@dhis2/app-runtime\";\nimport {\n\tcreateFixedPeriodFromPeriodId,\n\tgetAdjacentFixedPeriods,\n} from \"@dhis2/multi-calendar-dates\";\nimport { isEmpty, uniq } from \"lodash\";\nimport {\n\tgetTableDataFromAnalytics,\n\tsanitizeAnalyticsData,\n} from \"../utils/data\";\nimport { useCalendar } from \"./metadata\";\n\nconst query: any = {\n\tdata: {\n\t\tresource: \"analytics\",\n\t\tparams: ({\n\t\t\tperiods,\n\t\t\torgUnits,\n\t\t\tdataItems,\n\t\t}: {\n\t\t\tperiods: string[];\n\t\t\torgUnits: string[];\n\t\t\tdataItems: string[];\n\t\t}) => {\n\t\t\treturn {\n\t\t\t\tskipMeta: true,\n\t\t\t\tdimension: [\n\t\t\t\t\t`pe:${periods.join(\";\")}`,\n\t\t\t\t\t`dx:${dataItems.join(\";\")}`,\n\t\t\t\t\t`ou:${orgUnits.join(\";\")}`,\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t},\n};\n\nexport interface ScorecardDataQueryResponse {\n\tdata: {\n\t\theaderWidth: number;\n\t\theaders: Array<{\n\t\t\tname: string;\n\t\t\thidden: boolean;\n\t\t\tmeta: boolean;\n\t\t\tcolumn: string;\n\t\t\tvalueType: string;\n\t\t}>;\n\t\trows: Array<Array<string>>;\n\t\theight: number;\n\t\twidth: number;\n\t};\n}\n\nexport function useGetScorecardData() {\n\tconst config = useScorecardConfig();\n\tconst meta = useScorecardMeta();\n\tconst state = useScorecardState();\n\tconst calendar = useCalendar();\n\tif (!config || !state || !meta) {\n\t\tthrow new Error(\n\t\t\t\"Invalid scorecard setup. Make sure the valid config and state props are passed.\",\n\t\t);\n\t}\n\tconst { dataItemsIds, orgUnitsIds, periodsIds } = getDimensionsFromMeta({\n\t\tmeta,\n\t});\n\n\t//We need to make sure each period has a past period\n\tconst analyticsPeriod = useMemo(() => {\n\t\tconst pastPeriods = periodsIds\n\t\t\t.map((periodId) => {\n\t\t\t\tconst pe = getAdjacentFixedPeriods({\n\t\t\t\t\tcalendar,\n\t\t\t\t\tsteps: -1,\n\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tperiodId,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\treturn pe.map(({ id }) => id);\n\t\t\t})\n\t\t\t.flat();\n\n\t\treturn uniq([...periodsIds, ...pastPeriods]);\n\t}, [periodsIds]);\n\n\tconst { loading, data: rawAnalyticsData } =\n\t\tuseDataQuery<ScorecardDataQueryResponse>(query, {\n\t\t\tvariables: {\n\t\t\t\tperiods: analyticsPeriod,\n\t\t\t\tdataItems: dataItemsIds,\n\t\t\t\torgUnits: orgUnitsIds,\n\t\t\t},\n\t\t});\n\n\tconst rawData = useMemo(() => {\n\t\tif (!rawAnalyticsData) return [];\n\t\treturn sanitizeAnalyticsData(rawAnalyticsData);\n\t}, [rawAnalyticsData]);\n\n\tconst data = useMemo(() => {\n\t\tif (rawAnalyticsData) {\n\t\t\tconst data = getTableDataFromAnalytics(rawAnalyticsData, {\n\t\t\t\tmeta,\n\t\t\t\tstate,\n\t\t\t\tconfig,\n\t\t\t});\n\t\t\tif (!!state.options.emptyRows) {\n\t\t\t\treturn data;\n\t\t\t} else {\n\t\t\t\treturn data.filter(({ dataValues }) => !isEmpty(dataValues));\n\t\t\t}\n\t\t}\n\t\treturn [];\n\t}, [rawAnalyticsData, meta]);\n\n\treturn {\n\t\tloading,\n\t\tdata,\n\t\trawData,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/data.ts"],"names":[],"mappings":"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","sourcesContent":["import { useScorecardConfig, useScorecardMeta } from \"../components\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { getDimensionsFromMeta } from \"../utils/analytics\";\nimport { useDataQuery } from \"@dhis2/app-runtime\";\nimport {\n\tcreateFixedPeriodFromPeriodId,\n\tgetAdjacentFixedPeriods,\n} from \"@dhis2/multi-calendar-dates\";\nimport { chunk, maxBy, uniq } from \"lodash\";\nimport { sanitizeAnalyticsData } from \"../utils/data\";\nimport { useCalendar } from \"./metadata\";\nimport {\n\tcreateScorecardDataEngine,\n\ttype ScorecardDataEngine,\n} from \"../utils/dataEngine\";\nimport { queue } from \"async-es\";\nimport { asyncify, type QueueObject } from \"async\";\n\nconst query: any = {\n\tdata: {\n\t\tresource: \"analytics\",\n\t\tparams: ({\n\t\t\tperiods,\n\t\t\torgUnits,\n\t\t\tdataItems,\n\t\t}: {\n\t\t\tperiods: string[];\n\t\t\torgUnits: string[];\n\t\t\tdataItems: string[];\n\t\t}) => {\n\t\t\treturn {\n\t\t\t\tskipMeta: true,\n\t\t\t\tdimension: [\n\t\t\t\t\t`pe:${periods.join(\";\")}`,\n\t\t\t\t\t`dx:${dataItems.join(\";\")}`,\n\t\t\t\t\t`ou:${orgUnits.join(\";\")}`,\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t},\n};\n\nexport interface ScorecardDataQueryResponse {\n\tdata: {\n\t\theaderWidth: number;\n\t\theaders: Array<{\n\t\t\tname: string;\n\t\t\thidden: boolean;\n\t\t\tmeta: boolean;\n\t\t\tcolumn: string;\n\t\t\tvalueType: string;\n\t\t}>;\n\t\trows: Array<Array<string>>;\n\t\theight: number;\n\t\twidth: number;\n\t};\n}\n\nconst chunkSize = 5;\n\nexport function useGetScorecardData() {\n\tconst [totalRequests, setTotalRequests] = useState<number>(0);\n\tconst [noOfCompleteRequests, setNoOfCompleteRequests] = useState<number>(0);\n\tconst data = useRef<ScorecardDataEngine>(createScorecardDataEngine());\n\tconst fetchData = async ({\n\t\tperiods,\n\t\tdataItems,\n\t\torgUnits,\n\t}: {\n\t\tperiods: string[];\n\t\torgUnits: string[];\n\t\tdataItems: string[];\n\t}) => {\n\t\tconst rawAnalyticsData = (await refetch({\n\t\t\tperiods,\n\t\t\tdataItems,\n\t\t\torgUnits,\n\t\t})) as unknown as ScorecardDataQueryResponse;\n\t\tif (!rawAnalyticsData) return [];\n\t\tconst tableData = getTableData(rawAnalyticsData);\n\t\tdata.current.updateData(tableData);\n\t\tsetNoOfCompleteRequests((prev) => prev + 1);\n\t};\n\tconst dataFetchQueue = useRef<QueueObject<any>>(queue(asyncify(fetchData)));\n\tconst config = useScorecardConfig();\n\tconst meta = useScorecardMeta();\n\tconst calendar = useCalendar();\n\tif (!config || !meta) {\n\t\tthrow new Error(\n\t\t\t\"Invalid scorecard setup. Make sure the valid config and state props are passed.\",\n\t\t);\n\t}\n\tconst { dataItemsIds, orgUnitsIds, periodsIds } = useMemo(\n\t\t() =>\n\t\t\tgetDimensionsFromMeta({\n\t\t\t\tmeta,\n\t\t\t}),\n\t\t[meta],\n\t);\n\n\t//We need to make sure each period has a past period\n\tconst analyticsPeriod = useMemo(() => {\n\t\tconst pastPeriods = periodsIds\n\t\t\t.map((periodId) => {\n\t\t\t\tconst pe = getAdjacentFixedPeriods({\n\t\t\t\t\tcalendar,\n\t\t\t\t\tsteps: -1,\n\t\t\t\t\tperiod: createFixedPeriodFromPeriodId({\n\t\t\t\t\t\tcalendar,\n\t\t\t\t\t\tperiodId,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\treturn pe.map(({ id }) => id);\n\t\t\t})\n\t\t\t.flat();\n\n\t\treturn uniq([...periodsIds, ...pastPeriods]);\n\t}, [periodsIds]);\n\n\tconst { refetch, called } = useDataQuery<ScorecardDataQueryResponse>(\n\t\tquery,\n\t\t{\n\t\t\tvariables: {\n\t\t\t\tperiods: analyticsPeriod,\n\t\t\t\tdataItems: dataItemsIds,\n\t\t\t\torgUnits: orgUnitsIds,\n\t\t\t},\n\t\t\tlazy: true,\n\t\t},\n\t);\n\n\tconst progress = useMemo(() => {\n\t\treturn noOfCompleteRequests / totalRequests;\n\t}, [totalRequests, noOfCompleteRequests]);\n\n\tconst getTableData = (rawAnalyticsData: ScorecardDataQueryResponse) => {\n\t\treturn sanitizeAnalyticsData(rawAnalyticsData);\n\t};\n\n\tconst initializeFetch = async () => {\n\t\tconst getTheLongestDimension = () => {\n\t\t\tconst dimensions = [\n\t\t\t\t{\n\t\t\t\t\tdimension: \"pe\",\n\t\t\t\t\tlength: analyticsPeriod.length,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdimension: \"dx\",\n\t\t\t\t\tlength: dataItemsIds.length,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdimension: \"ou\",\n\t\t\t\t\tlength: orgUnitsIds.length,\n\t\t\t\t},\n\t\t\t] as const;\n\n\t\t\treturn maxBy(dimensions, \"length\")!.dimension;\n\t\t};\n\n\t\tconst getChunkedData = async (maxItem: \"dx\" | \"pe\" | \"ou\") => {\n\t\t\tswitch (maxItem) {\n\t\t\t\tcase \"dx\":\n\t\t\t\t\tconst dataItemChunks = chunk(dataItemsIds, chunkSize);\n\t\t\t\t\tsetTotalRequests(dataItemChunks.length);\n\t\t\t\t\tfor (const dataItemChunk of dataItemChunks) {\n\t\t\t\t\t\tdataFetchQueue.current.push({\n\t\t\t\t\t\t\tperiods: analyticsPeriod,\n\t\t\t\t\t\t\tdataItems: dataItemChunk,\n\t\t\t\t\t\t\torgUnits: orgUnitsIds,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pe\":\n\t\t\t\t\tconst periodChunks = chunk(analyticsPeriod, chunkSize);\n\t\t\t\t\tsetTotalRequests(periodChunks.length);\n\t\t\t\t\tfor (const periodChunk of periodChunks) {\n\t\t\t\t\t\tdataFetchQueue.current.push({\n\t\t\t\t\t\t\tperiods: periodChunk,\n\t\t\t\t\t\t\tdataItems: dataItemsIds,\n\t\t\t\t\t\t\torgUnits: orgUnitsIds,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ou\":\n\t\t\t\t\tconst orgUnitChunks = chunk(orgUnitsIds, chunkSize);\n\t\t\t\t\tsetTotalRequests(orgUnitChunks.length);\n\t\t\t\t\tfor (const orgUnitChunk of orgUnitChunks) {\n\t\t\t\t\t\tdataFetchQueue.current.push({\n\t\t\t\t\t\t\tperiods: analyticsPeriod,\n\t\t\t\t\t\t\tdataItems: dataItemsIds,\n\t\t\t\t\t\t\torgUnits: orgUnitChunk,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\t//Here is where we need to paginate the requests.\n\t\t//First, Are there any dimensions greater than 5? if not then we can just call all the data\n\t\tsetTotalRequests(0);\n\t\tsetNoOfCompleteRequests(0);\n\t\tdataFetchQueue.current.remove(() => true);\n\t\tdataFetchQueue.current.drain(() => {\n\t\t\tdata.current.complete();\n\t\t});\n\n\t\tdata.current.clear();\n\t\tif (\n\t\t\tanalyticsPeriod.length <= 5 &&\n\t\t\tdataItemsIds.length <= 5 &&\n\t\t\torgUnitsIds.length <= 5\n\t\t) {\n\t\t\tsetTotalRequests(1);\n\t\t\tsetNoOfCompleteRequests(0);\n\t\t\tawait fetchData({\n\t\t\t\tperiods: analyticsPeriod,\n\t\t\t\tdataItems: dataItemsIds,\n\t\t\t\torgUnits: orgUnitsIds,\n\t\t\t});\n\t\t\tsetNoOfCompleteRequests(1);\n\t\t\tdata.current.complete();\n\t\t\treturn;\n\t\t}\n\t\t//If not then let's figure out how to paginate one of the\n\t\tsetNoOfCompleteRequests(0);\n\t\tconst dimensionWithMaxItems = getTheLongestDimension();\n\t\tawait getChunkedData(dimensionWithMaxItems);\n\t};\n\n\tuseEffect(() => {\n\t\tinitializeFetch();\n\t}, []);\n\n\treturn {\n\t\tdata: data.current,\n\t\trawData: [],\n\t\tprogress,\n\t};\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { useScorecardConfig, useScorecardState } from '../components';
1
+ import { useScorecardConfig, useScorecardStateSelector } from '../components';
2
2
  import { useDataQuery, useConfig } from '@dhis2/app-runtime';
3
3
  import { useMemo, useEffect } from 'react';
4
4
  import { getDimensions } from '../utils/analytics';
@@ -34,22 +34,31 @@ const query = {
34
34
  };
35
35
  function useGetScorecardMeta() {
36
36
  const config = useScorecardConfig();
37
- const state = useScorecardState();
37
+ const orgUnitSelection = useScorecardStateSelector(
38
+ "orgUnitSelection"
39
+ );
40
+ const periodSelection = useScorecardStateSelector(
41
+ "periodSelection"
42
+ );
38
43
  const { dataItemsIds, orgUnitsIds, periodsIds } = useMemo(
39
44
  () => getDimensions({
40
45
  config,
41
- state
46
+ orgUnitSelection,
47
+ periodSelection
42
48
  }),
43
- [state, config]
49
+ [config, orgUnitSelection, periodSelection]
50
+ );
51
+ const { loading, data, refetch, called } = useDataQuery(
52
+ query,
53
+ {
54
+ variables: {
55
+ periods: periodsIds,
56
+ orgUnits: orgUnitsIds,
57
+ dataItems: dataItemsIds
58
+ },
59
+ lazy: true
60
+ }
44
61
  );
45
- const { loading, data, refetch } = useDataQuery(query, {
46
- variables: {
47
- periods: periodsIds,
48
- orgUnits: orgUnitsIds,
49
- dataItems: dataItemsIds
50
- },
51
- lazy: true
52
- });
53
62
  const orgUnits = useMemo(() => {
54
63
  return data?.meta?.metaData.dimensions["ou"].map((ou) => {
55
64
  return {
@@ -78,13 +87,14 @@ function useGetScorecardMeta() {
78
87
  orgUnits: orgUnitsIds,
79
88
  dataItems: dataItemsIds
80
89
  });
81
- }, [state.periodSelection, state.orgUnitSelection]);
90
+ }, [periodSelection, orgUnitSelection]);
82
91
  return {
83
92
  loading,
84
93
  orgUnits,
85
94
  periods,
86
95
  dataItems,
87
- orgUnitLevels
96
+ orgUnitLevels,
97
+ called
88
98
  };
89
99
  }
90
100
  function useCalendar() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/metadata.ts"],"names":[],"mappings":"AAAA,SAAS,oBAAoB,yBAAyB;AACtD,SAAS,WAAW,oBAAoB;AACxC,SAAS,WAAW,eAAe;AACnC,SAAS,qBAAqB;AAG9B,MAAM,QAAa;AAAA,EAClB,MAAM;AAAA,IACL,UAAU;AAAA,IACV,QAAQ,CAAC;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACD,MAIM;AACL,aAAO;AAAA,QACN,UAAU;AAAA,QACV,eAAe;AAAA,QACf,eAAe;AAAA,QACf,oBAAoB;AAAA,QACpB,wBAAwB;AAAA,QACxB,WAAW;AAAA,UACV,MAAM,QAAQ,KAAK,GAAG,CAAC;AAAA,UACvB,MAAM,UAAU,KAAK,GAAG,CAAC;AAAA,UACzB,MAAM,SAAS,KAAK,GAAG,CAAC;AAAA,QACzB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,MACP,QAAQ,CAAC,MAAM,eAAe,OAAO;AAAA,IACtC;AAAA,EACD;AACD;AA2CO,SAAS,sBAAsB;AACrC,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ,kBAAkB;AAEhC,QAAM,EAAE,cAAc,aAAa,WAAW,IAAI;AAAA,IACjD,MACC,cAAc;AAAA,MACb;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACF,CAAC,OAAO,MAAM;AAAA,EACf;AAEA,QAAM,EAAE,SAAS,MAAM,QAAQ,IAAI,aAA2B,OAAO;AAAA,IACpE,WAAW;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,EACP,CAAC;AAED,QAAM,WAAW,QAAQ,MAAM;AAC9B,WACC,MAAM,MAAM,SAAS,WAAW,IAAI,EAClC,IAAI,CAAC,OAAO;AACZ,aAAO;AAAA,QACN,GAAG,MAAM,MAAM,SAAS,MAAM,EAAE;AAAA,QAChC,WAAW,MAAM,MAAM,UAAU,gBAAgB,EAAE;AAAA,MACpD;AAAA,IACD,CAAC,EACA,OAAO,OAAO,KAAK,CAAC;AAAA,EAExB,GAAG,CAAC,MAAM,IAAI,CAAC;AACf,QAAM,UAAU,QAAQ,MAAM;AAC7B,WACC,MAAM,MAAM,SAAS,WAAW,IAAI,EAClC,IAAI,CAAC,OAAO;AACZ,aAAO,MAAM,MAAM,SAAS,MAAM,EAAE;AAAA,IACrC,CAAC,EACA,OAAO,OAAO,KAAK,CAAC;AAAA,EAExB,GAAG,CAAC,MAAM,IAAI,CAAC;AACf,QAAM,YAAY,QAAQ,MAAM;AAC/B,WACC,MAAM,MAAM,SAAS,WAAW,IAAI,EAClC,IAAI,CAAC,OAAO;AACZ,aAAO,MAAM,MAAM,SAAS,MAAM,EAAE;AAAA,IACrC,CAAC,EACA,OAAO,OAAO,KAAK,CAAC;AAAA,EAExB,GAAG,CAAC,MAAM,IAAI,CAAC;AACf,QAAM,gBAAgB;AAAA,IACrB,MAAM,MAAM,SAAS,0BAA0B,CAAC;AAAA,IAChD,CAAC,MAAM,SAAS,sBAAsB;AAAA,EACvC;AAEA,YAAU,MAAM;AACf,YAAQ;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW;AAAA,IACZ,CAAC;AAAA,EACF,GAAG,CAAC,MAAM,iBAAiB,MAAM,gBAAgB,CAAC;AAElD,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAEO,SAAS,cAAc;AAC7B,QAAM,EAAE,WAAW,IAAI,UAAU;AACjC,SACE,YAA4D,YAC7D;AAEF","sourcesContent":["import { useScorecardConfig, useScorecardState } from \"../components\";\nimport { useConfig, useDataQuery } from \"@dhis2/app-runtime\";\nimport { useEffect, useMemo } from \"react\";\nimport { getDimensions } from \"../utils/analytics\";\nimport type { SupportedCalendar } from \"@dhis2/multi-calendar-dates/build/types/types\";\n\nconst query: any = {\n\tmeta: {\n\t\tresource: \"analytics\",\n\t\tparams: ({\n\t\t\tperiods,\n\t\t\torgUnits,\n\t\t\tdataItems,\n\t\t}: {\n\t\t\tperiods: string[];\n\t\t\torgUnits: string[];\n\t\t\tdataItems: string[];\n\t\t}) => {\n\t\t\treturn {\n\t\t\t\tskipData: true,\n\t\t\t\thierarchyData: true,\n\t\t\t\tshowHierarchy: true,\n\t\t\t\tenhancedConditions: true,\n\t\t\t\tincludeMetadataDetails: true,\n\t\t\t\tdimension: [\n\t\t\t\t\t`pe:${periods.join(\";\")}`,\n\t\t\t\t\t`dx:${dataItems.join(\";\")}`,\n\t\t\t\t\t`ou:${orgUnits.join(\";\")}`,\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t},\n\touLevel: {\n\t\tresource: \"organisationUnitLevels\",\n\t\tparams: {\n\t\t\tfields: [\"id\", \"displayName\", \"level\"],\n\t\t},\n\t},\n};\n\nexport type ItemMeta = {\n\tuid: string;\n\tname: string;\n\tcode?: string;\n\tdescription?: string;\n\tvalueType?: string;\n\ttotalAggregationType?: string;\n\taggregationType?: string;\n\t[key: string]: string | number | undefined;\n};\n\ntype MetaResponse = {\n\tmeta: {\n\t\tcolumns: any[];\n\t\trows: [];\n\t\theaders: [];\n\t\tmetaData: {\n\t\t\tdimensions: {\n\t\t\t\tdx: string[];\n\t\t\t\tou: string[];\n\t\t\t\tpe: string[];\n\t\t\t\tco: string[];\n\t\t\t\t[key: string]: string[];\n\t\t\t};\n\t\t\titems: {\n\t\t\t\t[key: string]: ItemMeta;\n\t\t\t};\n\t\t\touNameHierarchy: {\n\t\t\t\t[key: string]: string;\n\t\t\t};\n\t\t};\n\t};\n\touLevel: {\n\t\torganisationUnitLevels: Array<{\n\t\t\tid: string;\n\t\t\tlevel: number;\n\t\t\tdisplayName: string;\n\t\t}>;\n\t};\n};\n\nexport function useGetScorecardMeta() {\n\tconst config = useScorecardConfig();\n\tconst state = useScorecardState();\n\n\tconst { dataItemsIds, orgUnitsIds, periodsIds } = useMemo(\n\t\t() =>\n\t\t\tgetDimensions({\n\t\t\t\tconfig,\n\t\t\t\tstate,\n\t\t\t}),\n\t\t[state, config],\n\t);\n\n\tconst { loading, data, refetch } = useDataQuery<MetaResponse>(query, {\n\t\tvariables: {\n\t\t\tperiods: periodsIds,\n\t\t\torgUnits: orgUnitsIds,\n\t\t\tdataItems: dataItemsIds,\n\t\t},\n\t\tlazy: true,\n\t});\n\n\tconst orgUnits = useMemo(() => {\n\t\treturn (\n\t\t\tdata?.meta?.metaData.dimensions[\"ou\"]\n\t\t\t\t.map((ou) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...data?.meta?.metaData.items[ou],\n\t\t\t\t\t\thierarchy: data?.meta?.metaData?.ouNameHierarchy[ou],\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter(Boolean) ?? []\n\t\t);\n\t}, [data?.meta]);\n\tconst periods = useMemo(() => {\n\t\treturn (\n\t\t\tdata?.meta?.metaData.dimensions[\"pe\"]\n\t\t\t\t.map((pe) => {\n\t\t\t\t\treturn data?.meta?.metaData.items[pe];\n\t\t\t\t})\n\t\t\t\t.filter(Boolean) ?? []\n\t\t);\n\t}, [data?.meta]);\n\tconst dataItems = useMemo(() => {\n\t\treturn (\n\t\t\tdata?.meta?.metaData.dimensions[\"dx\"]\n\t\t\t\t.map((dx) => {\n\t\t\t\t\treturn data?.meta?.metaData.items[dx];\n\t\t\t\t})\n\t\t\t\t.filter(Boolean) ?? []\n\t\t);\n\t}, [data?.meta]);\n\tconst orgUnitLevels = useMemo(\n\t\t() => data?.ouLevel?.organisationUnitLevels ?? [],\n\t\t[data?.ouLevel?.organisationUnitLevels],\n\t);\n\n\tuseEffect(() => {\n\t\trefetch({\n\t\t\tperiods: periodsIds,\n\t\t\torgUnits: orgUnitsIds,\n\t\t\tdataItems: dataItemsIds,\n\t\t});\n\t}, [state.periodSelection, state.orgUnitSelection]);\n\n\treturn {\n\t\tloading,\n\t\torgUnits,\n\t\tperiods,\n\t\tdataItems,\n\t\torgUnitLevels,\n\t};\n}\n\nexport function useCalendar() {\n\tconst { systemInfo } = useConfig();\n\treturn (\n\t\t(systemInfo as unknown as { calendar?: SupportedCalendar })?.calendar ??\n\t\t\"iso8601\"\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { useScorecardConfig, useScorecardStateSelector } from \"../components\";\nimport { useConfig, useDataQuery } from \"@dhis2/app-runtime\";\nimport { useEffect, useMemo } from \"react\";\nimport { getDimensions } from \"../utils/analytics\";\nimport type { SupportedCalendar } from \"@dhis2/multi-calendar-dates/build/types/types\";\nimport type { ScorecardState } from \"../schemas/config\";\n\nconst query: any = {\n\tmeta: {\n\t\tresource: \"analytics\",\n\t\tparams: ({\n\t\t\tperiods,\n\t\t\torgUnits,\n\t\t\tdataItems,\n\t\t}: {\n\t\t\tperiods: string[];\n\t\t\torgUnits: string[];\n\t\t\tdataItems: string[];\n\t\t}) => {\n\t\t\treturn {\n\t\t\t\tskipData: true,\n\t\t\t\thierarchyData: true,\n\t\t\t\tshowHierarchy: true,\n\t\t\t\tenhancedConditions: true,\n\t\t\t\tincludeMetadataDetails: true,\n\t\t\t\tdimension: [\n\t\t\t\t\t`pe:${periods.join(\";\")}`,\n\t\t\t\t\t`dx:${dataItems.join(\";\")}`,\n\t\t\t\t\t`ou:${orgUnits.join(\";\")}`,\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t},\n\touLevel: {\n\t\tresource: \"organisationUnitLevels\",\n\t\tparams: {\n\t\t\tfields: [\"id\", \"displayName\", \"level\"],\n\t\t},\n\t},\n};\n\nexport type ItemMeta = {\n\tuid: string;\n\tname: string;\n\tcode?: string;\n\tdescription?: string;\n\tvalueType?: string;\n\ttotalAggregationType?: string;\n\taggregationType?: string;\n\t[key: string]: string | number | undefined;\n};\n\ntype MetaResponse = {\n\tmeta: {\n\t\tcolumns: any[];\n\t\trows: [];\n\t\theaders: [];\n\t\tmetaData: {\n\t\t\tdimensions: {\n\t\t\t\tdx: string[];\n\t\t\t\tou: string[];\n\t\t\t\tpe: string[];\n\t\t\t\tco: string[];\n\t\t\t\t[key: string]: string[];\n\t\t\t};\n\t\t\titems: {\n\t\t\t\t[key: string]: ItemMeta;\n\t\t\t};\n\t\t\touNameHierarchy: {\n\t\t\t\t[key: string]: string;\n\t\t\t};\n\t\t};\n\t};\n\touLevel: {\n\t\torganisationUnitLevels: Array<{\n\t\t\tid: string;\n\t\t\tlevel: number;\n\t\t\tdisplayName: string;\n\t\t}>;\n\t};\n};\n\nexport function useGetScorecardMeta() {\n\tconst config = useScorecardConfig();\n\n\tconst orgUnitSelection =\n\t\tuseScorecardStateSelector<ScorecardState[\"orgUnitSelection\"]>(\n\t\t\t\"orgUnitSelection\",\n\t\t);\n\tconst periodSelection =\n\t\tuseScorecardStateSelector<ScorecardState[\"periodSelection\"]>(\n\t\t\t\"periodSelection\",\n\t\t);\n\n\tconst { dataItemsIds, orgUnitsIds, periodsIds } = useMemo(\n\t\t() =>\n\t\t\tgetDimensions({\n\t\t\t\tconfig,\n\t\t\t\torgUnitSelection,\n\t\t\t\tperiodSelection,\n\t\t\t}),\n\t\t[config, orgUnitSelection, periodSelection],\n\t);\n\n\tconst { loading, data, refetch, called } = useDataQuery<MetaResponse>(\n\t\tquery,\n\t\t{\n\t\t\tvariables: {\n\t\t\t\tperiods: periodsIds,\n\t\t\t\torgUnits: orgUnitsIds,\n\t\t\t\tdataItems: dataItemsIds,\n\t\t\t},\n\t\t\tlazy: true,\n\t\t},\n\t);\n\n\tconst orgUnits = useMemo(() => {\n\t\treturn (\n\t\t\tdata?.meta?.metaData.dimensions[\"ou\"]\n\t\t\t\t.map((ou) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...data?.meta?.metaData.items[ou],\n\t\t\t\t\t\thierarchy: data?.meta?.metaData?.ouNameHierarchy[ou],\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter(Boolean) ?? []\n\t\t);\n\t}, [data?.meta]);\n\tconst periods = useMemo(() => {\n\t\treturn (\n\t\t\tdata?.meta?.metaData.dimensions[\"pe\"]\n\t\t\t\t.map((pe) => {\n\t\t\t\t\treturn data?.meta?.metaData.items[pe];\n\t\t\t\t})\n\t\t\t\t.filter(Boolean) ?? []\n\t\t);\n\t}, [data?.meta]);\n\tconst dataItems = useMemo(() => {\n\t\treturn (\n\t\t\tdata?.meta?.metaData.dimensions[\"dx\"]\n\t\t\t\t.map((dx) => {\n\t\t\t\t\treturn data?.meta?.metaData.items[dx];\n\t\t\t\t})\n\t\t\t\t.filter(Boolean) ?? []\n\t\t);\n\t}, [data?.meta]);\n\tconst orgUnitLevels = useMemo(\n\t\t() => data?.ouLevel?.organisationUnitLevels ?? [],\n\t\t[data?.ouLevel?.organisationUnitLevels],\n\t);\n\n\tuseEffect(() => {\n\t\trefetch({\n\t\t\tperiods: periodsIds,\n\t\t\torgUnits: orgUnitsIds,\n\t\t\tdataItems: dataItemsIds,\n\t\t});\n\t}, [periodSelection, orgUnitSelection]);\n\n\treturn {\n\t\tloading,\n\t\torgUnits,\n\t\tperiods,\n\t\tdataItems,\n\t\torgUnitLevels,\n\t\tcalled,\n\t};\n}\n\nexport function useCalendar() {\n\tconst { systemInfo } = useConfig();\n\treturn (\n\t\t(systemInfo as unknown as { calendar?: SupportedCalendar })?.calendar ??\n\t\t\"iso8601\"\n\t);\n}\n"]}
@@ -1,13 +1,145 @@
1
1
  import { getCoreRowModel, getFilteredRowModel, getSortedRowModel } from '@tanstack/react-table';
2
2
  import { useTableColumns } from './columns';
3
+ import { useState, useMemo, useEffect } from 'react';
4
+ import { useScorecardStateSelector, useScorecardMeta, useScorecardConfig } from '../components';
5
+ import { getRowsFromMeta } from '../utils/data';
6
+ import { isEmpty, meanBy } from 'lodash';
7
+ import { getAverageValue } from '../utils/columns';
3
8
  import { useScorecardData } from '../components/DataProvider';
4
- import { useState } from 'react';
5
- import { useScorecardState } from '../components';
6
9
 
10
+ function getRowValues({
11
+ data,
12
+ showDataInRows,
13
+ row
14
+ }) {
15
+ return data.filter((datum) => {
16
+ if (showDataInRows) {
17
+ return row.dataHolder.dataSources.map(({ id }) => id).includes(datum.dx);
18
+ }
19
+ return datum.ou === row.orgUnit.uid;
20
+ });
21
+ }
22
+ function filterRows({
23
+ rows,
24
+ emptyRows,
25
+ dataEngine,
26
+ showDataInRows,
27
+ averageDisplayType,
28
+ meta
29
+ }) {
30
+ if (!dataEngine.isDone) {
31
+ return [];
32
+ }
33
+ const hiddenRows = [];
34
+ const rowsWithDataValues = rows.map((row, index) => {
35
+ const values = getRowValues({
36
+ row,
37
+ data: dataEngine.data,
38
+ showDataInRows
39
+ });
40
+ const average = meanBy(values, ({ value }) => parseFloat(value));
41
+ return {
42
+ row,
43
+ index,
44
+ values,
45
+ average
46
+ };
47
+ });
48
+ if (!emptyRows) {
49
+ const emptyRows2 = rowsWithDataValues.filter(({ values }) => isEmpty(values)).map(({ index }) => index);
50
+ hiddenRows.push(...emptyRows2);
51
+ }
52
+ if (averageDisplayType !== "ALL") {
53
+ const average = getAverageValue({
54
+ dataValues: dataEngine.data,
55
+ meta
56
+ });
57
+ if (averageDisplayType === "BELOW_AVERAGE") {
58
+ const aboveAverageRows = rowsWithDataValues.filter(({ average: rowAverage }) => rowAverage > average).map(({ index }) => index);
59
+ hiddenRows.push(...aboveAverageRows);
60
+ } else {
61
+ const belowAverageRows = rowsWithDataValues.filter(({ average: rowAverage }) => rowAverage < average).map(({ index }) => index);
62
+ hiddenRows.push(...belowAverageRows);
63
+ }
64
+ }
65
+ return hiddenRows;
66
+ }
67
+ function useTableRows() {
68
+ const meta = useScorecardMeta();
69
+ const { data: dataEngine } = useScorecardData();
70
+ const showDataInRows = useScorecardStateSelector([
71
+ "options",
72
+ "showDataInRows"
73
+ ]);
74
+ const showHierarchy = useScorecardStateSelector([
75
+ "options",
76
+ "showHierarchy"
77
+ ]);
78
+ const emptyRows = useScorecardStateSelector([
79
+ "options",
80
+ "emptyRows"
81
+ ]);
82
+ const averageDisplayType = useScorecardStateSelector(["options", "averageDisplayType"]);
83
+ const config = useScorecardConfig();
84
+ const [hiddenRowIndexes, setHiddenRowIndexes] = useState([]);
85
+ if (meta == null)
86
+ return [];
87
+ const rows = useMemo(() => {
88
+ const rows2 = getRowsFromMeta({
89
+ meta,
90
+ showDataInRows,
91
+ showHierarchy,
92
+ config
93
+ });
94
+ if (isEmpty(hiddenRowIndexes)) {
95
+ return rows2;
96
+ }
97
+ return rows2.filter((_, index) => !hiddenRowIndexes.includes(index));
98
+ }, [meta, showDataInRows, showHierarchy, config, hiddenRowIndexes]);
99
+ useEffect(() => {
100
+ const listener = (data) => {
101
+ if (data === "done") {
102
+ setHiddenRowIndexes(
103
+ filterRows({
104
+ meta,
105
+ dataEngine,
106
+ showDataInRows,
107
+ rows,
108
+ averageDisplayType,
109
+ emptyRows
110
+ })
111
+ );
112
+ }
113
+ };
114
+ if (dataEngine.isDone) {
115
+ setHiddenRowIndexes(
116
+ filterRows({
117
+ meta,
118
+ dataEngine,
119
+ showDataInRows,
120
+ rows,
121
+ averageDisplayType,
122
+ emptyRows
123
+ })
124
+ );
125
+ } else {
126
+ dataEngine.addListener(listener);
127
+ }
128
+ return () => {
129
+ dataEngine.removeListener(listener);
130
+ };
131
+ }, [averageDisplayType, emptyRows, showDataInRows]);
132
+ return rows;
133
+ }
7
134
  function useTableSetup() {
8
- const state = useScorecardState();
9
- const showAverageColumn = state?.options?.averageColumn ?? false;
10
- const showItemNumber = state?.options?.itemNumber ?? false;
135
+ const showAverageColumn = useScorecardStateSelector([
136
+ "options",
137
+ "averageColumn"
138
+ ]);
139
+ const showItemNumber = useScorecardStateSelector([
140
+ "options",
141
+ "itemNumber"
142
+ ]);
11
143
  const [columnFilters, setColumnFilters] = useState([]);
12
144
  const [columnVisibility, setColumnVisibility] = useState({
13
145
  average: showAverageColumn,
@@ -15,7 +147,7 @@ function useTableSetup() {
15
147
  });
16
148
  const [sorting, setSorting] = useState([]);
17
149
  const columns = useTableColumns();
18
- const { data } = useScorecardData();
150
+ const data = useTableRows();
19
151
  return {
20
152
  columns,
21
153
  data,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/table.ts"],"names":[],"mappings":"AAAA;AAAA,EAEC;AAAA,EACA;AAAA,EACA;AAAA,OAIM;AACP,SAAS,uBAAuB;AAEhC,SAAS,wBAAwB;AACjC,SAAS,gBAAgB;AACzB,SAAS,yBAAyB;AAE3B,SAAS,gBAAkD;AACjE,QAAM,QAAQ,kBAAkB;AAEhC,QAAM,oBAAoB,OAAO,SAAS,iBAAiB;AAC3D,QAAM,iBAAiB,OAAO,SAAS,cAAc;AACrD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAA6B,CAAC,CAAC;AACzE,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAA0B;AAAA,IACzE,SAAS;AAAA,IACT,OAAO;AAAA,EACR,CAAC;AAED,QAAM,CAAC,SAAS,UAAU,IAAI,SAAuB,CAAC,CAAC;AACvD,QAAM,UAAU,gBAAgB;AAChC,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAElC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,iBAAiB,gBAAgB;AAAA,IACjC,qBAAqB,oBAAoB;AAAA,IACzC,mBAAmB,kBAAkB;AAAA,IACrC,0BAA0B;AAAA,EAC3B;AACD","sourcesContent":["import {\n\ttype ColumnFiltersState,\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetSortedRowModel,\n\ttype SortingState,\n\ttype TableOptions,\n\ttype VisibilityState,\n} from \"@tanstack/react-table\";\nimport { useTableColumns } from \"./columns\";\nimport type { ScorecardTableData } from \"../schemas/config\";\nimport { useScorecardData } from \"../components/DataProvider\";\nimport { useState } from \"react\";\nimport { useScorecardState } from \"../components\";\n\nexport function useTableSetup(): TableOptions<ScorecardTableData> {\n\tconst state = useScorecardState();\n\n\tconst showAverageColumn = state?.options?.averageColumn ?? false;\n\tconst showItemNumber = state?.options?.itemNumber ?? false;\n\tconst [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n\tconst [columnVisibility, setColumnVisibility] = useState<VisibilityState>({\n\t\taverage: showAverageColumn,\n\t\tcount: showItemNumber,\n\t});\n\n\tconst [sorting, setSorting] = useState<SortingState>([]);\n\tconst columns = useTableColumns();\n\tconst { data } = useScorecardData();\n\n\treturn {\n\t\tcolumns,\n\t\tdata,\n\t\tstate: {\n\t\t\tcolumnFilters,\n\t\t\tsorting,\n\t\t\tcolumnVisibility,\n\t\t},\n\t\tonColumnFiltersChange: setColumnFilters,\n\t\tonSortingChange: setSorting,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tonColumnVisibilityChange: setColumnVisibility,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../../../../src/components/Scorecard/hooks/table.ts"],"names":["emptyRows","rows"],"mappings":"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","sourcesContent":["import {\n\ttype ColumnFiltersState,\n\tgetCoreRowModel,\n\tgetFilteredRowModel,\n\tgetSortedRowModel,\n\ttype SortingState,\n\ttype TableOptions,\n\ttype VisibilityState,\n} from \"@tanstack/react-table\";\nimport { useTableColumns } from \"./columns\";\nimport type {\n\tScorecardTableData,\n\tScorecardViewOptions,\n} from \"../schemas/config\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n\ttype ScorecardMeta,\n\tuseScorecardConfig,\n\tuseScorecardMeta,\n\tuseScorecardStateSelector,\n} from \"../components\";\nimport { type AnalyticsData, getRowsFromMeta } from \"../utils/data\";\nimport { isEmpty, meanBy } from \"lodash\";\nimport type { ScorecardDataEngine } from \"../utils/dataEngine\";\nimport { getAverageValue } from \"../utils/columns\";\nimport { useScorecardData } from \"../components/DataProvider\";\n\nfunction getRowValues({\n\tdata,\n\tshowDataInRows,\n\trow,\n}: {\n\trow: ScorecardTableData;\n\tdata: AnalyticsData[];\n\tshowDataInRows: boolean;\n}): AnalyticsData[] {\n\treturn data.filter((datum) => {\n\t\tif (showDataInRows) {\n\t\t\treturn row\n\t\t\t\t.dataHolder!.dataSources.map(({ id }) => id)\n\t\t\t\t.includes(datum.dx!);\n\t\t}\n\t\treturn datum.ou === row.orgUnit!.uid;\n\t});\n}\n\nfunction filterRows({\n\trows,\n\temptyRows,\n\tdataEngine,\n\tshowDataInRows,\n\taverageDisplayType,\n\tmeta,\n}: {\n\temptyRows: ScorecardViewOptions[\"emptyRows\"];\n\tshowDataInRows: boolean;\n\taverageDisplayType: ScorecardViewOptions[\"averageDisplayType\"];\n\tdataEngine: ScorecardDataEngine;\n\trows: ScorecardTableData[];\n\tmeta: ScorecardMeta;\n}) {\n\tif (!dataEngine.isDone) {\n\t\treturn [];\n\t}\n\tconst hiddenRows: number[] = [];\n\tconst rowsWithDataValues = rows.map((row, index) => {\n\t\tconst values = getRowValues({\n\t\t\trow,\n\t\t\tdata: dataEngine.data,\n\t\t\tshowDataInRows,\n\t\t});\n\t\tconst average = meanBy(values, ({ value }) => parseFloat(value!));\n\t\treturn {\n\t\t\trow,\n\t\t\tindex,\n\t\t\tvalues,\n\t\t\taverage,\n\t\t};\n\t});\n\tif (!emptyRows) {\n\t\t//Filter out all e\n\t\tconst emptyRows = rowsWithDataValues\n\t\t\t.filter(({ values }) => isEmpty(values))\n\t\t\t.map(({ index }) => index);\n\t\thiddenRows.push(...emptyRows);\n\t}\n\n\tif (averageDisplayType !== \"ALL\") {\n\t\tconst average = getAverageValue({\n\t\t\tdataValues: dataEngine.data,\n\t\t\tmeta,\n\t\t});\n\t\tif (averageDisplayType === \"BELOW_AVERAGE\") {\n\t\t\tconst aboveAverageRows = rowsWithDataValues\n\t\t\t\t.filter(({ average: rowAverage }) => rowAverage > average)\n\t\t\t\t.map(({ index }) => index);\n\t\t\thiddenRows.push(...aboveAverageRows);\n\t\t} else {\n\t\t\tconst belowAverageRows = rowsWithDataValues\n\t\t\t\t.filter(({ average: rowAverage }) => rowAverage < average)\n\t\t\t\t.map(({ index }) => index);\n\t\t\thiddenRows.push(...belowAverageRows);\n\t\t}\n\t}\n\n\treturn hiddenRows;\n}\n\nfunction useTableRows(): ScorecardTableData[] {\n\tconst meta = useScorecardMeta();\n\tconst { data: dataEngine } = useScorecardData();\n\tconst showDataInRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showDataInRows\",\n\t]);\n\tconst showHierarchy = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"showHierarchy\",\n\t]);\n\tconst emptyRows = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"emptyRows\",\n\t]);\n\tconst averageDisplayType = useScorecardStateSelector<\n\t\tScorecardViewOptions[\"averageDisplayType\"]\n\t>([\"options\", \"averageDisplayType\"]);\n\n\tconst config = useScorecardConfig();\n\n\tconst [hiddenRowIndexes, setHiddenRowIndexes] = useState<number[]>([]);\n\n\tif (meta == null) return [];\n\n\tconst rows = useMemo(() => {\n\t\tconst rows = getRowsFromMeta({\n\t\t\tmeta,\n\t\t\tshowDataInRows,\n\t\t\tshowHierarchy,\n\t\t\tconfig,\n\t\t});\n\n\t\tif (isEmpty(hiddenRowIndexes)) {\n\t\t\treturn rows;\n\t\t}\n\n\t\treturn rows.filter((_, index) => !hiddenRowIndexes.includes(index));\n\t}, [meta, showDataInRows, showHierarchy, config, hiddenRowIndexes]);\n\n\tuseEffect(() => {\n\t\tconst listener = (data: AnalyticsData[] | \"done\") => {\n\t\t\tif (data === \"done\") {\n\t\t\t\tsetHiddenRowIndexes(\n\t\t\t\t\tfilterRows({\n\t\t\t\t\t\tmeta,\n\t\t\t\t\t\tdataEngine,\n\t\t\t\t\t\tshowDataInRows,\n\t\t\t\t\t\trows,\n\t\t\t\t\t\taverageDisplayType,\n\t\t\t\t\t\temptyRows,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tif (dataEngine.isDone) {\n\t\t\tsetHiddenRowIndexes(\n\t\t\t\tfilterRows({\n\t\t\t\t\tmeta,\n\t\t\t\t\tdataEngine,\n\t\t\t\t\tshowDataInRows,\n\t\t\t\t\trows,\n\t\t\t\t\taverageDisplayType,\n\t\t\t\t\temptyRows,\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tdataEngine.addListener(listener);\n\t\t}\n\t\treturn () => {\n\t\t\tdataEngine.removeListener(listener);\n\t\t};\n\t}, [averageDisplayType, emptyRows, showDataInRows]);\n\n\treturn rows;\n}\n\nexport function useTableSetup(): TableOptions<ScorecardTableData> {\n\tconst showAverageColumn = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"averageColumn\",\n\t]);\n\tconst showItemNumber = useScorecardStateSelector<boolean>([\n\t\t\"options\",\n\t\t\"itemNumber\",\n\t]);\n\tconst [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n\tconst [columnVisibility, setColumnVisibility] = useState<VisibilityState>({\n\t\taverage: showAverageColumn,\n\t\tcount: showItemNumber,\n\t});\n\n\tconst [sorting, setSorting] = useState<SortingState>([]);\n\tconst columns = useTableColumns();\n\tconst data = useTableRows();\n\n\treturn {\n\t\tcolumns,\n\t\tdata,\n\t\tstate: {\n\t\t\tcolumnFilters,\n\t\t\tsorting,\n\t\t\tcolumnVisibility,\n\t\t},\n\n\t\tonColumnFiltersChange: setColumnFilters,\n\t\tonSortingChange: setSorting,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tonColumnVisibilityChange: setColumnVisibility,\n\t};\n}\n"]}