@undp/data-viz 2.0.0 → 2.0.1

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 (112) hide show
  1. package/dist/BarGraph.cjs +1 -1
  2. package/dist/BarGraph.cjs.map +1 -1
  3. package/dist/BarGraph.js +957 -957
  4. package/dist/BarGraph.js.map +1 -1
  5. package/dist/BasicStatCard.cjs +1 -1
  6. package/dist/BasicStatCard.cjs.map +1 -1
  7. package/dist/BasicStatCard.js +45 -47
  8. package/dist/BasicStatCard.js.map +1 -1
  9. package/dist/BeeSwarmChart.cjs +1 -1
  10. package/dist/BeeSwarmChart.cjs.map +1 -1
  11. package/dist/BeeSwarmChart.js +76 -56
  12. package/dist/BeeSwarmChart.js.map +1 -1
  13. package/dist/BiVariateChoroplethMap.cjs +1 -1
  14. package/dist/BiVariateChoroplethMap.cjs.map +1 -1
  15. package/dist/BiVariateChoroplethMap.js +157 -157
  16. package/dist/BiVariateChoroplethMap.js.map +1 -1
  17. package/dist/ChoroplethMap.cjs +1 -1
  18. package/dist/ChoroplethMap.cjs.map +1 -1
  19. package/dist/ChoroplethMap.js +185 -185
  20. package/dist/ChoroplethMap.js.map +1 -1
  21. package/dist/CirclePackingGraph.cjs +1 -1
  22. package/dist/CirclePackingGraph.js +2 -4
  23. package/dist/CirclePackingGraph.js.map +1 -1
  24. package/dist/Data/barChart.json +70 -0
  25. package/dist/Data/basic.csv +20 -0
  26. package/dist/DifferenceLineChart.cjs +1 -1
  27. package/dist/DifferenceLineChart.cjs.map +1 -1
  28. package/dist/DifferenceLineChart.js +224 -223
  29. package/dist/DifferenceLineChart.js.map +1 -1
  30. package/dist/DotDensityMap.cjs +1 -1
  31. package/dist/DotDensityMap.cjs.map +1 -1
  32. package/dist/DotDensityMap.js +156 -156
  33. package/dist/DotDensityMap.js.map +1 -1
  34. package/dist/DualAxisLineChart.cjs +1 -1
  35. package/dist/DualAxisLineChart.cjs.map +1 -1
  36. package/dist/DualAxisLineChart.js +326 -325
  37. package/dist/DualAxisLineChart.js.map +1 -1
  38. package/dist/GeoHubCompareMaps.cjs +1 -1
  39. package/dist/GeoHubCompareMaps.cjs.map +1 -1
  40. package/dist/GeoHubCompareMaps.js +183 -183
  41. package/dist/GeoHubCompareMaps.js.map +1 -1
  42. package/dist/{GraphEl-DzRon4cb.js → GraphEl-BZne2JIx.js} +3 -3
  43. package/dist/{GraphEl-DzRon4cb.js.map → GraphEl-BZne2JIx.js.map} +1 -1
  44. package/dist/{GraphEl-BkyLYXG5.cjs → GraphEl-D5MUfp45.cjs} +2 -2
  45. package/dist/{GraphEl-BkyLYXG5.cjs.map → GraphEl-D5MUfp45.cjs.map} +1 -1
  46. package/dist/GriddedGraphs.cjs +1 -1
  47. package/dist/GriddedGraphs.js +1 -1
  48. package/dist/Histogram.cjs +1 -1
  49. package/dist/Histogram.js +1 -1
  50. package/dist/LineChartWithConfidenceInterval.cjs +1 -1
  51. package/dist/LineChartWithConfidenceInterval.cjs.map +1 -1
  52. package/dist/LineChartWithConfidenceInterval.js +133 -132
  53. package/dist/LineChartWithConfidenceInterval.js.map +1 -1
  54. package/dist/MultiGraphDashboard.cjs +1 -1
  55. package/dist/MultiGraphDashboard.cjs.map +1 -1
  56. package/dist/MultiGraphDashboard.js +52 -50
  57. package/dist/MultiGraphDashboard.js.map +1 -1
  58. package/dist/MultiGraphDashboardWideToLongFormat.cjs +1 -1
  59. package/dist/MultiGraphDashboardWideToLongFormat.cjs.map +1 -1
  60. package/dist/MultiGraphDashboardWideToLongFormat.js +11 -9
  61. package/dist/MultiGraphDashboardWideToLongFormat.js.map +1 -1
  62. package/dist/MultiLineAltChart.cjs +1 -1
  63. package/dist/MultiLineAltChart.cjs.map +1 -1
  64. package/dist/MultiLineAltChart.js +149 -148
  65. package/dist/MultiLineAltChart.js.map +1 -1
  66. package/dist/MultiLineChart.cjs +1 -1
  67. package/dist/MultiLineChart.cjs.map +1 -1
  68. package/dist/MultiLineChart.js +182 -181
  69. package/dist/MultiLineChart.js.map +1 -1
  70. package/dist/PerformanceIntensiveMultiGraphDashboard.cjs +1 -1
  71. package/dist/PerformanceIntensiveMultiGraphDashboard.cjs.map +1 -1
  72. package/dist/PerformanceIntensiveMultiGraphDashboard.js +14 -12
  73. package/dist/PerformanceIntensiveMultiGraphDashboard.js.map +1 -1
  74. package/dist/SimpleLineChart.cjs +1 -1
  75. package/dist/SimpleLineChart.cjs.map +1 -1
  76. package/dist/SimpleLineChart.js +123 -122
  77. package/dist/SimpleLineChart.js.map +1 -1
  78. package/dist/SingleGraphDashboard.cjs +1 -1
  79. package/dist/SingleGraphDashboard.cjs.map +1 -1
  80. package/dist/SingleGraphDashboard.js +83 -79
  81. package/dist/SingleGraphDashboard.js.map +1 -1
  82. package/dist/SingleGraphDashboardGeoHubMaps.cjs +1 -1
  83. package/dist/SingleGraphDashboardGeoHubMaps.cjs.map +1 -1
  84. package/dist/SingleGraphDashboardGeoHubMaps.js +49 -45
  85. package/dist/SingleGraphDashboardGeoHubMaps.js.map +1 -1
  86. package/dist/SingleGraphDashboardThreeDGraphs.cjs +1 -1
  87. package/dist/SingleGraphDashboardThreeDGraphs.cjs.map +1 -1
  88. package/dist/SingleGraphDashboardThreeDGraphs.js +56 -52
  89. package/dist/SingleGraphDashboardThreeDGraphs.js.map +1 -1
  90. package/dist/StatCardFromData.cjs +1 -1
  91. package/dist/StatCardFromData.cjs.map +1 -1
  92. package/dist/StatCardFromData.js +44 -46
  93. package/dist/StatCardFromData.js.map +1 -1
  94. package/dist/ThreeDGlobe.cjs +1 -1
  95. package/dist/ThreeDGlobe.cjs.map +1 -1
  96. package/dist/ThreeDGlobe.js +134 -134
  97. package/dist/ThreeDGlobe.js.map +1 -1
  98. package/dist/getNoOfTicks-C_1CFXv_.cjs +2 -0
  99. package/dist/getNoOfTicks-C_1CFXv_.cjs.map +1 -0
  100. package/dist/getNoOfTicks-CpmRjcRF.js +7 -0
  101. package/dist/getNoOfTicks-CpmRjcRF.js.map +1 -0
  102. package/dist/index-C6LorfZ-.cjs +2 -0
  103. package/dist/index-C6LorfZ-.cjs.map +1 -0
  104. package/dist/index-Ceppbd8C.js +342 -0
  105. package/dist/index-Ceppbd8C.js.map +1 -0
  106. package/dist/index.cjs +1 -1
  107. package/dist/index.js +1 -1
  108. package/package.json +1 -1
  109. package/dist/index-DoY3Ga3W.cjs +0 -2
  110. package/dist/index-DoY3Ga3W.cjs.map +0 -1
  111. package/dist/index-leTnKT2q.js +0 -329
  112. package/dist/index-leTnKT2q.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { j as l } from "./index-CHPV5EwG-Curnpaqc.js";
1
+ import { j as r } from "./index-CHPV5EwG-Curnpaqc.js";
2
2
  import { useState as g, useEffectEvent as V, useEffect as b } from "react";
3
- import { i as E } from "./index-BuwmuDFJ.js";
4
- import { f as x } from "./index-EArKRVKg.js";
3
+ import { i as $ } from "./index-BuwmuDFJ.js";
4
+ import { f as v } from "./index-EArKRVKg.js";
5
5
  import { j as A, D as O } from "./DropdownSelect-BbdPQa2k.js";
6
- import { b as H } from "./checkIfMultiple-Y9iKaV_u.js";
6
+ import { b as E } from "./checkIfMultiple-Y9iKaV_u.js";
7
7
  import { G as z } from "./GraphContainer-CRqzdKu2.js";
8
8
  import { SingleGraphDashboard as I } from "./SingleGraphDashboard.js";
9
9
  import { f as q, a as J, b as B, c as K, t as Q } from "./fetchAndParseData-BpqkBPQL.js";
@@ -11,11 +11,11 @@ import { g as X } from "./getUniqValue-BKHCm3zE.js";
11
11
  import { GraphHeader as Y } from "./GraphHeader.js";
12
12
  import { f as Z } from "./filterData-DsAiFzKY.js";
13
13
  import { t as N } from "./transformDataForSelect-D8AuvYdf.js";
