@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.
- package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/services/engine.js +9 -1
- package/build/cjs/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +3 -0
- package/build/cjs/components/Map/constants/colors.js +1 -0
- package/build/cjs/components/Visualization/Visualization.stories.js +138 -0
- package/build/cjs/components/Visualization/components/AnalyticsDataProvider/index.js +99 -0
- package/build/cjs/components/Visualization/components/DimensionsProvider/index.js +46 -0
- package/build/cjs/components/Visualization/components/LayoutProvider/index.js +31 -0
- package/build/cjs/components/Visualization/components/VisualizationDimensionSelector/index.js +73 -0
- package/build/cjs/components/Visualization/components/VisualizationProvider/index.js +29 -0
- package/build/cjs/components/Visualization/components/VisualizationSelector/index.js +188 -0
- package/build/cjs/components/Visualization/components/VisualizationTypeProvider/index.js +40 -0
- package/build/cjs/components/Visualization/components/VisualizationTypeSelector/index.js +54 -0
- package/build/cjs/components/Visualization/index.js +104 -0
- package/build/cjs/index.js +11 -0
- package/build/cjs/locales/en/translations.json +11 -1
- package/build/es/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js +3 -0
- package/build/es/components/Map/constants/colors.js +1 -0
- package/build/es/components/Visualization/Visualization.stories.js +129 -0
- package/build/es/components/Visualization/components/AnalyticsDataProvider/index.js +90 -0
- package/build/es/components/Visualization/components/DimensionsProvider/index.js +34 -0
- package/build/es/components/Visualization/components/LayoutProvider/index.js +20 -0
- package/build/es/components/Visualization/components/VisualizationDimensionSelector/index.js +64 -0
- package/build/es/components/Visualization/components/VisualizationProvider/index.js +22 -0
- package/build/es/components/Visualization/components/VisualizationSelector/index.js +174 -0
- package/build/es/components/Visualization/components/VisualizationTypeProvider/index.js +25 -0
- package/build/es/components/Visualization/components/VisualizationTypeSelector/index.js +45 -0
- package/build/es/components/Visualization/index.js +97 -0
- package/build/es/index.js +1 -0
- package/build/es/locales/en/translations.json +11 -1
- package/build/types/components/CustomPivotTable/components/Table/index.d.ts +7 -6
- package/build/types/components/CustomPivotTable/index.d.ts +12 -11
- package/build/types/components/Visualization/components/AnalyticsDataProvider/index.d.ts +10 -0
- package/build/types/components/Visualization/components/DimensionsProvider/index.d.ts +15 -0
- package/build/types/components/Visualization/components/LayoutProvider/index.d.ts +14 -0
- package/build/types/components/Visualization/components/VisualizationDimensionSelector/index.d.ts +2 -0
- package/build/types/components/Visualization/components/VisualizationProvider/index.d.ts +13 -0
- package/build/types/components/Visualization/components/VisualizationSelector/index.d.ts +25 -0
- package/build/types/components/Visualization/components/VisualizationTypeProvider/index.d.ts +14 -0
- package/build/types/components/Visualization/components/VisualizationTypeSelector/index.d.ts +2 -0
- package/build/types/components/Visualization/index.d.ts +21 -0
- package/build/types/index.d.ts +1 -0
- package/package.json +5 -4
package/build/cjs/components/Map/components/MapLayer/components/GoogleEngineLayer/services/engine.js
CHANGED
|
@@ -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
|
package/build/cjs/components/Map/components/MapProvider/components/MapLayerProvider/hooks/index.js
CHANGED
|
@@ -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
|
+
}
|