@hisptz/dhis2-analytics 1.0.4 → 1.0.6

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 (293) hide show
  1. package/build/cjs/components/ChartAnalytics/ChartAnalytics.stories.js +253 -0
  2. package/build/cjs/components/ChartAnalytics/ChartAnalytics.test.js +51 -0
  3. package/build/cjs/components/ChartAnalytics/components/DownloadMenu/components/Menu.js +48 -0
  4. package/build/cjs/components/ChartAnalytics/components/DownloadMenu/constants/menu.js +34 -0
  5. package/build/cjs/components/ChartAnalytics/components/DownloadMenu/index.js +67 -0
  6. package/build/cjs/components/ChartAnalytics/components/DownloadMenu/interfaces/menu.js +1 -0
  7. package/{src → build/cjs}/components/ChartAnalytics/data/column-data.json +0 -0
  8. package/{src → build/cjs}/components/ChartAnalytics/data/complex-multi-series-data.json +0 -0
  9. package/{src → build/cjs}/components/ChartAnalytics/data/multi-series-data.json +0 -0
  10. package/{src → build/cjs}/components/ChartAnalytics/data/pie-data.json +0 -0
  11. package/{src → build/cjs}/components/ChartAnalytics/data/stacked-chart-data.json +0 -0
  12. package/build/cjs/components/ChartAnalytics/hooks/useChart.js +38 -0
  13. package/build/cjs/components/ChartAnalytics/index.js +69 -0
  14. package/build/cjs/components/ChartAnalytics/models/column.js +53 -0
  15. package/build/cjs/components/ChartAnalytics/models/index.js +102 -0
  16. package/build/cjs/components/ChartAnalytics/models/line.js +35 -0
  17. package/build/cjs/components/ChartAnalytics/models/multi-series.js +111 -0
  18. package/build/cjs/components/ChartAnalytics/models/pie.js +53 -0
  19. package/build/cjs/components/ChartAnalytics/services/export.js +50 -0
  20. package/{src → build/cjs}/components/ChartAnalytics/styles/custom-highchart.css +0 -0
  21. package/build/cjs/components/ChartAnalytics/types/props.js +1 -0
  22. package/build/cjs/components/ChartAnalytics/utils/chart.js +133 -0
  23. package/build/cjs/components/CircularProgressDashboard/CircularProgressIndicator.stories.js +45 -0
  24. package/build/cjs/components/CircularProgressDashboard/CircularProgressIndicator.test.js +13 -0
  25. package/build/cjs/components/CircularProgressDashboard/index.js +49 -0
  26. package/build/cjs/components/CircularProgressDashboard/types/props.js +1 -0
  27. package/build/cjs/components/Map/Map.stories.js +352 -0
  28. package/build/cjs/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.js +32 -0
  29. package/build/cjs/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.js +40 -0
  30. package/build/cjs/components/Map/components/EarthEngineLayerConfiguration/index.js +458 -0
  31. package/build/cjs/components/Map/components/MapArea/index.js +101 -0
  32. package/build/cjs/components/Map/components/MapArea/interfaces/index.js +1 -0
  33. package/build/cjs/components/Map/components/MapControls/components/CustomControl/index.js +32 -0
  34. package/build/cjs/components/Map/components/MapControls/components/DownloadControl/index.js +25 -0
  35. package/build/cjs/components/Map/components/MapControls/components/FullscreenControl/index.js +13 -0
  36. package/build/cjs/components/Map/components/MapControls/index.js +42 -0
  37. package/build/cjs/components/Map/components/MapLayer/components/BoundaryLayer/hooks/useBoundaryData.js +13 -0
  38. package/build/cjs/components/Map/components/MapLayer/components/BoundaryLayer/index.js +51 -0
  39. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/components/EarthEngineLegend.js +106 -0
  40. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/constants/index.js +379 -0
  41. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/hooks/index.js +36 -0
  42. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/index.js +200 -0
  43. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/interfaces/index.js +1 -0
  44. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/services/api.js +10 -0
  45. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/services/engine.js +412 -0
  46. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/utils/index.js +124 -0
  47. package/{src → build/cjs}/components/Map/components/MapLayer/components/LegendArea/LegendArea.module.css +0 -0
  48. package/build/cjs/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.js +26 -0
  49. package/build/cjs/components/Map/components/MapLayer/components/LegendArea/index.js +181 -0
  50. package/build/cjs/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.js +86 -0
  51. package/build/cjs/components/Map/components/MapLayer/components/PointLayer/hooks/index.js +14 -0
  52. package/build/cjs/components/Map/components/MapLayer/components/PointLayer/index.js +46 -0
  53. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/components/Bubble.js +57 -0
  54. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/components/Bubbles.js +145 -0
  55. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/index.js +43 -0
  56. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.js +56 -0
  57. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js +61 -0
  58. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.js +43 -0
  59. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.js +35 -0
  60. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/hooks/config.js +15 -0
  61. package/build/cjs/components/Map/components/MapLayer/components/ThematicLayer/index.js +57 -0
  62. package/{src → build/cjs}/components/Map/components/MapLayer/components/ThematicLayer/styles/legends.css +0 -0
  63. package/build/cjs/components/Map/components/MapLayer/index.js +40 -0
  64. package/build/cjs/components/Map/components/MapLayer/interfaces/index.js +8 -0
  65. package/build/cjs/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +389 -0
  66. package/build/cjs/components/Map/components/MapProvider/components/MapLayerProvider/index.js +116 -0
  67. package/build/cjs/components/Map/components/MapProvider/hooks/index.js +19 -0
  68. package/build/cjs/components/Map/components/MapProvider/index.js +121 -0
  69. package/build/cjs/components/Map/components/MapUpdater/index.js +24 -0
  70. package/build/cjs/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.js +32 -0
  71. package/build/cjs/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.js +40 -0
  72. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/components/ColorScale/index.js +40 -0
  73. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/constants/colors.js +428 -0
  74. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/index.js +63 -0
  75. package/{src → build/cjs}/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/styles/ColorScale.module.css +0 -0
  76. package/{src → build/cjs}/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/styles/ColorScaleSelect.module.css +0 -0
  77. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/utils/colors.js +72 -0
  78. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/CustomLegend/index.js +71 -0
  79. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/IndicatorSelectorModal/index.js +47 -0
  80. package/build/cjs/components/Map/components/ThematicLayerConfiguration/components/LegendSetSelector/index.js +79 -0
  81. package/build/cjs/components/Map/components/ThematicLayerConfiguration/index.js +265 -0
  82. package/build/cjs/components/Map/constants/colors.js +428 -0
  83. package/build/cjs/components/Map/constants/legendSet.js +22 -0
  84. package/build/cjs/components/Map/hooks/map.js +52 -0
  85. package/build/cjs/components/Map/index.js +108 -0
  86. package/build/cjs/components/Map/interfaces/index.js +1 -0
  87. package/build/cjs/components/Map/state/index.js +23 -0
  88. package/build/cjs/components/Map/utils/colors.js +78 -0
  89. package/build/cjs/components/Map/utils/helpers.js +25 -0
  90. package/build/cjs/components/Map/utils/map.js +161 -0
  91. package/build/cjs/components/SingleValueContainer/SingleValueContainer.stories.js +127 -0
  92. package/build/cjs/components/SingleValueContainer/SingleValueContainer.test.js +23 -0
  93. package/build/cjs/components/SingleValueContainer/components/SingleValueItem/SingleValueItem.js +54 -0
  94. package/build/cjs/components/SingleValueContainer/components/SingleValueItem/SingleValuePercentage.js +24 -0
  95. package/build/cjs/components/SingleValueContainer/index.js +43 -0
  96. package/{src → build/cjs}/components/SingleValueContainer/styles/SingleValueContainer.module.css +0 -0
  97. package/build/cjs/components/SingleValueContainer/types/props.js +1 -0
  98. package/{src → build/cjs}/data/map.json +0 -0
  99. package/build/cjs/dataProviders/map.js +31 -0
  100. package/build/cjs/index.js +49 -0
  101. package/build/cjs/index.test.js +7 -0
  102. package/build/cjs/locales/en/translations.json +128 -0
  103. package/build/cjs/locales/index.js +22 -0
  104. package/build/es/components/ChartAnalytics/ChartAnalytics.stories.js +235 -0
  105. package/build/es/components/ChartAnalytics/ChartAnalytics.test.js +46 -0
  106. package/build/es/components/ChartAnalytics/components/DownloadMenu/components/Menu.js +41 -0
  107. package/build/es/components/ChartAnalytics/components/DownloadMenu/constants/menu.js +26 -0
  108. package/build/es/components/ChartAnalytics/components/DownloadMenu/index.js +58 -0
  109. package/build/es/components/ChartAnalytics/components/DownloadMenu/interfaces/menu.js +1 -0
  110. package/build/es/components/ChartAnalytics/data/column-data.json +210 -0
  111. package/build/es/components/ChartAnalytics/data/complex-multi-series-data.json +124 -0
  112. package/build/es/components/ChartAnalytics/data/multi-series-data.json +536 -0
  113. package/build/es/components/ChartAnalytics/data/pie-data.json +115 -0
  114. package/build/es/components/ChartAnalytics/data/stacked-chart-data.json +415 -0
  115. package/build/es/components/ChartAnalytics/hooks/useChart.js +32 -0
  116. package/build/es/components/ChartAnalytics/index.js +40 -0
  117. package/build/es/components/ChartAnalytics/models/column.js +45 -0
  118. package/build/es/components/ChartAnalytics/models/index.js +95 -0
  119. package/build/es/components/ChartAnalytics/models/line.js +28 -0
  120. package/build/es/components/ChartAnalytics/models/multi-series.js +104 -0
  121. package/build/es/components/ChartAnalytics/models/pie.js +46 -0
  122. package/build/es/components/ChartAnalytics/services/export.js +36 -0
  123. package/build/es/components/ChartAnalytics/styles/custom-highchart.css +48 -0
  124. package/build/es/components/ChartAnalytics/types/props.js +1 -0
  125. package/build/es/components/ChartAnalytics/utils/chart.js +122 -0
  126. package/{src/components/CircularProgressDashboard/CircularProgressIndicator.stories.tsx → build/es/components/CircularProgressDashboard/CircularProgressIndicator.stories.js} +9 -16
  127. package/build/es/components/CircularProgressDashboard/CircularProgressIndicator.test.js +10 -0
  128. package/build/es/components/CircularProgressDashboard/index.js +41 -0
  129. package/build/es/components/CircularProgressDashboard/types/props.js +1 -0
  130. package/build/es/components/Map/Map.stories.js +334 -0
  131. package/build/es/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.js +23 -0
  132. package/build/es/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.js +31 -0
  133. package/build/es/components/Map/components/EarthEngineLayerConfiguration/index.js +448 -0
  134. package/build/es/components/Map/components/MapArea/index.js +91 -0
  135. package/build/es/components/Map/components/MapArea/interfaces/index.js +1 -0
  136. package/build/es/components/Map/components/MapControls/components/CustomControl/index.js +25 -0
  137. package/build/es/components/Map/components/MapControls/components/DownloadControl/index.js +18 -0
  138. package/build/es/components/Map/components/MapControls/components/FullscreenControl/index.js +6 -0
  139. package/build/es/components/Map/components/MapControls/index.js +35 -0
  140. package/build/es/components/Map/components/MapLayer/components/BoundaryLayer/hooks/useBoundaryData.js +7 -0
  141. package/build/es/components/Map/components/MapLayer/components/BoundaryLayer/index.js +41 -0
  142. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/components/EarthEngineLegend.js +95 -0
  143. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/constants/index.js +369 -0
  144. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/hooks/index.js +29 -0
  145. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/index.js +191 -0
  146. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/interfaces/index.js +1 -0
  147. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/services/api.js +10 -0
  148. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/services/engine.js +403 -0
  149. package/build/es/components/Map/components/MapLayer/components/GoogleEngineLayer/utils/index.js +111 -0
  150. package/build/es/components/Map/components/MapLayer/components/LegendArea/LegendArea.module.css +12 -0
  151. package/build/es/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.js +19 -0
  152. package/build/es/components/Map/components/MapLayer/components/LegendArea/index.js +172 -0
  153. package/build/es/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.js +76 -0
  154. package/build/es/components/Map/components/MapLayer/components/PointLayer/hooks/index.js +8 -0
  155. package/build/es/components/Map/components/MapLayer/components/PointLayer/index.js +39 -0
  156. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/components/Bubble.js +49 -0
  157. package/{src/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/components/Bubbles.tsx → build/es/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/components/Bubbles.js} +57 -74
  158. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/index.js +33 -0
  159. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.js +47 -0
  160. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js +50 -0
  161. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.js +36 -0
  162. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.js +28 -0
  163. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/hooks/config.js +9 -0
  164. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/index.js +50 -0
  165. package/build/es/components/Map/components/MapLayer/components/ThematicLayer/styles/legends.css +62 -0
  166. package/build/es/components/Map/components/MapLayer/index.js +33 -0
  167. package/build/es/components/Map/components/MapLayer/interfaces/index.js +1 -0
  168. package/build/es/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +381 -0
  169. package/build/es/components/Map/components/MapProvider/components/MapLayerProvider/index.js +107 -0
  170. package/{src/components/Map/components/MapProvider/hooks/index.ts → build/es/components/Map/components/MapProvider/hooks/index.js} +3 -6
  171. package/build/es/components/Map/components/MapProvider/index.js +112 -0
  172. package/build/es/components/Map/components/MapUpdater/index.js +17 -0
  173. package/build/es/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.js +23 -0
  174. package/build/es/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.js +31 -0
  175. package/build/es/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/components/ColorScale/index.js +33 -0
  176. package/{src/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/constants/colors.ts → build/es/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/constants/colors.js} +46 -59
  177. package/build/es/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/index.js +53 -0
  178. package/build/es/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/styles/ColorScale.module.css +15 -0
  179. package/build/es/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/styles/ColorScaleSelect.module.css +12 -0
  180. package/build/es/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/utils/colors.js +56 -0
  181. package/build/es/components/Map/components/ThematicLayerConfiguration/components/CustomLegend/index.js +64 -0
  182. package/build/es/components/Map/components/ThematicLayerConfiguration/components/IndicatorSelectorModal/index.js +38 -0
  183. package/build/es/components/Map/components/ThematicLayerConfiguration/components/LegendSetSelector/index.js +70 -0
  184. package/build/es/components/Map/components/ThematicLayerConfiguration/index.js +254 -0
  185. package/{src/components/Map/constants/colors.ts → build/es/components/Map/constants/colors.js} +46 -59
  186. package/build/es/components/Map/constants/legendSet.js +15 -0
  187. package/build/es/components/Map/hooks/map.js +44 -0
  188. package/build/es/components/Map/index.js +51 -0
  189. package/build/es/components/Map/interfaces/index.js +1 -0
  190. package/build/es/components/Map/state/index.js +14 -0
  191. package/build/es/components/Map/utils/colors.js +61 -0
  192. package/build/es/components/Map/utils/helpers.js +14 -0
  193. package/build/es/components/Map/utils/map.js +147 -0
  194. package/build/es/components/SingleValueContainer/SingleValueContainer.stories.js +115 -0
  195. package/build/es/components/SingleValueContainer/SingleValueContainer.test.js +20 -0
  196. package/build/es/components/SingleValueContainer/components/SingleValueItem/SingleValueItem.js +47 -0
  197. package/build/es/components/SingleValueContainer/components/SingleValueItem/SingleValuePercentage.js +17 -0
  198. package/build/es/components/SingleValueContainer/index.js +29 -0
  199. package/build/es/components/SingleValueContainer/styles/SingleValueContainer.module.css +39 -0
  200. package/build/es/components/SingleValueContainer/types/props.js +1 -0
  201. package/build/es/data/map.json +5984 -0
  202. package/build/es/dataProviders/map.js +24 -0
  203. package/{src/index.ts → build/es/index.js} +1 -0
  204. package/build/es/index.test.js +6 -0
  205. package/build/es/locales/en/translations.json +128 -0
  206. package/build/es/locales/index.js +13 -0
  207. package/package.json +21 -4
  208. package/d2.config.js +0 -8
  209. package/i18n/en.pot +0 -409
  210. package/src/components/ChartAnalytics/ChartAnalytics.stories.tsx +0 -250
  211. package/src/components/ChartAnalytics/ChartAnalytics.test.tsx +0 -51
  212. package/src/components/ChartAnalytics/components/DownloadMenu/components/Menu.tsx +0 -48
  213. package/src/components/ChartAnalytics/components/DownloadMenu/constants/menu.ts +0 -38
  214. package/src/components/ChartAnalytics/components/DownloadMenu/index.tsx +0 -67
  215. package/src/components/ChartAnalytics/components/DownloadMenu/interfaces/menu.ts +0 -1
  216. package/src/components/ChartAnalytics/hooks/useChart.ts +0 -35
  217. package/src/components/ChartAnalytics/index.tsx +0 -23
  218. package/src/components/ChartAnalytics/models/column.ts +0 -50
  219. package/src/components/ChartAnalytics/models/index.ts +0 -78
  220. package/src/components/ChartAnalytics/models/line.ts +0 -31
  221. package/src/components/ChartAnalytics/models/multi-series.ts +0 -115
  222. package/src/components/ChartAnalytics/models/pie.ts +0 -54
  223. package/src/components/ChartAnalytics/services/export.ts +0 -38
  224. package/src/components/ChartAnalytics/types/props.tsx +0 -48
  225. package/src/components/ChartAnalytics/utils/chart.ts +0 -123
  226. package/src/components/CircularProgressDashboard/CircularProgressIndicator.test.tsx +0 -9
  227. package/src/components/CircularProgressDashboard/index.tsx +0 -35
  228. package/src/components/CircularProgressDashboard/types/props.tsx +0 -17
  229. package/src/components/Map/Map.stories.tsx +0 -339
  230. package/src/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfigModal.stories.tsx +0 -28
  231. package/src/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.stories.tsx +0 -34
  232. package/src/components/Map/components/EarthEngineLayerConfiguration/index.tsx +0 -412
  233. package/src/components/Map/components/MapArea/index.tsx +0 -83
  234. package/src/components/Map/components/MapArea/interfaces/index.ts +0 -39
  235. package/src/components/Map/components/MapControls/components/CustomControl/index.tsx +0 -24
  236. package/src/components/Map/components/MapControls/components/DownloadControl/index.tsx +0 -10
  237. package/src/components/Map/components/MapControls/components/FullscreenControl/index.tsx +0 -7
  238. package/src/components/Map/components/MapControls/index.tsx +0 -24
  239. package/src/components/Map/components/MapLayer/components/BoundaryLayer/hooks/useBoundaryData.ts +0 -7
  240. package/src/components/Map/components/MapLayer/components/BoundaryLayer/index.tsx +0 -55
  241. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/components/EarthEngineLegend.tsx +0 -76
  242. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/constants/index.ts +0 -430
  243. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/hooks/index.ts +0 -34
  244. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/index.tsx +0 -185
  245. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/interfaces/index.ts +0 -56
  246. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/services/api.js +0 -34233
  247. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/services/engine.ts +0 -423
  248. package/src/components/Map/components/MapLayer/components/GoogleEngineLayer/utils/index.ts +0 -105
  249. package/src/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.tsx +0 -17
  250. package/src/components/Map/components/MapLayer/components/LegendArea/index.tsx +0 -168
  251. package/src/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.tsx +0 -44
  252. package/src/components/Map/components/MapLayer/components/PointLayer/hooks/index.ts +0 -8
  253. package/src/components/Map/components/MapLayer/components/PointLayer/index.tsx +0 -36
  254. package/src/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/components/Bubble.tsx +0 -48
  255. package/src/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/components/BubbleLegend/index.tsx +0 -39
  256. package/src/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.tsx +0 -57
  257. package/src/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.tsx +0 -43
  258. package/src/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.tsx +0 -38
  259. package/src/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.tsx +0 -26
  260. package/src/components/Map/components/MapLayer/components/ThematicLayer/hooks/config.ts +0 -10
  261. package/src/components/Map/components/MapLayer/components/ThematicLayer/index.tsx +0 -46
  262. package/src/components/Map/components/MapLayer/index.tsx +0 -32
  263. package/src/components/Map/components/MapLayer/interfaces/index.ts +0 -139
  264. package/src/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.tsx +0 -359
  265. package/src/components/Map/components/MapProvider/components/MapLayerProvider/index.tsx +0 -105
  266. package/src/components/Map/components/MapProvider/index.tsx +0 -93
  267. package/src/components/Map/components/MapUpdater/index.tsx +0 -8
  268. package/src/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfigModal.stories.tsx +0 -28
  269. package/src/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.stories.tsx +0 -34
  270. package/src/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/components/ColorScale/index.tsx +0 -24
  271. package/src/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/index.tsx +0 -50
  272. package/src/components/Map/components/ThematicLayerConfiguration/components/ColorScaleSelect/utils/colors.ts +0 -91
  273. package/src/components/Map/components/ThematicLayerConfiguration/components/CustomLegend/index.tsx +0 -45
  274. package/src/components/Map/components/ThematicLayerConfiguration/components/IndicatorSelectorModal/index.tsx +0 -47
  275. package/src/components/Map/components/ThematicLayerConfiguration/components/LegendSetSelector/index.tsx +0 -57
  276. package/src/components/Map/components/ThematicLayerConfiguration/index.tsx +0 -248
  277. package/src/components/Map/constants/legendSet.ts +0 -19
  278. package/src/components/Map/hooks/map.ts +0 -47
  279. package/src/components/Map/index.tsx +0 -65
  280. package/src/components/Map/interfaces/index.ts +0 -57
  281. package/src/components/Map/state/index.tsx +0 -31
  282. package/src/components/Map/utils/colors.ts +0 -95
  283. package/src/components/Map/utils/helpers.ts +0 -15
  284. package/src/components/Map/utils/map.ts +0 -150
  285. package/src/components/SingleValueContainer/SingleValueContainer.stories.tsx +0 -146
  286. package/src/components/SingleValueContainer/SingleValueContainer.test.tsx +0 -24
  287. package/src/components/SingleValueContainer/components/SingleValueItem/SingleValueItem.tsx +0 -46
  288. package/src/components/SingleValueContainer/components/SingleValueItem/SingleValuePercentage.tsx +0 -12
  289. package/src/components/SingleValueContainer/index.tsx +0 -30
  290. package/src/components/SingleValueContainer/types/props.tsx +0 -16
  291. package/src/dataProviders/map.tsx +0 -24
  292. package/src/index.test.ts +0 -7
  293. package/tsconfig.json +0 -45
