@hisptz/dhis2-analytics 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/components/Map/DHIS2Map.js +1 -0
  2. package/dist/components/Map/DHIS2Map.js.map +1 -1
  3. package/dist/components/Map/DHIS2Map.stories.js +35 -13
  4. package/dist/components/Map/DHIS2Map.stories.js.map +1 -1
  5. package/dist/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.js +17 -7
  6. package/dist/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.js.map +1 -1
  7. package/dist/components/Map/components/MapLayer/components/BoundaryLayer/index.js +8 -2
  8. package/dist/components/Map/components/MapLayer/components/BoundaryLayer/index.js.map +1 -1
  9. package/dist/components/Map/components/MapLayer/components/LegendArea/LegendArea.module.css +0 -2
  10. package/dist/components/Map/components/MapLayer/components/LegendArea/LegendArea.module.css.map +1 -1
  11. package/dist/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.js +16 -4
  12. package/dist/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.js.map +1 -1
  13. package/dist/components/Map/components/MapLayer/components/LegendArea/index.js +18 -7
  14. package/dist/components/Map/components/MapLayer/components/LegendArea/index.js.map +1 -1
  15. package/dist/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.js +16 -3
  16. package/dist/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.js.map +1 -1
  17. package/dist/components/Map/components/MapLayer/components/PointLayer/index.js +16 -1
  18. package/dist/components/Map/components/MapLayer/components/PointLayer/index.js.map +1 -1
  19. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.js +10 -2
  20. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.js.map +1 -1
  21. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js +1 -1
  22. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js.map +1 -1
  23. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.js +10 -2
  24. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.js.map +1 -1
  25. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.js +4 -2
  26. package/dist/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.js.map +1 -1
  27. package/dist/components/Map/components/MapLayer/components/ThematicLayer/index.js +12 -1
  28. package/dist/components/Map/components/MapLayer/components/ThematicLayer/index.js.map +1 -1
  29. package/dist/components/Map/components/MapLayer/interfaces/index.js.map +1 -1
  30. package/dist/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +0 -1
  31. package/dist/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js.map +1 -1
  32. package/dist/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.js +6 -3
  33. package/dist/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.js.map +1 -1
  34. package/dist/components/Map/constants/colors.js +1613 -152
  35. package/dist/components/Map/constants/colors.js.map +1 -1
  36. package/dist/components/Map/utils/colors.js +1 -35
  37. package/dist/components/Map/utils/colors.js.map +1 -1
  38. package/dist/components/Visualization/components/AnalyticsDataProvider/index.js +0 -3
  39. package/dist/components/Visualization/components/AnalyticsDataProvider/index.js.map +1 -1
  40. package/dist/esm/components/Map/DHIS2Map.js +1 -0
  41. package/dist/esm/components/Map/DHIS2Map.js.map +1 -1
  42. package/dist/esm/components/Map/DHIS2Map.stories.js +35 -13
  43. package/dist/esm/components/Map/DHIS2Map.stories.js.map +1 -1
  44. package/dist/esm/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.js +17 -7
  45. package/dist/esm/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.js.map +1 -1
  46. package/dist/esm/components/Map/components/MapLayer/components/BoundaryLayer/index.js +8 -2
  47. package/dist/esm/components/Map/components/MapLayer/components/BoundaryLayer/index.js.map +1 -1
  48. package/dist/esm/components/Map/components/MapLayer/components/LegendArea/LegendArea.module.css +0 -2
  49. package/dist/esm/components/Map/components/MapLayer/components/LegendArea/LegendArea.module.css.map +1 -1
  50. package/dist/esm/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.js +16 -4
  51. package/dist/esm/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.js.map +1 -1
  52. package/dist/esm/components/Map/components/MapLayer/components/LegendArea/index.js +18 -7
  53. package/dist/esm/components/Map/components/MapLayer/components/LegendArea/index.js.map +1 -1
  54. package/dist/esm/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.js +15 -3
  55. package/dist/esm/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.js.map +1 -1
  56. package/dist/esm/components/Map/components/MapLayer/components/PointLayer/index.js +16 -1
  57. package/dist/esm/components/Map/components/MapLayer/components/PointLayer/index.js.map +1 -1
  58. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.js +10 -2
  59. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.js.map +1 -1
  60. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js +1 -1
  61. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.js.map +1 -1
  62. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.js +10 -2
  63. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.js.map +1 -1
  64. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.js +4 -2
  65. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.js.map +1 -1
  66. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/index.js +12 -1
  67. package/dist/esm/components/Map/components/MapLayer/components/ThematicLayer/index.js.map +1 -1
  68. package/dist/esm/components/Map/components/MapLayer/interfaces/index.js.map +1 -1
  69. package/dist/esm/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +0 -1
  70. package/dist/esm/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js.map +1 -1
  71. package/dist/esm/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.js +6 -3
  72. package/dist/esm/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.js.map +1 -1
  73. package/dist/esm/components/Map/constants/colors.js +1613 -153
  74. package/dist/esm/components/Map/constants/colors.js.map +1 -1
  75. package/dist/esm/components/Map/utils/colors.js +3 -36
  76. package/dist/esm/components/Map/utils/colors.js.map +1 -1
  77. package/dist/esm/components/Visualization/components/AnalyticsDataProvider/index.js +0 -3
  78. package/dist/esm/components/Visualization/components/AnalyticsDataProvider/index.js.map +1 -1
  79. package/dist/types/components/Map/DHIS2Map.d.ts.map +1 -1
  80. package/dist/types/components/Map/components/EarthEngineLayerConfiguration/EarthEngineLayerConfiguration.d.ts.map +1 -1
  81. package/dist/types/components/Map/components/MapLayer/components/BoundaryLayer/index.d.ts.map +1 -1
  82. package/dist/types/components/Map/components/MapLayer/components/LegendArea/components/LegendCardHeader/index.d.ts.map +1 -1
  83. package/dist/types/components/Map/components/MapLayer/components/LegendArea/index.d.ts.map +1 -1
  84. package/dist/types/components/Map/components/MapLayer/components/PointLayer/components/PointLegend/index.d.ts.map +1 -1
  85. package/dist/types/components/Map/components/MapLayer/components/PointLayer/index.d.ts.map +1 -1
  86. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.d.ts +12 -2
  87. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/Bubble/index.d.ts.map +1 -1
  88. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.d.ts +11 -6
  89. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.d.ts.map +1 -1
  90. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.d.ts.map +1 -1
  91. package/dist/types/components/Map/components/MapLayer/components/ThematicLayer/index.d.ts.map +1 -1
  92. package/dist/types/components/Map/components/MapLayer/interfaces/index.d.ts +12 -0
  93. package/dist/types/components/Map/components/MapLayer/interfaces/index.d.ts.map +1 -1
  94. package/dist/types/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.d.ts.map +1 -1
  95. package/dist/types/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.d.ts.map +1 -1
  96. package/dist/types/components/Map/constants/colors.d.ts +2 -0
  97. package/dist/types/components/Map/constants/colors.d.ts.map +1 -1
  98. package/dist/types/components/Map/interfaces/index.d.ts +9 -0
  99. package/dist/types/components/Map/interfaces/index.d.ts.map +1 -1
  100. package/dist/types/components/Map/utils/colors.d.ts +2 -2
  101. package/dist/types/components/Map/utils/colors.d.ts.map +1 -1
  102. package/dist/types/components/Visualization/components/AnalyticsDataProvider/index.d.ts.map +1 -1
  103. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.tsx"],"names":[],"mappings":"AAmBE,SACC,KADD;AAnBF,OAAO;AACP,SAAS,eAAe;AAExB,SAAgB,kBAAkB;AAClC,SAAS,sBAAsB;AAK/B,OAAO,sBAAsB;AAEtB,SAAS,WAAW;AAAA,EAC1B;AAAA,EACA;AACD,GAGG;AACF,SACC,qBAAC,SAAI,WAAU,eACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,OAAO,MAAM;AAAA;AAAA,IACxC;AAAA,IACA,oBAAC,SAAI,WAAU,qBAAqB,aAAG,OAAO,UAAU,MAAM,OAAO,QAAQ,IAAG;AAAA,IAChF,oBAAC,SAAI,WAAU,qBAAqB,cAAI,KAAK,KAAI;AAAA,KAClD;AAEF;AAEA,SAAS,iBACR;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAQA,KACC;AACD,SACC,qBAAC,SAAI,WAAU,eAAc,KAC5B;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACA,oBAAC,WAAQ,QAAQ,KAAK;AAAA,IACtB,oBAAC,SAAI,WAAU,oBACb,mBAAS,IAAI,CAAC,WACd;AAAA,MAAC;AAAA;AAAA,QAEA;AAAA,QACA,OAAO,eAAe,QAAQ,IAAI;AAAA;AAAA,MAF7B,GAAG,QAAQ,KAAK;AAAA,IAGtB,CACA,GACF;AAAA,KACD;AAEF;AAEA,IAAO,2BAAQ,WAAW,gBAAgB","sourcesContent":["import \"../../../styles/legends.css\";\nimport { Divider } from \"@dhis2/ui\";\nimport type { Legend } from \"@hisptz/dhis2-utils\";\nimport React, { forwardRef } from \"react\";\nimport { getLegendCount } from \"../../../../../../../utils/map.js\";\nimport {\n\tThematicLayerData,\n\tThematicLayerDataItem,\n} from \"../../../../../interfaces/index.js\";\nimport LegendCardHeader from \"../../../../LegendArea/components/LegendCardHeader/index.js\";\n\nexport function LegendItem({\n\tlegend,\n\tvalue,\n}: {\n\tlegend: { startValue: number; endValue: number; color: string };\n\tvalue: number;\n}) {\n\treturn (\n\t\t<div className=\"legend-item\">\n\t\t\t<div\n\t\t\t\tclassName=\"legend-item-color\"\n\t\t\t\tstyle={{ backgroundColor: legend.color }}\n\t\t\t/>\n\t\t\t<div className=\"legend-item-label\">{`${legend.startValue} - ${legend.endValue}`}</div>\n\t\t\t<div className=\"legend-item-value\">{`(${value})`}</div>\n\t\t</div>\n\t);\n}\n\nfunction ChoroplethLegend(\n\t{\n\t\tdataItem,\n\t\tdata,\n\t\tname,\n\t\tcollapsible,\n\t\tonCollapse,\n\t\tlegends,\n\t}: {\n\t\tdata: ThematicLayerData[];\n\t\tdataItem: ThematicLayerDataItem;\n\t\tname?: string;\n\t\tcollapsible?: boolean;\n\t\tonCollapse?: () => void;\n\t\tlegends: Legend[];\n\t},\n\tref: React.LegacyRef<HTMLDivElement> | undefined,\n) {\n\treturn (\n\t\t<div className=\"legend-card\" ref={ref}>\n\t\t\t<LegendCardHeader\n\t\t\t\ttitle={dataItem.displayName}\n\t\t\t\tcollapsible={collapsible}\n\t\t\t\tonCollapse={onCollapse}\n\t\t\t/>\n\t\t\t<Divider margin={\"0\"} />\n\t\t\t<div className=\"legend-list pt-8\">\n\t\t\t\t{legends?.map((legend: any) => (\n\t\t\t\t\t<LegendItem\n\t\t\t\t\t\tkey={`${legend?.color}-legend-list`}\n\t\t\t\t\t\tlegend={legend}\n\t\t\t\t\t\tvalue={getLegendCount(legend, data)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport default forwardRef(ChoroplethLegend);\n"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/components/ChoroplethLegend.tsx"],"names":[],"mappings":"AAmBE,SACC,KADD;AAnBF,OAAO;AACP,SAAS,eAAe;AAExB,SAAgB,kBAAkB;AAClC,SAAS,sBAAsB;AAK/B,OAAO,sBAAsB;AAEtB,SAAS,WAAW;AAAA,EAC1B;AAAA,EACA;AACD,GAGG;AACF,SACC,qBAAC,SAAI,WAAU,eACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,OAAO,MAAM;AAAA;AAAA,IACxC;AAAA,IACA,oBAAC,SAAI,WAAU,qBAAqB,aAAG,OAAO,UAAU,MAAM,OAAO,QAAQ,IAAG;AAAA,IAChF,oBAAC,SAAI,WAAU,qBAAqB,cAAI,KAAK,KAAI;AAAA,KAClD;AAEF;AAEA,SAAS,iBACR;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAQA,KACC;AACD,SACC,qBAAC,SAAI,WAAU,eAAc,KAC5B;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA;AAAA,IACD;AAAA,IACA,oBAAC,WAAQ,QAAQ,KAAK;AAAA,IACtB,oBAAC,SAAI,OAAO,EAAE,YAAY,EAAE,GAAG,WAAU,eACvC,mBAAS,IAAI,CAAC,WACd;AAAA,MAAC;AAAA;AAAA,QAEA;AAAA,QACA,OAAO,eAAe,QAAQ,IAAI;AAAA;AAAA,MAF7B,GAAG,QAAQ,KAAK;AAAA,IAGtB,CACA,GACF;AAAA,KACD;AAEF;AAEA,IAAO,2BAAQ,WAAW,gBAAgB","sourcesContent":["import \"../../../styles/legends.css\";\nimport { Divider } from \"@dhis2/ui\";\nimport type { Legend } from \"@hisptz/dhis2-utils\";\nimport React, { forwardRef } from \"react\";\nimport { getLegendCount } from \"../../../../../../../utils/map.js\";\nimport {\n\tThematicLayerData,\n\tThematicLayerDataItem,\n} from \"../../../../../interfaces/index.js\";\nimport LegendCardHeader from \"../../../../LegendArea/components/LegendCardHeader/index.js\";\n\nexport function LegendItem({\n\tlegend,\n\tvalue,\n}: {\n\tlegend: { startValue: number; endValue: number; color: string };\n\tvalue: number;\n}) {\n\treturn (\n\t\t<div className=\"legend-item\">\n\t\t\t<div\n\t\t\t\tclassName=\"legend-item-color\"\n\t\t\t\tstyle={{ backgroundColor: legend.color }}\n\t\t\t/>\n\t\t\t<div className=\"legend-item-label\">{`${legend.startValue} - ${legend.endValue}`}</div>\n\t\t\t<div className=\"legend-item-value\">{`(${value})`}</div>\n\t\t</div>\n\t);\n}\n\nfunction ChoroplethLegend(\n\t{\n\t\tdataItem,\n\t\tdata,\n\t\tname,\n\t\tcollapsible,\n\t\tonCollapse,\n\t\tlegends,\n\t}: {\n\t\tdata: ThematicLayerData[];\n\t\tdataItem: ThematicLayerDataItem;\n\t\tname?: string;\n\t\tcollapsible?: boolean;\n\t\tonCollapse?: () => void;\n\t\tlegends: Legend[];\n\t},\n\tref: React.LegacyRef<HTMLDivElement> | undefined,\n) {\n\treturn (\n\t\t<div className=\"legend-card\" ref={ref}>\n\t\t\t<LegendCardHeader\n\t\t\t\ttitle={dataItem.displayName}\n\t\t\t\tcollapsible={collapsible}\n\t\t\t\tonCollapse={onCollapse}\n\t\t\t/>\n\t\t\t<Divider margin={\"0\"} />\n\t\t\t<div style={{ paddingTop: 8 }} className=\"legend-list\">\n\t\t\t\t{legends?.map((legend: any) => (\n\t\t\t\t\t<LegendItem\n\t\t\t\t\t\tkey={`${legend?.color}-legend-list`}\n\t\t\t\t\t\tlegend={legend}\n\t\t\t\t\t\tvalue={getLegendCount(legend, data)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport default forwardRef(ChoroplethLegend);\n"]}
