@hisptz/dhis2-analytics 1.0.41 → 1.0.43

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 (42) hide show
  1. package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/services/engine.js +9 -1
  2. package/build/cjs/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +3 -0
  3. package/build/cjs/components/Map/constants/colors.js +1 -0
  4. package/build/cjs/components/Visualization/Visualization.stories.js +138 -0
  5. package/build/cjs/components/Visualization/components/AnalyticsDataProvider/index.js +99 -0
  6. package/build/cjs/components/Visualization/components/DimensionsProvider/index.js +46 -0
  7. package/build/cjs/components/Visualization/components/LayoutProvider/index.js +31 -0
  8. package/build/cjs/components/Visualization/components/VisualizationDimensionSelector/index.js +73 -0
  9. package/build/cjs/components/Visualization/components/VisualizationProvider/index.js +29 -0
  10. package/build/cjs/components/Visualization/components/VisualizationSelector/index.js +188 -0
  11. package/build/cjs/components/Visualization/components/VisualizationTypeProvider/index.js +40 -0
  12. package/build/cjs/components/Visualization/components/VisualizationTypeSelector/index.js +54 -0
  13. package/build/cjs/components/Visualization/index.js +104 -0
  14. package/build/cjs/index.js +11 -0
  15. package/build/cjs/locales/en/translations.json +11 -1
  16. package/build/es/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +3 -0
  17. package/build/es/components/Map/constants/colors.js +1 -0
  18. package/build/es/components/Visualization/Visualization.stories.js +129 -0
  19. package/build/es/components/Visualization/components/AnalyticsDataProvider/index.js +90 -0
  20. package/build/es/components/Visualization/components/DimensionsProvider/index.js +34 -0
  21. package/build/es/components/Visualization/components/LayoutProvider/index.js +20 -0
  22. package/build/es/components/Visualization/components/VisualizationDimensionSelector/index.js +64 -0
  23. package/build/es/components/Visualization/components/VisualizationProvider/index.js +22 -0
  24. package/build/es/components/Visualization/components/VisualizationSelector/index.js +174 -0
  25. package/build/es/components/Visualization/components/VisualizationTypeProvider/index.js +25 -0
  26. package/build/es/components/Visualization/components/VisualizationTypeSelector/index.js +45 -0
  27. package/build/es/components/Visualization/index.js +97 -0
  28. package/build/es/index.js +1 -0
  29. package/build/es/locales/en/translations.json +11 -1
  30. package/build/types/components/CustomPivotTable/components/Table/index.d.ts +7 -6
  31. package/build/types/components/CustomPivotTable/index.d.ts +12 -11
  32. package/build/types/components/Visualization/components/AnalyticsDataProvider/index.d.ts +10 -0
  33. package/build/types/components/Visualization/components/DimensionsProvider/index.d.ts +15 -0
  34. package/build/types/components/Visualization/components/LayoutProvider/index.d.ts +14 -0
  35. package/build/types/components/Visualization/components/VisualizationDimensionSelector/index.d.ts +2 -0
  36. package/build/types/components/Visualization/components/VisualizationProvider/index.d.ts +13 -0
  37. package/build/types/components/Visualization/components/VisualizationSelector/index.d.ts +25 -0
  38. package/build/types/components/Visualization/components/VisualizationTypeProvider/index.d.ts +14 -0
  39. package/build/types/components/Visualization/components/VisualizationTypeSelector/index.d.ts +2 -0
  40. package/build/types/components/Visualization/index.d.ts +21 -0
  41. package/build/types/index.d.ts +1 -0
  42. package/package.json +5 -4
@@ -10,7 +10,15 @@ var _api = _interopRequireDefault(require("./api"));
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
12
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
13
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
13
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // async function importEEModule(): Promise<any> {
14
+ // // @ts-ignore
15
+ // if (import.meta.env.STORYBOOK_BUILD === "true") {
16
+ // return await import("@google/earthengine");
17
+ // }
18
+ // return await import("./api");
19
+ // }
20
+ //
21
+ // const EE = await importEEModule();
14
22
  // @ts-ignore
15
23
  const ee = _api.default;
16
24
  // @ts-ignore