@@ -0,0 +1,448 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import { Controller, FormProvider, useForm, useFormContext, useWatch } from "react-hook-form";
3
+ import React, { useEffect, useMemo } from "react";
4
+ import { EARTH_ENGINE_LAYERS, SUPPORTED_EARTH_ENGINE_LAYERS } from "../MapLayer/components/GoogleEngineLayer/constants";
5
+ import { capitalize, filter, find, head, isEmpty } from "lodash";
6
+ import i18n from "@dhis2/d2-i18n";
7
+ import { Button, ButtonStrip, CenteredContent, CircularLoader, Field, InputField, Modal, ModalActions, ModalContent, ModalTitle, MultiSelectField, MultiSelectOption, SingleSelectField, SingleSelectOption } from "@dhis2/ui";
8
+ import { useGoogleEngineToken } from "../MapLayer/components/GoogleEngineLayer/hooks";
9
+ import { EarthEngine } from "../MapLayer/components/GoogleEngineLayer/services/engine";
10
+ import { useQuery } from "react-query";
11
+ import ColorScaleSelect from "../ThematicLayerConfiguration/components/ColorScaleSelect";
12
+ import { defaultClasses, defaultColorScaleName, getColorClasses, getColorPalette, getColorScale } from "../../utils/colors";
13
+ function useType() {
14
+ const type = useWatch({
15
+ name: "type"
16
+ });
17
+ return find(EARTH_ENGINE_LAYERS, ["id", type]);
18
+ }
19
+ function AggregationSelector() {
20
+ var _config$defaultAggreg;
21
+ const config = useType();
22
+ if (!(config !== null && config !== void 0 && config.defaultAggregations)) {
23
+ return null;
24
+ }
25
+ const supportedAggregations = (_config$defaultAggreg = config === null || config === void 0 ? void 0 : config.defaultAggregations) !== null && _config$defaultAggreg !== void 0 ? _config$defaultAggreg : [];
26
+ const maxAggregations = config === null || config === void 0 ? void 0 : config.maxAggregations;
27
+ return /*#__PURE__*/React.createElement(Controller, {
28
+ render: _ref => {
29
+ var _fieldState$error, _head, _fieldState$error2, _field$value;
30
+ let {
31
+ field,
32
+ fieldState
33
+ } = _ref;
34
+ return maxAggregations === 1 ? /*#__PURE__*/React.createElement(SingleSelectField, {
35
+ clearable: true,
36
+ error: Boolean(fieldState.error),
37
+ validationText: fieldState === null || fieldState === void 0 ? void 0 : (_fieldState$error = fieldState.error) === null || _fieldState$error === void 0 ? void 0 : _fieldState$error.message,
38
+ selected: supportedAggregations.includes((_head = head(field.value)) !== null && _head !== void 0 ? _head : "") ? head(field.value) : undefined,
39
+ onChange: _ref2 => {
40
+ let {
41
+ selected
42
+ } = _ref2;
43
+ return field.onChange([selected]);
44
+ },
45
+ label: i18n.t("Aggregation")
46
+ }, supportedAggregations.map(aggregation => /*#__PURE__*/React.createElement(SingleSelectOption, {
47
+ key: `${aggregation}-option`,
48
+ label: capitalize(aggregation),
49
+ value: aggregation
50
+ }))) : /*#__PURE__*/React.createElement(MultiSelectField, {
51
+ error: Boolean(fieldState.error),
52
+ validationText: fieldState === null || fieldState === void 0 ? void 0 : (_fieldState$error2 = fieldState.error) === null || _fieldState$error2 === void 0 ? void 0 : _fieldState$error2.message,
53
+ selected: (_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.filter(value => supportedAggregations === null || supportedAggregations === void 0 ? void 0 : supportedAggregations.includes(value)),
54
+ onChange: _ref3 => {
55
+ let {
56
+ selected
57
+ } = _ref3;
58
+ return field.onChange(selected);
59
+ },
60
+ label: i18n.t("Aggregations")
61
+ }, supportedAggregations.map(aggregation => /*#__PURE__*/React.createElement(MultiSelectOption, {
62
+ key: `${aggregation}-option`,
63
+ label: capitalize(aggregation),
64
+ value: aggregation
65
+ })));
66
+ },
67
+ name: "aggregations"
68
+ });
69
+ }
70
+ function useDatasetInfo(shouldRun, config) {
71
+ const {
72
+ refresh
73
+ } = useGoogleEngineToken();
74
+ async function getInfo() {
75
+ if (config) {
76
+ const tokenData = await refresh();
77
+ await EarthEngine.setToken(tokenData.token, refresh);
78
+ const engine = new EarthEngine({
79
+ options: config
80
+ });
81
+ return engine.getPeriod();
82
+ }
83
+ }
84
+ const {
85
+ data,
86
+ error,
87
+ isLoading
88
+ } = useQuery([config], getInfo);
89
+ const periods = useMemo(() => {
90
+ const features = data === null || data === void 0 ? void 0 : data.features;
91
+ return features === null || features === void 0 ? void 0 : features.map(feature => {
92
+ var _Date;
93
+ return (_Date = new Date(feature === null || feature === void 0 ? void 0 : feature.properties["system:time_start"])) === null || _Date === void 0 ? void 0 : _Date.getFullYear();
94
+ });
95
+ }, [data]);
96
+ return {
97
+ loading: isLoading,
98
+ error: error,
99
+ periods
100
+ };
101
+ }
102
+ function PeriodSelector() {
103
+ var _config$filters;
104
+ const config = useType();
105
+ const {
106
+ setValue,
107
+ getValues
108
+ } = useFormContext();
109
+ const filters = (_config$filters = config === null || config === void 0 ? void 0 : config.filters) !== null && _config$filters !== void 0 ? _config$filters : [];
110
+ const hasPeriodFilter = filters.includes("period");
111
+ const {
112
+ loading,
113
+ error,
114
+ periods
115
+ } = useDatasetInfo(hasPeriodFilter, config);
116
+ const initialPeriod = getValues("filters.period");
117
+ useEffect(() => {
118
+ if (!isEmpty(periods) && !initialPeriod) {
119
+ setValue("filters.period", head(periods));
120
+ }
121
+ }, [periods]);
122
+ if (!hasPeriodFilter) {
123
+ return null;
124
+ }
125
+ if (error) {
126
+ var _error$message;
127
+ return /*#__PURE__*/React.createElement("div", {
128
+ style: {
129
+ minWidth: "100%",
130
+ minHeight: 100
131
+ }
132
+ }, /*#__PURE__*/React.createElement(CenteredContent, null, /*#__PURE__*/React.createElement("p", null, (_error$message = error === null || error === void 0 ? void 0 : error.message) !== null && _error$message !== void 0 ? _error$message : error === null || error === void 0 ? void 0 : error.toString())));
133
+ }
134
+ return /*#__PURE__*/React.createElement(Controller, {
135
+ name: "filters.period",
136
+ rules: {
137
+ required: i18n.t("Period is required")
138
+ },
139
+ render: _ref4 => {
140
+ var _fieldState$error3, _field$value2;
141
+ let {
142
+ field,
143
+ fieldState
144
+ } = _ref4;
145
+ return /*#__PURE__*/React.createElement("div", {
146
+ style: {
147
+ gap: 4
148
+ },
149
+ className: "row align-items-center"
150
+ }, /*#__PURE__*/React.createElement("div", {
151
+ style: {
152
+ flex: 1
153
+ }
154
+ }, /*#__PURE__*/React.createElement(SingleSelectField, {
155
+ helpText: i18n.t("Available periods are set by the source data"),
156
+ loading: loading,
157
+ filterable: true,
158
+ label: i18n.t("Period"),
159
+ required: true,
160
+ error: Boolean(fieldState.error),
161
+ validationText: (_fieldState$error3 = fieldState.error) === null || _fieldState$error3 === void 0 ? void 0 : _fieldState$error3.message,
162
+ onChange: _ref5 => {
163
+ let {
164
+ selected
165
+ } = _ref5;
166
+ return field.onChange(parseInt(selected));
167
+ },
168
+ selected: periods !== null && periods !== void 0 && periods.includes(field.value) ? (_field$value2 = field.value) === null || _field$value2 === void 0 ? void 0 : _field$value2.toString() : undefined
169
+ }, periods === null || periods === void 0 ? void 0 : periods.map(period => /*#__PURE__*/React.createElement(SingleSelectOption, {
170
+ key: `${period}-option`,
171
+ value: period.toString(),
172
+ label: period.toString()
173
+ })))), loading && /*#__PURE__*/React.createElement(CircularLoader, {
174
+ extrasmall: true
175
+ }));
176
+ }
177
+ });
178
+ }
179
+ function ColorConfig() {
180
+ return /*#__PURE__*/React.createElement("div", {
181
+ className: "column gap-16"
182
+ }, /*#__PURE__*/React.createElement("div", {
183
+ className: "row gap-8"
184
+ }, /*#__PURE__*/React.createElement(Controller, {
185
+ render: _ref6 => {
186
+ var _fieldState$error4, _field$value3;
187
+ let {
188
+ field,
189
+ fieldState
190
+ } = _ref6;
191
+ return /*#__PURE__*/React.createElement(InputField, _extends({}, field, {
192
+ error: Boolean(fieldState.error),
193
+ validationText: (_fieldState$error4 = fieldState.error) === null || _fieldState$error4 === void 0 ? void 0 : _fieldState$error4.message,
194
+ value: (_field$value3 = field.value) === null || _field$value3 === void 0 ? void 0 : _field$value3.toString(),
195
+ onChange: _ref7 => {
196
+ let {
197
+ value
198
+ } = _ref7;
199
+ return field.onChange(parseInt(value));
200
+ },
201
+ label: i18n.t("Min"),
202
+ type: "number"
203
+ }));
204
+ },
205
+ name: "params.min"
206
+ }), /*#__PURE__*/React.createElement(Controller, {
207
+ render: _ref8 => {
208
+ var _fieldState$error5, _field$value4;
209
+ let {
210
+ field,
211
+ fieldState
212
+ } = _ref8;
213
+ return /*#__PURE__*/React.createElement(InputField, _extends({}, field, {
214
+ error: Boolean(fieldState.error),
215
+ validationText: (_fieldState$error5 = fieldState.error) === null || _fieldState$error5 === void 0 ? void 0 : _fieldState$error5.message,
216
+ value: (_field$value4 = field.value) === null || _field$value4 === void 0 ? void 0 : _field$value4.toString(),
217
+ onChange: _ref9 => {
218
+ let {
219
+ value
220
+ } = _ref9;
221
+ return field.onChange(parseInt(value));
222
+ },
223
+ label: i18n.t("Max"),
224
+ type: "number"
225
+ }));
226
+ },
227
+ name: "params.max"
228
+ }), /*#__PURE__*/React.createElement(Controller, {
229
+ name: "params.palette",
230
+ render: _ref10 => {
231
+ var _fieldState$error6, _scale$toString;
232
+ let {
233
+ field,
234
+ fieldState
235
+ } = _ref10;
236
+ const palette = field.value;
237
+ const scale = getColorClasses(palette);
238
+ const colorClass = getColorScale(palette !== null && palette !== void 0 ? palette : "");
239
+ const onChange = _ref11 => {
240
+ var _getColorPalette;
241
+ let {
242
+ selected
243
+ } = _ref11;
244
+ const palette = (_getColorPalette = getColorPalette(colorClass, parseInt(selected))) === null || _getColorPalette === void 0 ? void 0 : _getColorPalette.join(",");
245
+ field.onChange(palette);
246
+ };
247
+ return /*#__PURE__*/React.createElement(SingleSelectField, {
248
+ validationText: (_fieldState$error6 = fieldState.error) === null || _fieldState$error6 === void 0 ? void 0 : _fieldState$error6.message,
249
+ error: Boolean(fieldState.error),
250
+ selected: (_scale$toString = scale === null || scale === void 0 ? void 0 : scale.toString()) !== null && _scale$toString !== void 0 ? _scale$toString : defaultClasses.toString(),
251
+ label: i18n.t("Steps"),
252
+ onChange: onChange,
253
+ name: "scale"
254
+ }, [3, 4, 5, 6, 7, 8, 9].map(value => /*#__PURE__*/React.createElement(SingleSelectOption, {
255
+ key: `${value}-classes-option`,
256
+ label: `${value}`,
257
+ value: value === null || value === void 0 ? void 0 : value.toString()
258
+ })));
259
+ }
260
+ })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Controller, {
261
+ name: "params.palette",
262
+ render: _ref12 => {
263
+ var _fieldState$error7;
264
+ let {
265
+ field,
266
+ fieldState
267
+ } = _ref12;
268
+ const palette = field.value;
269
+ const scale = getColorClasses(palette);
270
+ const colorClass = getColorScale(palette !== null && palette !== void 0 ? palette : "");
271
+ const onChange = colorClass => {
272
+ var _getColorPalette2;
273
+ const palette = (_getColorPalette2 = getColorPalette(colorClass, scale)) === null || _getColorPalette2 === void 0 ? void 0 : _getColorPalette2.join(",");
274
+ field.onChange(palette);
275
+ };
276
+ return /*#__PURE__*/React.createElement(Field, {
277
+ error: Boolean(fieldState.error),
278
+ validationText: (_fieldState$error7 = fieldState.error) === null || _fieldState$error7 === void 0 ? void 0 : _fieldState$error7.message,
279
+ label: i18n.t("Colors")
280
+ }, /*#__PURE__*/React.createElement(ColorScaleSelect, {
281
+ count: scale !== null && scale !== void 0 ? scale : defaultClasses,
282
+ colorClass: colorClass !== null && colorClass !== void 0 ? colorClass : defaultColorScaleName,
283
+ width: 300,
284
+ onChange: onChange
285
+ }));
286
+ }
287
+ })));
288
+ }
289
+ function StylesConfig() {
290
+ const config = useType();
291
+ const hasParams = Boolean(config === null || config === void 0 ? void 0 : config.params);
292
+ if (!hasParams) {
293
+ return null;
294
+ }
295
+ return /*#__PURE__*/React.createElement("div", {
296
+ style: {
297
+ minWidth: 200,
298
+ minHeight: 100
299
+ },
300
+ className: "row gap-16"
301
+ }, /*#__PURE__*/React.createElement("div", {
302
+ className: "column"
303
+ }, /*#__PURE__*/React.createElement("p", null, i18n.t("Unit"), ": ", config === null || config === void 0 ? void 0 : config.unit), /*#__PURE__*/React.createElement(ColorConfig, null)));
304
+ }
305
+ function Name() {
306
+ const config = useType();
307
+ const {
308
+ setValue
309
+ } = useFormContext();
310
+ useEffect(() => {
311
+ setValue("name", config === null || config === void 0 ? void 0 : config.name);
312
+ setValue("id", config === null || config === void 0 ? void 0 : config.id);
313
+ }, [config]);
314
+ return /*#__PURE__*/React.createElement(Controller, {
315
+ name: "name",
316
+ rules: {
317
+ required: i18n.t("Name is required")
318
+ },
319
+ render: _ref13 => {
320
+ var _fieldState$error8;
321
+ let {
322
+ field,
323
+ fieldState
324
+ } = _ref13;
325
+ return /*#__PURE__*/React.createElement(InputField, {
326
+ label: i18n.t("Layer name"),
327
+ type: "text",
328
+ required: true,
329
+ error: Boolean(fieldState.error),
330
+ validationText: (_fieldState$error8 = fieldState.error) === null || _fieldState$error8 === void 0 ? void 0 : _fieldState$error8.message,
331
+ onChange: _ref14 => {
332
+ let {
333
+ value
334
+ } = _ref14;
335
+ return field.onChange(value);
336
+ },
337
+ value: field.value
338
+ });
339
+ }
340
+ });
341
+ }
342
+ function TypeField(_ref15) {
343
+ let {
344
+ excluded
345
+ } = _ref15;
346
+ const supportedLayers = filter(EARTH_ENGINE_LAYERS, _ref16 => {
347
+ var _excluded$includes;
348
+ let {
349
+ id
350
+ } = _ref16;
351
+ return SUPPORTED_EARTH_ENGINE_LAYERS.includes(id) && !((_excluded$includes = excluded === null || excluded === void 0 ? void 0 : excluded.includes(id)) !== null && _excluded$includes !== void 0 ? _excluded$includes : false);
352
+ });
353
+ const {
354
+ setValue
355
+ } = useFormContext();
356
+ const setConfigDefaults = selected => {
357
+ const config = find(supportedLayers, ["id", selected]);
358
+ if (!config) return;
359
+ if (config !== null && config !== void 0 && config.defaultAggregations) {
360
+ setValue("aggregations", config === null || config === void 0 ? void 0 : config.defaultAggregations);
361
+ } else {
362
+ setValue("aggregations", undefined);
363
+ }
364
+ if (config !== null && config !== void 0 && config.params) {
365
+ const {
366
+ max,
367
+ min,
368
+ palette
369
+ } = config.params;
370
+ setValue("params.max", max);
371
+ setValue("params.min", min);
372
+ setValue("params.palette", palette);
373
+ } else {
374
+ setValue("params", undefined);
375
+ }
376
+ };
377
+ return /*#__PURE__*/React.createElement(Controller, {
378
+ name: "type",
379
+ rules: {
380
+ required: i18n.t("Type is required")
381
+ },
382
+ render: _ref17 => {
383
+ var _fieldState$error9;
384
+ let {
385
+ field,
386
+ fieldState
387
+ } = _ref17;
388
+ return /*#__PURE__*/React.createElement(SingleSelectField, {
389
+ label: i18n.t("Layer type"),
390
+ required: true,
391
+ error: Boolean(fieldState.error),
392
+ validationText: (_fieldState$error9 = fieldState.error) === null || _fieldState$error9 === void 0 ? void 0 : _fieldState$error9.message,
393
+ onChange: _ref18 => {
394
+ let {
395
+ selected
396
+ } = _ref18;
397
+ setConfigDefaults(selected);
398
+ field.onChange(selected);
399
+ },
400
+ selected: Boolean(find(supportedLayers, "id", field.value)) ? field.value : undefined
401
+ }, supportedLayers === null || supportedLayers === void 0 ? void 0 : supportedLayers.map(layer => /*#__PURE__*/React.createElement(SingleSelectOption, {
402
+ key: `${layer.id}-option`,
403
+ value: layer.id,
404
+ label: layer.name
405
+ })));
406
+ }
407
+ });
408
+ }
409
+ export function EarthEngineLayerConfiguration(_ref19) {
410
+ let {
411
+ form,
412
+ excluded
413
+ } = _ref19;
414
+ return /*#__PURE__*/React.createElement(FormProvider, form, /*#__PURE__*/React.createElement("div", {
415
+ className: "column gap-16"
416
+ }, /*#__PURE__*/React.createElement(TypeField, {
417
+ excluded: excluded
418
+ }), /*#__PURE__*/React.createElement(Name, null), /*#__PURE__*/React.createElement(AggregationSelector, null), /*#__PURE__*/React.createElement(PeriodSelector, null), /*#__PURE__*/React.createElement(StylesConfig, null)));
419
+ }
420
+ export function EarthEngineLayerConfigModal(_ref20) {
421
+ let {
422
+ open,
423
+ exclude,
424
+ config,
425
+ onClose,
426
+ onChange,
427
+ ...props
428
+ } = _ref20;
429
+ const form = useForm({
430
+ defaultValues: config !== null && config !== void 0 ? config : {}
431
+ });
432
+ const onSubmitClick = values => {
433
+ onClose();
434
+ onChange(values);
435
+ };
436
+ return /*#__PURE__*/React.createElement(Modal, _extends({}, props, {
437
+ open: open,
438
+ onClose: onClose
439
+ }), /*#__PURE__*/React.createElement(ModalTitle, null, i18n.t("Configure Earth Engine Layer")), /*#__PURE__*/React.createElement(ModalContent, null, /*#__PURE__*/React.createElement(EarthEngineLayerConfiguration, {
440
+ form: form,
441
+ excluded: exclude
442
+ })), /*#__PURE__*/React.createElement(ModalActions, null, /*#__PURE__*/React.createElement(ButtonStrip, null, /*#__PURE__*/React.createElement(Button, {
443
+ onClick: onClose
444
+ }, i18n.t("Cancel")), /*#__PURE__*/React.createElement(Button, {
445
+ primary: true,
446
+ onClick: form.handleSubmit(onSubmitClick)
447
+ }, i18n.t("Save")))));
448
+ }
@@ -0,0 +1,91 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import { uid } from "@hisptz/dhis2-utils";
3
+ import { isEmpty } from "lodash";
4
+ import React, { forwardRef, useRef } from "react";
5
+ import { LayersControl, MapContainer, TileLayer } from "react-leaflet";
6
+ import { useMapBounds } from "../../hooks/map";
7
+ import MapControl from "../MapControls";
8
+ import MapLayer from "../MapLayer";
9
+ import LegendArea from "../MapLayer/components/LegendArea";
10
+ import { MapLayersProvider } from "../MapProvider/components/MapLayerProvider";
11
+ import { useMapLayers } from "../MapProvider/hooks";
12
+ import MapUpdater from "../MapUpdater";
13
+ function MapLayerArea(_ref) {
14
+ var _base$attribution, _base$url;
15
+ let {
16
+ id,
17
+ base,
18
+ controls,
19
+ legends
20
+ } = _ref;
21
+ const {
22
+ layers
23
+ } = useMapLayers();
24
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TileLayer, {
25
+ id: id,
26
+ attribution: (_base$attribution = base === null || base === void 0 ? void 0 : base.attribution) !== null && _base$attribution !== void 0 ? _base$attribution : '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> | &copy; <a href="https://carto.com/attribution">CARTO</a>',
27
+ url: (_base$url = base === null || base === void 0 ? void 0 : base.url) !== null && _base$url !== void 0 ? _base$url : "https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"
28
+ }), controls === null || controls === void 0 ? void 0 : controls.map(control => /*#__PURE__*/React.createElement(MapControl, _extends({
29
+ mapId: id,
30
+ key: `${control.type}-control`
31
+ }, control))), !isEmpty(layers) && /*#__PURE__*/React.createElement(LayersControl, {
32
+ hideSingleBase: true,
33
+ position: "topleft"
34
+ }, layers.map((layer, index) => /*#__PURE__*/React.createElement(MapLayer, {
35
+ key: layer.id,
36
+ layer: layer,
37
+ index: index
38
+ }))), !isEmpty(layers) && /*#__PURE__*/React.createElement(LegendArea, {
39
+ legends: legends,
40
+ layers: layers,
41
+ position: "topright"
42
+ }));
43
+ }
44
+ const MapArea = (_ref2, ref) => {
45
+ let {
46
+ base,
47
+ controls,
48
+ mapOptions,
49
+ key,
50
+ legends,
51
+ layers
52
+ } = _ref2;
53
+ const {
54
+ center,
55
+ bounds
56
+ } = useMapBounds();
57
+ const {
58
+ current: id
59
+ } = useRef(uid());
60
+ return /*#__PURE__*/React.createElement("div", {
61
+ id: `${id}-"map-container`,
62
+ style: {
63
+ height: "100%",
64
+ width: "100%"
65
+ }
66
+ }, /*#__PURE__*/React.createElement(MapContainer, _extends({
67
+ attributionControl: true,
68
+ ref: ref,
69
+ id: id,
70
+ center: center,
71
+ bounceAtZoomLimits: true,
72
+ bounds: bounds,
73
+ style: {
74
+ height: "100%",
75
+ width: "100%",
76
+ minHeight: 500
77
+ },
78
+ key: key,
79
+ trackResize: true
80
+ }, mapOptions), /*#__PURE__*/React.createElement(MapUpdater, {
81
+ bounds: bounds
82
+ }), /*#__PURE__*/React.createElement(MapLayersProvider, {
83
+ layers: layers
84
+ }, /*#__PURE__*/React.createElement(MapLayerArea, {
85
+ base: base,
86
+ id: id,
87
+ controls: controls,
88
+ legends: legends
89
+ }))));
90
+ };
91
+ export default /*#__PURE__*/forwardRef(MapArea);
@@ -0,0 +1,25 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React from "react";
3
+ const POSITION_CLASSES = {
4
+ bottomleft: "leaflet-bottom leaflet-left",
5
+ bottomright: "leaflet-bottom leaflet-right",
6
+ topleft: "leaflet-top leaflet-left",
7
+ topright: "leaflet-top leaflet-right"
8
+ };
9
+ export function CustomControl(_ref) {
10
+ let {
11
+ children,
12
+ position,
13
+ ...options
14
+ } = _ref;
15
+ const positionClass = position && POSITION_CLASSES[position] || POSITION_CLASSES.topright;
16
+ return /*#__PURE__*/React.createElement("div", _extends({}, options, {
17
+ className: `${positionClass}`
18
+ }), /*#__PURE__*/React.createElement("div", {
19
+ style: {
20
+ overflow: "hidden",
21
+ border: "none"
22
+ },
23
+ className: "leaflet-control leaflet-bar"
24
+ }, children));
25
+ }
@@ -0,0 +1,18 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React from "react";
3
+ import { createControlComponent } from "@react-leaflet/core";
4
+ import L from "leaflet";
5
+ import "leaflet-easyprint";
6
+ const DownloadControlComponent = createControlComponent(props => {
7
+ return L.easyPrint(props);
8
+ });
9
+ export default function DownloadControl(_ref) {
10
+ let {
11
+ options,
12
+ position,
13
+ mapId
14
+ } = _ref;
15
+ return /*#__PURE__*/React.createElement(DownloadControlComponent, _extends({}, options, {
16
+ position
17
+ }));
18
+ }
@@ -0,0 +1,6 @@
1
+ import { createControlComponent } from "@react-leaflet/core";
2
+ import { control } from "leaflet";
3
+ import "leaflet.fullscreen";
4
+ import "leaflet.fullscreen/Control.FullScreen.css";
5
+ const FullscreenControl = createControlComponent(props => control.fullscreen(props));
6
+ export default FullscreenControl;
@@ -0,0 +1,35 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React from "react";
3
+ import { ScaleControl, ZoomControl } from "react-leaflet";
4
+ import FullscreenControl from "./components/FullscreenControl";
5
+ import DownloadControl from "./components/DownloadControl";
6
+ export default function MapControl(_ref) {
7
+ let {
8
+ type,
9
+ options,
10
+ position,
11
+ mapId
12
+ } = _ref;
13
+ switch (type) {
14
+ case "zoom":
15
+ return /*#__PURE__*/React.createElement(ZoomControl, _extends({
16
+ position: position
17
+ }, options));
18
+ case "scale":
19
+ return /*#__PURE__*/React.createElement(ScaleControl, _extends({
20
+ position: position
21
+ }, options));
22
+ case "fullscreen":
23
+ return /*#__PURE__*/React.createElement(FullscreenControl, _extends({
24
+ position: position
25
+ }, options));
26
+ case "print":
27
+ return /*#__PURE__*/React.createElement(DownloadControl, {
28
+ mapId: mapId,
29
+ position: position,
30
+ options: options
31
+ });
32
+ default:
33
+ return null;
34
+ }
35
+ }
@@ -0,0 +1,7 @@
1
+ import { useMapOrganisationUnit } from "../../../../MapProvider/hooks";
2
+ export function useBoundaryData() {
3
+ const {
4
+ orgUnits
5
+ } = useMapOrganisationUnit();
6
+ return orgUnits;
7
+ }
@@ -0,0 +1,41 @@
1
+ import i18n from "@dhis2/d2-i18n";
2
+ import { colors } from "@dhis2/ui";
3
+ import React from "react";
4
+ import { GeoJSON, LayerGroup, LayersControl, Popup, Tooltip } from "react-leaflet";
5
+ import { highlightFeature, resetHighlight } from "../../../../utils/map";
6
+ import { useBoundaryData } from "./hooks/useBoundaryData";
7
+ export const defaultStyle = {
8
+ weight: 1,
9
+ color: colors.grey900,
10
+ fillColor: colors.grey900,
11
+ fillOpacity: 0.0
12
+ };
13
+ export const highlightStyle = {
14
+ weight: 2,
15
+ color: colors.grey900,
16
+ dashArray: "",
17
+ fillOpacity: 0.1
18
+ };
19
+ export default function BoundaryLayer(props) {
20
+ const {
21
+ enabled
22
+ } = props !== null && props !== void 0 ? props : {};
23
+ const orgUnits = useBoundaryData();
24
+ return /*#__PURE__*/React.createElement(LayersControl.Overlay, {
25
+ checked: enabled,
26
+ name: i18n.t("Boundaries")
27
+ }, /*#__PURE__*/React.createElement(LayerGroup, null, orgUnits === null || orgUnits === void 0 ? void 0 : orgUnits.map(area => {
28
+ return /*#__PURE__*/React.createElement(GeoJSON, {
29
+ data: area.geoJSON,
30
+ interactive: true,
31
+ eventHandlers: {
32
+ mouseover: e => highlightFeature(e, highlightStyle),
33
+ mouseout: e => resetHighlight(e, defaultStyle)
34
+ },
35
+ key: `${area.id}-polygon`,
36
+ pathOptions: defaultStyle
37
+ }, /*#__PURE__*/React.createElement(Tooltip, null, area.name), /*#__PURE__*/React.createElement(Popup, {
38
+ minWidth: 80
39
+ }, /*#__PURE__*/React.createElement("h3", null, area.name), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("b", null, "Level: "), area.level)));
40
+ })));
41
+ }