@@ -12,7 +12,9 @@ const highlightStyle = {
12
12
  };
13
13
  function Choropleth({
14
14
  data,
15
- legends
15
+ legends,
16
+ customEventHandlers,
17
+ onLayerClick
16
18
  }) {
17
19
  const { orgUnit } = data;
18
20
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
@@ -21,7 +23,13 @@ function Choropleth({
21
23
  data: orgUnit.geoJSON,
22
24
  eventHandlers: {
23
25
  mouseover: (e) => highlightFeature(e, highlightStyle),
24
- mouseout: (e) => resetHighlight(e, defaultStyle)
26
+ mouseout: (e) => resetHighlight(e, defaultStyle),
27
+ ...customEventHandlers ?? {},
28
+ mousedown: (e) => {
29
+ if (onLayerClick) {
30
+ onLayerClick(e, data);
31
+ }
32
+ }
25
33
  },
26
34
  pathOptions: {
27
35
  fillColor: getColorFromLegendSet(legends, data.data),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.tsx"],"names":[],"mappings":"AAiCE,mBAeE,WAfF;AAjCF,SAAS,cAAc;AAGvB,SAAS,eAAe;AAExB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEP,OAAO,mBAAmB;AAE1B,MAAM,eAAe;AAAA,EACpB,QAAQ;AACT;AACA,MAAM,iBAAiB;AAAA,EACtB,QAAQ;AACT;AAEe,SAAR,WAA4B;AAAA,EAClC;AAAA,EACA;AACD,GAOG;AACF,QAAM,EAAE,QAAQ,IAAI;AACpB,SACC,gCACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,eAAe;AAAA,QACd,WAAW,CAAC,MAAM,iBAAiB,GAAG,cAAc;AAAA,QACpD,UAAU,CAAC,MAAM,eAAe,GAAG,YAAY;AAAA,MAChD;AAAA,MACA,aAAa;AAAA,QACZ,WAAW,sBAAsB,SAAS,KAAK,IAAI;AAAA,QACnD,aAAa;AAAA,QACb,OAAO,OAAO;AAAA,QACd,QAAQ;AAAA,MACT;AAAA,MAGA,8BAAC,iBAAc,MAAY;AAAA;AAAA,IAFtB,GAAG,KAAK,SAAS,EAAE;AAAA,EAGzB,GACD;AAEF","sourcesContent":["import { colors } from \"@dhis2/ui\";\nimport type { Legend } from \"@hisptz/dhis2-utils\";\nimport React from \"react\";\nimport { GeoJSON } from \"react-leaflet\";\nimport { MapOrgUnit } from \"../../../../../../interfaces/index.js\";\nimport {\n\tgetColorFromLegendSet,\n\thighlightFeature,\n\tresetHighlight,\n} from \"../../../../../../utils/map.js\";\nimport { ThematicLayerDataItem } from \"../../../../interfaces/index.js\";\nimport CustomTooltip from \"../CustomTooltip/index.js\";\n\nconst defaultStyle = {\n\tweight: 1,\n};\nconst highlightStyle = {\n\tweight: 2,\n};\n\nexport default function Choropleth({\n\tdata,\n\tlegends,\n}: {\n\tdata: {\n\t\torgUnit: MapOrgUnit;\n\t\tdata?: number;\n\t\tdataItem: ThematicLayerDataItem;\n\t};\n\tlegends: Legend[];\n}) {\n\tconst { orgUnit } = data;\n\treturn (\n\t\t<>\n\t\t\t<GeoJSON\n\t\t\t\tdata={orgUnit.geoJSON}\n\t\t\t\teventHandlers={{\n\t\t\t\t\tmouseover: (e) => highlightFeature(e, highlightStyle),\n\t\t\t\t\tmouseout: (e) => resetHighlight(e, defaultStyle),\n\t\t\t\t}}\n\t\t\t\tpathOptions={{\n\t\t\t\t\tfillColor: getColorFromLegendSet(legends, data.data),\n\t\t\t\t\tfillOpacity: 1,\n\t\t\t\t\tcolor: colors.grey900,\n\t\t\t\t\tweight: 1,\n\t\t\t\t}}\n\t\t\t\tkey={`${data.dataItem.id}-layer`}\n\t\t\t>\n\t\t\t\t<CustomTooltip data={data} />\n\t\t\t</GeoJSON>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/components/Choropleth/index.tsx"],"names":[],"mappings":"AAwCE,mBAqBE,WArBF;AAxCF,SAAS,cAAc;AAGvB,SAAS,eAAe;AAExB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEP,OAAO,mBAAmB;AAG1B,MAAM,eAAe;AAAA,EACpB,QAAQ;AACT;AACA,MAAM,iBAAiB;AAAA,EACtB,QAAQ;AACT;AAQe,SAAR,WAA4B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAKG;AACF,QAAM,EAAE,QAAQ,IAAI;AACpB,SACC,gCACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,eAAe;AAAA,QACd,WAAW,CAAC,MAAM,iBAAiB,GAAG,cAAc;AAAA,QACpD,UAAU,CAAC,MAAM,eAAe,GAAG,YAAY;AAAA,QAC/C,GAAI,uBAAuB,CAAC;AAAA,QAC5B,WAAW,CAAC,MAAM;AACjB,cAAI,cAAc;AACjB,yBAAa,GAAG,IAAI;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAAA,MACA,aAAa;AAAA,QACZ,WAAW,sBAAsB,SAAS,KAAK,IAAI;AAAA,QACnD,aAAa;AAAA,QACb,OAAO,OAAO;AAAA,QACd,QAAQ;AAAA,MACT;AAAA,MAGA,8BAAC,iBAAc,MAAY;AAAA;AAAA,IAFtB,GAAG,KAAK,SAAS,EAAE;AAAA,EAGzB,GACD;AAEF","sourcesContent":["import { colors } from \"@dhis2/ui\";\nimport type { Legend } from \"@hisptz/dhis2-utils\";\nimport React from \"react\";\nimport { GeoJSON } from \"react-leaflet\";\nimport { MapOrgUnit } from \"../../../../../../interfaces/index.js\";\nimport {\n\tgetColorFromLegendSet,\n\thighlightFeature,\n\tresetHighlight,\n} from \"../../../../../../utils/map.js\";\nimport { ThematicLayerDataItem } from \"../../../../interfaces/index.js\";\nimport CustomTooltip from \"../CustomTooltip/index.js\";\nimport type { LeafletEventHandlerFnMap, LeafletMouseEvent } from \"leaflet\";\n\nconst defaultStyle = {\n\tweight: 1,\n};\nconst highlightStyle = {\n\tweight: 2,\n};\n\ninterface LayerData {\n\torgUnit: MapOrgUnit;\n\tdata?: number;\n\tdataItem: ThematicLayerDataItem;\n}\n\nexport default function Choropleth({\n\tdata,\n\tlegends,\n\tcustomEventHandlers,\n\tonLayerClick,\n}: {\n\tdata: LayerData;\n\tlegends: Legend[];\n\tcustomEventHandlers?: LeafletEventHandlerFnMap;\n\tonLayerClick?: (e: LeafletMouseEvent, data: LayerData) => void;\n}) {\n\tconst { orgUnit } = data;\n\treturn (\n\t\t<>\n\t\t\t<GeoJSON\n\t\t\t\tdata={orgUnit.geoJSON}\n\t\t\t\teventHandlers={{\n\t\t\t\t\tmouseover: (e) => highlightFeature(e, highlightStyle),\n\t\t\t\t\tmouseout: (e) => resetHighlight(e, defaultStyle),\n\t\t\t\t\t...(customEventHandlers ?? {}),\n\t\t\t\t\tmousedown: (e) => {\n\t\t\t\t\t\tif (onLayerClick) {\n\t\t\t\t\t\t\tonLayerClick(e, data);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tpathOptions={{\n\t\t\t\t\tfillColor: getColorFromLegendSet(legends, data.data),\n\t\t\t\t\tfillOpacity: 1,\n\t\t\t\t\tcolor: colors.grey900,\n\t\t\t\t\tweight: 1,\n\t\t\t\t}}\n\t\t\t\tkey={`${data.dataItem.id}-layer`}\n\t\t\t>\n\t\t\t\t<CustomTooltip data={data} />\n\t\t\t</GeoJSON>\n\t\t</>\n\t);\n}\n"]}
@@ -8,6 +8,8 @@ function CustomTooltip({
8
8
  }) {
9
9
  const { dataItem, orgUnit, data } = dataObject ?? {};
10
10
  const { periods } = useMapPeriods() ?? {};
11
+ const formatter = Intl.NumberFormat(navigator.language, {}).format;
12
+ const formattedData = formatter(data);
11
13
  return /* @__PURE__ */ jsxs(
12
14
  Pane,
13
15
  {
@@ -17,7 +19,7 @@ function CustomTooltip({
17
19
  /* @__PURE__ */ jsxs(Tooltip, { children: [
18
20
  orgUnit?.name,
19
21
  " (",
20
- data,
22
+ formattedData,
21
23
  ")"
22
24
  ] }),
23
25
  /* @__PURE__ */ jsxs(Popup, { minWidth: 80, children: [
@@ -27,7 +29,7 @@ function CustomTooltip({
27
29
  /* @__PURE__ */ jsxs("div", { children: [
28
30
  i18n.t("Value"),
29
31
  ": ",
30
- data
32
+ formattedData
31
33
  ] })
32
34
  ] })
33
35
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.tsx"],"names":[],"mappings":"AAmBG,SAIC,KAJD;AAnBH,OAAO,UAAU;AAEjB,SAAS,MAAM,OAAO,eAAe;AACrC,SAAS,qBAAqB;AAGf,SAAR,cAA+B;AAAA,EACrC,MAAM;AACP,GAEG;AACF,QAAM,EAAE,UAAU,SAAS,KAAK,IAAI,cAAc,CAAC;AACnD,QAAM,EAAE,QAAQ,IAAI,cAAc,KAAK,CAAC;AAExC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,GAAG,SAAS,WAAW,IAAI,QAAQ,EAAE;AAAA,MAC3C,MAAK;AAAA,MAEL;AAAA,6BAAC,WACC;AAAA,mBAAS;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,WACxB;AAAA,QACA,qBAAC,SAAM,UAAU,IAChB;AAAA,8BAAC,QAAG,OAAO,EAAE,QAAQ,EAAE,GAAI,mBAAS,MAAK;AAAA,UACzC,oBAAC,SAAK,oBAAU,aAAY;AAAA,UAC5B,oBAAC,SAAK,mBAAS,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,GAAG,GAAE;AAAA,UACtD,qBAAC,SACC;AAAA,iBAAK,EAAE,OAAO;AAAA,YAAE;AAAA,YAAG;AAAA,aACrB;AAAA,WACD;AAAA;AAAA;AAAA,EACD;AAEF","sourcesContent":["import i18n from \"@dhis2/d2-i18n\";\nimport React from \"react\";\nimport { Pane, Popup, Tooltip } from \"react-leaflet\";\nimport { useMapPeriods } from \"../../../../../MapProvider/hooks/index.js\";\nimport { ThematicLayerData } from \"../../../../interfaces/index.js\";\n\nexport default function CustomTooltip({\n\tdata: dataObject,\n}: {\n\tdata: ThematicLayerData;\n}) {\n\tconst { dataItem, orgUnit, data } = dataObject ?? {};\n\tconst { periods } = useMapPeriods() ?? {};\n\n\treturn (\n\t\t<Pane\n\t\t\tname={`${dataItem.displayName}-${orgUnit.id}-popup-pane`}\n\t\t\tpane=\"popupPane\"\n\t\t>\n\t\t\t<Tooltip>\n\t\t\t\t{orgUnit?.name} ({data})\n\t\t\t</Tooltip>\n\t\t\t<Popup minWidth={80}>\n\t\t\t\t<h3 style={{ margin: 0 }}>{orgUnit?.name}</h3>\n\t\t\t\t<div>{dataItem?.displayName}</div>\n\t\t\t\t<div>{periods?.map((period) => period.name).join(\",\")}</div>\n\t\t\t\t<div>\n\t\t\t\t\t{i18n.t(\"Value\")}: {data}\n\t\t\t\t</div>\n\t\t\t</Popup>\n\t\t</Pane>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/components/CustomTooltip/index.tsx"],"names":[],"mappings":"AAuBG,SAIC,KAJD;AAvBH,OAAO,UAAU;AAEjB,SAAS,MAAM,OAAO,eAAe;AACrC,SAAS,qBAAqB;AAGf,SAAR,cAA+B;AAAA,EACrC,MAAM;AACP,GAEG;AACF,QAAM,EAAE,UAAU,SAAS,KAAK,IAAI,cAAc,CAAC;AACnD,QAAM,EAAE,QAAQ,IAAI,cAAc,KAAK,CAAC;AAExC,QAAM,YAAY,KAAK,aAAa,UAAU,UAAU,CAAC,CAAC,EAAE;AAE5D,QAAM,gBAAgB,UAAU,IAAc;AAE9C,SACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAM,GAAG,SAAS,WAAW,IAAI,QAAQ,EAAE;AAAA,MAC3C,MAAK;AAAA,MAEL;AAAA,6BAAC,WACC;AAAA,mBAAS;AAAA,UAAK;AAAA,UAAG;AAAA,UAAc;AAAA,WACjC;AAAA,QACA,qBAAC,SAAM,UAAU,IAChB;AAAA,8BAAC,QAAG,OAAO,EAAE,QAAQ,EAAE,GAAI,mBAAS,MAAK;AAAA,UACzC,oBAAC,SAAK,oBAAU,aAAY;AAAA,UAC5B,oBAAC,SAAK,mBAAS,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,GAAG,GAAE;AAAA,UACtD,qBAAC,SACC;AAAA,iBAAK,EAAE,OAAO;AAAA,YAAE;AAAA,YAAG;AAAA,aACrB;AAAA,WACD;AAAA;AAAA;AAAA,EACD;AAEF","sourcesContent":["import i18n from \"@dhis2/d2-i18n\";\nimport React from \"react\";\nimport { Pane, Popup, Tooltip } from \"react-leaflet\";\nimport { useMapPeriods } from \"../../../../../MapProvider/hooks/index.js\";\nimport { ThematicLayerData } from \"../../../../interfaces/index.js\";\n\nexport default function CustomTooltip({\n\tdata: dataObject,\n}: {\n\tdata: ThematicLayerData;\n}) {\n\tconst { dataItem, orgUnit, data } = dataObject ?? {};\n\tconst { periods } = useMapPeriods() ?? {};\n\n\tconst formatter = Intl.NumberFormat(navigator.language, {}).format;\n\n\tconst formattedData = formatter(data as number);\n\n\treturn (\n\t\t<Pane\n\t\t\tname={`${dataItem.displayName}-${orgUnit.id}-popup-pane`}\n\t\t\tpane=\"popupPane\"\n\t\t>\n\t\t\t<Tooltip>\n\t\t\t\t{orgUnit?.name} ({formattedData})\n\t\t\t</Tooltip>\n\t\t\t<Popup minWidth={80}>\n\t\t\t\t<h3 style={{ margin: 0 }}>{orgUnit?.name}</h3>\n\t\t\t\t<div>{dataItem?.displayName}</div>\n\t\t\t\t<div>{periods?.map((period) => period.name).join(\",\")}</div>\n\t\t\t\t<div>\n\t\t\t\t\t{i18n.t(\"Value\")}: {formattedData}\n\t\t\t\t</div>\n\t\t\t</Popup>\n\t\t</Pane>\n\t);\n}\n"]}
@@ -13,7 +13,16 @@ function ThematicLayer({
13
13
  if (!layer) {
14
14
  return null;
15
15
  }
16
- const { type, dataItem, name, data, enabled, legends } = layer ?? {};
16
+ const {
17
+ type,
18
+ dataItem,
19
+ name,
20
+ data,
21
+ enabled,
22
+ legends,
23
+ customEventHandlers,
24
+ onLayerClick
25
+ } = layer ?? {};
17
26
  const uniqueName = name ?? dataItem.displayName;
18
27
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(LayersControl.Overlay, { checked: enabled, name: uniqueName, children: /* @__PURE__ */ jsx(
19
28
  Pane,
@@ -27,6 +36,8 @@ function ThematicLayer({
27
36
  (datum) => type === "choropleth" ? /* @__PURE__ */ jsx(
28
37
  Choropleth,
29
38
  {
39
+ customEventHandlers,
40
+ onLayerClick,
30
41
  legends: legends ?? [],
31
42
  data: datum
32
43
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/index.tsx"],"names":[],"mappings":"AAwBE,mBAWM,KAHH,YARH;AAxBF,SAAS,YAAY;AAErB,SAAS,YAAY,eAAe,YAAY;AAEhD,OAAO,YAAY;AACnB,OAAO,gBAAgB;AACvB,OAAO,sBAAsB;AAEd,SAAR,cAA+B;AAAA,EACrC;AAAA,EACA;AACD,GAGG;AACF,QAAM,QAAQ,iBAAiB,OAAO;AAEtC,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,MAAM,UAAU,MAAM,MAAM,SAAS,QAAQ,IAAI,SAAS,CAAC;AACnE,QAAM,aAAa,QAAQ,SAAS;AACpC,SACC,gCACC,8BAAC,cAAc,SAAd,EAAsB,SAAS,SAAS,MAAM,YAC9C;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,QACN,QAAQ,SAAS,WAAW,MAAM,OAAO,QAAQ;AAAA,MAClD;AAAA,MACA,MAAM;AAAA,MAEN,+BAAC,cACC;AAAA,cAAM;AAAA,UAAI,CAAC,UACX,SAAS,eACR;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,WAAW,CAAC;AAAA,cACrB,MAAM;AAAA;AAAA,YACD,GAAG,OAAO,UAAU,EAAE,IAAI,OAAO,SAAS,EAAE;AAAA,UAClD,IACG;AAAA,QACL;AAAA,QACC,MAAM;AAAA,UAAI,CAAC,UACX,SAAS,WACR;AAAA,YAAC;AAAA;AAAA,cACA,QACE,OAA6B;AAAA,cAE/B,SAAS,WAAW,CAAC;AAAA,cACrB,aAAa,KAAK,IAAI,GAAG,QAAQ;AAAA,cACjC,MAAM;AAAA;AAAA,YACD,GAAG,OAAO,UAAU,EAAE,IAAI,OAAO,SAAS,EAAE;AAAA,UAClD,IACG;AAAA,QACL;AAAA,SACD;AAAA;AAAA,EACD,GACD,GACD;AAEF","sourcesContent":["import { last } from \"lodash\";\nimport React from \"react\";\nimport { LayerGroup, LayersControl, Pane } from \"react-leaflet\";\nimport { CustomBubbleLayer } from \"../../interfaces/index.js\";\nimport Bubble from \"./components/Bubble/index.js\";\nimport Choropleth from \"./components/Choropleth/index.js\";\nimport useThematicLayer from \"./hooks/config.js\";\n\nexport default function ThematicLayer({\n\tlayerId,\n\tindex,\n}: {\n\tlayerId: string;\n\tindex: number;\n}) {\n\tconst layer = useThematicLayer(layerId);\n\n\tif (!layer) {\n\t\treturn null;\n\t}\n\n\tconst { type, dataItem, name, data, enabled, legends } = layer ?? {};\n\tconst uniqueName = name ?? dataItem.displayName;\n\treturn (\n\t\t<>\n\t\t\t<LayersControl.Overlay checked={enabled} name={uniqueName}>\n\t\t\t\t<Pane\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tzIndex: type === \"bubble\" ? 500 : 500 - (index + 1),\n\t\t\t\t\t}}\n\t\t\t\t\tname={uniqueName}\n\t\t\t\t>\n\t\t\t\t\t<LayerGroup>\n\t\t\t\t\t\t{data?.map((datum) =>\n\t\t\t\t\t\t\ttype === \"choropleth\" ? (\n\t\t\t\t\t\t\t\t<Choropleth\n\t\t\t\t\t\t\t\t\tlegends={legends ?? []}\n\t\t\t\t\t\t\t\t\tdata={datum}\n\t\t\t\t\t\t\t\t\tkey={`${datum?.dataItem?.id}-${datum?.orgUnit?.id}-layer`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{data?.map((datum) =>\n\t\t\t\t\t\t\ttype === \"bubble\" ? (\n\t\t\t\t\t\t\t\t<Bubble\n\t\t\t\t\t\t\t\t\tradius={\n\t\t\t\t\t\t\t\t\t\t(layer as CustomBubbleLayer)?.radius\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlegends={legends ?? []}\n\t\t\t\t\t\t\t\t\thighestData={last(data)?.data ?? 1}\n\t\t\t\t\t\t\t\t\tdata={datum}\n\t\t\t\t\t\t\t\t\tkey={`${datum?.dataItem?.id}-${datum?.orgUnit?.id}-layer`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</LayerGroup>\n\t\t\t\t</Pane>\n\t\t\t</LayersControl.Overlay>\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../../src/components/Map/components/MapLayer/components/ThematicLayer/index.tsx"],"names":[],"mappings":"AAiCE,mBAWM,KAHH,YARH;AAjCF,SAAS,YAAY;AAErB,SAAS,YAAY,eAAe,YAAY;AAEhD,OAAO,YAAY;AACnB,OAAO,gBAAgB;AACvB,OAAO,sBAAsB;AAEd,SAAR,cAA+B;AAAA,EACrC;AAAA,EACA;AACD,GAGG;AACF,QAAM,QAAQ,iBAAiB,OAAO;AAEtC,MAAI,CAAC,OAAO;AACX,WAAO;AAAA,EACR;AAEA,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,SAAS,CAAC;AACd,QAAM,aAAa,QAAQ,SAAS;AACpC,SACC,gCACC,8BAAC,cAAc,SAAd,EAAsB,SAAS,SAAS,MAAM,YAC9C;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,QACN,QAAQ,SAAS,WAAW,MAAM,OAAO,QAAQ;AAAA,MAClD;AAAA,MACA,MAAM;AAAA,MAEN,+BAAC,cACC;AAAA,cAAM;AAAA,UAAI,CAAC,UACX,SAAS,eACR;AAAA,YAAC;AAAA;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,WAAW,CAAC;AAAA,cACrB,MAAM;AAAA;AAAA,YACD,GAAG,OAAO,UAAU,EAAE,IAAI,OAAO,SAAS,EAAE;AAAA,UAClD,IACG;AAAA,QACL;AAAA,QACC,MAAM;AAAA,UAAI,CAAC,UACX,SAAS,WACR;AAAA,YAAC;AAAA;AAAA,cACA,QACE,OAA6B;AAAA,cAE/B,SAAS,WAAW,CAAC;AAAA,cACrB,aAAa,KAAK,IAAI,GAAG,QAAQ;AAAA,cACjC,MAAM;AAAA;AAAA,YACD,GAAG,OAAO,UAAU,EAAE,IAAI,OAAO,SAAS,EAAE;AAAA,UAClD,IACG;AAAA,QACL;AAAA,SACD;AAAA;AAAA,EACD,GACD,GACD;AAEF","sourcesContent":["import { last } from \"lodash\";\nimport React from \"react\";\nimport { LayerGroup, LayersControl, Pane } from \"react-leaflet\";\nimport { CustomBubbleLayer } from \"../../interfaces/index.js\";\nimport Bubble from \"./components/Bubble/index.js\";\nimport Choropleth from \"./components/Choropleth/index.js\";\nimport useThematicLayer from \"./hooks/config.js\";\n\nexport default function ThematicLayer({\n\tlayerId,\n\tindex,\n}: {\n\tlayerId: string;\n\tindex: number;\n}) {\n\tconst layer = useThematicLayer(layerId);\n\n\tif (!layer) {\n\t\treturn null;\n\t}\n\n\tconst {\n\t\ttype,\n\t\tdataItem,\n\t\tname,\n\t\tdata,\n\t\tenabled,\n\t\tlegends,\n\t\tcustomEventHandlers,\n\t\tonLayerClick,\n\t} = layer ?? {};\n\tconst uniqueName = name ?? dataItem.displayName;\n\treturn (\n\t\t<>\n\t\t\t<LayersControl.Overlay checked={enabled} name={uniqueName}>\n\t\t\t\t<Pane\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tzIndex: type === \"bubble\" ? 500 : 500 - (index + 1),\n\t\t\t\t\t}}\n\t\t\t\t\tname={uniqueName}\n\t\t\t\t>\n\t\t\t\t\t<LayerGroup>\n\t\t\t\t\t\t{data?.map((datum) =>\n\t\t\t\t\t\t\ttype === \"choropleth\" ? (\n\t\t\t\t\t\t\t\t<Choropleth\n\t\t\t\t\t\t\t\t\tcustomEventHandlers={customEventHandlers}\n\t\t\t\t\t\t\t\t\tonLayerClick={onLayerClick}\n\t\t\t\t\t\t\t\t\tlegends={legends ?? []}\n\t\t\t\t\t\t\t\t\tdata={datum}\n\t\t\t\t\t\t\t\t\tkey={`${datum?.dataItem?.id}-${datum?.orgUnit?.id}-layer`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{data?.map((datum) =>\n\t\t\t\t\t\t\ttype === \"bubble\" ? (\n\t\t\t\t\t\t\t\t<Bubble\n\t\t\t\t\t\t\t\t\tradius={\n\t\t\t\t\t\t\t\t\t\t(layer as CustomBubbleLayer)?.radius\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlegends={legends ?? []}\n\t\t\t\t\t\t\t\t\thighestData={last(data)?.data ?? 1}\n\t\t\t\t\t\t\t\t\tdata={datum}\n\t\t\t\t\t\t\t\t\tkey={`${datum?.dataItem?.id}-${datum?.orgUnit?.id}-layer`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</LayerGroup>\n\t\t\t\t</Pane>\n\t\t\t</LayersControl.Overlay>\n\t\t</>\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/Map/components/MapLayer/interfaces/index.ts"],"names":[],"mappings":"AASO,MAAM,gCAAgC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD","sourcesContent":["import type { Legend } from \"@hisptz/dhis2-utils\";\nimport { MapOrgUnit, PointOrgUnit } from \"../../../interfaces/index.js\";\nimport { LegendColorScale } from \"../../../utils/colors.js\";\nimport { EarthEngineOptions } from \"../components/GoogleEngineLayer/interfaces/index.js\";\nimport { EarthEngine } from \"../components/GoogleEngineLayer/services/engine.js\";\n\nexport type BoundaryLayerType = \"basemap\" | \"overlay\";\nexport type ThematicLayerType = \"choropleth\" | \"bubble\";\n\nexport const SUPPORTED_EARTH_ENGINE_LAYERS = [\n\t\"population\",\n\t\"footprints\",\n\t\"elevation\",\n\t\"landCover\",\n];\n\nexport type GoogleEngineLayerType =\n\t| \"population\"\n\t| \"footprints\"\n\t| \"elevation\"\n\t| \"landCover\";\n\nexport interface CustomBoundaryLayer extends CustomMapLayer {\n\tid: string;\n\ttype: BoundaryLayerType;\n\tenabled: boolean;\n}\n\nexport interface EarthEngineLayerConfig extends CustomMapLayer {\n\ttype: GoogleEngineLayerType;\n\taggregations?: string[];\n\tname?: string;\n\tfilters?: {\n\t\tperiod: string;\n\t};\n\tparams?: {\n\t\tmin: number;\n\t\tmax: number;\n\t\tpalette?: string;\n\t};\n}\n\nexport interface CustomGoogleEngineLayer extends CustomMapLayer {\n\ttype: GoogleEngineLayerType;\n\toptions: EarthEngineOptions;\n\taggregations?: string[];\n\tname: string;\n\turl: string;\n\tengine?: EarthEngine;\n}\n\nexport interface CustomPointLayer extends CustomMapLayer {\n\tid: string;\n\ttype: \"point\";\n\tlabel?: string;\n\tlevel?: string | number;\n\tgroup?: string;\n\tstyle?: {\n\t\ticon?: string;\n\t\tgroupSet?: string;\n\t\torgUnitGroups?: Array<{ name: string; symbol: string }>;\n\t};\n\tpoints?: Array<PointOrgUnit>;\n}\n\nexport type DataItemType = \"dataElement\" | \"indicator\" | \"programIndicator\";\n\nexport interface ThematicLayerDataItem {\n\tid: string;\n\tdisplayName: string;\n\ttype: DataItemType;\n\tlegendSet?: string;\n\tlegendConfig?: {\n\t\tcolorClass: LegendColorScale;\n\t\tscale: number;\n\t};\n}\n\nexport interface ThematicLayerControl {\n\tposition: \"topleft\" | \"topright\" | \"bottomleft\" | \"bottomright\";\n\tenabled: boolean;\n}\n\nexport interface ThematicLayerData {\n\torgUnit: MapOrgUnit;\n\tdata?: number;\n\tdataItem: ThematicLayerDataItem;\n}\n\nexport interface ThematicLayerRawData {\n\torgUnit: string;\n\tdata?: number;\n\tdataItem: string;\n}\n\nexport interface CustomChoroplethLayer extends CustomMapLayer {\n\tenabled: boolean;\n\tname?: string;\n\tdata: ThematicLayerData[];\n\tdataItem: ThematicLayerDataItem;\n\ttype: \"choropleth\";\n\tcontrol?: ThematicLayerControl;\n\tlegends?: Legend[];\n}\n\nexport interface CustomBubbleLayer extends CustomMapLayer {\n\tenabled: boolean;\n\tname?: string;\n\tdata: ThematicLayerData[];\n\tdataItem: ThematicLayerDataItem;\n\ttype: \"bubble\";\n\tcontrol?: ThematicLayerControl;\n\tlegends?: Legend[];\n\tradius?: {\n\t\tmin: number;\n\t\tmax: number;\n\t};\n}\n\nexport type CustomThematicLayer = CustomBubbleLayer | CustomChoroplethLayer;\n\nexport interface ThematicLayerConfig {\n\tid: string;\n\tdata?: ThematicLayerRawData[];\n\tenabled: boolean;\n\tname?: string;\n\tdataItem: ThematicLayerDataItem;\n\ttype: ThematicLayerType;\n\tcontrol?: ThematicLayerControl;\n\tradius?: {\n\t\tmin: number;\n\t\tmax: number;\n\t};\n}\n\nexport interface CustomMapLayer {\n\tid: string;\n\ttype: string;\n\tenabled: boolean;\n}\n\nexport type MapLayer =\n\t| CustomBoundaryLayer\n\t| ThematicLayerConfig\n\t| CustomPointLayer\n\t| CustomGoogleEngineLayer;\n\nexport interface MapLayerProps {\n\tenabled: boolean;\n\ttype: \"boundary\" | \"thematic\" | \"external\" | \"point\" | \"earthEngine\";\n\tlayer: MapLayer;\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/Map/components/MapLayer/interfaces/index.ts"],"names":[],"mappings":"AAUO,MAAM,gCAAgC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD","sourcesContent":["import type { Legend } from \"@hisptz/dhis2-utils\";\nimport { MapOrgUnit, PointOrgUnit } from \"../../../interfaces/index.js\";\nimport { LegendColorScale } from \"../../../utils/colors.js\";\nimport { EarthEngineOptions } from \"../components/GoogleEngineLayer/interfaces/index.js\";\nimport { EarthEngine } from \"../components/GoogleEngineLayer/services/engine.js\";\nimport type { LeafletEventHandlerFnMap, LeafletMouseEvent } from \"leaflet\";\n\nexport type BoundaryLayerType = \"basemap\" | \"overlay\";\nexport type ThematicLayerType = \"choropleth\" | \"bubble\";\n\nexport const SUPPORTED_EARTH_ENGINE_LAYERS = [\n\t\"population\",\n\t\"footprints\",\n\t\"elevation\",\n\t\"landCover\",\n];\n\nexport type GoogleEngineLayerType =\n\t| \"population\"\n\t| \"footprints\"\n\t| \"elevation\"\n\t| \"landCover\";\n\nexport interface CustomBoundaryLayer extends CustomMapLayer {\n\tid: string;\n\ttype: BoundaryLayerType;\n\tenabled: boolean;\n}\n\nexport interface EarthEngineLayerConfig extends CustomMapLayer {\n\ttype: GoogleEngineLayerType;\n\taggregations?: string[];\n\tname?: string;\n\tfilters?: {\n\t\tperiod: string;\n\t};\n\tparams?: {\n\t\tmin: number;\n\t\tmax: number;\n\t\tpalette?: string;\n\t};\n}\n\nexport interface CustomGoogleEngineLayer extends CustomMapLayer {\n\ttype: GoogleEngineLayerType;\n\toptions: EarthEngineOptions;\n\taggregations?: string[];\n\tname: string;\n\turl: string;\n\tengine?: EarthEngine;\n}\n\nexport interface CustomPointLayer extends CustomMapLayer {\n\tid: string;\n\ttype: \"point\";\n\tlabel?: string;\n\tlevel?: string | number;\n\tgroup?: string;\n\tstyle?: {\n\t\ticon?: string;\n\t\tgroupSet?: string;\n\t\torgUnitGroups?: Array<{ name: string; symbol: string }>;\n\t};\n\tpoints?: Array<PointOrgUnit>;\n}\n\nexport type DataItemType = \"dataElement\" | \"indicator\" | \"programIndicator\";\n\nexport interface ThematicLayerDataItem {\n\tid: string;\n\tdisplayName: string;\n\ttype: DataItemType;\n\tlegendSet?: string;\n\tlegendConfig?: {\n\t\tcolorClass: LegendColorScale;\n\t\tscale: number;\n\t};\n}\n\nexport interface ThematicLayerControl {\n\tposition: \"topleft\" | \"topright\" | \"bottomleft\" | \"bottomright\";\n\tenabled: boolean;\n}\n\nexport interface ThematicLayerData {\n\torgUnit: MapOrgUnit;\n\tdata?: number;\n\tdataItem: ThematicLayerDataItem;\n}\n\nexport interface ThematicLayerRawData {\n\torgUnit: string;\n\tdata?: number;\n\tdataItem: string;\n}\n\nexport interface CustomChoroplethLayer extends CustomMapLayer {\n\tenabled: boolean;\n\tname?: string;\n\tdata: ThematicLayerData[];\n\tdataItem: ThematicLayerDataItem;\n\ttype: \"choropleth\";\n\tcontrol?: ThematicLayerControl;\n\tlegends?: Legend[];\n\tcustomEventHandlers?: LeafletEventHandlerFnMap;\n}\n\nexport interface CustomBubbleLayer extends CustomMapLayer {\n\tenabled: boolean;\n\tname?: string;\n\tdata: ThematicLayerData[];\n\tdataItem: ThematicLayerDataItem;\n\ttype: \"bubble\";\n\tcontrol?: ThematicLayerControl;\n\tlegends?: Legend[];\n\tradius?: {\n\t\tmin: number;\n\t\tmax: number;\n\t};\n}\n\nexport type CustomThematicLayer = CustomBubbleLayer | CustomChoroplethLayer;\n\ninterface LayerData {\n\torgUnit: MapOrgUnit;\n\tdata?: number;\n\tdataItem?: ThematicLayerDataItem;\n}\n\nexport interface ThematicLayerConfig {\n\tid: string;\n\tdata?: ThematicLayerRawData[];\n\tenabled: boolean;\n\tname?: string;\n\tdataItem: ThematicLayerDataItem;\n\ttype: ThematicLayerType;\n\tcontrol?: ThematicLayerControl;\n\tcustomEventHandlers?: LeafletEventHandlerFnMap;\n\tonLayerClick?: (e: LeafletMouseEvent, data: LayerData) => void;\n\tradius?: {\n\t\tmin: number;\n\t\tmax: number;\n\t};\n}\n\nexport interface CustomMapLayer {\n\tid: string;\n\ttype: string;\n\tenabled: boolean;\n\tcustomEventHandlers?: LeafletEventHandlerFnMap;\n\tonLayerClick?: (e: LeafletMouseEvent, data: LayerData) => void;\n}\n\nexport type MapLayer =\n\t| CustomBoundaryLayer\n\t| ThematicLayerConfig\n\t| CustomPointLayer\n\t| CustomGoogleEngineLayer;\n\nexport interface MapLayerProps {\n\tenabled: boolean;\n\ttype: \"boundary\" | \"thematic\" | \"external\" | \"point\" | \"earthEngine\";\n\tlayer: MapLayer;\n}\n"]}
@@ -184,7 +184,6 @@ function useThematicLayers() {
184
184
  );
185
185
  const dx = layersWithoutData.map((layer) => layer.dataItem.id);
186
186
  let sanitizedLayersWithData = [];
187
- console.log({ layersWithoutData });
188
187
  if (!isEmpty(dx)) {
189
188
  const data = await engine.query(analyticsQuery, {
190
189
  variables: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../src/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.tsx"],"names":["pe","ou","row","ouGroup"],"mappings":"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","sourcesContent":["import {\n\tcompact,\n\tdifferenceBy,\n\tfind,\n\thead,\n\tisEmpty,\n\tlast,\n\tsortBy,\n} from \"lodash\";\nimport { useMapOrganisationUnit, useMapPeriods } from \"../../../hooks/index.js\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n\tgenerateLegends,\n\tgetOrgUnitsSelection,\n\tsanitizeDate,\n\tsanitizeOrgUnits,\n\ttoGeoJson,\n} from \"../../../../../utils/map.js\";\nimport { useDataEngine } from \"@dhis2/app-runtime\";\nimport {\n\tCustomGoogleEngineLayer,\n\tCustomPointLayer,\n\tCustomThematicLayer,\n\tEarthEngineLayerConfig,\n\tThematicLayerConfig,\n} from \"../../../../MapLayer/interfaces\";\nimport { MapOrgUnit, PointOrgUnit } from \"../../../../../interfaces/index.js\";\nimport { asyncify, map } from \"async-es\";\nimport { LegendSet } from \"@hisptz/dhis2-utils\";\nimport {\n\tdefaultClasses,\n\tdefaultColorScaleName,\n} from \"../../../../../utils/colors.js\";\nimport { useGoogleEngineToken } from \"../../../../MapLayer/components/GoogleEngineLayer/hooks/index.js\";\nimport { useBoundaryData } from \"../../../../MapLayer/components/BoundaryLayer/hooks/useBoundaryData.js\";\nimport { EarthEngine } from \"../../../../MapLayer/components/GoogleEngineLayer/services/engine.js\";\nimport { EARTH_ENGINE_LAYERS } from \"../../../../MapLayer/components/GoogleEngineLayer/constants/index.js\";\nimport { EarthEngineOptions } from \"../../../../MapLayer/components/GoogleEngineLayer/interfaces/index.js\";\n\nconst analyticsQuery = {\n\tanalytics: {\n\t\tresource: \"analytics\",\n\t\tparams: ({ ou, pe, dx, startDate, endDate }: any) => {\n\t\t\tconst peDimension = !isEmpty(pe)\n\t\t\t\t? `pe:${pe?.join(\";\")}`\n\t\t\t\t: undefined;\n\t\t\tconst ouDimension = !isEmpty(ou)\n\t\t\t\t? `ou:${ou?.join(\";\")}`\n\t\t\t\t: undefined;\n\t\t\tconst dxDimension = !isEmpty(dx)\n\t\t\t\t? `dx:${dx?.join(\";\")}`\n\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tdimension: compact([dxDimension, peDimension, ouDimension]),\n\t\t\t\tstartDate,\n\t\t\t\tendDate,\n\t\t\t\tdisplayProperty: \"NAME\",\n\t\t\t};\n\t\t},\n\t},\n};\nconst query = {\n\tlayer: {\n\t\tresource: \"geoFeatures\",\n\t\tparams: ({ ous }: any) => ({\n\t\t\tou: `ou:${ous.join(\";\")}`,\n\t\t}),\n\t},\n\tanalytics: {\n\t\tresource: \"analytics\",\n\t\tparams: ({ ous }: any) => ({\n\t\t\tdimension: [\n\t\t\t\t`ou:${ous.join(\";\")}`,\n\t\t\t\t`pe:${new Date().getFullYear()}`,\n\t\t\t],\n\t\t\tskipData: true,\n\t\t\thierarchyMeta: true,\n\t\t}),\n\t},\n};\nconst groupSetQuery = {\n\tgroupSet: {\n\t\tresource: \"organisationUnitGroupSets\",\n\t\tid: ({ groupSet }: any) => groupSet,\n\t\tparams: {\n\t\t\tfields: [\n\t\t\t\t\"organisationUnitGroups[name,color,symbol,organisationUnits[id]]\",\n\t\t\t],\n\t\t},\n\t},\n};\nconst legendSetsQuery = {\n\tlegendSets: {\n\t\tresource: \"legendSets\",\n\t\tid: ({ id }: any) => id,\n\t\tparams: {\n\t\t\tfields: [\n\t\t\t\t\"id\",\n\t\t\t\t\"displayName\",\n\t\t\t\t\"legends[id,code,startValue,endValue,color]\",\n\t\t\t],\n\t\t},\n\t},\n};\n\nexport function useThematicLayers(): any {\n\tconst engine = useDataEngine();\n\tconst [loading, setLoading] = useState(false);\n\tconst { orgUnits, orgUnitSelection } = useMapOrganisationUnit();\n\tconst { periods, range } = useMapPeriods() ?? {};\n\tconst ou = useMemo(\n\t\t() => getOrgUnitsSelection(orgUnitSelection),\n\t\t[orgUnitSelection],\n\t);\n\tconst pe = useMemo(() => periods?.map((pe: any) => pe.id), [periods]);\n\n\tconst { startDate, endDate } = useMemo(() => {\n\t\tif (!range) {\n\t\t\treturn {\n\t\t\t\tstartDate: undefined,\n\t\t\t\tendDate: undefined,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tstartDate: sanitizeDate(range.start.toDateString()),\n\t\t\tendDate: sanitizeDate(range.end.toDateString()),\n\t\t};\n\t}, [range]);\n\tconst sanitizeData = (data: any, layer: ThematicLayerConfig) => {\n\t\tif (data) {\n\t\t\tconst { analytics } = data as any;\n\t\t\tconst rows = analytics?.rows;\n\t\t\tconst ouIndex = analytics.headers.findIndex(\n\t\t\t\t(header: any) => header.name === \"ou\",\n\t\t\t);\n\t\t\tconst dxIndex = analytics.headers.findIndex(\n\t\t\t\t(header: any) => header.name === \"dx\",\n\t\t\t);\n\t\t\tconst valueIndex = analytics.headers.findIndex(\n\t\t\t\t(header: any) => header.name === \"value\",\n\t\t\t);\n\n\t\t\tif (!isEmpty(rows)) {\n\t\t\t\treturn sortBy(\n\t\t\t\t\torgUnits?.map((ou: MapOrgUnit) => {\n\t\t\t\t\t\tconst row = rows.find(\n\t\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\t\trow[ouIndex] === ou.id &&\n\t\t\t\t\t\t\t\trow[dxIndex] === layer.dataItem.id,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\torgUnit: ou,\n\t\t\t\t\t\t\tdata: row ? parseFloat(row[valueIndex]) : undefined,\n\t\t\t\t\t\t\tdataItem: {\n\t\t\t\t\t\t\t\t...layer.dataItem,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t\t\t[\"data\"],\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t\treturn [];\n\t};\n\n\tconst sanitizeLegends = async (\n\t\tlayers: CustomThematicLayer[],\n\t): Promise<CustomThematicLayer[]> => {\n\t\treturn (await map(\n\t\t\tlayers,\n\t\t\tasyncify(async (layer: CustomThematicLayer) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst legends = [];\n\t\t\t\t\tif (layer.dataItem.legendSet) {\n\t\t\t\t\t\tconst legendSetData = await engine.query(\n\t\t\t\t\t\t\tlegendSetsQuery,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvariables: {\n\t\t\t\t\t\t\t\t\tid: layer.dataItem.legendSet,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst legendSet: LegendSet =\n\t\t\t\t\t\t\tlegendSetData?.legendSets as LegendSet;\n\t\t\t\t\t\tif (legendSet) {\n\t\t\t\t\t\t\tlegends.push(...legendSet.legends);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst { scale, colorClass } = layer.dataItem\n\t\t\t\t\t\t\t.legendConfig ?? {\n\t\t\t\t\t\t\tscale: defaultClasses,\n\t\t\t\t\t\t\tcolorClass: defaultColorScaleName,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst sortedData = sortBy(\n\t\t\t\t\t\t\tlayer.data.filter((datum) => !!datum.data),\n\t\t\t\t\t\t\t\"data\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst autoLegends = generateLegends(\n\t\t\t\t\t\t\tlast(sortedData)?.data ?? 0,\n\t\t\t\t\t\t\thead(sortedData)?.data ?? 0,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassesCount: scale,\n\t\t\t\t\t\t\t\tcolorClass,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlegends.push(...autoLegends);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...layer,\n\t\t\t\t\t\tlegends,\n\t\t\t\t\t};\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn layer;\n\t\t\t\t}\n\t\t\t}),\n\t\t)) as CustomThematicLayer[];\n\t};\n\n\tconst sanitizeLayers = async (\n\t\tlayers: ThematicLayerConfig[],\n\t): Promise<CustomThematicLayer[]> => {\n\t\ttry {\n\t\t\tsetLoading(true);\n\t\t\tconst layersWithoutData = layers?.filter((layer) => !layer.data);\n\t\t\tconst layersWithData = differenceBy(\n\t\t\t\tlayers,\n\t\t\t\tlayersWithoutData,\n\t\t\t\t\"id\",\n\t\t\t);\n\t\t\tconst dx = layersWithoutData.map((layer) => layer.dataItem.id);\n\t\t\tlet sanitizedLayersWithData: any = [];\n\n\t\t\tconsole.log({ layersWithoutData });\n\n\t\t\tif (!isEmpty(dx)) {\n\t\t\t\tconst data = await engine.query(analyticsQuery, {\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tdx,\n\t\t\t\t\t\tou,\n\t\t\t\t\t\tpe,\n\t\t\t\t\t\tstartDate,\n\t\t\t\t\t\tendDate,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tsanitizedLayersWithData = layersWithoutData.map((layer) => ({\n\t\t\t\t\t...layer,\n\t\t\t\t\tname:\n\t\t\t\t\t\tlayer?.name ?? layer?.dataItem?.displayName ?? layer.id,\n\t\t\t\t\tdata: sanitizeData(data, layer),\n\t\t\t\t}));\n\t\t\t}\n\t\t\tconst sanitizedLayersWithOrgUnits = layersWithData.map((layer) => ({\n\t\t\t\t...layer,\n\t\t\t\tdata: layer.data?.map((datum) => ({\n\t\t\t\t\t...datum,\n\t\t\t\t\torgUnit: find(orgUnits, [\n\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\tdatum.orgUnit,\n\t\t\t\t\t]) as MapOrgUnit,\n\t\t\t\t\tdataItem: layer.dataItem,\n\t\t\t\t\tname:\n\t\t\t\t\t\tlayer?.name ?? layer?.dataItem?.displayName ?? layer.id,\n\t\t\t\t})),\n\t\t\t}));\n\t\t\tsetLoading(false);\n\t\t\treturn await sanitizeLegends([\n\t\t\t\t...sanitizedLayersWithData,\n\t\t\t\t...sanitizedLayersWithOrgUnits,\n\t\t\t]);\n\t\t} catch (e: any) {\n\t\t\tconsole.error(`Error getting thematic layers`, e.details);\n\t\t\tsetLoading(false);\n\t\t\treturn [];\n\t\t}\n\t};\n\n\treturn {\n\t\tsanitizeLayers,\n\t\tloading,\n\t};\n}\n\nexport function usePointLayer() {\n\tconst engine = useDataEngine();\n\tconst { orgUnitSelection } = useMapOrganisationUnit();\n\tconst [loading, setLoading] = useState(false);\n\n\tconst sanitizePointData = useCallback(\n\t\t(orgUnitData: any, groupSetData: any): PointOrgUnit[] => {\n\t\t\tconst { analytics, layer } = (orgUnitData as any) ?? {};\n\t\t\tconst rawOrgUnits = sanitizeOrgUnits(analytics?.metaData);\n\t\t\tconst geoJSONObjects = toGeoJson(\n\t\t\t\tlayer?.filter((bound: any) => bound.co),\n\t\t\t);\n\t\t\treturn compact(\n\t\t\t\trawOrgUnits.map((orgUnit: any) => {\n\t\t\t\t\tconst geoJSONObject: any = geoJSONObjects?.find(\n\t\t\t\t\t\t(geoJSON: any) => geoJSON.properties.id === orgUnit.id,\n\t\t\t\t\t);\n\t\t\t\t\tconst orgUnitGroups: any =\n\t\t\t\t\t\t(groupSetData?.groupSet as any)\n\t\t\t\t\t\t\t?.organisationUnitGroups ?? [];\n\t\t\t\t\tconst ouGroup = find(\n\t\t\t\t\t\torgUnitGroups,\n\t\t\t\t\t\t(ouGroup) =>\n\t\t\t\t\t\t\t!!find(ouGroup?.organisationUnits ?? [], [\n\t\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\t\torgUnit.id,\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!geoJSONObject ||\n\t\t\t\t\t\tgeoJSONObject.properties.type !== \"Point\"\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...orgUnit,\n\t\t\t\t\t\tgeoJSON: geoJSONObject,\n\t\t\t\t\t\tlevel: geoJSONObject.properties.level,\n\t\t\t\t\t\ticon: {\n\t\t\t\t\t\t\ttype: \"groupIcon\",\n\t\t\t\t\t\t\ticon: ouGroup?.symbol,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\t[],\n\t);\n\n\tconst sanitizeLayer = useCallback(\n\t\tasync (\n\t\t\tlayer: CustomPointLayer,\n\t\t): Promise<CustomPointLayer | undefined> => {\n\t\t\ttry {\n\t\t\t\tif (!layer.level && !layer.group) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetLoading(true);\n\t\t\t\tconst level = layer.level ? `LEVEL-${layer.level}` : undefined;\n\t\t\t\tconst group = layer.group\n\t\t\t\t\t? `OU_GROUP-${layer.group}`\n\t\t\t\t\t: undefined;\n\t\t\t\tconst ous = [\n\t\t\t\t\t...getOrgUnitsSelection(orgUnitSelection),\n\t\t\t\t\tlevel,\n\t\t\t\t\tgroup,\n\t\t\t\t];\n\n\t\t\t\tconst pointData = await engine.query(query, {\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tous,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst groupSetData = await engine.query(groupSetQuery, {\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tgroupSet: layer.style?.groupSet,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst sanitizedOrgUnitData = sanitizePointData(\n\t\t\t\t\tpointData,\n\t\t\t\t\tgroupSetData,\n\t\t\t\t);\n\n\t\t\t\tconst orgUnitGroups =\n\t\t\t\t\t(groupSetData?.groupSet as any)?.organisationUnitGroups ??\n\t\t\t\t\t[];\n\n\t\t\t\tconst sanitizedOrgUnitGroups = orgUnitGroups.map(\n\t\t\t\t\t(ouGroup: any) => ({\n\t\t\t\t\t\t...ouGroup,\n\t\t\t\t\t\torganisationUnits: undefined,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tsetLoading(false);\n\t\t\t\treturn {\n\t\t\t\t\t...layer,\n\t\t\t\t\tpoints: sanitizedOrgUnitData,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...layer.style,\n\t\t\t\t\t\torgUnitGroups: sanitizedOrgUnitGroups,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} catch (e: any) {\n\t\t\t\tsetLoading(false);\n\t\t\t\tconsole.error(`Error getting point layer`, e.details);\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\treturn {\n\t\tloading,\n\t\tsanitizeLayer,\n\t};\n}\n\nexport function useGoogleEngineLayers() {\n\tconst { refresh } = useGoogleEngineToken();\n\tconst orgUnits = useBoundaryData();\n\n\tasync function getImageUrl(\n\t\tearthEngine: EarthEngine,\n\t\t{ filters }: EarthEngineLayerConfig,\n\t): Promise<string | undefined> {\n\t\tif (earthEngine.initialized) {\n\t\t\ttry {\n\t\t\t\tearthEngine.setOrgUnits(orgUnits ?? []);\n\t\t\t\tconst period = filters?.period;\n\t\t\t\tif (period) {\n\t\t\t\t\tearthEngine.setPeriod(period);\n\t\t\t\t}\n\t\t\t\treturn earthEngine.url();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst sanitizeLayers = useCallback(\n\t\tasync (\n\t\t\tlayers: EarthEngineLayerConfig[],\n\t\t): Promise<CustomGoogleEngineLayer[]> => {\n\t\t\tif (isEmpty(layers)) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { token } = await refresh();\n\t\t\t\tif (!token) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Google token not available in this instance`,\n\t\t\t\t\t);\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tawait EarthEngine.setToken(token, refresh);\n\t\t\t\treturn map(\n\t\t\t\t\tlayers,\n\t\t\t\t\tasyncify(async (layer: EarthEngineLayerConfig) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst defaultOptions: any =\n\t\t\t\t\t\t\t\tfind(EARTH_ENGINE_LAYERS, [\"id\", layer.type]) ??\n\t\t\t\t\t\t\t\t{};\n\t\t\t\t\t\t\tconst options: EarthEngineOptions = {\n\t\t\t\t\t\t\t\t...defaultOptions,\n\t\t\t\t\t\t\t\taggregations:\n\t\t\t\t\t\t\t\t\tlayer.aggregations ??\n\t\t\t\t\t\t\t\t\tdefaultOptions?.aggregations,\n\t\t\t\t\t\t\t\tparams: layer.params ?? defaultOptions?.params,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst updatedLayer = {\n\t\t\t\t\t\t\t\t...layer,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst earthEngine = new EarthEngine({ options });\n\t\t\t\t\t\t\tconst url = await getImageUrl(\n\t\t\t\t\t\t\t\tearthEngine,\n\t\t\t\t\t\t\t\tupdatedLayer,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...updatedLayer,\n\t\t\t\t\t\t\t\tengine: earthEngine,\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch (e: any) {\n\t\t\t\tconsole.error(`Error getting thematic layers`, e.details);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t[refresh],\n\t);\n\n\treturn {\n\t\tsanitizeLayers,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../../../../src/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.tsx"],"names":["pe","ou","row","ouGroup"],"mappings":"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","sourcesContent":["import {\n\tcompact,\n\tdifferenceBy,\n\tfind,\n\thead,\n\tisEmpty,\n\tlast,\n\tsortBy,\n} from \"lodash\";\nimport { useMapOrganisationUnit, useMapPeriods } from \"../../../hooks/index.js\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n\tgenerateLegends,\n\tgetOrgUnitsSelection,\n\tsanitizeDate,\n\tsanitizeOrgUnits,\n\ttoGeoJson,\n} from \"../../../../../utils/map.js\";\nimport { useDataEngine } from \"@dhis2/app-runtime\";\nimport {\n\tCustomGoogleEngineLayer,\n\tCustomPointLayer,\n\tCustomThematicLayer,\n\tEarthEngineLayerConfig,\n\tThematicLayerConfig,\n} from \"../../../../MapLayer/interfaces\";\nimport { MapOrgUnit, PointOrgUnit } from \"../../../../../interfaces/index.js\";\nimport { asyncify, map } from \"async-es\";\nimport { LegendSet } from \"@hisptz/dhis2-utils\";\nimport {\n\tdefaultClasses,\n\tdefaultColorScaleName,\n} from \"../../../../../utils/colors.js\";\nimport { useGoogleEngineToken } from \"../../../../MapLayer/components/GoogleEngineLayer/hooks/index.js\";\nimport { useBoundaryData } from \"../../../../MapLayer/components/BoundaryLayer/hooks/useBoundaryData.js\";\nimport { EarthEngine } from \"../../../../MapLayer/components/GoogleEngineLayer/services/engine.js\";\nimport { EARTH_ENGINE_LAYERS } from \"../../../../MapLayer/components/GoogleEngineLayer/constants/index.js\";\nimport { EarthEngineOptions } from \"../../../../MapLayer/components/GoogleEngineLayer/interfaces/index.js\";\n\nconst analyticsQuery = {\n\tanalytics: {\n\t\tresource: \"analytics\",\n\t\tparams: ({ ou, pe, dx, startDate, endDate }: any) => {\n\t\t\tconst peDimension = !isEmpty(pe)\n\t\t\t\t? `pe:${pe?.join(\";\")}`\n\t\t\t\t: undefined;\n\t\t\tconst ouDimension = !isEmpty(ou)\n\t\t\t\t? `ou:${ou?.join(\";\")}`\n\t\t\t\t: undefined;\n\t\t\tconst dxDimension = !isEmpty(dx)\n\t\t\t\t? `dx:${dx?.join(\";\")}`\n\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tdimension: compact([dxDimension, peDimension, ouDimension]),\n\t\t\t\tstartDate,\n\t\t\t\tendDate,\n\t\t\t\tdisplayProperty: \"NAME\",\n\t\t\t};\n\t\t},\n\t},\n};\nconst query = {\n\tlayer: {\n\t\tresource: \"geoFeatures\",\n\t\tparams: ({ ous }: any) => ({\n\t\t\tou: `ou:${ous.join(\";\")}`,\n\t\t}),\n\t},\n\tanalytics: {\n\t\tresource: \"analytics\",\n\t\tparams: ({ ous }: any) => ({\n\t\t\tdimension: [\n\t\t\t\t`ou:${ous.join(\";\")}`,\n\t\t\t\t`pe:${new Date().getFullYear()}`,\n\t\t\t],\n\t\t\tskipData: true,\n\t\t\thierarchyMeta: true,\n\t\t}),\n\t},\n};\nconst groupSetQuery = {\n\tgroupSet: {\n\t\tresource: \"organisationUnitGroupSets\",\n\t\tid: ({ groupSet }: any) => groupSet,\n\t\tparams: {\n\t\t\tfields: [\n\t\t\t\t\"organisationUnitGroups[name,color,symbol,organisationUnits[id]]\",\n\t\t\t],\n\t\t},\n\t},\n};\nconst legendSetsQuery = {\n\tlegendSets: {\n\t\tresource: \"legendSets\",\n\t\tid: ({ id }: any) => id,\n\t\tparams: {\n\t\t\tfields: [\n\t\t\t\t\"id\",\n\t\t\t\t\"displayName\",\n\t\t\t\t\"legends[id,code,startValue,endValue,color]\",\n\t\t\t],\n\t\t},\n\t},\n};\n\nexport function useThematicLayers(): any {\n\tconst engine = useDataEngine();\n\tconst [loading, setLoading] = useState(false);\n\tconst { orgUnits, orgUnitSelection } = useMapOrganisationUnit();\n\tconst { periods, range } = useMapPeriods() ?? {};\n\tconst ou = useMemo(\n\t\t() => getOrgUnitsSelection(orgUnitSelection),\n\t\t[orgUnitSelection],\n\t);\n\tconst pe = useMemo(() => periods?.map((pe: any) => pe.id), [periods]);\n\n\tconst { startDate, endDate } = useMemo(() => {\n\t\tif (!range) {\n\t\t\treturn {\n\t\t\t\tstartDate: undefined,\n\t\t\t\tendDate: undefined,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tstartDate: sanitizeDate(range.start.toDateString()),\n\t\t\tendDate: sanitizeDate(range.end.toDateString()),\n\t\t};\n\t}, [range]);\n\tconst sanitizeData = (data: any, layer: ThematicLayerConfig) => {\n\t\tif (data) {\n\t\t\tconst { analytics } = data as any;\n\t\t\tconst rows = analytics?.rows;\n\t\t\tconst ouIndex = analytics.headers.findIndex(\n\t\t\t\t(header: any) => header.name === \"ou\",\n\t\t\t);\n\t\t\tconst dxIndex = analytics.headers.findIndex(\n\t\t\t\t(header: any) => header.name === \"dx\",\n\t\t\t);\n\t\t\tconst valueIndex = analytics.headers.findIndex(\n\t\t\t\t(header: any) => header.name === \"value\",\n\t\t\t);\n\n\t\t\tif (!isEmpty(rows)) {\n\t\t\t\treturn sortBy(\n\t\t\t\t\torgUnits?.map((ou: MapOrgUnit) => {\n\t\t\t\t\t\tconst row = rows.find(\n\t\t\t\t\t\t\t(row: any) =>\n\t\t\t\t\t\t\t\trow[ouIndex] === ou.id &&\n\t\t\t\t\t\t\t\trow[dxIndex] === layer.dataItem.id,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\torgUnit: ou,\n\t\t\t\t\t\t\tdata: row ? parseFloat(row[valueIndex]) : undefined,\n\t\t\t\t\t\t\tdataItem: {\n\t\t\t\t\t\t\t\t...layer.dataItem,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t\t\t[\"data\"],\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t\treturn [];\n\t};\n\n\tconst sanitizeLegends = async (\n\t\tlayers: CustomThematicLayer[],\n\t): Promise<CustomThematicLayer[]> => {\n\t\treturn (await map(\n\t\t\tlayers,\n\t\t\tasyncify(async (layer: CustomThematicLayer) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst legends = [];\n\t\t\t\t\tif (layer.dataItem.legendSet) {\n\t\t\t\t\t\tconst legendSetData = await engine.query(\n\t\t\t\t\t\t\tlegendSetsQuery,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvariables: {\n\t\t\t\t\t\t\t\t\tid: layer.dataItem.legendSet,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst legendSet: LegendSet =\n\t\t\t\t\t\t\tlegendSetData?.legendSets as LegendSet;\n\t\t\t\t\t\tif (legendSet) {\n\t\t\t\t\t\t\tlegends.push(...legendSet.legends);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst { scale, colorClass } = layer.dataItem\n\t\t\t\t\t\t\t.legendConfig ?? {\n\t\t\t\t\t\t\tscale: defaultClasses,\n\t\t\t\t\t\t\tcolorClass: defaultColorScaleName,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst sortedData = sortBy(\n\t\t\t\t\t\t\tlayer.data.filter((datum) => !!datum.data),\n\t\t\t\t\t\t\t\"data\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst autoLegends = generateLegends(\n\t\t\t\t\t\t\tlast(sortedData)?.data ?? 0,\n\t\t\t\t\t\t\thead(sortedData)?.data ?? 0,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassesCount: scale,\n\t\t\t\t\t\t\t\tcolorClass,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tlegends.push(...autoLegends);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...layer,\n\t\t\t\t\t\tlegends,\n\t\t\t\t\t};\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn layer;\n\t\t\t\t}\n\t\t\t}),\n\t\t)) as CustomThematicLayer[];\n\t};\n\n\tconst sanitizeLayers = async (\n\t\tlayers: ThematicLayerConfig[],\n\t): Promise<CustomThematicLayer[]> => {\n\t\ttry {\n\t\t\tsetLoading(true);\n\t\t\tconst layersWithoutData = layers?.filter((layer) => !layer.data);\n\t\t\tconst layersWithData = differenceBy(\n\t\t\t\tlayers,\n\t\t\t\tlayersWithoutData,\n\t\t\t\t\"id\",\n\t\t\t);\n\t\t\tconst dx = layersWithoutData.map((layer) => layer.dataItem.id);\n\t\t\tlet sanitizedLayersWithData: any = [];\n\n\t\t\tif (!isEmpty(dx)) {\n\t\t\t\tconst data = await engine.query(analyticsQuery, {\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tdx,\n\t\t\t\t\t\tou,\n\t\t\t\t\t\tpe,\n\t\t\t\t\t\tstartDate,\n\t\t\t\t\t\tendDate,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tsanitizedLayersWithData = layersWithoutData.map((layer) => ({\n\t\t\t\t\t...layer,\n\t\t\t\t\tname:\n\t\t\t\t\t\tlayer?.name ?? layer?.dataItem?.displayName ?? layer.id,\n\t\t\t\t\tdata: sanitizeData(data, layer),\n\t\t\t\t}));\n\t\t\t}\n\t\t\tconst sanitizedLayersWithOrgUnits = layersWithData.map((layer) => ({\n\t\t\t\t...layer,\n\t\t\t\tdata: layer.data?.map((datum) => ({\n\t\t\t\t\t...datum,\n\t\t\t\t\torgUnit: find(orgUnits, [\n\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\tdatum.orgUnit,\n\t\t\t\t\t]) as MapOrgUnit,\n\t\t\t\t\tdataItem: layer.dataItem,\n\t\t\t\t\tname:\n\t\t\t\t\t\tlayer?.name ?? layer?.dataItem?.displayName ?? layer.id,\n\t\t\t\t})),\n\t\t\t}));\n\t\t\tsetLoading(false);\n\t\t\treturn await sanitizeLegends([\n\t\t\t\t...sanitizedLayersWithData,\n\t\t\t\t...sanitizedLayersWithOrgUnits,\n\t\t\t]);\n\t\t} catch (e: any) {\n\t\t\tconsole.error(`Error getting thematic layers`, e.details);\n\t\t\tsetLoading(false);\n\t\t\treturn [];\n\t\t}\n\t};\n\n\treturn {\n\t\tsanitizeLayers,\n\t\tloading,\n\t};\n}\n\nexport function usePointLayer() {\n\tconst engine = useDataEngine();\n\tconst { orgUnitSelection } = useMapOrganisationUnit();\n\tconst [loading, setLoading] = useState(false);\n\n\tconst sanitizePointData = useCallback(\n\t\t(orgUnitData: any, groupSetData: any): PointOrgUnit[] => {\n\t\t\tconst { analytics, layer } = (orgUnitData as any) ?? {};\n\t\t\tconst rawOrgUnits = sanitizeOrgUnits(analytics?.metaData);\n\t\t\tconst geoJSONObjects = toGeoJson(\n\t\t\t\tlayer?.filter((bound: any) => bound.co),\n\t\t\t);\n\t\t\treturn compact(\n\t\t\t\trawOrgUnits.map((orgUnit: any) => {\n\t\t\t\t\tconst geoJSONObject: any = geoJSONObjects?.find(\n\t\t\t\t\t\t(geoJSON: any) => geoJSON.properties.id === orgUnit.id,\n\t\t\t\t\t);\n\t\t\t\t\tconst orgUnitGroups: any =\n\t\t\t\t\t\t(groupSetData?.groupSet as any)\n\t\t\t\t\t\t\t?.organisationUnitGroups ?? [];\n\t\t\t\t\tconst ouGroup = find(\n\t\t\t\t\t\torgUnitGroups,\n\t\t\t\t\t\t(ouGroup) =>\n\t\t\t\t\t\t\t!!find(ouGroup?.organisationUnits ?? [], [\n\t\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\t\torgUnit.id,\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!geoJSONObject ||\n\t\t\t\t\t\tgeoJSONObject.properties.type !== \"Point\"\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...orgUnit,\n\t\t\t\t\t\tgeoJSON: geoJSONObject,\n\t\t\t\t\t\tlevel: geoJSONObject.properties.level,\n\t\t\t\t\t\ticon: {\n\t\t\t\t\t\t\ttype: \"groupIcon\",\n\t\t\t\t\t\t\ticon: ouGroup?.symbol,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\t[],\n\t);\n\n\tconst sanitizeLayer = useCallback(\n\t\tasync (\n\t\t\tlayer: CustomPointLayer,\n\t\t): Promise<CustomPointLayer | undefined> => {\n\t\t\ttry {\n\t\t\t\tif (!layer.level && !layer.group) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetLoading(true);\n\t\t\t\tconst level = layer.level ? `LEVEL-${layer.level}` : undefined;\n\t\t\t\tconst group = layer.group\n\t\t\t\t\t? `OU_GROUP-${layer.group}`\n\t\t\t\t\t: undefined;\n\t\t\t\tconst ous = [\n\t\t\t\t\t...getOrgUnitsSelection(orgUnitSelection),\n\t\t\t\t\tlevel,\n\t\t\t\t\tgroup,\n\t\t\t\t];\n\n\t\t\t\tconst pointData = await engine.query(query, {\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tous,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst groupSetData = await engine.query(groupSetQuery, {\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tgroupSet: layer.style?.groupSet,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst sanitizedOrgUnitData = sanitizePointData(\n\t\t\t\t\tpointData,\n\t\t\t\t\tgroupSetData,\n\t\t\t\t);\n\n\t\t\t\tconst orgUnitGroups =\n\t\t\t\t\t(groupSetData?.groupSet as any)?.organisationUnitGroups ??\n\t\t\t\t\t[];\n\n\t\t\t\tconst sanitizedOrgUnitGroups = orgUnitGroups.map(\n\t\t\t\t\t(ouGroup: any) => ({\n\t\t\t\t\t\t...ouGroup,\n\t\t\t\t\t\torganisationUnits: undefined,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tsetLoading(false);\n\t\t\t\treturn {\n\t\t\t\t\t...layer,\n\t\t\t\t\tpoints: sanitizedOrgUnitData,\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\t...layer.style,\n\t\t\t\t\t\torgUnitGroups: sanitizedOrgUnitGroups,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} catch (e: any) {\n\t\t\t\tsetLoading(false);\n\t\t\t\tconsole.error(`Error getting point layer`, e.details);\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\treturn {\n\t\tloading,\n\t\tsanitizeLayer,\n\t};\n}\n\nexport function useGoogleEngineLayers() {\n\tconst { refresh } = useGoogleEngineToken();\n\tconst orgUnits = useBoundaryData();\n\n\tasync function getImageUrl(\n\t\tearthEngine: EarthEngine,\n\t\t{ filters }: EarthEngineLayerConfig,\n\t): Promise<string | undefined> {\n\t\tif (earthEngine.initialized) {\n\t\t\ttry {\n\t\t\t\tearthEngine.setOrgUnits(orgUnits ?? []);\n\t\t\t\tconst period = filters?.period;\n\t\t\t\tif (period) {\n\t\t\t\t\tearthEngine.setPeriod(period);\n\t\t\t\t}\n\t\t\t\treturn earthEngine.url();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst sanitizeLayers = useCallback(\n\t\tasync (\n\t\t\tlayers: EarthEngineLayerConfig[],\n\t\t): Promise<CustomGoogleEngineLayer[]> => {\n\t\t\tif (isEmpty(layers)) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { token } = await refresh();\n\t\t\t\tif (!token) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Google token not available in this instance`,\n\t\t\t\t\t);\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tawait EarthEngine.setToken(token, refresh);\n\t\t\t\treturn map(\n\t\t\t\t\tlayers,\n\t\t\t\t\tasyncify(async (layer: EarthEngineLayerConfig) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst defaultOptions: any =\n\t\t\t\t\t\t\t\tfind(EARTH_ENGINE_LAYERS, [\"id\", layer.type]) ??\n\t\t\t\t\t\t\t\t{};\n\t\t\t\t\t\t\tconst options: EarthEngineOptions = {\n\t\t\t\t\t\t\t\t...defaultOptions,\n\t\t\t\t\t\t\t\taggregations:\n\t\t\t\t\t\t\t\t\tlayer.aggregations ??\n\t\t\t\t\t\t\t\t\tdefaultOptions?.aggregations,\n\t\t\t\t\t\t\t\tparams: layer.params ?? defaultOptions?.params,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst updatedLayer = {\n\t\t\t\t\t\t\t\t...layer,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst earthEngine = new EarthEngine({ options });\n\t\t\t\t\t\t\tconst url = await getImageUrl(\n\t\t\t\t\t\t\t\tearthEngine,\n\t\t\t\t\t\t\t\tupdatedLayer,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...updatedLayer,\n\t\t\t\t\t\t\t\tengine: earthEngine,\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch (e: any) {\n\t\t\t\tconsole.error(`Error getting thematic layers`, e.details);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\t[refresh],\n\t);\n\n\treturn {\n\t\tsanitizeLayers,\n\t};\n}\n"]}
@@ -42,7 +42,7 @@ function ThematicLayerConfiguration({
42
42
  () => exclude?.filter((indicator) => indicator !== dataItemId) ?? [],
43
43
  [dataItemId, exclude]
44
44
  );
45
- return /* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsxs("div", { className: "column gap-16", children: [
45
+ return /* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 16 }, children: [
46
46
  /* @__PURE__ */ jsx(TypeField, {}),
47
47
  /* @__PURE__ */ jsx(
48
48
  Controller,
@@ -58,8 +58,11 @@ function ThematicLayerConfiguration({
58
58
  /* @__PURE__ */ jsxs(
59
59
  "div",
60
60
  {
61
- style: { alignItems: "flex-end" },
62
- className: "row w-100 gap-16 align-end",
61
+ style: {
62
+ alignItems: "flex-end",
63
+ display: "flex",
64
+ gap: 16
65
+ },
63
66
  children: [
64
67
  /* @__PURE__ */ jsx(
65
68
  "div",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.tsx"],"names":["type"],"mappings":"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","sourcesContent":["import i18n from \"@dhis2/d2-i18n\";\nimport { Button, Field, InputField, Radio } from \"@dhis2/ui\";\nimport { Controller, FormProvider, useWatch } from \"react-hook-form\";\nimport React, { useMemo, useState } from \"react\";\nimport { compact } from \"lodash\";\nimport { defaultClasses, defaultColorScaleName } from \"../../utils/colors.js\";\nimport IndicatorSelectorModal from \"./components/IndicatorSelectorModal/index.js\";\nimport { LegendSetSelector } from \"./components/LegendSetSelector/index.js\";\nimport { CustomLegend } from \"./components/CustomLegend/index.js\";\nimport { ThematicLayerConfigurationProps } from \"./types/index.js\";\nimport { RadiusField } from \"./components/RadiusField.js\";\nimport { TypeField } from \"./components/TypeField.js\";\n\nexport function ThematicLayerConfiguration({\n\texclude,\n\tform,\n}: ThematicLayerConfigurationProps) {\n\tconst [type, legendSet, dataItemId] = useWatch({\n\t\tcontrol: form.control,\n\t\tname: [\"type\", \"dataItem.legendSet\", \"dataItem.id\"],\n\t});\n\tconst [legendType, setLegendType] = useState(\n\t\tlegendSet ? \"legendSet\" : \"custom\",\n\t);\n\tconst [dataSelectorOpen, setDataSelectorOpen] = useState(false);\n\n\tconst onLegendTypeChange =\n\t\t(type: string) =>\n\t\t({ value }: { value?: string }) => {\n\t\t\tif (type === \"custom\") {\n\t\t\t\tform.setValue(\"dataItem.legendSet\", undefined);\n\t\t\t\tform.setValue(\"dataItem.legendConfig.scale\", defaultClasses);\n\t\t\t\tform.setValue(\n\t\t\t\t\t\"dataItem.legendConfig.colorClass\",\n\t\t\t\t\tdefaultColorScaleName,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tform.setValue(\"dataItem.legendConfig\", undefined);\n\t\t\t}\n\t\t\tif (value) {\n\t\t\t\tsetLegendType(value);\n\t\t\t}\n\t\t};\n\tconst disabled = useMemo(\n\t\t() => exclude?.filter((indicator) => indicator !== dataItemId) ?? [],\n\t\t[dataItemId, exclude],\n\t);\n\treturn (\n\t\t<FormProvider {...form}>\n\t\t\t<div className=\"column gap-16\">\n\t\t\t\t<TypeField />\n\t\t\t\t<Controller\n\t\t\t\t\trules={{\n\t\t\t\t\t\tvalidate: {\n\t\t\t\t\t\t\trequired: (value: { id: string; name: string }) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tBoolean(value?.id) ||\n\t\t\t\t\t\t\t\t\ti18n.t(\"A data item is required\")\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{ alignItems: \"flex-end\" }}\n\t\t\t\t\t\t\t\tclassName=\"row w-100 gap-16 align-end\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tonClick={() => setDataSelectorOpen(true)}\n\t\t\t\t\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<InputField\n\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\terror={Boolean(fieldState.error)}\n\t\t\t\t\t\t\t\t\t\tvalidationText={\n\t\t\t\t\t\t\t\t\t\t\tfieldState.error?.message\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t\tinputWidth=\"100%\"\n\t\t\t\t\t\t\t\t\t\tlabel={i18n.t(\"Data Item\")}\n\t\t\t\t\t\t\t\t\t\tvalue={field.value?.displayName}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tonClick={() => setDataSelectorOpen(true)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{field.value?.id\n\t\t\t\t\t\t\t\t\t\t? i18n.t(\"Change\")\n\t\t\t\t\t\t\t\t\t\t: i18n.t(\"Select\")}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{dataSelectorOpen && (\n\t\t\t\t\t\t\t\t<IndicatorSelectorModal\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonUpdate={(values: any[]) => {\n\t\t\t\t\t\t\t\t\t\tconst [indicator] = values ?? [];\n\t\t\t\t\t\t\t\t\t\tfield.onChange({\n\t\t\t\t\t\t\t\t\t\t\tid: indicator.id,\n\t\t\t\t\t\t\t\t\t\t\tdisplayName: indicator.displayName,\n\t\t\t\t\t\t\t\t\t\t\ttype: \"indicator\",\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonClose={() => setDataSelectorOpen(false)}\n\t\t\t\t\t\t\t\t\thide={!dataSelectorOpen}\n\t\t\t\t\t\t\t\t\tselected={compact([\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tid: field.value?.id,\n\t\t\t\t\t\t\t\t\t\t\tdisplayName:\n\t\t\t\t\t\t\t\t\t\t\t\tfield.value?.displayName,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t])}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\tname={\"dataItem\"}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Field label={i18n.t(\"Legend\")}>\n\t\t\t\t\t\t<div className=\"column gap-8\">\n\t\t\t\t\t\t\t<div className=\"row gap-16\">\n\t\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\t\tchecked={legendType === \"legendSet\"}\n\t\t\t\t\t\t\t\t\tlabel={i18n.t(\"Legend set\")}\n\t\t\t\t\t\t\t\t\tname=\"legendSet\"\n\t\t\t\t\t\t\t\t\tvalue=\"legendSet\"\n\t\t\t\t\t\t\t\t\tonChange={onLegendTypeChange(\"legendSet\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\t\tchecked={legendType === \"custom\"}\n\t\t\t\t\t\t\t\t\tlabel={i18n.t(\"Custom legend\")}\n\t\t\t\t\t\t\t\t\tname=\"custom\"\n\t\t\t\t\t\t\t\t\tvalue=\"custom\"\n\t\t\t\t\t\t\t\t\tonChange={onLegendTypeChange(\"custom\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{legendType === \"legendSet\" && (\n\t\t\t\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\t\t\t\trequired: i18n.t(\n\t\t\t\t\t\t\t\t\t\t\t\t\"Legend set is required\",\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tname=\"dataItem.legendSet\"\n\t\t\t\t\t\t\t\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t\t\t\t\t\t\t\t<LegendSetSelector\n\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t\t\t\t{...fieldState}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{legendType === \"custom\" && <CustomLegend />}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Field>\n\t\t\t\t\t{type === \"bubble\" && (\n\t\t\t\t\t\t<Field label={i18n.t(\"Radius\")}>\n\t\t\t\t\t\t\t<RadiusField />\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</FormProvider>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../../../../src/components/Map/components/ThematicLayerConfiguration/ThematicLayerConfiguration.tsx"],"names":["type"],"mappings":"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","sourcesContent":["import i18n from \"@dhis2/d2-i18n\";\nimport { Button, Field, InputField, Radio } from \"@dhis2/ui\";\nimport { Controller, FormProvider, useWatch } from \"react-hook-form\";\nimport React, { useMemo, useState } from \"react\";\nimport { compact } from \"lodash\";\nimport { defaultClasses, defaultColorScaleName } from \"../../utils/colors.js\";\nimport IndicatorSelectorModal from \"./components/IndicatorSelectorModal/index.js\";\nimport { LegendSetSelector } from \"./components/LegendSetSelector/index.js\";\nimport { CustomLegend } from \"./components/CustomLegend/index.js\";\nimport { ThematicLayerConfigurationProps } from \"./types/index.js\";\nimport { RadiusField } from \"./components/RadiusField.js\";\nimport { TypeField } from \"./components/TypeField.js\";\n\nexport function ThematicLayerConfiguration({\n\texclude,\n\tform,\n}: ThematicLayerConfigurationProps) {\n\tconst [type, legendSet, dataItemId] = useWatch({\n\t\tcontrol: form.control,\n\t\tname: [\"type\", \"dataItem.legendSet\", \"dataItem.id\"],\n\t});\n\tconst [legendType, setLegendType] = useState(\n\t\tlegendSet ? \"legendSet\" : \"custom\",\n\t);\n\tconst [dataSelectorOpen, setDataSelectorOpen] = useState(false);\n\n\tconst onLegendTypeChange =\n\t\t(type: string) =>\n\t\t({ value }: { value?: string }) => {\n\t\t\tif (type === \"custom\") {\n\t\t\t\tform.setValue(\"dataItem.legendSet\", undefined);\n\t\t\t\tform.setValue(\"dataItem.legendConfig.scale\", defaultClasses);\n\t\t\t\tform.setValue(\n\t\t\t\t\t\"dataItem.legendConfig.colorClass\",\n\t\t\t\t\tdefaultColorScaleName,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tform.setValue(\"dataItem.legendConfig\", undefined);\n\t\t\t}\n\t\t\tif (value) {\n\t\t\t\tsetLegendType(value);\n\t\t\t}\n\t\t};\n\tconst disabled = useMemo(\n\t\t() => exclude?.filter((indicator) => indicator !== dataItemId) ?? [],\n\t\t[dataItemId, exclude],\n\t);\n\treturn (\n\t\t<FormProvider {...form}>\n\t\t\t<div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n\t\t\t\t<TypeField />\n\t\t\t\t<Controller\n\t\t\t\t\trules={{\n\t\t\t\t\t\tvalidate: {\n\t\t\t\t\t\t\trequired: (value: { id: string; name: string }) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tBoolean(value?.id) ||\n\t\t\t\t\t\t\t\t\ti18n.t(\"A data item is required\")\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\talignItems: \"flex-end\",\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\tgap: 16,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tonClick={() => setDataSelectorOpen(true)}\n\t\t\t\t\t\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<InputField\n\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\terror={Boolean(fieldState.error)}\n\t\t\t\t\t\t\t\t\t\tvalidationText={\n\t\t\t\t\t\t\t\t\t\t\tfieldState.error?.message\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\t\t\tinputWidth=\"100%\"\n\t\t\t\t\t\t\t\t\t\tlabel={i18n.t(\"Data Item\")}\n\t\t\t\t\t\t\t\t\t\tvalue={field.value?.displayName}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tonClick={() => setDataSelectorOpen(true)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{field.value?.id\n\t\t\t\t\t\t\t\t\t\t? i18n.t(\"Change\")\n\t\t\t\t\t\t\t\t\t\t: i18n.t(\"Select\")}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{dataSelectorOpen && (\n\t\t\t\t\t\t\t\t<IndicatorSelectorModal\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonUpdate={(values: any[]) => {\n\t\t\t\t\t\t\t\t\t\tconst [indicator] = values ?? [];\n\t\t\t\t\t\t\t\t\t\tfield.onChange({\n\t\t\t\t\t\t\t\t\t\t\tid: indicator.id,\n\t\t\t\t\t\t\t\t\t\t\tdisplayName: indicator.displayName,\n\t\t\t\t\t\t\t\t\t\t\ttype: \"indicator\",\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonClose={() => setDataSelectorOpen(false)}\n\t\t\t\t\t\t\t\t\thide={!dataSelectorOpen}\n\t\t\t\t\t\t\t\t\tselected={compact([\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tid: field.value?.id,\n\t\t\t\t\t\t\t\t\t\t\tdisplayName:\n\t\t\t\t\t\t\t\t\t\t\t\tfield.value?.displayName,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t])}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\tname={\"dataItem\"}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Field label={i18n.t(\"Legend\")}>\n\t\t\t\t\t\t<div className=\"column gap-8\">\n\t\t\t\t\t\t\t<div className=\"row gap-16\">\n\t\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\t\tchecked={legendType === \"legendSet\"}\n\t\t\t\t\t\t\t\t\tlabel={i18n.t(\"Legend set\")}\n\t\t\t\t\t\t\t\t\tname=\"legendSet\"\n\t\t\t\t\t\t\t\t\tvalue=\"legendSet\"\n\t\t\t\t\t\t\t\t\tonChange={onLegendTypeChange(\"legendSet\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Radio\n\t\t\t\t\t\t\t\t\tchecked={legendType === \"custom\"}\n\t\t\t\t\t\t\t\t\tlabel={i18n.t(\"Custom legend\")}\n\t\t\t\t\t\t\t\t\tname=\"custom\"\n\t\t\t\t\t\t\t\t\tvalue=\"custom\"\n\t\t\t\t\t\t\t\t\tonChange={onLegendTypeChange(\"custom\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t{legendType === \"legendSet\" && (\n\t\t\t\t\t\t\t\t\t<Controller\n\t\t\t\t\t\t\t\t\t\trules={{\n\t\t\t\t\t\t\t\t\t\t\trequired: i18n.t(\n\t\t\t\t\t\t\t\t\t\t\t\t\"Legend set is required\",\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tname=\"dataItem.legendSet\"\n\t\t\t\t\t\t\t\t\t\trender={({ field, fieldState }) => (\n\t\t\t\t\t\t\t\t\t\t\t<LegendSetSelector\n\t\t\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t\t\t\tselected={field.value}\n\t\t\t\t\t\t\t\t\t\t\t\t{...field}\n\t\t\t\t\t\t\t\t\t\t\t\t{...fieldState}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{legendType === \"custom\" && <CustomLegend />}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Field>\n\t\t\t\t\t{type === \"bubble\" && (\n\t\t\t\t\t\t<Field label={i18n.t(\"Radius\")}>\n\t\t\t\t\t\t\t<RadiusField />\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</FormProvider>\n\t);\n}\n"]}