@@ -194,6 +194,9 @@ function useThematicLayers() {
194
194
  const layersWithData = (0, _lodash.differenceBy)(layers, layersWithoutData, "id");
195
195
  const dx = layersWithoutData.map(layer => layer.dataItem.id);
196
196
  let sanitizedLayersWithData = [];
197
+ console.log({
198
+ layersWithoutData
199
+ });
197
200
  if (!(0, _lodash.isEmpty)(dx)) {
198
201
  const data = await engine.query(analyticsQuery, {
199
202
  variables: {
@@ -422,6 +422,7 @@ const COLOR_PALETTES = {
422
422
  9: ["#000000", "#252525", "#525252", "#737373", "#969696", "#bdbdbd", "#d9d9d9", "#f0f0f0", "#ffffff"]
423
423
  }
424
424
  };
425
+
425
426
  // Qualitative colors From ColorBrewer (reordered 12-class)
426
427
  exports.COLOR_PALETTES = COLOR_PALETTES;
427
428
  const qualitativeColors = ["#1f78b4", "#ff7f00", "#33a02c", "#a6cee3", "#b2df8a", "#fb9a99", "#fdbf6f", "#cab2d6", "#ffff99", "#b15928", "#6a3d9a", "#e31a1c"];
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.Default = void 0;
7
+ var _ChartAnalytics = require("../ChartAnalytics");
8
+ var _index = require("./index");
9
+ var _highcharts = _interopRequireDefault(require("highcharts"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _ui = require("@dhis2/ui");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ const Template = args => /*#__PURE__*/_react.default.createElement(_index.Visualization, args);
14
+ (0, _ChartAnalytics.setupHighchartsModules)(_highcharts.default);
15
+ const Default = Template.bind({});
16
+ exports.Default = Default;
17
+ Default.args = {
18
+ dimensions: {
19
+ dx: ["Uvn6LCg7dVU", "OdiHJayrsKo", "sB79w2hiLp8", "AUqdhY4mpvp"],
20
+ pe: ["LAST_6_MONTHS"],
21
+ ou: ["USER_ORGUNIT_CHILDREN"]
22
+ },
23
+ layout: {
24
+ columns: ["dx"],
25
+ filters: [],
26
+ rows: ["ou", "pe"]
27
+ },
28
+ defaultVisualizationType: "pivot-table",
29
+ config: {
30
+ chart: {
31
+ layout: {
32
+ series: ["dx"],
33
+ category: ["pe"],
34
+ filter: ["ou"]
35
+ },
36
+ type: "column"
37
+ },
38
+ map: {
39
+ thematicLayers: [{
40
+ type: "choropleth",
41
+ id: "Uvn6LCg7dVU",
42
+ enabled: true,
43
+ control: {
44
+ enabled: true,
45
+ position: "topright"
46
+ },
47
+ dataItem: {
48
+ displayName: "Uvn6LCg7dVU",
49
+ id: "Uvn6LCg7dVU",
50
+ type: "indicator",
51
+ legendConfig: {
52
+ colorClass: "BrBG",
53
+ scale: 7
54
+ }
55
+ }
56
+ }, {
57
+ type: "choropleth",
58
+ id: "OdiHJayrsKo",
59
+ enabled: true,
60
+ control: {
61
+ enabled: true,
62
+ position: "topright"
63
+ },
64
+ dataItem: {
65
+ displayName: "OdiHJayrsKo",
66
+ id: "OdiHJayrsKo",
67
+ type: "indicator",
68
+ legendConfig: {
69
+ colorClass: "BrBG",
70
+ scale: 7
71
+ }
72
+ }
73
+ }, {
74
+ type: "choropleth",
75
+ id: "sB79w2hiLp8",
76
+ enabled: true,
77
+ control: {
78
+ enabled: true,
79
+ position: "topright"
80
+ },
81
+ dataItem: {
82
+ displayName: "sB79w2hiLp8",
83
+ id: "sB79w2hiLp8",
84
+ type: "indicator",
85
+ legendConfig: {
86
+ colorClass: "BrBG",
87
+ scale: 7
88
+ }
89
+ }
90
+ }, {
91
+ type: "choropleth",
92
+ id: "AUqdhY4mpvp",
93
+ enabled: true,
94
+ control: {
95
+ enabled: true,
96
+ position: "topright"
97
+ },
98
+ dataItem: {
99
+ displayName: "AUqdhY4mpvp",
100
+ id: "AUqdhY4mpvp",
101
+ type: "indicator",
102
+ legendConfig: {
103
+ colorClass: "BrBG",
104
+ scale: 7
105
+ }
106
+ }
107
+ }],
108
+ legends: {
109
+ enabled: true,
110
+ position: "topright",
111
+ collapsible: true
112
+ }
113
+ },
114
+ pivotTable: {
115
+ fixColumnHeaders: true,
116
+ fixRowHeaders: true
117
+ }
118
+ }
119
+ };
120
+ var _default = {
121
+ title: "Analytics/Visualization",
122
+ component: _index.Visualization,
123
+ decorators: [ChartStory => {
124
+ return /*#__PURE__*/_react.default.createElement(_ui.Box, {
125
+ width: "600",
126
+ height: "500"
127
+ }, /*#__PURE__*/_react.default.createElement(_ui.Card, null, /*#__PURE__*/_react.default.createElement("div", {
128
+ style: {
129
+ width: 1000,
130
+ height: "100%",
131
+ display: "flex",
132
+ gap: 8,
133
+ flexDirection: "column"
134
+ }
135
+ }, /*#__PURE__*/_react.default.createElement(_ui.CssReset, null), /*#__PURE__*/_react.default.createElement(ChartStory, null))));
136
+ }]
137
+ };
138
+ exports.default = _default;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AnalyticsDataProvider = AnalyticsDataProvider;
7
+ exports.useAnalyticsData = useAnalyticsData;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _DimensionsProvider = require("../DimensionsProvider");
10
+ var _appRuntime = require("@dhis2/app-runtime");
11
+ var _LayoutProvider = require("../LayoutProvider");
12
+ var _lodash = require("lodash");
13
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+ const AnalyticsContext = /*#__PURE__*/(0, _react.createContext)(undefined);
16
+ const analyticsQuery = {
17
+ analytics: {
18
+ resource: "analytics",
19
+ params: _ref => {
20
+ let {
21
+ dimensions,
22
+ filters
23
+ } = _ref;
24
+ return {
25
+ dimension: Object.keys(dimensions).map(dimension => {
26
+ var _dimensions$dimension;
27
+ return `${dimension}:${(_dimensions$dimension = dimensions[dimension]) === null || _dimensions$dimension === void 0 ? void 0 : _dimensions$dimension.join(';')}`;
28
+ }),
29
+ filters: Object.keys(filters).map(dimension => {
30
+ var _dimensions$dimension2;
31
+ return `${dimension}:${(_dimensions$dimension2 = dimensions[dimension]) === null || _dimensions$dimension2 === void 0 ? void 0 : _dimensions$dimension2.join(';')}`;
32
+ }),
33
+ includeMetadataDetails: true
34
+ };
35
+ }
36
+ }
37
+ };
38
+ function useAnalyticsData() {
39
+ var _useContext;
40
+ return (_useContext = (0, _react.useContext)(AnalyticsContext)) !== null && _useContext !== void 0 ? _useContext : {
41
+ analytics: {},
42
+ loading: false
43
+ };
44
+ }
45
+ function AnalyticsDataProvider(_ref2) {
46
+ let {
47
+ children
48
+ } = _ref2;
49
+ const [analyticsDimensions] = (0, _DimensionsProvider.useDimensions)();
50
+ const [layout] = (0, _LayoutProvider.useLayout)();
51
+ const {
52
+ dimensions,
53
+ filters
54
+ } = (0, _react.useMemo)(() => {
55
+ var _layout$columns, _layout$rows, _layout$filters;
56
+ const dimensions = {};
57
+ const filters = {};
58
+ (0, _lodash.forEach)([...((_layout$columns = layout === null || layout === void 0 ? void 0 : layout.columns) !== null && _layout$columns !== void 0 ? _layout$columns : []), ...((_layout$rows = layout === null || layout === void 0 ? void 0 : layout.rows) !== null && _layout$rows !== void 0 ? _layout$rows : [])], dimension => {
59
+ (0, _lodash.set)(dimensions, [dimension], analyticsDimensions === null || analyticsDimensions === void 0 ? void 0 : analyticsDimensions[dimension]);
60
+ });
61
+ (0, _lodash.forEach)([...((_layout$filters = layout === null || layout === void 0 ? void 0 : layout.filters) !== null && _layout$filters !== void 0 ? _layout$filters : [])], dimension => {
62
+ (0, _lodash.set)(dimensions, [dimension], analyticsDimensions === null || analyticsDimensions === void 0 ? void 0 : analyticsDimensions[dimension]);
63
+ });
64
+ return {
65
+ dimensions,
66
+ filters
67
+ };
68
+ }, [layout, analyticsDimensions.pe, analyticsDimensions.ou]);
69
+ const {
70
+ data: analytics,
71
+ error,
72
+ loading,
73
+ refetch,
74
+ called
75
+ } = (0, _appRuntime.useDataQuery)(analyticsQuery, {
76
+ variables: {
77
+ dimensions,
78
+ filters
79
+ },
80
+ lazy: true
81
+ });
82
+ (0, _react.useEffect)(() => {
83
+ refetch({
84
+ dimensions,
85
+ filters
86
+ });
87
+ }, [dimensions, filters]);
88
+ (0, _react.useEffect)(() => {
89
+ if (error) {
90
+ throw error;
91
+ }
92
+ }, [error]);
93
+ return /*#__PURE__*/_react.default.createElement(AnalyticsContext.Provider, {
94
+ value: {
95
+ analytics: analytics === null || analytics === void 0 ? void 0 : analytics.analytics,
96
+ loading
97
+ }
98
+ }, children);
99
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DimensionUpdateState = exports.DimensionState = void 0;
7
+ exports.DimensionsProvider = DimensionsProvider;
8
+ exports.useDimensions = useDimensions;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _lodash = require("lodash");
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ const DimensionState = /*#__PURE__*/(0, _react.createContext)({
14
+ dx: [],
15
+ pe: [],
16
+ ou: []
17
+ });
18
+ exports.DimensionState = DimensionState;
19
+ const DimensionUpdateState = /*#__PURE__*/(0, _react.createContext)(undefined);
20
+ exports.DimensionUpdateState = DimensionUpdateState;
21
+ function reducer(state, _ref) {
22
+ let {
23
+ dimension,
24
+ value
25
+ } = _ref;
26
+ const updatedState = {
27
+ ...(state !== null && state !== void 0 ? state : {})
28
+ };
29
+ (0, _lodash.set)(updatedState, [dimension], value);
30
+ return updatedState;
31
+ }
32
+ function useDimensions() {
33
+ return [(0, _react.useContext)(DimensionState), (0, _react.useContext)(DimensionUpdateState)];
34
+ }
35
+ function DimensionsProvider(_ref2) {
36
+ let {
37
+ children,
38
+ dimensions
39
+ } = _ref2;
40
+ const [state, dispatch] = (0, _react.useReducer)(reducer, dimensions);
41
+ return /*#__PURE__*/_react.default.createElement(DimensionState.Provider, {
42
+ value: state
43
+ }, /*#__PURE__*/_react.default.createElement(DimensionUpdateState.Provider, {
44
+ value: dispatch
45
+ }, children));
46
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LayoutProvider = LayoutProvider;
7
+ exports.LayoutState = void 0;
8
+ exports.useLayout = useLayout;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ const LayoutState = /*#__PURE__*/(0, _react.createContext)(undefined);
13
+ exports.LayoutState = LayoutState;
14
+ function useLayout() {
15
+ var _useContext;
16
+ return [(_useContext = (0, _react.useContext)(LayoutState)) !== null && _useContext !== void 0 ? _useContext : {
17
+ rows: [],
18
+ filters: [],
19
+ columns: []
20
+ }];
21
+ }
22
+ function LayoutProvider(_ref) {
23
+ let {
24
+ defaultLayout,
25
+ children
26
+ } = _ref;
27
+ const [layout, setLayout] = (0, _react.useState)(defaultLayout);
28
+ return /*#__PURE__*/_react.default.createElement(LayoutState.Provider, {
29
+ value: layout
30
+ }, children);
31
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VisualizationDimensionSelector = VisualizationDimensionSelector;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _ui = require("@dhis2/ui");
9
+ var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
10
+ var _DimensionsProvider = require("../DimensionsProvider");
11
+ var _dhis2Ui = require("@hisptz/dhis2-ui");
12
+ var _VisualizationSelector = require("../VisualizationSelector");
13
+ var _map = require("../../../Map/utils/map");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+ function VisualizationDimensionSelector() {
18
+ const [dimensions, setDimensions] = (0, _DimensionsProvider.useDimensions)();
19
+ const periods = (0, _react.useMemo)(() => dimensions.pe, [dimensions.pe]);
20
+ const orgUnitSelection = (0, _react.useMemo)(() => {
21
+ var _dimensions$ou;
22
+ return (0, _VisualizationSelector.getOrgUnitSelectionFromIds)((_dimensions$ou = dimensions.ou) !== null && _dimensions$ou !== void 0 ? _dimensions$ou : []);
23
+ }, [dimensions.ou]);
24
+ const [openFilter, setOpenFilter] = (0, _react.useState)();
25
+ const onFilterUpdate = (0, _react.useCallback)(type => data => {
26
+ setOpenFilter(undefined);
27
+ if (type === "ou") {
28
+ setDimensions({
29
+ dimension: "ou",
30
+ value: (0, _map.getOrgUnitsSelection)(data)
31
+ });
32
+ return;
33
+ }
34
+ if (type === "pe") {
35
+ setDimensions({
36
+ dimension: "pe",
37
+ value: data
38
+ });
39
+ return;
40
+ }
41
+ }, [setDimensions]);
42
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dhis2Ui.PeriodSelectorModal, {
43
+ position: "middle",
44
+ enablePeriodSelector: true,
45
+ selectedPeriods: periods,
46
+ onClose: () => setOpenFilter(undefined),
47
+ hide: openFilter !== "pe",
48
+ onUpdate: onFilterUpdate("pe")
49
+ }), /*#__PURE__*/_react.default.createElement(_dhis2Ui.OrgUnitSelectorModal, {
50
+ showUserOptions: true,
51
+ searchable: true,
52
+ title: _d2I18n.default.t("Select location(s)"),
53
+ value: orgUnitSelection,
54
+ onClose: () => setOpenFilter(undefined),
55
+ hide: openFilter !== "ou",
56
+ onUpdate: onFilterUpdate("ou")
57
+ }), /*#__PURE__*/_react.default.createElement("div", {
58
+ style: {
59
+ display: "flex",
60
+ gap: 8
61
+ }
62
+ }, /*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
63
+ content: _d2I18n.default.t("Period")
64
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
65
+ onClick: () => setOpenFilter("pe"),
66
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconClock24, null)
67
+ })), /*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
68
+ content: _d2I18n.default.t("Location")
69
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
70
+ onClick: () => setOpenFilter("ou"),
71
+ icon: /*#__PURE__*/_react.default.createElement(_ui.IconLocation24, null)
72
+ }))));
73
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VisualizationProvider = VisualizationProvider;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _LayoutProvider = require("../LayoutProvider");
9
+ var _DimensionsProvider = require("../DimensionsProvider");
10
+ var _AnalyticsDataProvider = require("../AnalyticsDataProvider");
11
+ var _VisualizationTypeProvider = require("../VisualizationTypeProvider");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function VisualizationProvider(_ref) {
14
+ let {
15
+ layout,
16
+ dimensions,
17
+ children,
18
+ type,
19
+ config
20
+ } = _ref;
21
+ return /*#__PURE__*/_react.default.createElement(_DimensionsProvider.DimensionsProvider, {
22
+ dimensions: dimensions
23
+ }, /*#__PURE__*/_react.default.createElement(_VisualizationTypeProvider.VisualizationTypeProvider, {
24
+ config: config,
25
+ defaultType: type
26
+ }, /*#__PURE__*/_react.default.createElement(_LayoutProvider.LayoutProvider, {
27
+ defaultLayout: layout
28
+ }, /*#__PURE__*/_react.default.createElement(_AnalyticsDataProvider.AnalyticsDataProvider, null, children))));
29
+ }
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChartRenderer = ChartRenderer;
7
+ exports.MapRenderer = MapRenderer;
8
+ exports.PivotTableRenderer = PivotTableRenderer;
9
+ exports.VisualizationSelector = VisualizationSelector;
10
+ exports.getDimensionLabel = getDimensionLabel;
11
+ exports.getOrgUnitSelectionFromIds = getOrgUnitSelectionFromIds;
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _VisualizationTypeProvider = require("../VisualizationTypeProvider");
14
+ var _AnalyticsDataProvider = require("../AnalyticsDataProvider");
15
+ var _ui = require("@dhis2/ui");
16
+ var _CustomPivotTable = require("../../../CustomPivotTable");
17
+ var _LayoutProvider = require("../LayoutProvider");
18
+ var _lodash = require("lodash");
19
+ var _DimensionsProvider = require("../DimensionsProvider");
20
+ var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
21
+ var _ChartAnalytics = require("../../../ChartAnalytics");
22
+ var _Map = require("../../../Map");
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
+ function getDimensionLabel(dimension) {
27
+ switch (dimension) {
28
+ case "pe":
29
+ return _d2I18n.default.t("Period");
30
+ case "ou":
31
+ return _d2I18n.default.t("Organisation unit");
32
+ case "dx":
33
+ return _d2I18n.default.t("Data");
34
+ default:
35
+ return "";
36
+ }
37
+ }
38
+ function getOrgUnitSelectionFromIds(ous) {
39
+ const orgUnitSelection = {
40
+ orgUnits: []
41
+ };
42
+ (0, _lodash.forEach)(ous, ou => {
43
+ if (ou === "USER_ORGUNIT") {
44
+ (0, _lodash.set)(orgUnitSelection, ["userOrgUnit"], true);
45
+ } else if (ou === "USER_ORGUNIT_CHILDREN") {
46
+ (0, _lodash.set)(orgUnitSelection, ["userSubUnit"], true);
47
+ } else if (ou === "USER_ORGUNIT_GRANDCHILDREN") {
48
+ (0, _lodash.set)(orgUnitSelection, ["userSubX2Unit"], true);
49
+ } else {
50
+ var _orgUnitSelection$org;
51
+ const orgUnits = [...((_orgUnitSelection$org = orgUnitSelection.orgUnits) !== null && _orgUnitSelection$org !== void 0 ? _orgUnitSelection$org : [])];
52
+ orgUnits.push({
53
+ id: ou,
54
+ children: []
55
+ });
56
+ (0, _lodash.set)(orgUnitSelection, ['orgUnits'], orgUnits);
57
+ }
58
+ });
59
+ return orgUnitSelection;
60
+ }
61
+ function PivotTableRenderer(_ref) {
62
+ var _options$scrollHeight, _options$scrollWidth, _options$width;
63
+ let {
64
+ options
65
+ } = _ref;
66
+ const [layout] = (0, _LayoutProvider.useLayout)();
67
+ const {
68
+ analytics
69
+ } = (0, _AnalyticsDataProvider.useAnalyticsData)();
70
+ const sanitizedLayout = (0, _react.useMemo)(() => {
71
+ return (0, _lodash.mapValues)(layout, dimension => dimension.map(dimension => ({
72
+ dimension,
73
+ label: getDimensionLabel(dimension)
74
+ })));
75
+ }, [layout]);
76
+ if (!analytics) {
77
+ return null;
78
+ }
79
+ return /*#__PURE__*/_react.default.createElement(_CustomPivotTable.CustomPivotTable, {
80
+ tableProps: {
81
+ scrollHeight: (_options$scrollHeight = options.scrollHeight) !== null && _options$scrollHeight !== void 0 ? _options$scrollHeight : "100%",
82
+ scrollWidth: (_options$scrollWidth = options.scrollWidth) !== null && _options$scrollWidth !== void 0 ? _options$scrollWidth : "100%",
83
+ width: (_options$width = options.width) !== null && _options$width !== void 0 ? _options$width : "100%"
84
+ },
85
+ analytics: analytics,
86
+ config: {
87
+ layout: sanitizedLayout,
88
+ options
89
+ }
90
+ });
91
+ }
92
+ function ChartRenderer(_ref2) {
93
+ let {
94
+ options,
95
+ height
96
+ } = _ref2;
97
+ const {
98
+ analytics
99
+ } = (0, _AnalyticsDataProvider.useAnalyticsData)();
100
+ if (!analytics) {
101
+ return null;
102
+ }
103
+ return /*#__PURE__*/_react.default.createElement(_ChartAnalytics.ChartAnalytics, {
104
+ analytics: analytics,
105
+ config: {
106
+ ...options,
107
+ height
108
+ }
109
+ });
110
+ }
111
+ function MapRenderer(_ref3) {
112
+ let {
113
+ options
114
+ } = _ref3;
115
+ const [dimensions] = (0, _DimensionsProvider.useDimensions)();
116
+ const {
117
+ analytics
118
+ } = (0, _AnalyticsDataProvider.useAnalyticsData)();
119
+ const orgUnitSelection = (0, _react.useMemo)(() => {
120
+ var _dimensions$ou;
121
+ return getOrgUnitSelectionFromIds((_dimensions$ou = dimensions.ou) !== null && _dimensions$ou !== void 0 ? _dimensions$ou : []);
122
+ }, [dimensions.ou]);
123
+ const thematicLayers = (0, _react.useMemo)(() => {
124
+ var _findIndex, _analytics$metaData$d, _analytics$metaData, _analytics$metaData$d2;
125
+ const valueIndex = (_findIndex = (0, _lodash.findIndex)(analytics.headers, ['name', 'value'])) !== null && _findIndex !== void 0 ? _findIndex : -1;
126
+ return (_analytics$metaData$d = (_analytics$metaData = analytics.metaData) === null || _analytics$metaData === void 0 ? void 0 : (_analytics$metaData$d2 = _analytics$metaData.dimensions["dx"]) === null || _analytics$metaData$d2 === void 0 ? void 0 : _analytics$metaData$d2.map(dataId => {
127
+ var _analytics$metaData$d3, _analytics$metaData2, _analytics$metaData2$, _analytics$metaData2$2;
128
+ const config = (0, _lodash.find)(options.thematicLayers, ['id', dataId]);
129
+ const data = (_analytics$metaData$d3 = (_analytics$metaData2 = analytics.metaData) === null || _analytics$metaData2 === void 0 ? void 0 : (_analytics$metaData2$ = _analytics$metaData2.dimensions) === null || _analytics$metaData2$ === void 0 ? void 0 : (_analytics$metaData2$2 = _analytics$metaData2$.ou) === null || _analytics$metaData2$2 === void 0 ? void 0 : _analytics$metaData2$2.map(ouId => {
130
+ const values = (0, _lodash.filter)(analytics.rows, row => row.includes(dataId) && row.includes(ouId));
131
+ const value = values.reduce((acc, value) => acc + parseFloat(value[valueIndex]), 0);
132
+ return {
133
+ data: value,
134
+ dataItem: dataId,
135
+ orgUnit: ouId
136
+ };
137
+ })) !== null && _analytics$metaData$d3 !== void 0 ? _analytics$metaData$d3 : [];
138
+ return {
139
+ ...config,
140
+ data
141
+ };
142
+ })) !== null && _analytics$metaData$d !== void 0 ? _analytics$metaData$d : [];
143
+ }, [analytics]);
144
+ return /*#__PURE__*/_react.default.createElement(_Map.Map, {
145
+ orgUnitSelection: orgUnitSelection,
146
+ thematicLayers: thematicLayers
147
+ });
148
+ }
149
+ function VisualizationSelector(_ref4) {
150
+ let {
151
+ config,
152
+ height
153
+ } = _ref4;
154
+ const [type] = (0, _VisualizationTypeProvider.useVisualizationType)();
155
+ const {
156
+ analytics,
157
+ loading
158
+ } = (0, _AnalyticsDataProvider.useAnalyticsData)();
159
+ if (loading) {
160
+ return /*#__PURE__*/_react.default.createElement("div", {
161
+ style: {
162
+ width: "100%",
163
+ height: "100%",
164
+ display: "flex",
165
+ justifyContent: "center",
166
+ alignItems: "center"
167
+ }
168
+ }, /*#__PURE__*/_react.default.createElement(_ui.CircularLoader, {
169
+ small: true
170
+ }));
171
+ }
172
+ if (!analytics) {
173
+ return null;
174
+ }
175
+ return /*#__PURE__*/_react.default.createElement("div", {
176
+ style: {
177
+ width: "100%",
178
+ height: "100%"
179
+ }
180
+ }, type === "pivotTable" && /*#__PURE__*/_react.default.createElement(PivotTableRenderer, {
181
+ options: config === null || config === void 0 ? void 0 : config.pivotTable
182
+ }), type === "chart" && /*#__PURE__*/_react.default.createElement(ChartRenderer, {
183
+ height: height,
184
+ options: config === null || config === void 0 ? void 0 : config.chart
185
+ }), type === "map" && /*#__PURE__*/_react.default.createElement(MapRenderer, {
186
+ options: config === null || config === void 0 ? void 0 : config.map
187
+ }));
188
+ }