14
- const v = (m) => m.map((t) => t.columnWidth || 1).reduce((t, d) => t + d, 0), _ = ["barChart", "choroplethMap", "biVariateChoroplethMap", "circlePacking", "treeMap"];
14
+ const x = (m) => m.map((t) => t.columnWidth || 1).reduce((t, d) => t + d, 0), _ = ["barChart", "choroplethMap", "biVariateChoroplethMap", "circlePacking", "treeMap"];
15
15
  function ma(m) {
16
16
  const {
17
17
  dashboardID: S,
18
- dashboardLayout: i,
18
+ dashboardLayout: l,
19
19
  dataSettings: t,
20
20
  filters: d,
21
21
  debugMode: c,
@@ -25,108 +25,110 @@ function ma(m) {
25
25
  noOfFiltersPerRow: p = 4,
26
26
  filterPosition: y,
27
27
  uiMode: f = "normal",
28
- graphStyles: W,
29
- graphClassNames: k
30
- } = m, [D, T] = g(void 0), [u, G] = g(void 0), [s, j] = g([]), F = {
28
+ graphStyles: H,
29
+ graphClassNames: W
30
+ } = m, [D, T] = g(void 0), [u, k] = g(void 0), [s, j] = g([]), F = {
31
31
  ignoreCase: !0,
32
32
  ignoreAccents: !0,
33
33
  trim: !0
34
34
  }, C = V(() => {
35
- const e = (d || []).map((r) => ({
36
- filter: r.column,
37
- label: r.label || `Filter by ${r.column}`,
38
- singleSelect: r.singleSelect,
39
- clearable: r.clearable,
40
- defaultValue: N(r.defaultValue),
41
- value: N(r.defaultValue),
42
- availableValues: X(u, r.column).filter((a) => !r.excludeValues?.includes(`${a}`)).map((a) => ({
35
+ const e = (d || []).map((i) => ({
36
+ filter: i.column,
37
+ label: i.label || `Filter by ${i.column}`,
38
+ singleSelect: i.singleSelect,
39
+ clearable: i.clearable,
40
+ defaultValue: N(i.defaultValue),
41
+ value: N(i.defaultValue),
42
+ availableValues: X(u, i.column).filter((a) => !i.excludeValues?.includes(`${a}`)).map((a) => ({
43
43
  value: a,
44
44
  label: a
45
45
  })),
46
- allowSelectAll: r.allowSelectAll,
47
- width: r.width
46
+ allowSelectAll: i.allowSelectAll,
47
+ width: i.width
48
48
  }));
49
49
  j(e);
50
- }), L = V(() => {
50
+ }), G = V(() => {
51
51
  if (!u || s.length === 0) T(u);
52
52
  else {
53
- const e = u.filter((r) => s.every((a) => a.value && x([a.value]).length > 0 ? E(x([r[a.filter]]), x([a.value]).map((n) => n.value)).length > 0 : !0));
53
+ const e = u.filter((i) => s.every((a) => a.value && v([a.value]).length > 0 ? $(v([i[a.filter]]), v([a.value]).map((n) => n.value)).length > 0 : !0));
54
54
  T(e);
55
55
  }
56
56
  });
57
57
  b(() => {
58
- L();
58
+ G();
59
59
  }, [s, u]), b(() => {
60
60
  (async () => {
61
61
  try {
62
- const r = t.dataURL ? typeof t.dataURL == "string" ? t.fileType === "json" ? await q(t.dataURL, t.columnsToArray, t.dataTransformation, c) : t.fileType === "api" ? await J(t.dataURL, t.apiHeaders, t.columnsToArray, t.dataTransformation, c) : await B(t.dataURL, t.dataTransformation, t.columnsToArray, c, t.delimiter, !0) : await K(t.dataURL, t.idColumnTitle) : await Q(t.data, t.columnsToArray);
63
- G(r);
64
- } catch (r) {
65
- console.error("Data fetching error:", r);
62
+ const i = t.dataURL ? typeof t.dataURL == "string" ? t.fileType === "json" ? await q(t.dataURL, t.columnsToArray, t.dataTransformation, c) : t.fileType === "api" ? await J(t.dataURL, t.apiHeaders, t.columnsToArray, t.dataTransformation, c) : await B(t.dataURL, t.dataTransformation, t.columnsToArray, c, t.delimiter, !0) : await K(t.dataURL, t.idColumnTitle) : await Q(t.data, t.columnsToArray);
63
+ k(i);
64
+ } catch (i) {
65
+ console.error("Data fetching error:", i);
66
66
  }
67
67
  })(), C();
68
68
  }, [t, c]), b(() => {
69
69
  C();
70
70
  }, [d]);
71
- const h = (e, r) => {
71
+ const h = (e, i) => {
72
72
  j((a) => a.map((n) => n.filter === e ? {
73
73
  ...n,
74
- value: r
74
+ value: i
75
75
  } : n));
76
76
  };
77
- return /* @__PURE__ */ l.jsxs(z, { id: S, "aria-label": "This is a dashboard", backgroundColor: i.backgroundColor ?? !1, theme: w || "light", language: i.language || "en", padding: i.padding, children: [
78
- i.title || i.description ? /* @__PURE__ */ l.jsx(Y, { graphTitle: i.title, graphDescription: i.description, isDashboard: !0 }) : null,
79
- /* @__PURE__ */ l.jsxs("div", { className: "flex gap-4 flex-wrap", children: [
80
- s.length !== 0 ? /* @__PURE__ */ l.jsx("div", { className: "flex-grow flex-shrink-0", style: {
77
+ return /* @__PURE__ */ r.jsxs(z, { id: S, "aria-label": "This is a dashboard", backgroundColor: l.backgroundColor ?? !1, theme: w || "light", language: l.language || "en", padding: l.padding, children: [
78
+ l.title || l.description ? /* @__PURE__ */ r.jsx(Y, { graphTitle: l.title, graphDescription: l.description, isDashboard: !0 }) : null,
79
+ /* @__PURE__ */ r.jsxs("div", { className: "flex gap-4 flex-wrap", children: [
80
+ s.length !== 0 ? /* @__PURE__ */ r.jsx("div", { className: "flex-grow flex-shrink-0", style: {
81
81
  width: y === "side" ? "280px" : "100%"
82
- }, children: /* @__PURE__ */ l.jsx("div", { className: "flex flex-wrap items-start gap-4 w-full sticky top-4", children: s?.map((e, r) => /* @__PURE__ */ l.jsxs("div", { style: {
82
+ }, children: /* @__PURE__ */ r.jsx("div", { className: "flex flex-wrap items-start gap-4 w-full sticky top-4", children: s?.map((e, i) => /* @__PURE__ */ r.jsxs("div", { style: {
83
83
  width: e.width || `calc(${100 / p}% - ${(p - 1) / p}rem)`,
84
84
  flexGrow: 1,
85
85
  flexShrink: 0,
86
86
  minWidth: "240px"
87
87
  }, children: [
88
- /* @__PURE__ */ l.jsx(H, { className: "mb-2", children: e.label }),
89
- e.singleSelect ? /* @__PURE__ */ l.jsx(A, { options: e.availableValues, isClearable: e.clearable === void 0 ? !0 : e.clearable, size: "sm", variant: f, isMulti: !1, isSearchable: !0, filterOption: O(F), onChange: (a) => {
88
+ /* @__PURE__ */ r.jsx(E, { className: "mb-2", children: e.label }),
89
+ e.singleSelect ? /* @__PURE__ */ r.jsx(A, { options: e.availableValues, isClearable: e.clearable === void 0 ? !0 : e.clearable, size: "sm", variant: f, isMulti: !1, isSearchable: !0, filterOption: O(F), onChange: (a) => {
90
90
  h(e.filter, a);
91
- }, defaultValue: e.defaultValue, value: e.value }) : /* @__PURE__ */ l.jsxs(l.Fragment, { children: [
92
- /* @__PURE__ */ l.jsx(A, { options: e.availableValues, isMulti: !0, size: "sm", isClearable: e.clearable === void 0 ? !0 : e.clearable, variant: f, isSearchable: !0, controlShouldRenderValue: !0, closeMenuOnSelect: !1, hideSelectedOptions: !1, filterOption: O(F), onChange: (a) => {
91
+ }, defaultValue: e.defaultValue, value: e.value }) : /* @__PURE__ */ r.jsxs(r.Fragment, { children: [
92
+ /* @__PURE__ */ r.jsx(A, { options: e.availableValues, isMulti: !0, size: "sm", isClearable: e.clearable === void 0 ? !0 : e.clearable, variant: f, isSearchable: !0, controlShouldRenderValue: !0, closeMenuOnSelect: !1, hideSelectedOptions: !1, filterOption: O(F), onChange: (a) => {
93
93
  h(e.filter, a);
94
94
  }, value: e.value, defaultValue: e.defaultValue }),
95
- e.allowSelectAll ? /* @__PURE__ */ l.jsx("button", { type: "button", className: "bg-transparent border-0 p-0 mt-2 cursor-pointer text-primary-blue-600 dark:text-primary-blue-400", onClick: () => {
95
+ e.allowSelectAll ? /* @__PURE__ */ r.jsx("button", { type: "button", className: "bg-transparent border-0 p-0 mt-2 cursor-pointer text-primary-blue-600 dark:text-primary-blue-400", onClick: () => {
96
96
  h(e.filter, e.availableValues);
97
97
  }, children: "Select all options" }) : null
98
98
  ] })
99
- ] }, r)) }) }) : null,
100
- /* @__PURE__ */ l.jsx("div", { className: "flex flex-wrap gap-4 flex-grow flex-shrink-0 min-w-[280px]", style: {
99
+ ] }, i)) }) }) : null,
100
+ /* @__PURE__ */ r.jsx("div", { className: "flex flex-wrap gap-4 flex-grow flex-shrink-0 min-w-[280px]", style: {
101
101
  width: y === "side" ? "calc(100% - 280px - 1rem)" : "100%"
102
- }, children: i.rows.map((e, r) => /* @__PURE__ */ l.jsx("div", { className: "flex flex-wrap items-stretch gap-4 w-full h-auto", style: {
102
+ }, children: l.rows.map((e, i) => /* @__PURE__ */ r.jsx("div", { className: "flex flex-wrap items-stretch gap-4 w-full h-auto", style: {
103
103
  minHeight: `${e.height || 0}px`
104
- }, children: e.columns.map((a, n) => /* @__PURE__ */ l.jsx("div", { className: "flex bg-transparent h-inherit grow min-w-60", style: {
105
- width: `calc(${100 * (a.columnWidth || 1) / v(e.columns)}% - ${(v(e.columns) - (a.columnWidth || 1)) / v(e.columns)}rem)`,
104
+ }, children: e.columns.map((a, n) => /* @__PURE__ */ r.jsx("div", { className: "flex bg-transparent grow min-w-60", style: {
105
+ width: `calc(${100 * (a.columnWidth || 1) / x(e.columns)}% - ${(x(e.columns) - (a.columnWidth || 1)) / x(e.columns)}rem)`,
106
106
  minHeight: "inherit"
107
- }, children: /* @__PURE__ */ l.jsx(I, { graphType: a.graphType, dataFilters: a.dataFilters, uiMode: f, graphSettings: {
107
+ }, children: /* @__PURE__ */ r.jsx(I, { graphType: a.graphType, dataFilters: a.dataFilters, uiMode: f, graphSettings: {
108
108
  ...a.settings || {},
109
109
  width: void 0,
110
110
  height: void 0,
111
+ minHeight: void 0,
112
+ relativeHeight: void 0,
111
113
  resetSelectionOnDoubleClick: a.attachedFilter ? !1 : a.settings?.resetSelectionOnDoubleClick,
112
- styles: a.settings?.styles || W,
113
- classNames: a.settings?.classNames || k,
114
+ styles: a.settings?.styles || H,
115
+ classNames: a.settings?.classNames || W,
114
116
  radius: a.graphType === "donutChart" ? void 0 : a.settings?.radius,
115
117
  size: a.graphType === "unitChart" ? a.settings?.size : void 0,
116
- language: a.settings?.language || i.language,
118
+ language: a.settings?.language || l.language,
117
119
  theme: a.settings?.theme || w
118
120
  }, dataSettings: {
119
121
  data: D ? Z(D, R || []) : void 0
120
122
  }, updateFilters: a.attachedFilter && _.indexOf(a.graphType) !== -1 && s.findIndex((o) => o.filter === a.attachedFilter) !== -1 ? (o) => {
121
- const P = s.findIndex(($) => $.filter === a.attachedFilter), U = o ? s[P].singleSelect ? {
123
+ const L = s.findIndex((U) => U.filter === a.attachedFilter), P = o ? s[L].singleSelect ? {
122
124
  value: o,
123
125
  label: o
124
126
  } : [{
125
127
  value: o,
126
128
  label: o
127
129
  }] : void 0;
128
- h(a.attachedFilter, U);
129
- } : void 0, dataTransform: a.dataTransform, dataSelectionOptions: a.dataSelectionOptions, advancedDataSelectionOptions: a.advancedDataSelectionOptions, graphDataConfiguration: a.graphDataConfiguration, debugMode: c, readableHeader: M || [] }) }, n)) }, r)) })
130
+ h(a.attachedFilter, P);
131
+ } : void 0, dataTransform: a.dataTransform, dataSelectionOptions: a.dataSelectionOptions, advancedDataSelectionOptions: a.advancedDataSelectionOptions, graphDataConfiguration: a.graphDataConfiguration, debugMode: c, readableHeader: M || [] }) }, n)) }, i)) })
130
132
  ] })
131
133
  ] });
132
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MultiGraphDashboard.js","sources":["../src/Components/Dashboard/MultiGraphDashboard.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from 'react';\r\nimport intersection from 'lodash.intersection';\r\nimport flattenDeep from 'lodash.flattendeep';\r\nimport { createFilter, DropdownSelect } from '@undp/design-system-react/DropdownSelect';\r\nimport { Label } from '@undp/design-system-react/Label';\r\n\r\nimport { GraphContainer } from '../Elements/GraphContainer';\r\n\r\nimport { SingleGraphDashboard } from './SingleGraphDashboard';\r\n\r\nimport {\r\n ClassNameObject,\r\n DashboardColumnDataType,\r\n DashboardLayoutDataType,\r\n DataFilterDataType,\r\n DataSettingsDataType,\r\n FilterSettingsDataType,\r\n FilterUiSettingsDataType,\r\n GraphType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport {\r\n fetchAndParseCSV,\r\n fetchAndParseJSON,\r\n fetchAndParseMultipleDataSources,\r\n fetchAndTransformDataFromAPI,\r\n} from '@/Utils/fetchAndParseData';\r\nimport { getUniqValue } from '@/Utils/getUniqValue';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { transformColumnsToArray } from '@/Utils/transformData/transformColumnsToArray';\r\nimport { filterData } from '@/Utils/transformData/filterData';\r\nimport { transformDefaultValue } from '@/Utils/transformDataForSelect';\r\n\r\ninterface Props {\r\n dashboardID?: string;\r\n dashboardLayout: DashboardLayoutDataType;\r\n dataSettings: DataSettingsDataType;\r\n filters?: FilterUiSettingsDataType[];\r\n noOfFiltersPerRow?: number;\r\n dataFilters?: DataFilterDataType[];\r\n debugMode?: boolean;\r\n theme?: 'dark' | 'light';\r\n filterPosition?: 'top' | 'side';\r\n readableHeader?: {\r\n value: string;\r\n label: string;\r\n }[];\r\n uiMode?: 'light' | 'normal';\r\n graphStyles?: StyleObject;\r\n graphClassNames?: ClassNameObject;\r\n}\r\n\r\nconst TotalWidth = (columns: DashboardColumnDataType[]) => {\r\n const columnWidth = columns.map(d => d.columnWidth || 1);\r\n const sum = columnWidth.reduce((acc, cur) => acc + cur, 0);\r\n return sum;\r\n};\r\n\r\nconst GraphWithAttachedFilter: GraphType[] = [\r\n 'barChart',\r\n 'choroplethMap',\r\n 'biVariateChoroplethMap',\r\n 'circlePacking',\r\n 'treeMap',\r\n];\r\n\r\nexport function MultiGraphDashboard(props: Props) {\r\n const {\r\n dashboardID,\r\n dashboardLayout,\r\n dataSettings,\r\n filters,\r\n debugMode,\r\n theme = 'light',\r\n readableHeader,\r\n dataFilters,\r\n noOfFiltersPerRow = 4,\r\n filterPosition,\r\n uiMode = 'normal',\r\n graphStyles,\r\n graphClassNames,\r\n } = props;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [filteredData, setFilteredData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [data, setData] = useState<any>(undefined);\r\n const [filterSettings, setFilterSettings] = useState<FilterSettingsDataType[]>([]);\r\n\r\n const filterConfig = {\r\n ignoreCase: true,\r\n ignoreAccents: true,\r\n trim: true,\r\n };\r\n\r\n const updateFiltersEvent = useEffectEvent(() => {\r\n const filterSettingsTemp = (filters || []).map(el => ({\r\n filter: el.column,\r\n label: el.label || `Filter by ${el.column}`,\r\n singleSelect: el.singleSelect,\r\n clearable: el.clearable,\r\n defaultValue: transformDefaultValue(el.defaultValue),\r\n value: transformDefaultValue(el.defaultValue),\r\n availableValues: getUniqValue(data, el.column)\r\n .filter(v => !el.excludeValues?.includes(`${v}`))\r\n .map(v => ({ value: v, label: v })),\r\n allowSelectAll: el.allowSelectAll,\r\n width: el.width,\r\n }));\r\n setFilterSettings(filterSettingsTemp);\r\n });\r\n\r\n const filteredDataEvent = useEffectEvent(() => {\r\n if (!data || filterSettings.length === 0) setFilteredData(data);\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const result = data.filter((item: any) =>\r\n filterSettings.every(filter =>\r\n filter.value && flattenDeep([filter.value]).length > 0\r\n ? intersection(\r\n flattenDeep([item[filter.filter]]),\r\n flattenDeep([filter.value]).map(el => el.value),\r\n ).length > 0\r\n : true,\r\n ),\r\n );\r\n setFilteredData(result);\r\n }\r\n });\r\n useEffect(() => {\r\n filteredDataEvent();\r\n }, [filterSettings, data]);\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const dataFromFile = dataSettings.dataURL\r\n ? typeof dataSettings.dataURL === 'string'\r\n ? dataSettings.fileType === 'json'\r\n ? await fetchAndParseJSON(\r\n dataSettings.dataURL,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : dataSettings.fileType === 'api'\r\n ? await fetchAndTransformDataFromAPI(\r\n dataSettings.dataURL,\r\n dataSettings.apiHeaders,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : await fetchAndParseCSV(\r\n dataSettings.dataURL,\r\n dataSettings.dataTransformation,\r\n dataSettings.columnsToArray,\r\n debugMode,\r\n dataSettings.delimiter,\r\n true,\r\n )\r\n : await fetchAndParseMultipleDataSources(\r\n dataSettings.dataURL,\r\n dataSettings.idColumnTitle,\r\n )\r\n : await transformColumnsToArray(dataSettings.data, dataSettings.columnsToArray);\r\n setData(dataFromFile);\r\n } catch (error) {\r\n console.error('Data fetching error:', error);\r\n }\r\n };\r\n fetchData();\r\n updateFiltersEvent();\r\n }, [dataSettings, debugMode]);\r\n\r\n useEffect(() => {\r\n updateFiltersEvent();\r\n }, [filters]);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const handleFilterChange = (filter: string, values: any) => {\r\n setFilterSettings(prev => prev.map(f => (f.filter === filter ? { ...f, value: values } : f)));\r\n };\r\n return (\r\n <GraphContainer\r\n id={dashboardID}\r\n aria-label='This is a dashboard'\r\n backgroundColor={dashboardLayout.backgroundColor ?? false}\r\n theme={theme || 'light'}\r\n language={dashboardLayout.language || 'en'}\r\n padding={dashboardLayout.padding}\r\n >\r\n {dashboardLayout.title || dashboardLayout.description ? (\r\n <GraphHeader\r\n graphTitle={dashboardLayout.title}\r\n graphDescription={dashboardLayout.description}\r\n isDashboard\r\n />\r\n ) : null}\r\n <div className='flex gap-4 flex-wrap'>\r\n {filterSettings.length !== 0 ? (\r\n <div\r\n className='flex-grow flex-shrink-0'\r\n style={{\r\n width: filterPosition === 'side' ? '280px' : '100%',\r\n }}\r\n >\r\n <div className='flex flex-wrap items-start gap-4 w-full sticky top-4'>\r\n {filterSettings?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label}</Label>\r\n {d.singleSelect ? (\r\n <DropdownSelect\r\n options={d.availableValues}\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n size='sm'\r\n variant={uiMode}\r\n isMulti={false}\r\n isSearchable\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n defaultValue={d.defaultValue}\r\n value={d.value}\r\n />\r\n ) : (\r\n <>\r\n <DropdownSelect\r\n options={d.availableValues}\r\n isMulti\r\n size='sm'\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n variant={uiMode}\r\n isSearchable\r\n controlShouldRenderValue\r\n closeMenuOnSelect={false}\r\n hideSelectedOptions={false}\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n value={d.value}\r\n defaultValue={d.defaultValue}\r\n />\r\n {d.allowSelectAll ? (\r\n <button\r\n type='button'\r\n className='bg-transparent border-0 p-0 mt-2 cursor-pointer text-primary-blue-600 dark:text-primary-blue-400'\r\n onClick={() => {\r\n handleFilterChange(d.filter, d.availableValues);\r\n }}\r\n >\r\n Select all options\r\n </button>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n <div\r\n className='flex flex-wrap gap-4 flex-grow flex-shrink-0 min-w-[280px]'\r\n style={{\r\n width: filterPosition === 'side' ? 'calc(100% - 280px - 1rem)' : '100%',\r\n }}\r\n >\r\n {dashboardLayout.rows.map((d, i) => (\r\n <div\r\n key={i}\r\n className='flex flex-wrap items-stretch gap-4 w-full h-auto'\r\n style={{\r\n minHeight: `${d.height || 0}px`,\r\n }}\r\n >\r\n {d.columns.map((el, j) => (\r\n <div\r\n key={j}\r\n className='flex bg-transparent h-inherit grow min-w-60'\r\n style={{\r\n width: `calc(${(100 * (el.columnWidth || 1)) / TotalWidth(d.columns)}% - ${\r\n (TotalWidth(d.columns) - (el.columnWidth || 1)) / TotalWidth(d.columns)\r\n }rem)`,\r\n minHeight: 'inherit',\r\n }}\r\n >\r\n <SingleGraphDashboard\r\n graphType={el.graphType}\r\n dataFilters={el.dataFilters}\r\n uiMode={uiMode}\r\n graphSettings={{\r\n ...(el.settings || {}),\r\n width: undefined,\r\n height: undefined,\r\n resetSelectionOnDoubleClick: el.attachedFilter\r\n ? false\r\n : el.settings?.resetSelectionOnDoubleClick,\r\n styles: el.settings?.styles || graphStyles,\r\n classNames: el.settings?.classNames || graphClassNames,\r\n radius: el.graphType === 'donutChart' ? undefined : el.settings?.radius,\r\n size: el.graphType === 'unitChart' ? el.settings?.size : undefined,\r\n language: el.settings?.language || dashboardLayout.language,\r\n theme: el.settings?.theme || theme,\r\n }}\r\n dataSettings={{\r\n data: filteredData ? filterData(filteredData, dataFilters || []) : undefined,\r\n }}\r\n updateFilters={\r\n el.attachedFilter &&\r\n GraphWithAttachedFilter.indexOf(el.graphType) !== -1 &&\r\n filterSettings.findIndex(f => f.filter === el.attachedFilter) !== -1\r\n ? dClicked => {\r\n const indx = filterSettings.findIndex(\r\n f => f.filter === el.attachedFilter,\r\n );\r\n const value = dClicked\r\n ? filterSettings[indx].singleSelect\r\n ? { value: dClicked, label: dClicked }\r\n : [{ value: dClicked, label: dClicked }]\r\n : undefined;\r\n handleFilterChange(el.attachedFilter as string, value);\r\n }\r\n : undefined\r\n }\r\n dataTransform={el.dataTransform}\r\n dataSelectionOptions={el.dataSelectionOptions}\r\n advancedDataSelectionOptions={el.advancedDataSelectionOptions}\r\n graphDataConfiguration={el.graphDataConfiguration}\r\n debugMode={debugMode}\r\n readableHeader={readableHeader || []}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["TotalWidth","columns","map","d","columnWidth","reduce","acc","cur","GraphWithAttachedFilter","MultiGraphDashboard","props","dashboardID","dashboardLayout","dataSettings","filters","debugMode","theme","readableHeader","dataFilters","noOfFiltersPerRow","filterPosition","uiMode","graphStyles","graphClassNames","filteredData","setFilteredData","useState","undefined","data","setData","filterSettings","setFilterSettings","filterConfig","ignoreCase","ignoreAccents","trim","updateFiltersEvent","useEffectEvent","filterSettingsTemp","el","filter","column","label","singleSelect","clearable","defaultValue","transformDefaultValue","value","availableValues","getUniqValue","v","excludeValues","includes","allowSelectAll","width","filteredDataEvent","length","result","item","every","flattenDeep","intersection","useEffect","fetchData","dataFromFile","dataURL","fileType","fetchAndParseJSON","columnsToArray","dataTransformation","fetchAndTransformDataFromAPI","apiHeaders","fetchAndParseCSV","delimiter","fetchAndParseMultipleDataSources","idColumnTitle","transformColumnsToArray","error","console","handleFilterChange","values","prev","f","GraphContainer","backgroundColor","language","padding","title","description","jsx","GraphHeader","jsxs","i","flexGrow","flexShrink","minWidth","Label","DropdownSelect","createFilter","Fragment","rows","minHeight","height","j","SingleGraphDashboard","graphType","settings","resetSelectionOnDoubleClick","attachedFilter","styles","classNames","radius","size","filterData","indexOf","findIndex","dClicked","indx","dataTransform","dataSelectionOptions","advancedDataSelectionOptions","graphDataConfiguration"],"mappings":"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"}
1
+ {"version":3,"file":"MultiGraphDashboard.js","sources":["../src/Components/Dashboard/MultiGraphDashboard.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from 'react';\r\nimport intersection from 'lodash.intersection';\r\nimport flattenDeep from 'lodash.flattendeep';\r\nimport { createFilter, DropdownSelect } from '@undp/design-system-react/DropdownSelect';\r\nimport { Label } from '@undp/design-system-react/Label';\r\n\r\nimport { GraphContainer } from '../Elements/GraphContainer';\r\n\r\nimport { SingleGraphDashboard } from './SingleGraphDashboard';\r\n\r\nimport {\r\n ClassNameObject,\r\n DashboardColumnDataType,\r\n DashboardLayoutDataType,\r\n DataFilterDataType,\r\n DataSettingsDataType,\r\n FilterSettingsDataType,\r\n FilterUiSettingsDataType,\r\n GraphType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport {\r\n fetchAndParseCSV,\r\n fetchAndParseJSON,\r\n fetchAndParseMultipleDataSources,\r\n fetchAndTransformDataFromAPI,\r\n} from '@/Utils/fetchAndParseData';\r\nimport { getUniqValue } from '@/Utils/getUniqValue';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { transformColumnsToArray } from '@/Utils/transformData/transformColumnsToArray';\r\nimport { filterData } from '@/Utils/transformData/filterData';\r\nimport { transformDefaultValue } from '@/Utils/transformDataForSelect';\r\n\r\ninterface Props {\r\n dashboardID?: string;\r\n dashboardLayout: DashboardLayoutDataType;\r\n dataSettings: DataSettingsDataType;\r\n filters?: FilterUiSettingsDataType[];\r\n noOfFiltersPerRow?: number;\r\n dataFilters?: DataFilterDataType[];\r\n debugMode?: boolean;\r\n theme?: 'dark' | 'light';\r\n filterPosition?: 'top' | 'side';\r\n readableHeader?: {\r\n value: string;\r\n label: string;\r\n }[];\r\n uiMode?: 'light' | 'normal';\r\n graphStyles?: StyleObject;\r\n graphClassNames?: ClassNameObject;\r\n}\r\n\r\nconst TotalWidth = (columns: DashboardColumnDataType[]) => {\r\n const columnWidth = columns.map(d => d.columnWidth || 1);\r\n const sum = columnWidth.reduce((acc, cur) => acc + cur, 0);\r\n return sum;\r\n};\r\n\r\nconst GraphWithAttachedFilter: GraphType[] = [\r\n 'barChart',\r\n 'choroplethMap',\r\n 'biVariateChoroplethMap',\r\n 'circlePacking',\r\n 'treeMap',\r\n];\r\n\r\nexport function MultiGraphDashboard(props: Props) {\r\n const {\r\n dashboardID,\r\n dashboardLayout,\r\n dataSettings,\r\n filters,\r\n debugMode,\r\n theme = 'light',\r\n readableHeader,\r\n dataFilters,\r\n noOfFiltersPerRow = 4,\r\n filterPosition,\r\n uiMode = 'normal',\r\n graphStyles,\r\n graphClassNames,\r\n } = props;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [filteredData, setFilteredData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [data, setData] = useState<any>(undefined);\r\n const [filterSettings, setFilterSettings] = useState<FilterSettingsDataType[]>([]);\r\n\r\n const filterConfig = {\r\n ignoreCase: true,\r\n ignoreAccents: true,\r\n trim: true,\r\n };\r\n\r\n const updateFiltersEvent = useEffectEvent(() => {\r\n const filterSettingsTemp = (filters || []).map(el => ({\r\n filter: el.column,\r\n label: el.label || `Filter by ${el.column}`,\r\n singleSelect: el.singleSelect,\r\n clearable: el.clearable,\r\n defaultValue: transformDefaultValue(el.defaultValue),\r\n value: transformDefaultValue(el.defaultValue),\r\n availableValues: getUniqValue(data, el.column)\r\n .filter(v => !el.excludeValues?.includes(`${v}`))\r\n .map(v => ({ value: v, label: v })),\r\n allowSelectAll: el.allowSelectAll,\r\n width: el.width,\r\n }));\r\n setFilterSettings(filterSettingsTemp);\r\n });\r\n\r\n const filteredDataEvent = useEffectEvent(() => {\r\n if (!data || filterSettings.length === 0) setFilteredData(data);\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const result = data.filter((item: any) =>\r\n filterSettings.every(filter =>\r\n filter.value && flattenDeep([filter.value]).length > 0\r\n ? intersection(\r\n flattenDeep([item[filter.filter]]),\r\n flattenDeep([filter.value]).map(el => el.value),\r\n ).length > 0\r\n : true,\r\n ),\r\n );\r\n setFilteredData(result);\r\n }\r\n });\r\n useEffect(() => {\r\n filteredDataEvent();\r\n }, [filterSettings, data]);\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const dataFromFile = dataSettings.dataURL\r\n ? typeof dataSettings.dataURL === 'string'\r\n ? dataSettings.fileType === 'json'\r\n ? await fetchAndParseJSON(\r\n dataSettings.dataURL,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : dataSettings.fileType === 'api'\r\n ? await fetchAndTransformDataFromAPI(\r\n dataSettings.dataURL,\r\n dataSettings.apiHeaders,\r\n dataSettings.columnsToArray,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : await fetchAndParseCSV(\r\n dataSettings.dataURL,\r\n dataSettings.dataTransformation,\r\n dataSettings.columnsToArray,\r\n debugMode,\r\n dataSettings.delimiter,\r\n true,\r\n )\r\n : await fetchAndParseMultipleDataSources(\r\n dataSettings.dataURL,\r\n dataSettings.idColumnTitle,\r\n )\r\n : await transformColumnsToArray(dataSettings.data, dataSettings.columnsToArray);\r\n setData(dataFromFile);\r\n } catch (error) {\r\n console.error('Data fetching error:', error);\r\n }\r\n };\r\n fetchData();\r\n updateFiltersEvent();\r\n }, [dataSettings, debugMode]);\r\n\r\n useEffect(() => {\r\n updateFiltersEvent();\r\n }, [filters]);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const handleFilterChange = (filter: string, values: any) => {\r\n setFilterSettings(prev => prev.map(f => (f.filter === filter ? { ...f, value: values } : f)));\r\n };\r\n return (\r\n <GraphContainer\r\n id={dashboardID}\r\n aria-label='This is a dashboard'\r\n backgroundColor={dashboardLayout.backgroundColor ?? false}\r\n theme={theme || 'light'}\r\n language={dashboardLayout.language || 'en'}\r\n padding={dashboardLayout.padding}\r\n >\r\n {dashboardLayout.title || dashboardLayout.description ? (\r\n <GraphHeader\r\n graphTitle={dashboardLayout.title}\r\n graphDescription={dashboardLayout.description}\r\n isDashboard\r\n />\r\n ) : null}\r\n <div className='flex gap-4 flex-wrap'>\r\n {filterSettings.length !== 0 ? (\r\n <div\r\n className='flex-grow flex-shrink-0'\r\n style={{\r\n width: filterPosition === 'side' ? '280px' : '100%',\r\n }}\r\n >\r\n <div className='flex flex-wrap items-start gap-4 w-full sticky top-4'>\r\n {filterSettings?.map((d, i) => (\r\n <div\r\n style={{\r\n width:\r\n d.width ||\r\n `calc(${100 / noOfFiltersPerRow}% - ${\r\n (noOfFiltersPerRow - 1) / noOfFiltersPerRow\r\n }rem)`,\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n key={i}\r\n >\r\n <Label className='mb-2'>{d.label}</Label>\r\n {d.singleSelect ? (\r\n <DropdownSelect\r\n options={d.availableValues}\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n size='sm'\r\n variant={uiMode}\r\n isMulti={false}\r\n isSearchable\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n defaultValue={d.defaultValue}\r\n value={d.value}\r\n />\r\n ) : (\r\n <>\r\n <DropdownSelect\r\n options={d.availableValues}\r\n isMulti\r\n size='sm'\r\n isClearable={d.clearable === undefined ? true : d.clearable}\r\n variant={uiMode}\r\n isSearchable\r\n controlShouldRenderValue\r\n closeMenuOnSelect={false}\r\n hideSelectedOptions={false}\r\n filterOption={createFilter(filterConfig)}\r\n onChange={el => {\r\n handleFilterChange(d.filter, el);\r\n }}\r\n value={d.value}\r\n defaultValue={d.defaultValue}\r\n />\r\n {d.allowSelectAll ? (\r\n <button\r\n type='button'\r\n className='bg-transparent border-0 p-0 mt-2 cursor-pointer text-primary-blue-600 dark:text-primary-blue-400'\r\n onClick={() => {\r\n handleFilterChange(d.filter, d.availableValues);\r\n }}\r\n >\r\n Select all options\r\n </button>\r\n ) : null}\r\n </>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n <div\r\n className='flex flex-wrap gap-4 flex-grow flex-shrink-0 min-w-[280px]'\r\n style={{\r\n width: filterPosition === 'side' ? 'calc(100% - 280px - 1rem)' : '100%',\r\n }}\r\n >\r\n {dashboardLayout.rows.map((d, i) => (\r\n <div\r\n key={i}\r\n className='flex flex-wrap items-stretch gap-4 w-full h-auto'\r\n style={{\r\n minHeight: `${d.height || 0}px`,\r\n }}\r\n >\r\n {d.columns.map((el, j) => (\r\n <div\r\n key={j}\r\n className='flex bg-transparent grow min-w-60'\r\n style={{\r\n width: `calc(${(100 * (el.columnWidth || 1)) / TotalWidth(d.columns)}% - ${\r\n (TotalWidth(d.columns) - (el.columnWidth || 1)) / TotalWidth(d.columns)\r\n }rem)`,\r\n minHeight: 'inherit',\r\n }}\r\n >\r\n <SingleGraphDashboard\r\n graphType={el.graphType}\r\n dataFilters={el.dataFilters}\r\n uiMode={uiMode}\r\n graphSettings={{\r\n ...(el.settings || {}),\r\n width: undefined,\r\n height: undefined,\r\n minHeight: undefined,\r\n relativeHeight: undefined,\r\n resetSelectionOnDoubleClick: el.attachedFilter\r\n ? false\r\n : el.settings?.resetSelectionOnDoubleClick,\r\n styles: el.settings?.styles || graphStyles,\r\n classNames: el.settings?.classNames || graphClassNames,\r\n radius: el.graphType === 'donutChart' ? undefined : el.settings?.radius,\r\n size: el.graphType === 'unitChart' ? el.settings?.size : undefined,\r\n language: el.settings?.language || dashboardLayout.language,\r\n theme: el.settings?.theme || theme,\r\n }}\r\n dataSettings={{\r\n data: filteredData ? filterData(filteredData, dataFilters || []) : undefined,\r\n }}\r\n updateFilters={\r\n el.attachedFilter &&\r\n GraphWithAttachedFilter.indexOf(el.graphType) !== -1 &&\r\n filterSettings.findIndex(f => f.filter === el.attachedFilter) !== -1\r\n ? dClicked => {\r\n const indx = filterSettings.findIndex(\r\n f => f.filter === el.attachedFilter,\r\n );\r\n const value = dClicked\r\n ? filterSettings[indx].singleSelect\r\n ? { value: dClicked, label: dClicked }\r\n : [{ value: dClicked, label: dClicked }]\r\n : undefined;\r\n handleFilterChange(el.attachedFilter as string, value);\r\n }\r\n : undefined\r\n }\r\n dataTransform={el.dataTransform}\r\n dataSelectionOptions={el.dataSelectionOptions}\r\n advancedDataSelectionOptions={el.advancedDataSelectionOptions}\r\n graphDataConfiguration={el.graphDataConfiguration}\r\n debugMode={debugMode}\r\n readableHeader={readableHeader || []}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["TotalWidth","columns","map","d","columnWidth","reduce","acc","cur","GraphWithAttachedFilter","MultiGraphDashboard","props","dashboardID","dashboardLayout","dataSettings","filters","debugMode","theme","readableHeader","dataFilters","noOfFiltersPerRow","filterPosition","uiMode","graphStyles","graphClassNames","filteredData","setFilteredData","useState","undefined","data","setData","filterSettings","setFilterSettings","filterConfig","ignoreCase","ignoreAccents","trim","updateFiltersEvent","useEffectEvent","filterSettingsTemp","el","filter","column","label","singleSelect","clearable","defaultValue","transformDefaultValue","value","availableValues","getUniqValue","v","excludeValues","includes","allowSelectAll","width","filteredDataEvent","length","result","item","every","flattenDeep","intersection","useEffect","fetchData","dataFromFile","dataURL","fileType","fetchAndParseJSON","columnsToArray","dataTransformation","fetchAndTransformDataFromAPI","apiHeaders","fetchAndParseCSV","delimiter","fetchAndParseMultipleDataSources","idColumnTitle","transformColumnsToArray","error","console","handleFilterChange","values","prev","f","GraphContainer","backgroundColor","language","padding","title","description","jsx","GraphHeader","jsxs","i","flexGrow","flexShrink","minWidth","Label","DropdownSelect","createFilter","Fragment","rows","minHeight","height","j","SingleGraphDashboard","graphType","settings","relativeHeight","resetSelectionOnDoubleClick","attachedFilter","styles","classNames","radius","size","filterData","indexOf","findIndex","dClicked","indx","dataTransform","dataSelectionOptions","advancedDataSelectionOptions","graphDataConfiguration"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index-CHPV5EwG-CTPQjnHt.cjs"),n=require("react"),D=require("./DropdownSelect-Doz3mCrM.cjs"),W=require("./checkIfMultiple-wg6hJLXy.cjs"),k=require("./Spinner-DRMBUsX7.cjs"),q=require("./SingleGraphDashboard.cjs"),m=require("./fetchAndParseData-l5HGMAEs.cjs"),A=require("./GraphHeader.cjs"),V=require("./filterData-T5DQBE9b.cjs");function G(u,d,e,t){const i=[];return u.forEach(c=>{Object.entries(c).forEach(([l,p])=>{if(l!==d){const h={indicator:e.findIndex(g=>g.value===l)!==-1?e[e.findIndex(g=>g.value===l)].label:l,value:p};h[d]=c[d],i.push(h)}})}),t&&console.log(i),i}const x=u=>u.map(t=>t.columnWidth||1).reduce((t,i)=>t+i,0);function M(u){const{dashboardID:d,dashboardLayout:e,dataSettings:t,debugMode:i,theme:c="light",readableHeader:l,dataFilters:p,uiMode:h="normal",graphStyles:g,graphClassNames:w}=u,C={ignoreCase:!0,ignoreAccents:!0,trim:!0},[j,E]=n.useState(void 0),[R,S]=n.useState([]),[f,v]=n.useState(void 0),[b,T]=n.useState(void 0),[F,I]=n.useState(void 0),y=n.useEffectEvent(()=>{const r=V.filterData(F,p||[]);S(r.map(a=>a[t.keyColumn])),v(r[0][t.keyColumn]);const o=G(r,t.keyColumn,l||[],i);T(o)}),L=n.useEffectEvent(()=>{if(b){const r=b.filter(o=>o[t.keyColumn]===f);E(r)}});return n.useEffect(()=>{L()},[f,t.keyColumn]),n.useEffect(()=>{(async()=>{try{const o=t.dataURL?typeof t.dataURL=="string"?t.fileType==="json"?await m.fetchAndParseJSON(t.dataURL,void 0,t.dataTransformation,i):t.fileType==="api"?await m.fetchAndTransformDataFromAPI(t.dataURL,t.apiHeaders,void 0,t.dataTransformation,i):await m.fetchAndParseCSV(t.dataURL,t.dataTransformation,void 0,i,t.delimiter,!0):await m.fetchAndParseMultipleDataSources(t.dataURL,t.idColumnTitle):await m.transformColumnsToArray(t.data,void 0);I(o),y()}catch(o){console.error("Data fetching error:",o)}})()},[t,i]),n.useEffect(()=>{y()},[p,l]),s.jsxRuntimeExports.jsx("div",{className:`${c||"light"} flex grow`,dir:e.language==="he"||e.language==="ar"?"rtl":void 0,children:s.jsxRuntimeExports.jsx("div",{className:`${e?.backgroundColor?e?.backgroundColor===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}flex flex-col h-inherit w-full ml-auto mr-auto grow gap-4 ${e?.language||"en"}`,style:{...e?.backgroundColor&&e?.backgroundColor!==!0?{backgroundColor:e?.backgroundColor}:{}},id:d,children:s.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:e.backgroundColor?e.padding||"1rem":e.padding||0},children:s.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[e.title||e.description?s.jsxRuntimeExports.jsx(A.GraphHeader,{graphTitle:e.title,graphDescription:e.description,isDashboard:!0}):null,j?s.jsxRuntimeExports.jsxs(s.jsxRuntimeExports.Fragment,{children:[s.jsxRuntimeExports.jsx("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap",alignItems:"flex-start",width:"100%"},children:s.jsxRuntimeExports.jsxs("div",{style:{width:"100%",flexGrow:1,flexShrink:0,minWidth:"240px"},children:[e.dropdownLabel?s.jsxRuntimeExports.jsx(W.b,{className:"mb-2",children:e.dropdownLabel}):null,s.jsxRuntimeExports.jsx(D.ja,{options:R.map(r=>({value:r,label:r})),size:"sm",variant:h,isClearable:!1,isSearchable:!0,controlShouldRenderValue:!0,filterOption:D.Du(C),onChange:r=>{v(r?.value)},defaultValue:{value:f,label:f}})]})}),e.rows.map((r,o)=>s.jsxRuntimeExports.jsx("div",{style:{display:"flex",gap:"1rem",alignItems:"stretch",minHeight:`${r.height||0}px`,height:"auto",width:"100%",flexWrap:"wrap"},children:r.columns.map((a,N)=>s.jsxRuntimeExports.jsx("div",{className:"flex bg-transparent h-inherit grow min-w-60",style:{width:`calc(${100*(a.columnWidth||1)/x(r.columns)}% - ${(x(r.columns)-(a.columnWidth||1))/x(r.columns)}rem)`,minHeight:"inherit"},children:s.jsxRuntimeExports.jsx(q.SingleGraphDashboard,{graphType:a.graphType,dataFilters:a.dataFilters,uiMode:h,graphSettings:{...a.settings||{},width:void 0,height:void 0,radius:a.graphType==="donutChart"?void 0:a.settings?.radius,size:a.graphType==="unitChart"?a.settings.size:void 0,language:a.settings?.language||e.language,theme:a.settings?.theme||c,styles:a.settings?.styles||g,classNames:a.settings?.classNames||w},dataSettings:{data:j},graphDataConfiguration:a.graphDataConfiguration?a.graphDataConfiguration:a.graphType==="unitChart"?[{columnId:"indicator",chartConfigId:"label"},{columnId:"value",chartConfigId:"value"}]:[{columnId:"indicator",chartConfigId:"label"},{columnId:"value",chartConfigId:"size"}],debugMode:i,readableHeader:l||[]})},N))},o))]}):s.jsxRuntimeExports.jsx("div",{className:"w-full flex justify-center p-4",children:s.jsxRuntimeExports.jsx(k.w,{})})]})})})})}exports.MultiGraphDashboardWideToLongFormat=M;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./index-CHPV5EwG-CTPQjnHt.cjs"),n=require("react"),D=require("./DropdownSelect-Doz3mCrM.cjs"),W=require("./checkIfMultiple-wg6hJLXy.cjs"),k=require("./Spinner-DRMBUsX7.cjs"),q=require("./SingleGraphDashboard.cjs"),m=require("./fetchAndParseData-l5HGMAEs.cjs"),A=require("./GraphHeader.cjs"),V=require("./filterData-T5DQBE9b.cjs");function G(u,d,e,t){const s=[];return u.forEach(c=>{Object.entries(c).forEach(([l,p])=>{if(l!==d){const g={indicator:e.findIndex(h=>h.value===l)!==-1?e[e.findIndex(h=>h.value===l)].label:l,value:p};g[d]=c[d],s.push(g)}})}),t&&console.log(s),s}const x=u=>u.map(t=>t.columnWidth||1).reduce((t,s)=>t+s,0);function H(u){const{dashboardID:d,dashboardLayout:e,dataSettings:t,debugMode:s,theme:c="light",readableHeader:l,dataFilters:p,uiMode:g="normal",graphStyles:h,graphClassNames:w}=u,C={ignoreCase:!0,ignoreAccents:!0,trim:!0},[v,E]=n.useState(void 0),[R,S]=n.useState([]),[f,j]=n.useState(void 0),[b,T]=n.useState(void 0),[F,I]=n.useState(void 0),y=n.useEffectEvent(()=>{const r=V.filterData(F,p||[]);S(r.map(a=>a[t.keyColumn])),j(r[0][t.keyColumn]);const o=G(r,t.keyColumn,l||[],s);T(o)}),L=n.useEffectEvent(()=>{if(b){const r=b.filter(o=>o[t.keyColumn]===f);E(r)}});return n.useEffect(()=>{L()},[f,t.keyColumn]),n.useEffect(()=>{(async()=>{try{const o=t.dataURL?typeof t.dataURL=="string"?t.fileType==="json"?await m.fetchAndParseJSON(t.dataURL,void 0,t.dataTransformation,s):t.fileType==="api"?await m.fetchAndTransformDataFromAPI(t.dataURL,t.apiHeaders,void 0,t.dataTransformation,s):await m.fetchAndParseCSV(t.dataURL,t.dataTransformation,void 0,s,t.delimiter,!0):await m.fetchAndParseMultipleDataSources(t.dataURL,t.idColumnTitle):await m.transformColumnsToArray(t.data,void 0);I(o),y()}catch(o){console.error("Data fetching error:",o)}})()},[t,s]),n.useEffect(()=>{y()},[p,l]),i.jsxRuntimeExports.jsx("div",{className:`${c||"light"} flex grow`,dir:e.language==="he"||e.language==="ar"?"rtl":void 0,children:i.jsxRuntimeExports.jsx("div",{className:`${e?.backgroundColor?e?.backgroundColor===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}flex flex-col w-full ml-auto mr-auto grow gap-4 ${e?.language||"en"}`,style:{...e?.backgroundColor&&e?.backgroundColor!==!0?{backgroundColor:e?.backgroundColor}:{}},id:d,children:i.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:e.backgroundColor?e.padding||"1rem":e.padding||0},children:i.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[e.title||e.description?i.jsxRuntimeExports.jsx(A.GraphHeader,{graphTitle:e.title,graphDescription:e.description,isDashboard:!0}):null,v?i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[i.jsxRuntimeExports.jsx("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap",alignItems:"flex-start",width:"100%"},children:i.jsxRuntimeExports.jsxs("div",{style:{width:"100%",flexGrow:1,flexShrink:0,minWidth:"240px"},children:[e.dropdownLabel?i.jsxRuntimeExports.jsx(W.b,{className:"mb-2",children:e.dropdownLabel}):null,i.jsxRuntimeExports.jsx(D.ja,{options:R.map(r=>({value:r,label:r})),size:"sm",variant:g,isClearable:!1,isSearchable:!0,controlShouldRenderValue:!0,filterOption:D.Du(C),onChange:r=>{j(r?.value)},defaultValue:{value:f,label:f}})]})}),e.rows.map((r,o)=>i.jsxRuntimeExports.jsx("div",{style:{display:"flex",gap:"1rem",alignItems:"stretch",minHeight:`${r.height||0}px`,height:"auto",width:"100%",flexWrap:"wrap"},children:r.columns.map((a,N)=>i.jsxRuntimeExports.jsx("div",{className:"flex bg-transparent grow min-w-60",style:{width:`calc(${100*(a.columnWidth||1)/x(r.columns)}% - ${(x(r.columns)-(a.columnWidth||1))/x(r.columns)}rem)`,minHeight:"inherit"},children:i.jsxRuntimeExports.jsx(q.SingleGraphDashboard,{graphType:a.graphType,dataFilters:a.dataFilters,uiMode:g,graphSettings:{...a.settings||{},width:void 0,height:void 0,minHeight:void 0,relativeHeight:void 0,radius:a.graphType==="donutChart"?void 0:a.settings?.radius,size:a.graphType==="unitChart"?a.settings.size:void 0,language:a.settings?.language||e.language,theme:a.settings?.theme||c,styles:a.settings?.styles||h,classNames:a.settings?.classNames||w},dataSettings:{data:v},graphDataConfiguration:a.graphDataConfiguration?a.graphDataConfiguration:a.graphType==="unitChart"?[{columnId:"indicator",chartConfigId:"label"},{columnId:"value",chartConfigId:"value"}]:[{columnId:"indicator",chartConfigId:"label"},{columnId:"value",chartConfigId:"size"}],debugMode:s,readableHeader:l||[]})},N))},o))]}):i.jsxRuntimeExports.jsx("div",{className:"w-full flex justify-center p-4",children:i.jsxRuntimeExports.jsx(k.w,{})})]})})})})}exports.MultiGraphDashboardWideToLongFormat=H;
2
2
  //# sourceMappingURL=MultiGraphDashboardWideToLongFormat.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiGraphDashboardWideToLongFormat.cjs","sources":["../src/Utils/wideToLongTranformation.ts","../src/Components/Dashboard/MultiGraphDashboardWideToLongFormat.tsx"],"sourcesContent":["export function wideToLongTransformation(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data: any,\r\n keyColumn: string,\r\n readableHeader: {\r\n value: string;\r\n label: string;\r\n }[],\r\n debugMode?: boolean,\r\n) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const transformedData: any = [];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data.forEach((row: any) => {\r\n Object.entries(row).forEach(([key, value]) => {\r\n if (key !== keyColumn) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const obj: any = {\r\n indicator:\r\n readableHeader.findIndex(d => d.value === key) !== -1\r\n ? readableHeader[readableHeader.findIndex(d => d.value === key)].label\r\n : key,\r\n value,\r\n };\r\n obj[keyColumn] = row[keyColumn];\r\n transformedData.push(obj);\r\n }\r\n });\r\n });\r\n if (debugMode) {\r\n // eslint-disable-next-line no-console\r\n console.log(transformedData);\r\n }\r\n return transformedData;\r\n}\r\n","import { useEffect, useEffectEvent, useState } from 'react';\r\nimport { createFilter, DropdownSelect } from '@undp/design-system-react/DropdownSelect';\r\nimport { Label } from '@undp/design-system-react/Label';\r\nimport { Spinner } from '@undp/design-system-react/Spinner';\r\n\r\nimport { SingleGraphDashboard } from './SingleGraphDashboard';\r\n\r\nimport {\r\n ClassNameObject,\r\n DashboardFromWideToLongFormatColumnDataType,\r\n DashboardFromWideToLongFormatLayoutDataType,\r\n DataFilterDataType,\r\n DataSettingsWideToLongDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport {\r\n fetchAndParseCSV,\r\n fetchAndParseJSON,\r\n fetchAndParseMultipleDataSources,\r\n fetchAndTransformDataFromAPI,\r\n} from '@/Utils/fetchAndParseData';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { wideToLongTransformation } from '@/Utils/wideToLongTranformation';\r\nimport { filterData } from '@/Utils/transformData/filterData';\r\nimport { transformColumnsToArray } from '@/Utils/transformData/transformColumnsToArray';\r\n\r\ninterface Props {\r\n dashboardID?: string;\r\n dashboardLayout: DashboardFromWideToLongFormatLayoutDataType;\r\n dataSettings: DataSettingsWideToLongDataType;\r\n debugMode?: boolean;\r\n theme?: 'dark' | 'light';\r\n readableHeader?: {\r\n value: string;\r\n label: string;\r\n }[];\r\n dataFilters?: DataFilterDataType[];\r\n uiMode?: 'light' | 'normal';\r\n graphStyles?: StyleObject;\r\n graphClassNames?: ClassNameObject;\r\n}\r\n\r\nconst TotalWidth = (columns: DashboardFromWideToLongFormatColumnDataType[]) => {\r\n const columnWidth = columns.map(d => d.columnWidth || 1);\r\n const sum = columnWidth.reduce((acc, cur) => acc + cur, 0);\r\n return sum;\r\n};\r\n\r\nexport function MultiGraphDashboardWideToLongFormat(props: Props) {\r\n const {\r\n dashboardID,\r\n dashboardLayout,\r\n dataSettings,\r\n debugMode,\r\n theme = 'light',\r\n readableHeader,\r\n dataFilters,\r\n uiMode = 'normal',\r\n graphStyles,\r\n graphClassNames,\r\n } = props;\r\n\r\n const filterConfig = {\r\n ignoreCase: true,\r\n ignoreAccents: true,\r\n trim: true,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [filteredData, setFilteredData] = useState<any>(undefined);\r\n const [filterValues, setFilterValues] = useState<string[]>([]);\r\n const [selectedFilterValues, setSelectedFilterValues] = useState<string | undefined>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [data, setData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [unformattedData, setUnformattedData] = useState<any>(undefined);\r\n\r\n const updateDataAndFilterValueEvent = useEffectEvent(() => {\r\n const filteredData = filterData(unformattedData, dataFilters || []);\r\n setFilterValues(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filteredData.map((el: any) => el[dataSettings.keyColumn]),\r\n );\r\n setSelectedFilterValues(filteredData[0][dataSettings.keyColumn]);\r\n const tempData = wideToLongTransformation(\r\n filteredData,\r\n dataSettings.keyColumn,\r\n readableHeader || [],\r\n debugMode,\r\n );\r\n setData(tempData);\r\n });\r\n\r\n const updateFilteredDataEvent = useEffectEvent(() => {\r\n if (data) {\r\n const filteredDataTemp = data.filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (item: any) => item[dataSettings.keyColumn] === selectedFilterValues,\r\n );\r\n setFilteredData(filteredDataTemp);\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n updateFilteredDataEvent();\r\n }, [selectedFilterValues, dataSettings.keyColumn]);\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const dataFromFile = dataSettings.dataURL\r\n ? typeof dataSettings.dataURL === 'string'\r\n ? dataSettings.fileType === 'json'\r\n ? await fetchAndParseJSON(\r\n dataSettings.dataURL,\r\n undefined,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : dataSettings.fileType === 'api'\r\n ? await fetchAndTransformDataFromAPI(\r\n dataSettings.dataURL,\r\n dataSettings.apiHeaders,\r\n undefined,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : await fetchAndParseCSV(\r\n dataSettings.dataURL,\r\n dataSettings.dataTransformation,\r\n undefined,\r\n debugMode,\r\n dataSettings.delimiter,\r\n true,\r\n )\r\n : await fetchAndParseMultipleDataSources(\r\n dataSettings.dataURL,\r\n dataSettings.idColumnTitle,\r\n )\r\n : await transformColumnsToArray(dataSettings.data, undefined);\r\n setUnformattedData(dataFromFile);\r\n updateDataAndFilterValueEvent();\r\n } catch (error) {\r\n console.error('Data fetching error:', error);\r\n }\r\n };\r\n fetchData();\r\n }, [dataSettings, debugMode]);\r\n\r\n useEffect(() => {\r\n updateDataAndFilterValueEvent();\r\n }, [dataFilters, readableHeader]);\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex grow`}\r\n dir={\r\n dashboardLayout.language === 'he' || dashboardLayout.language === 'ar' ? 'rtl' : undefined\r\n }\r\n >\r\n <div\r\n className={`${\r\n !dashboardLayout?.backgroundColor\r\n ? 'bg-transparent '\r\n : dashboardLayout?.backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }flex flex-col h-inherit w-full ml-auto mr-auto grow gap-4 ${\r\n dashboardLayout?.language || 'en'\r\n }`}\r\n style={{\r\n ...(dashboardLayout?.backgroundColor && dashboardLayout?.backgroundColor !== true\r\n ? { backgroundColor: dashboardLayout?.backgroundColor }\r\n : {}),\r\n }}\r\n id={dashboardID}\r\n >\r\n <div\r\n className='flex grow'\r\n style={{\r\n padding: dashboardLayout.backgroundColor\r\n ? dashboardLayout.padding || '1rem'\r\n : dashboardLayout.padding || 0,\r\n }}\r\n >\r\n <div className='flex flex-col w-full gap-4 grow justify-between'>\r\n {dashboardLayout.title || dashboardLayout.description ? (\r\n <GraphHeader\r\n graphTitle={dashboardLayout.title}\r\n graphDescription={dashboardLayout.description}\r\n isDashboard\r\n />\r\n ) : null}\r\n {filteredData ? (\r\n <>\r\n <div\r\n style={{\r\n display: 'flex',\r\n gap: '1rem',\r\n flexWrap: 'wrap',\r\n alignItems: 'flex-start',\r\n width: '100%',\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: '100%',\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n >\r\n {dashboardLayout.dropdownLabel ? (\r\n <Label className='mb-2'>{dashboardLayout.dropdownLabel}</Label>\r\n ) : null}\r\n <DropdownSelect\r\n options={filterValues.map(d => ({\r\n value: d,\r\n label: d,\r\n }))}\r\n size='sm'\r\n variant={uiMode}\r\n isClearable={false}\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n setSelectedFilterValues(el?.value);\r\n }}\r\n defaultValue={{\r\n value: selectedFilterValues as string,\r\n label: selectedFilterValues as string,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n {dashboardLayout.rows.map((d, i) => (\r\n <div\r\n key={i}\r\n style={{\r\n display: 'flex',\r\n gap: '1rem',\r\n alignItems: 'stretch',\r\n minHeight: `${d.height || 0}px`,\r\n height: 'auto',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n }}\r\n >\r\n {d.columns.map((el, j) => (\r\n <div\r\n key={j}\r\n className='flex bg-transparent h-inherit grow min-w-60'\r\n style={{\r\n width: `calc(${\r\n (100 * (el.columnWidth || 1)) / TotalWidth(d.columns)\r\n }% - ${\r\n (TotalWidth(d.columns) - (el.columnWidth || 1)) / TotalWidth(d.columns)\r\n }rem)`,\r\n minHeight: 'inherit',\r\n }}\r\n >\r\n <SingleGraphDashboard\r\n graphType={el.graphType}\r\n dataFilters={el.dataFilters}\r\n uiMode={uiMode}\r\n graphSettings={{\r\n ...(el.settings || {}),\r\n width: undefined,\r\n height: undefined,\r\n radius: el.graphType === 'donutChart' ? undefined : el.settings?.radius,\r\n size: el.graphType === 'unitChart' ? el.settings.size : undefined,\r\n language: el.settings?.language || dashboardLayout.language,\r\n theme: el.settings?.theme || theme,\r\n styles: el.settings?.styles || graphStyles,\r\n classNames: el.settings?.classNames || graphClassNames,\r\n }}\r\n dataSettings={{ data: filteredData }}\r\n graphDataConfiguration={\r\n el.graphDataConfiguration\r\n ? el.graphDataConfiguration\r\n : el.graphType === 'unitChart'\r\n ? [\r\n {\r\n columnId: 'indicator',\r\n chartConfigId: 'label',\r\n },\r\n { columnId: 'value', chartConfigId: 'value' },\r\n ]\r\n : [\r\n {\r\n columnId: 'indicator',\r\n chartConfigId: 'label',\r\n },\r\n { columnId: 'value', chartConfigId: 'size' },\r\n ]\r\n }\r\n debugMode={debugMode}\r\n readableHeader={readableHeader || []}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </>\r\n ) : (\r\n <div className='w-full flex justify-center p-4'>\r\n <Spinner />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["wideToLongTransformation","data","keyColumn","readableHeader","debugMode","transformedData","forEach","row","Object","entries","key","value","obj","indicator","findIndex","d","label","push","console","log","TotalWidth","columns","map","columnWidth","reduce","acc","cur","MultiGraphDashboardWideToLongFormat","props","dashboardID","dashboardLayout","dataSettings","theme","dataFilters","uiMode","graphStyles","graphClassNames","filterConfig","ignoreCase","ignoreAccents","trim","filteredData","setFilteredData","useState","undefined","filterValues","setFilterValues","selectedFilterValues","setSelectedFilterValues","setData","unformattedData","setUnformattedData","updateDataAndFilterValueEvent","useEffectEvent","filterData","el","tempData","updateFilteredDataEvent","filteredDataTemp","filter","item","useEffect","dataFromFile","dataURL","fileType","fetchAndParseJSON","dataTransformation","fetchAndTransformDataFromAPI","apiHeaders","fetchAndParseCSV","delimiter","fetchAndParseMultipleDataSources","idColumnTitle","transformColumnsToArray","error","fetchData","jsx","language","backgroundColor","padding","jsxs","title","description","GraphHeader","Fragment","display","gap","flexWrap","alignItems","width","flexGrow","flexShrink","minWidth","dropdownLabel","Label","DropdownSelect","createFilter","rows","i","minHeight","height","j","SingleGraphDashboard","graphType","settings","radius","size","styles","classNames","graphDataConfiguration","columnId","chartConfigId","Spinner"],"mappings":"2aAAO,SAASA,EAEdC,EACAC,EACAC,EAIAC,EACA,CAEA,MAAMC,EAAuB,CAAA,EAE7BJ,OAAAA,EAAKK,QAASC,GAAa,CACzBC,OAAOC,QAAQF,CAAG,EAAED,QAAQ,CAAC,CAACI,EAAKC,CAAK,IAAM,CAC5C,GAAID,IAAQR,EAAW,CAErB,MAAMU,EAAW,CACfC,UACEV,EAAeW,aAAeC,EAAEJ,QAAUD,CAAG,IAAM,GAC/CP,EAAeA,EAAeW,UAAUC,GAAKA,EAAEJ,QAAUD,CAAG,CAAC,EAAEM,MAC/DN,EACNC,MAAAA,CAAAA,EAEFC,EAAIV,CAAS,EAAIK,EAAIL,CAAS,EAC9BG,EAAgBY,KAAKL,CAAG,CAC1B,CACF,CAAC,CACH,CAAC,EACGR,GAEFc,QAAQC,IAAId,CAAe,EAEtBA,CACT,CCQA,MAAMe,EAAcC,GACEA,EAAQC,IAAIP,GAAKA,EAAEQ,aAAe,CAAC,EAC/BC,OAAO,CAACC,EAAKC,IAAQD,EAAMC,EAAK,CAAC,EAIpD,SAASC,EAAoCC,EAAc,CAChE,KAAM,CACJC,YAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACA3B,UAAAA,EACA4B,MAAAA,EAAQ,QACR7B,eAAAA,EACA8B,YAAAA,EACAC,OAAAA,EAAS,SACTC,YAAAA,EACAC,gBAAAA,CAAAA,EACER,EAEES,EAAe,CACnBC,WAAY,GACZC,cAAe,GACfC,KAAM,EAAA,EAGF,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAAcC,MAAS,EACzD,CAACC,EAAcC,CAAe,EAAIH,EAAAA,SAAmB,CAAA,CAAE,EACvD,CAACI,EAAsBC,CAAuB,EAAIL,EAAAA,SAA6BC,MAAS,EAExF,CAAC3C,EAAMgD,CAAO,EAAIN,EAAAA,SAAcC,MAAS,EAEzC,CAACM,EAAiBC,CAAkB,EAAIR,EAAAA,SAAcC,MAAS,EAE/DQ,EAAgCC,EAAAA,eAAe,IAAM,CACzD,MAAMZ,EAAea,EAAAA,WAAWJ,EAAiBjB,GAAe,CAAA,CAAE,EAClEa,EAEEL,EAAanB,IAAKiC,GAAYA,EAAGxB,EAAa7B,SAAS,CAAC,CAAA,EAE1D8C,EAAwBP,EAAa,CAAC,EAAEV,EAAa7B,SAAS,CAAC,EAC/D,MAAMsD,EAAWxD,EACfyC,EACAV,EAAa7B,UACbC,GAAkB,CAAA,EAClBC,CACF,EACA6C,EAAQO,CAAQ,CAClB,CAAC,EAEKC,EAA0BJ,EAAAA,eAAe,IAAM,CACnD,GAAIpD,EAAM,CACR,MAAMyD,EAAmBzD,EAAK0D,OAE3BC,GAAcA,EAAK7B,EAAa7B,SAAS,IAAM6C,CAAAA,EAElDL,EAAgBgB,CAAgB,CAClC,CACF,CAAC,EAEDG,OAAAA,EAAAA,UAAU,IAAM,CACdJ,EAAAA,CACF,EAAG,CAACV,EAAsBhB,EAAa7B,SAAS,CAAC,EACjD2D,EAAAA,UAAU,IAAM,EACI,SAAY,CAC5B,GAAI,CACF,MAAMC,EAAe/B,EAAagC,QAC9B,OAAOhC,EAAagC,SAAY,SAC9BhC,EAAaiC,WAAa,OACxB,MAAMC,EAAAA,kBACJlC,EAAagC,QACbnB,OACAb,EAAamC,mBACb9D,CACF,EACA2B,EAAaiC,WAAa,MACxB,MAAMG,EAAAA,6BACJpC,EAAagC,QACbhC,EAAaqC,WACbxB,OACAb,EAAamC,mBACb9D,CACF,EACA,MAAMiE,EAAAA,iBACJtC,EAAagC,QACbhC,EAAamC,mBACbtB,OACAxC,EACA2B,EAAauC,UACb,EACF,EACJ,MAAMC,EAAAA,iCACJxC,EAAagC,QACbhC,EAAayC,aACf,EACF,MAAMC,EAAAA,wBAAwB1C,EAAa9B,KAAM2C,MAAS,EAC9DO,EAAmBW,CAAY,EAC/BV,EAAAA,CACF,OAASsB,EAAO,CACdxD,QAAQwD,MAAM,uBAAwBA,CAAK,CAC7C,CACF,GACAC,CACF,EAAG,CAAC5C,EAAc3B,CAAS,CAAC,EAE5ByD,EAAAA,UAAU,IAAM,CACdT,EAAAA,CACF,EAAG,CAACnB,EAAa9B,CAAc,CAAC,EAE9ByE,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAW,GAAG5C,GAAS,OAAO,aAC9B,IACEF,EAAgB+C,WAAa,MAAQ/C,EAAgB+C,WAAa,KAAO,MAAQjC,OAGnF,SAAAgC,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAW,GACR9C,GAAiBgD,gBAEdhD,GAAiBgD,kBAAoB,GACnC,gDACA,GAHF,iBAGI,6DAERhD,GAAiB+C,UAAY,IAAI,GAEnC,MAAO,CACL,GAAI/C,GAAiBgD,iBAAmBhD,GAAiBgD,kBAAoB,GACzE,CAAEA,gBAAiBhD,GAAiBgD,eAAAA,EACpC,CAAA,CAAC,EAEP,GAAIjD,EAEJ,iCAAC,MAAA,CACC,UAAU,YACV,MAAO,CACLkD,QAASjD,EAAgBgD,gBACrBhD,EAAgBiD,SAAW,OAC3BjD,EAAgBiD,SAAW,CAAA,EAGjC,SAAAC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,kDACZlD,SAAAA,CAAAA,EAAgBmD,OAASnD,EAAgBoD,YACxCN,EAAAA,kBAAAA,IAACO,EAAAA,YAAA,CACC,WAAYrD,EAAgBmD,MAC5B,iBAAkBnD,EAAgBoD,YAClC,YAAW,GAAA,EAEX,KACHzC,EACCuC,EAAAA,kBAAAA,KAAAI,6BAAA,CACE,SAAA,CAAAR,wBAAC,OACC,MAAO,CACLS,QAAS,OACTC,IAAK,OACLC,SAAU,OACVC,WAAY,aACZC,MAAO,MAAA,EAGT,SAAAT,EAAAA,kBAAAA,KAAC,MAAA,CACC,MAAO,CACLS,MAAO,OACPC,SAAU,EACVC,WAAY,EACZC,SAAU,OAAA,EAGX9D,SAAAA,CAAAA,EAAgB+D,cACfjB,wBAACkB,EAAAA,EAAA,CAAM,UAAU,OAAQhE,SAAAA,EAAgB+D,cAAc,EACrD,KACJjB,EAAAA,kBAAAA,IAACmB,EAAAA,GAAA,CACC,QAASlD,EAAavB,IAAIP,IAAM,CAC9BJ,MAAOI,EACPC,MAAOD,CAAAA,EACP,EACF,KAAK,KACL,QAASmB,EACT,YAAa,GACb,aAAY,GACZ,yBAAwB,GACxB,aAAc8D,EAAAA,GAAa3D,CAAY,EAEvC,SAAWkB,GAAY,CACrBP,EAAwBO,GAAI5C,KAAK,CACnC,EACA,aAAc,CACZA,MAAOoC,EACP/B,MAAO+B,CAAAA,CACT,CAAA,CAAE,CAAA,CAEN,CAAA,CACF,EACCjB,EAAgBmE,KAAK3E,IAAI,CAACP,EAAGmF,IAC5BtB,EAAAA,kBAAAA,IAAC,OAEC,MAAO,CACLS,QAAS,OACTC,IAAK,OACLE,WAAY,UACZW,UAAW,GAAGpF,EAAEqF,QAAU,CAAC,KAC3BA,OAAQ,OACRX,MAAO,OACPF,SAAU,MAAA,EAGXxE,SAAAA,EAAEM,QAAQC,IAAI,CAACiC,EAAI8C,IAClBzB,EAAAA,kBAAAA,IAAC,MAAA,CAEC,UAAU,8CACV,MAAO,CACLa,MAAO,QACJ,KAAOlC,EAAGhC,aAAe,GAAMH,EAAWL,EAAEM,OAAO,CAAC,QAEpDD,EAAWL,EAAEM,OAAO,GAAKkC,EAAGhC,aAAe,IAAMH,EAAWL,EAAEM,OAAO,CAAC,OAEzE8E,UAAW,SAAA,EAGb,SAAAvB,EAAAA,kBAAAA,IAAC0B,EAAAA,qBAAA,CACC,UAAW/C,EAAGgD,UACd,YAAahD,EAAGtB,YAChB,OAAAC,EACA,cAAe,CACb,GAAIqB,EAAGiD,UAAY,CAAA,EACnBf,MAAO7C,OACPwD,OAAQxD,OACR6D,OAAQlD,EAAGgD,YAAc,aAAe3D,OAAYW,EAAGiD,UAAUC,OACjEC,KAAMnD,EAAGgD,YAAc,YAAchD,EAAGiD,SAASE,KAAO9D,OACxDiC,SAAUtB,EAAGiD,UAAU3B,UAAY/C,EAAgB+C,SACnD7C,MAAOuB,EAAGiD,UAAUxE,OAASA,EAC7B2E,OAAQpD,EAAGiD,UAAUG,QAAUxE,EAC/ByE,WAAYrD,EAAGiD,UAAUI,YAAcxE,CAAAA,EAEzC,aAAc,CAAEnC,KAAMwC,CAAAA,EACtB,uBACEc,EAAGsD,uBACCtD,EAAGsD,uBACHtD,EAAGgD,YAAc,YACf,CACE,CACEO,SAAU,YACVC,cAAe,OAAA,EAEjB,CAAED,SAAU,QAASC,cAAe,OAAA,CAAS,EAE/C,CACE,CACED,SAAU,YACVC,cAAe,OAAA,EAEjB,CAAED,SAAU,QAASC,cAAe,MAAA,CAAQ,EAGtD,UAAA3G,EACA,eAAgBD,GAAkB,CAAA,EAAG,CAAA,EA/ClCkG,CAiDP,CACD,CAAA,EA/DIH,CAgEP,CACD,CAAA,CAAA,CACH,EAEAtB,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,iCACb,SAAAA,EAAAA,kBAAAA,IAACoC,MAAO,CAAA,CACV,CAAA,EAEJ,CAAA,CACF,EACF,EACF,CAEJ"}
1
+ {"version":3,"file":"MultiGraphDashboardWideToLongFormat.cjs","sources":["../src/Utils/wideToLongTranformation.ts","../src/Components/Dashboard/MultiGraphDashboardWideToLongFormat.tsx"],"sourcesContent":["export function wideToLongTransformation(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data: any,\r\n keyColumn: string,\r\n readableHeader: {\r\n value: string;\r\n label: string;\r\n }[],\r\n debugMode?: boolean,\r\n) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const transformedData: any = [];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data.forEach((row: any) => {\r\n Object.entries(row).forEach(([key, value]) => {\r\n if (key !== keyColumn) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const obj: any = {\r\n indicator:\r\n readableHeader.findIndex(d => d.value === key) !== -1\r\n ? readableHeader[readableHeader.findIndex(d => d.value === key)].label\r\n : key,\r\n value,\r\n };\r\n obj[keyColumn] = row[keyColumn];\r\n transformedData.push(obj);\r\n }\r\n });\r\n });\r\n if (debugMode) {\r\n // eslint-disable-next-line no-console\r\n console.log(transformedData);\r\n }\r\n return transformedData;\r\n}\r\n","import { useEffect, useEffectEvent, useState } from 'react';\r\nimport { createFilter, DropdownSelect } from '@undp/design-system-react/DropdownSelect';\r\nimport { Label } from '@undp/design-system-react/Label';\r\nimport { Spinner } from '@undp/design-system-react/Spinner';\r\n\r\nimport { SingleGraphDashboard } from './SingleGraphDashboard';\r\n\r\nimport {\r\n ClassNameObject,\r\n DashboardFromWideToLongFormatColumnDataType,\r\n DashboardFromWideToLongFormatLayoutDataType,\r\n DataFilterDataType,\r\n DataSettingsWideToLongDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport {\r\n fetchAndParseCSV,\r\n fetchAndParseJSON,\r\n fetchAndParseMultipleDataSources,\r\n fetchAndTransformDataFromAPI,\r\n} from '@/Utils/fetchAndParseData';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { wideToLongTransformation } from '@/Utils/wideToLongTranformation';\r\nimport { filterData } from '@/Utils/transformData/filterData';\r\nimport { transformColumnsToArray } from '@/Utils/transformData/transformColumnsToArray';\r\n\r\ninterface Props {\r\n dashboardID?: string;\r\n dashboardLayout: DashboardFromWideToLongFormatLayoutDataType;\r\n dataSettings: DataSettingsWideToLongDataType;\r\n debugMode?: boolean;\r\n theme?: 'dark' | 'light';\r\n readableHeader?: {\r\n value: string;\r\n label: string;\r\n }[];\r\n dataFilters?: DataFilterDataType[];\r\n uiMode?: 'light' | 'normal';\r\n graphStyles?: StyleObject;\r\n graphClassNames?: ClassNameObject;\r\n}\r\n\r\nconst TotalWidth = (columns: DashboardFromWideToLongFormatColumnDataType[]) => {\r\n const columnWidth = columns.map(d => d.columnWidth || 1);\r\n const sum = columnWidth.reduce((acc, cur) => acc + cur, 0);\r\n return sum;\r\n};\r\n\r\nexport function MultiGraphDashboardWideToLongFormat(props: Props) {\r\n const {\r\n dashboardID,\r\n dashboardLayout,\r\n dataSettings,\r\n debugMode,\r\n theme = 'light',\r\n readableHeader,\r\n dataFilters,\r\n uiMode = 'normal',\r\n graphStyles,\r\n graphClassNames,\r\n } = props;\r\n\r\n const filterConfig = {\r\n ignoreCase: true,\r\n ignoreAccents: true,\r\n trim: true,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [filteredData, setFilteredData] = useState<any>(undefined);\r\n const [filterValues, setFilterValues] = useState<string[]>([]);\r\n const [selectedFilterValues, setSelectedFilterValues] = useState<string | undefined>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [data, setData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [unformattedData, setUnformattedData] = useState<any>(undefined);\r\n\r\n const updateDataAndFilterValueEvent = useEffectEvent(() => {\r\n const filteredData = filterData(unformattedData, dataFilters || []);\r\n setFilterValues(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n filteredData.map((el: any) => el[dataSettings.keyColumn]),\r\n );\r\n setSelectedFilterValues(filteredData[0][dataSettings.keyColumn]);\r\n const tempData = wideToLongTransformation(\r\n filteredData,\r\n dataSettings.keyColumn,\r\n readableHeader || [],\r\n debugMode,\r\n );\r\n setData(tempData);\r\n });\r\n\r\n const updateFilteredDataEvent = useEffectEvent(() => {\r\n if (data) {\r\n const filteredDataTemp = data.filter(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (item: any) => item[dataSettings.keyColumn] === selectedFilterValues,\r\n );\r\n setFilteredData(filteredDataTemp);\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n updateFilteredDataEvent();\r\n }, [selectedFilterValues, dataSettings.keyColumn]);\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n try {\r\n const dataFromFile = dataSettings.dataURL\r\n ? typeof dataSettings.dataURL === 'string'\r\n ? dataSettings.fileType === 'json'\r\n ? await fetchAndParseJSON(\r\n dataSettings.dataURL,\r\n undefined,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : dataSettings.fileType === 'api'\r\n ? await fetchAndTransformDataFromAPI(\r\n dataSettings.dataURL,\r\n dataSettings.apiHeaders,\r\n undefined,\r\n dataSettings.dataTransformation,\r\n debugMode,\r\n )\r\n : await fetchAndParseCSV(\r\n dataSettings.dataURL,\r\n dataSettings.dataTransformation,\r\n undefined,\r\n debugMode,\r\n dataSettings.delimiter,\r\n true,\r\n )\r\n : await fetchAndParseMultipleDataSources(\r\n dataSettings.dataURL,\r\n dataSettings.idColumnTitle,\r\n )\r\n : await transformColumnsToArray(dataSettings.data, undefined);\r\n setUnformattedData(dataFromFile);\r\n updateDataAndFilterValueEvent();\r\n } catch (error) {\r\n console.error('Data fetching error:', error);\r\n }\r\n };\r\n fetchData();\r\n }, [dataSettings, debugMode]);\r\n\r\n useEffect(() => {\r\n updateDataAndFilterValueEvent();\r\n }, [dataFilters, readableHeader]);\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex grow`}\r\n dir={\r\n dashboardLayout.language === 'he' || dashboardLayout.language === 'ar' ? 'rtl' : undefined\r\n }\r\n >\r\n <div\r\n className={`${\r\n !dashboardLayout?.backgroundColor\r\n ? 'bg-transparent '\r\n : dashboardLayout?.backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }flex flex-col w-full ml-auto mr-auto grow gap-4 ${dashboardLayout?.language || 'en'}`}\r\n style={{\r\n ...(dashboardLayout?.backgroundColor && dashboardLayout?.backgroundColor !== true\r\n ? { backgroundColor: dashboardLayout?.backgroundColor }\r\n : {}),\r\n }}\r\n id={dashboardID}\r\n >\r\n <div\r\n className='flex grow'\r\n style={{\r\n padding: dashboardLayout.backgroundColor\r\n ? dashboardLayout.padding || '1rem'\r\n : dashboardLayout.padding || 0,\r\n }}\r\n >\r\n <div className='flex flex-col w-full gap-4 grow justify-between'>\r\n {dashboardLayout.title || dashboardLayout.description ? (\r\n <GraphHeader\r\n graphTitle={dashboardLayout.title}\r\n graphDescription={dashboardLayout.description}\r\n isDashboard\r\n />\r\n ) : null}\r\n {filteredData ? (\r\n <>\r\n <div\r\n style={{\r\n display: 'flex',\r\n gap: '1rem',\r\n flexWrap: 'wrap',\r\n alignItems: 'flex-start',\r\n width: '100%',\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: '100%',\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n minWidth: '240px',\r\n }}\r\n >\r\n {dashboardLayout.dropdownLabel ? (\r\n <Label className='mb-2'>{dashboardLayout.dropdownLabel}</Label>\r\n ) : null}\r\n <DropdownSelect\r\n options={filterValues.map(d => ({\r\n value: d,\r\n label: d,\r\n }))}\r\n size='sm'\r\n variant={uiMode}\r\n isClearable={false}\r\n isSearchable\r\n controlShouldRenderValue\r\n filterOption={createFilter(filterConfig)}\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onChange={(el: any) => {\r\n setSelectedFilterValues(el?.value);\r\n }}\r\n defaultValue={{\r\n value: selectedFilterValues as string,\r\n label: selectedFilterValues as string,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n {dashboardLayout.rows.map((d, i) => (\r\n <div\r\n key={i}\r\n style={{\r\n display: 'flex',\r\n gap: '1rem',\r\n alignItems: 'stretch',\r\n minHeight: `${d.height || 0}px`,\r\n height: 'auto',\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n }}\r\n >\r\n {d.columns.map((el, j) => (\r\n <div\r\n key={j}\r\n className='flex bg-transparent grow min-w-60'\r\n style={{\r\n width: `calc(${\r\n (100 * (el.columnWidth || 1)) / TotalWidth(d.columns)\r\n }% - ${\r\n (TotalWidth(d.columns) - (el.columnWidth || 1)) / TotalWidth(d.columns)\r\n }rem)`,\r\n minHeight: 'inherit',\r\n }}\r\n >\r\n <SingleGraphDashboard\r\n graphType={el.graphType}\r\n dataFilters={el.dataFilters}\r\n uiMode={uiMode}\r\n graphSettings={{\r\n ...(el.settings || {}),\r\n width: undefined,\r\n height: undefined,\r\n minHeight: undefined,\r\n relativeHeight: undefined,\r\n radius: el.graphType === 'donutChart' ? undefined : el.settings?.radius,\r\n size: el.graphType === 'unitChart' ? el.settings.size : undefined,\r\n language: el.settings?.language || dashboardLayout.language,\r\n theme: el.settings?.theme || theme,\r\n styles: el.settings?.styles || graphStyles,\r\n classNames: el.settings?.classNames || graphClassNames,\r\n }}\r\n dataSettings={{ data: filteredData }}\r\n graphDataConfiguration={\r\n el.graphDataConfiguration\r\n ? el.graphDataConfiguration\r\n : el.graphType === 'unitChart'\r\n ? [\r\n {\r\n columnId: 'indicator',\r\n chartConfigId: 'label',\r\n },\r\n { columnId: 'value', chartConfigId: 'value' },\r\n ]\r\n : [\r\n {\r\n columnId: 'indicator',\r\n chartConfigId: 'label',\r\n },\r\n { columnId: 'value', chartConfigId: 'size' },\r\n ]\r\n }\r\n debugMode={debugMode}\r\n readableHeader={readableHeader || []}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n </>\r\n ) : (\r\n <div className='w-full flex justify-center p-4'>\r\n <Spinner />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["wideToLongTransformation","data","keyColumn","readableHeader","debugMode","transformedData","forEach","row","Object","entries","key","value","obj","indicator","findIndex","d","label","push","console","log","TotalWidth","columns","map","columnWidth","reduce","acc","cur","MultiGraphDashboardWideToLongFormat","props","dashboardID","dashboardLayout","dataSettings","theme","dataFilters","uiMode","graphStyles","graphClassNames","filterConfig","ignoreCase","ignoreAccents","trim","filteredData","setFilteredData","useState","undefined","filterValues","setFilterValues","selectedFilterValues","setSelectedFilterValues","setData","unformattedData","setUnformattedData","updateDataAndFilterValueEvent","useEffectEvent","filterData","el","tempData","updateFilteredDataEvent","filteredDataTemp","filter","item","useEffect","dataFromFile","dataURL","fileType","fetchAndParseJSON","dataTransformation","fetchAndTransformDataFromAPI","apiHeaders","fetchAndParseCSV","delimiter","fetchAndParseMultipleDataSources","idColumnTitle","transformColumnsToArray","error","fetchData","jsx","language","backgroundColor","padding","jsxs","title","description","GraphHeader","Fragment","display","gap","flexWrap","alignItems","width","flexGrow","flexShrink","minWidth","dropdownLabel","Label","DropdownSelect","createFilter","rows","i","minHeight","height","j","SingleGraphDashboard","graphType","settings","relativeHeight","radius","size","styles","classNames","graphDataConfiguration","columnId","chartConfigId","Spinner"],"mappings":"2aAAO,SAASA,EAEdC,EACAC,EACAC,EAIAC,EACA,CAEA,MAAMC,EAAuB,CAAA,EAE7BJ,OAAAA,EAAKK,QAASC,GAAa,CACzBC,OAAOC,QAAQF,CAAG,EAAED,QAAQ,CAAC,CAACI,EAAKC,CAAK,IAAM,CAC5C,GAAID,IAAQR,EAAW,CAErB,MAAMU,EAAW,CACfC,UACEV,EAAeW,aAAeC,EAAEJ,QAAUD,CAAG,IAAM,GAC/CP,EAAeA,EAAeW,UAAUC,GAAKA,EAAEJ,QAAUD,CAAG,CAAC,EAAEM,MAC/DN,EACNC,MAAAA,CAAAA,EAEFC,EAAIV,CAAS,EAAIK,EAAIL,CAAS,EAC9BG,EAAgBY,KAAKL,CAAG,CAC1B,CACF,CAAC,CACH,CAAC,EACGR,GAEFc,QAAQC,IAAId,CAAe,EAEtBA,CACT,CCQA,MAAMe,EAAcC,GACEA,EAAQC,IAAIP,GAAKA,EAAEQ,aAAe,CAAC,EAC/BC,OAAO,CAACC,EAAKC,IAAQD,EAAMC,EAAK,CAAC,EAIpD,SAASC,EAAoCC,EAAc,CAChE,KAAM,CACJC,YAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACA3B,UAAAA,EACA4B,MAAAA,EAAQ,QACR7B,eAAAA,EACA8B,YAAAA,EACAC,OAAAA,EAAS,SACTC,YAAAA,EACAC,gBAAAA,CAAAA,EACER,EAEES,EAAe,CACnBC,WAAY,GACZC,cAAe,GACfC,KAAM,EAAA,EAGF,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAAcC,MAAS,EACzD,CAACC,EAAcC,CAAe,EAAIH,EAAAA,SAAmB,CAAA,CAAE,EACvD,CAACI,EAAsBC,CAAuB,EAAIL,EAAAA,SAA6BC,MAAS,EAExF,CAAC3C,EAAMgD,CAAO,EAAIN,EAAAA,SAAcC,MAAS,EAEzC,CAACM,EAAiBC,CAAkB,EAAIR,EAAAA,SAAcC,MAAS,EAE/DQ,EAAgCC,EAAAA,eAAe,IAAM,CACzD,MAAMZ,EAAea,EAAAA,WAAWJ,EAAiBjB,GAAe,CAAA,CAAE,EAClEa,EAEEL,EAAanB,IAAKiC,GAAYA,EAAGxB,EAAa7B,SAAS,CAAC,CAAA,EAE1D8C,EAAwBP,EAAa,CAAC,EAAEV,EAAa7B,SAAS,CAAC,EAC/D,MAAMsD,EAAWxD,EACfyC,EACAV,EAAa7B,UACbC,GAAkB,CAAA,EAClBC,CACF,EACA6C,EAAQO,CAAQ,CAClB,CAAC,EAEKC,EAA0BJ,EAAAA,eAAe,IAAM,CACnD,GAAIpD,EAAM,CACR,MAAMyD,EAAmBzD,EAAK0D,OAE3BC,GAAcA,EAAK7B,EAAa7B,SAAS,IAAM6C,CAAAA,EAElDL,EAAgBgB,CAAgB,CAClC,CACF,CAAC,EAEDG,OAAAA,EAAAA,UAAU,IAAM,CACdJ,EAAAA,CACF,EAAG,CAACV,EAAsBhB,EAAa7B,SAAS,CAAC,EACjD2D,EAAAA,UAAU,IAAM,EACI,SAAY,CAC5B,GAAI,CACF,MAAMC,EAAe/B,EAAagC,QAC9B,OAAOhC,EAAagC,SAAY,SAC9BhC,EAAaiC,WAAa,OACxB,MAAMC,EAAAA,kBACJlC,EAAagC,QACbnB,OACAb,EAAamC,mBACb9D,CACF,EACA2B,EAAaiC,WAAa,MACxB,MAAMG,EAAAA,6BACJpC,EAAagC,QACbhC,EAAaqC,WACbxB,OACAb,EAAamC,mBACb9D,CACF,EACA,MAAMiE,EAAAA,iBACJtC,EAAagC,QACbhC,EAAamC,mBACbtB,OACAxC,EACA2B,EAAauC,UACb,EACF,EACJ,MAAMC,EAAAA,iCACJxC,EAAagC,QACbhC,EAAayC,aACf,EACF,MAAMC,EAAAA,wBAAwB1C,EAAa9B,KAAM2C,MAAS,EAC9DO,EAAmBW,CAAY,EAC/BV,EAAAA,CACF,OAASsB,EAAO,CACdxD,QAAQwD,MAAM,uBAAwBA,CAAK,CAC7C,CACF,GACAC,CACF,EAAG,CAAC5C,EAAc3B,CAAS,CAAC,EAE5ByD,EAAAA,UAAU,IAAM,CACdT,EAAAA,CACF,EAAG,CAACnB,EAAa9B,CAAc,CAAC,EAE9ByE,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAW,GAAG5C,GAAS,OAAO,aAC9B,IACEF,EAAgB+C,WAAa,MAAQ/C,EAAgB+C,WAAa,KAAO,MAAQjC,OAGnF,SAAAgC,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAW,GACR9C,GAAiBgD,gBAEdhD,GAAiBgD,kBAAoB,GACnC,gDACA,GAHF,iBAGI,mDACyChD,GAAiB+C,UAAY,IAAI,GACpF,MAAO,CACL,GAAI/C,GAAiBgD,iBAAmBhD,GAAiBgD,kBAAoB,GACzE,CAAEA,gBAAiBhD,GAAiBgD,eAAAA,EACpC,CAAA,CAAC,EAEP,GAAIjD,EAEJ,iCAAC,MAAA,CACC,UAAU,YACV,MAAO,CACLkD,QAASjD,EAAgBgD,gBACrBhD,EAAgBiD,SAAW,OAC3BjD,EAAgBiD,SAAW,CAAA,EAGjC,SAAAC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,kDACZlD,SAAAA,CAAAA,EAAgBmD,OAASnD,EAAgBoD,YACxCN,EAAAA,kBAAAA,IAACO,EAAAA,YAAA,CACC,WAAYrD,EAAgBmD,MAC5B,iBAAkBnD,EAAgBoD,YAClC,YAAW,GAAA,EAEX,KACHzC,EACCuC,EAAAA,kBAAAA,KAAAI,6BAAA,CACE,SAAA,CAAAR,wBAAC,OACC,MAAO,CACLS,QAAS,OACTC,IAAK,OACLC,SAAU,OACVC,WAAY,aACZC,MAAO,MAAA,EAGT,SAAAT,EAAAA,kBAAAA,KAAC,MAAA,CACC,MAAO,CACLS,MAAO,OACPC,SAAU,EACVC,WAAY,EACZC,SAAU,OAAA,EAGX9D,SAAAA,CAAAA,EAAgB+D,cACfjB,wBAACkB,EAAAA,EAAA,CAAM,UAAU,OAAQhE,SAAAA,EAAgB+D,cAAc,EACrD,KACJjB,EAAAA,kBAAAA,IAACmB,EAAAA,GAAA,CACC,QAASlD,EAAavB,IAAIP,IAAM,CAC9BJ,MAAOI,EACPC,MAAOD,CAAAA,EACP,EACF,KAAK,KACL,QAASmB,EACT,YAAa,GACb,aAAY,GACZ,yBAAwB,GACxB,aAAc8D,EAAAA,GAAa3D,CAAY,EAEvC,SAAWkB,GAAY,CACrBP,EAAwBO,GAAI5C,KAAK,CACnC,EACA,aAAc,CACZA,MAAOoC,EACP/B,MAAO+B,CAAAA,CACT,CAAA,CAAE,CAAA,CAEN,CAAA,CACF,EACCjB,EAAgBmE,KAAK3E,IAAI,CAACP,EAAGmF,IAC5BtB,EAAAA,kBAAAA,IAAC,OAEC,MAAO,CACLS,QAAS,OACTC,IAAK,OACLE,WAAY,UACZW,UAAW,GAAGpF,EAAEqF,QAAU,CAAC,KAC3BA,OAAQ,OACRX,MAAO,OACPF,SAAU,MAAA,EAGXxE,SAAAA,EAAEM,QAAQC,IAAI,CAACiC,EAAI8C,IAClBzB,EAAAA,kBAAAA,IAAC,MAAA,CAEC,UAAU,oCACV,MAAO,CACLa,MAAO,QACJ,KAAOlC,EAAGhC,aAAe,GAAMH,EAAWL,EAAEM,OAAO,CAAC,QAEpDD,EAAWL,EAAEM,OAAO,GAAKkC,EAAGhC,aAAe,IAAMH,EAAWL,EAAEM,OAAO,CAAC,OAEzE8E,UAAW,SAAA,EAGb,SAAAvB,EAAAA,kBAAAA,IAAC0B,EAAAA,qBAAA,CACC,UAAW/C,EAAGgD,UACd,YAAahD,EAAGtB,YAChB,OAAAC,EACA,cAAe,CACb,GAAIqB,EAAGiD,UAAY,CAAA,EACnBf,MAAO7C,OACPwD,OAAQxD,OACRuD,UAAWvD,OACX6D,eAAgB7D,OAChB8D,OAAQnD,EAAGgD,YAAc,aAAe3D,OAAYW,EAAGiD,UAAUE,OACjEC,KAAMpD,EAAGgD,YAAc,YAAchD,EAAGiD,SAASG,KAAO/D,OACxDiC,SAAUtB,EAAGiD,UAAU3B,UAAY/C,EAAgB+C,SACnD7C,MAAOuB,EAAGiD,UAAUxE,OAASA,EAC7B4E,OAAQrD,EAAGiD,UAAUI,QAAUzE,EAC/B0E,WAAYtD,EAAGiD,UAAUK,YAAczE,CAAAA,EAEzC,aAAc,CAAEnC,KAAMwC,CAAAA,EACtB,uBACEc,EAAGuD,uBACCvD,EAAGuD,uBACHvD,EAAGgD,YAAc,YACf,CACE,CACEQ,SAAU,YACVC,cAAe,OAAA,EAEjB,CAAED,SAAU,QAASC,cAAe,OAAA,CAAS,EAE/C,CACE,CACED,SAAU,YACVC,cAAe,OAAA,EAEjB,CAAED,SAAU,QAASC,cAAe,MAAA,CAAQ,EAGtD,UAAA5G,EACA,eAAgBD,GAAkB,CAAA,EAAG,CAAA,EAjDlCkG,CAmDP,CACD,CAAA,EAjEIH,CAkEP,CACD,CAAA,CAAA,CACH,EAEAtB,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,iCACb,SAAAA,EAAAA,kBAAAA,IAACqC,MAAO,CAAA,CACV,CAAA,EAEJ,CAAA,CACF,EACF,EACF,CAEJ"}
@@ -4,7 +4,7 @@ import { j as A, D as E } from "./DropdownSelect-BbdPQa2k.js";
4
4
  import { b as R } from "./checkIfMultiple-Y9iKaV_u.js";
5
5
  import { w as V } from "./Spinner-D7rnnwnA.js";
6
6
  import { SingleGraphDashboard as U } from "./SingleGraphDashboard.js";
7
- import { f as $, a as z, b as G, c as H, t as M } from "./fetchAndParseData-BpqkBPQL.js";
7
+ import { f as H, a as $, b as z, c as G, t as M } from "./fetchAndParseData-BpqkBPQL.js";
8
8
  import { GraphHeader as P } from "./GraphHeader.js";
9
9
  import { f as O } from "./filterData-DsAiFzKY.js";
10
10
  function J(d, l, t, a) {
@@ -21,7 +21,7 @@ function J(d, l, t, a) {
21
21
  });
22
22
  }), a && console.log(o), o;
23
23
  }
24
- const x = (d) => d.map((a) => a.columnWidth || 1).reduce((a, o) => a + o, 0);
24
+ const v = (d) => d.map((a) => a.columnWidth || 1).reduce((a, o) => a + o, 0);
25
25
  function ta(d) {
26
26
  const {
27
27
  dashboardID: l,
@@ -38,7 +38,7 @@ function ta(d) {
38
38
  ignoreCase: !0,
39
39
  ignoreAccents: !0,
40
40
  trim: !0
41
- }, [v, T] = g(void 0), [F, I] = g([]), [f, b] = g(void 0), [y, S] = g(void 0), [L, N] = g(void 0), C = w(() => {
41
+ }, [x, T] = g(void 0), [F, I] = g([]), [f, b] = g(void 0), [y, S] = g(void 0), [L, N] = g(void 0), C = w(() => {
42
42
  const r = O(L, h || []);
43
43
  I(
44
44
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -60,7 +60,7 @@ function ta(d) {
60
60
  }, [f, a.keyColumn]), p(() => {
61
61
  (async () => {
62
62
  try {
63
- const s = a.dataURL ? typeof a.dataURL == "string" ? a.fileType === "json" ? await $(a.dataURL, void 0, a.dataTransformation, o) : a.fileType === "api" ? await z(a.dataURL, a.apiHeaders, void 0, a.dataTransformation, o) : await G(a.dataURL, a.dataTransformation, void 0, o, a.delimiter, !0) : await H(a.dataURL, a.idColumnTitle) : await M(a.data, void 0);
63
+ const s = a.dataURL ? typeof a.dataURL == "string" ? a.fileType === "json" ? await H(a.dataURL, void 0, a.dataTransformation, o) : a.fileType === "api" ? await $(a.dataURL, a.apiHeaders, void 0, a.dataTransformation, o) : await z(a.dataURL, a.dataTransformation, void 0, o, a.delimiter, !0) : await G(a.dataURL, a.idColumnTitle) : await M(a.data, void 0);
64
64
  N(s), C();
65
65
  } catch (s) {
66
66
  console.error("Data fetching error:", s);
@@ -68,7 +68,7 @@ function ta(d) {
68
68
  })();
69
69
  }, [a, o]), p(() => {
70
70
  C();
71
- }, [h, n]), /* @__PURE__ */ i.jsx("div", { className: `${c || "light"} flex grow`, dir: t.language === "he" || t.language === "ar" ? "rtl" : void 0, children: /* @__PURE__ */ i.jsx("div", { className: `${t?.backgroundColor ? t?.backgroundColor === !0 ? "bg-primary-gray-200 dark:bg-primary-gray-650 " : "" : "bg-transparent "}flex flex-col h-inherit w-full ml-auto mr-auto grow gap-4 ${t?.language || "en"}`, style: {
71
+ }, [h, n]), /* @__PURE__ */ i.jsx("div", { className: `${c || "light"} flex grow`, dir: t.language === "he" || t.language === "ar" ? "rtl" : void 0, children: /* @__PURE__ */ i.jsx("div", { className: `${t?.backgroundColor ? t?.backgroundColor === !0 ? "bg-primary-gray-200 dark:bg-primary-gray-650 " : "" : "bg-transparent "}flex flex-col w-full ml-auto mr-auto grow gap-4 ${t?.language || "en"}`, style: {
72
72
  ...t?.backgroundColor && t?.backgroundColor !== !0 ? {
73
73
  backgroundColor: t?.backgroundColor
74
74
  } : {}
@@ -76,7 +76,7 @@ function ta(d) {
76
76
  padding: t.backgroundColor ? t.padding || "1rem" : t.padding || 0
77
77
  }, children: /* @__PURE__ */ i.jsxs("div", { className: "flex flex-col w-full gap-4 grow justify-between", children: [
78
78
  t.title || t.description ? /* @__PURE__ */ i.jsx(P, { graphTitle: t.title, graphDescription: t.description, isDashboard: !0 }) : null,
79
- v ? /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
79
+ x ? /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
80
80
  /* @__PURE__ */ i.jsx("div", { style: {
81
81
  display: "flex",
82
82
  gap: "1rem",
@@ -121,13 +121,15 @@ function ta(d) {
121
121
  height: "auto",
122
122
  width: "100%",
123
123
  flexWrap: "wrap"
124
- }, children: r.columns.map((e, k) => /* @__PURE__ */ i.jsx("div", { className: "flex bg-transparent h-inherit grow min-w-60", style: {
125
- width: `calc(${100 * (e.columnWidth || 1) / x(r.columns)}% - ${(x(r.columns) - (e.columnWidth || 1)) / x(r.columns)}rem)`,
124
+ }, children: r.columns.map((e, k) => /* @__PURE__ */ i.jsx("div", { className: "flex bg-transparent grow min-w-60", style: {
125
+ width: `calc(${100 * (e.columnWidth || 1) / v(r.columns)}% - ${(v(r.columns) - (e.columnWidth || 1)) / v(r.columns)}rem)`,
126
126
  minHeight: "inherit"
127
127
  }, children: /* @__PURE__ */ i.jsx(U, { graphType: e.graphType, dataFilters: e.dataFilters, uiMode: u, graphSettings: {
128
128
  ...e.settings || {},
129
129
  width: void 0,
130
130
  height: void 0,
131
+ minHeight: void 0,
132
+ relativeHeight: void 0,
131
133
  radius: e.graphType === "donutChart" ? void 0 : e.settings?.radius,
132
134
  size: e.graphType === "unitChart" ? e.settings.size : void 0,
133
135
  language: e.settings?.language || t.language,
@@ -135,7 +137,7 @@ function ta(d) {
135
137
  styles: e.settings?.styles || m,
136
138
  classNames: e.settings?.classNames || D
137
139
  }, dataSettings: {
138
- data: v
140
+ data: x
139
141
  }, graphDataConfiguration: e.graphDataConfiguration ? e.graphDataConfiguration : e.graphType === "unitChart" ? [{
140
142
  columnId: "indicator",
141
143
  chartConfigId: "label"