@dhis2/analytics 11.0.15 → 11.0.20
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/CHANGELOG.md +35 -0
- package/build/cjs/lib.js +316 -123
- package/build/cjs/lib.js.map +1 -1
- package/build/es/lib.js +317 -125
- package/build/es/lib.js.map +1 -1
- package/build/stats.html +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
## [11.0.20](https://github.com/dhis2/analytics/compare/v11.0.19...v11.0.20) (2021-09-15)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* add convertOuLevelsToUids (DHIS2-11016) ([#908](https://github.com/dhis2/analytics/issues/908)) ([#1045](https://github.com/dhis2/analytics/issues/1045)) ([7366f26](https://github.com/dhis2/analytics/commit/7366f26d88d467f3d70afdaf82958ffa6df43006))
|
|
7
|
+
|
|
8
|
+
## [11.0.19](https://github.com/dhis2/analytics/compare/v11.0.18...v11.0.19) (2021-07-14)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* yoy x axis title and labels (DHIS2-11411) v35 ([#991](https://github.com/dhis2/analytics/issues/991)) ([5434289](https://github.com/dhis2/analytics/commit/54342894e05afa04e972584b946596231749f940))
|
|
14
|
+
|
|
15
|
+
## [11.0.18](https://github.com/dhis2/analytics/compare/v11.0.17...v11.0.18) (2021-04-22)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* paging of dynamic dimension items (DHIS2-10988) ([#903](https://github.com/dhis2/analytics/issues/903)) ([6f3295d](https://github.com/dhis2/analytics/commit/6f3295db7f76f21ba7b21cef67d185f7eb85f4b3))
|
|
21
|
+
|
|
22
|
+
## [11.0.17](https://github.com/dhis2/analytics/compare/v11.0.16...v11.0.17) (2021-03-23)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* backport DHIS2-9829 ([#874](https://github.com/dhis2/analytics/issues/874)) ([6588b1d](https://github.com/dhis2/analytics/commit/6588b1d476725b6fb91b7e5eca8b2220f6701d45))
|
|
28
|
+
|
|
29
|
+
## [11.0.16](https://github.com/dhis2/analytics/compare/v11.0.15...v11.0.16) (2020-10-20)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* dynamic min/max based on content of data values ([#635](https://github.com/dhis2/analytics/issues/635)) ([000cd18](https://github.com/dhis2/analytics/commit/000cd1896b90da5cda9fe3ff477f3d3a7a2ec799))
|
|
35
|
+
|
|
1
36
|
## [11.0.15](https://github.com/dhis2/analytics/compare/v11.0.14...v11.0.15) (2020-10-19)
|
|
2
37
|
|
|
3
38
|
|
package/build/cjs/lib.js
CHANGED
|
@@ -23,6 +23,7 @@ var DeselectIcon = _interopDefault(require('@material-ui/icons/Close'));
|
|
|
23
23
|
var sortBy = _interopDefault(require('lodash/sortBy'));
|
|
24
24
|
var propTypes = _interopDefault(require('@dhis2/prop-types'));
|
|
25
25
|
var d2UiOrgUnitDialog = require('@dhis2/d2-ui-org-unit-dialog');
|
|
26
|
+
var appRuntime = require('@dhis2/app-runtime');
|
|
26
27
|
var styles$5 = require('@material-ui/core/styles');
|
|
27
28
|
var LockIcon = _interopDefault(require('@material-ui/icons/Lock'));
|
|
28
29
|
var Paper = _interopDefault(require('@material-ui/core/Paper'));
|
|
@@ -1353,9 +1354,11 @@ var enTranslations = {
|
|
|
1353
1354
|
"Main dimensions": "",
|
|
1354
1355
|
"Your dimensions": "",
|
|
1355
1356
|
"Dimension recommended with selected data": "",
|
|
1357
|
+
"Nothing found": "",
|
|
1358
|
+
Search: Search$5,
|
|
1356
1359
|
"No items selected": "",
|
|
1357
1360
|
"Selected Items": "",
|
|
1358
|
-
|
|
1361
|
+
"Nothing found for {{searchTerm}}": "",
|
|
1359
1362
|
"Selected Data": "",
|
|
1360
1363
|
"Deselect All": "",
|
|
1361
1364
|
"Select all": "",
|
|
@@ -7844,11 +7847,48 @@ const apiFetchRecommendedIds = (d2, dxIds, ouIds) => {
|
|
|
7844
7847
|
const url = "/dimensions/recommendations?".concat(dimensions, "&fields=id");
|
|
7845
7848
|
return d2.Api.getApi().get(url).then(response => response.dimensions.map(item => item.id)).catch(onError);
|
|
7846
7849
|
};
|
|
7847
|
-
const
|
|
7848
|
-
|
|
7849
|
-
|
|
7850
|
-
|
|
7851
|
-
|
|
7850
|
+
const itemsByDimensionQuery = {
|
|
7851
|
+
resource: "dimensions",
|
|
7852
|
+
id: ({
|
|
7853
|
+
id: _id
|
|
7854
|
+
}) => "".concat(_id, "/items"),
|
|
7855
|
+
params: ({
|
|
7856
|
+
searchTerm,
|
|
7857
|
+
page
|
|
7858
|
+
}) => {
|
|
7859
|
+
const filters = [];
|
|
7860
|
+
|
|
7861
|
+
if (searchTerm) {
|
|
7862
|
+
filters.push("name:ilike:".concat(searchTerm));
|
|
7863
|
+
}
|
|
7864
|
+
|
|
7865
|
+
return {
|
|
7866
|
+
fields: 'id,displayName~rename(name)',
|
|
7867
|
+
order: 'displayName:asc',
|
|
7868
|
+
filter: filters,
|
|
7869
|
+
paging: true,
|
|
7870
|
+
page
|
|
7871
|
+
};
|
|
7872
|
+
}
|
|
7873
|
+
};
|
|
7874
|
+
const apiFetchItemsByDimension = async ({
|
|
7875
|
+
dataEngine,
|
|
7876
|
+
dimensionId,
|
|
7877
|
+
searchTerm,
|
|
7878
|
+
page
|
|
7879
|
+
}) => {
|
|
7880
|
+
const itemsByDimensionData = await dataEngine.query({
|
|
7881
|
+
itemsByDimensions: itemsByDimensionQuery
|
|
7882
|
+
}, {
|
|
7883
|
+
variables: {
|
|
7884
|
+
id: dimensionId,
|
|
7885
|
+
searchTerm,
|
|
7886
|
+
page
|
|
7887
|
+
},
|
|
7888
|
+
onError
|
|
7889
|
+
});
|
|
7890
|
+
const response = itemsByDimensionData.itemsByDimensions;
|
|
7891
|
+
return formatResponse(response.items, response.pager);
|
|
7852
7892
|
};
|
|
7853
7893
|
const apiFetchGroups = (d2, dataType, nameProp) => {
|
|
7854
7894
|
// indicatorGroups does not support shortName
|
|
@@ -8107,6 +8147,11 @@ const fetchProgramIndicators = ({
|
|
|
8107
8147
|
});
|
|
8108
8148
|
};
|
|
8109
8149
|
|
|
8150
|
+
const formatResponse = (dimensionItems, pager) => ({
|
|
8151
|
+
dimensionItems,
|
|
8152
|
+
nextPage: pager.nextPage ? pager.page + 1 : null
|
|
8153
|
+
});
|
|
8154
|
+
|
|
8110
8155
|
const DataIcon = () => {
|
|
8111
8156
|
return /*#__PURE__*/React__default.createElement("svg", {
|
|
8112
8157
|
width: "16px",
|
|
@@ -9422,8 +9467,8 @@ RelativePeriodFilter.propTypes = {
|
|
|
9422
9467
|
onSelectFilter: PropTypes.func.isRequired
|
|
9423
9468
|
};
|
|
9424
9469
|
|
|
9425
|
-
const _defaultExport$c = [".filterContainer.jsx-
|
|
9426
|
-
_defaultExport$c.__hash = "
|
|
9470
|
+
const _defaultExport$c = [".filterContainer.jsx-2645272461{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:".concat(ui.spacers.dp12, ";margin-top:").concat(ui.spacers.dp8, ";}"), ".emptyList.jsx-2645272461{text-align:center;font-size:14px;line-height:16px;margin:".concat(ui.spacers.dp24, " 0 0;color:").concat(ui.colors.grey700, ";}"), ".rightHeader.jsx-2645272461{font-size:14px;font-weight:400;}", ".leftHeader.jsx-2645272461{padding:".concat(ui.spacers.dp8, " 0;}")];
|
|
9471
|
+
_defaultExport$c.__hash = "2645272461";
|
|
9427
9472
|
|
|
9428
9473
|
const _defaultExport$d = [".wrapper.jsx-1613747048:last-child{margin-bottom:".concat(ui.spacers.dp4, ";}"), ".chip.jsx-1613747048{display:inline-block;background:".concat(ui.colors.grey200, ";font-size:14px;line-height:16px;padding:2px ").concat(ui.spacers.dp8, " 2px ").concat(ui.spacers.dp4, ";margin-top:").concat(ui.spacers.dp4, ";margin-left:").concat(ui.spacers.dp8, ";border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}"), ".chip.jsx-1613747048:hover{background:".concat(ui.colors.grey300, ";}"), ".selected.jsx-1613747048{background:".concat(ui.theme.secondary100, ";color:").concat(ui.theme.secondary900, ";}"), ".selected.jsx-1613747048 .icon path{fill:".concat(ui.theme.secondary700, ";}"), ".selected.jsx-1613747048:hover{background:#c9edeb;}", ".highlighted.jsx-1613747048,.highlighted.jsx-1613747048:hover{background:".concat(ui.theme.secondary800, ";color:").concat(ui.colors.white, ";}"), ".highlighted.jsx-1613747048 .icon path{fill:".concat(ui.colors.white, ";}"), ".disabled.jsx-1613747048{opacity:0.3;cursor:not-allowed;}", ".icon.jsx-1613747048,.label.jsx-1613747048{line-height:18px;}", ".icon.jsx-1613747048{margin-right:".concat(ui.spacers.dp4, ";display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:text-bottom;}"), ".label.jsx-1613747048{font-size:14px;}"];
|
|
9429
9474
|
_defaultExport$d.__hash = "1613747048";
|
|
@@ -9587,7 +9632,7 @@ class PeriodTransfer extends React.Component {
|
|
|
9587
9632
|
});
|
|
9588
9633
|
|
|
9589
9634
|
_defineProperty(this, "renderEmptySelection", () => /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("p", {
|
|
9590
|
-
className: "jsx-".concat(_defaultExport$c.__hash) + " " + "
|
|
9635
|
+
className: "jsx-".concat(_defaultExport$c.__hash) + " " + "emptyList"
|
|
9591
9636
|
}, i18n.t('No periods selected')), /*#__PURE__*/React__default.createElement(_JSXStyle, {
|
|
9592
9637
|
id: _defaultExport$c.__hash
|
|
9593
9638
|
}, _defaultExport$c)));
|
|
@@ -10055,54 +10100,173 @@ var GenericIcon = /*#__PURE__*/React__default.createElement("svg", {
|
|
|
10055
10100
|
d: "M11,5 L11,11 L5,11 L5,5 L11,5 Z M10,6 L6,6 L6,10 L10,10 L10,6 Z"
|
|
10056
10101
|
}));
|
|
10057
10102
|
|
|
10103
|
+
const useDebounce = (value, delay) => {
|
|
10104
|
+
const [debouncedValue, setDebouncedValue] = React.useState(value);
|
|
10105
|
+
React.useEffect(() => {
|
|
10106
|
+
const handler = setTimeout(() => {
|
|
10107
|
+
setDebouncedValue(value);
|
|
10108
|
+
}, delay);
|
|
10109
|
+
return () => {
|
|
10110
|
+
clearTimeout(handler);
|
|
10111
|
+
};
|
|
10112
|
+
}, [value, delay]);
|
|
10113
|
+
return debouncedValue;
|
|
10114
|
+
};
|
|
10115
|
+
|
|
10116
|
+
const LeftHeader = ({
|
|
10117
|
+
filter,
|
|
10118
|
+
setFilter
|
|
10119
|
+
}) => /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
|
|
10120
|
+
className: "jsx-".concat(_defaultExport$c.__hash) + " " + "leftHeader"
|
|
10121
|
+
}, /*#__PURE__*/React__default.createElement(ui.InputField, {
|
|
10122
|
+
value: filter,
|
|
10123
|
+
onChange: ({
|
|
10124
|
+
value
|
|
10125
|
+
}) => setFilter(value),
|
|
10126
|
+
placeholder: i18n.t('Search')
|
|
10127
|
+
})), /*#__PURE__*/React__default.createElement(_JSXStyle, {
|
|
10128
|
+
id: _defaultExport$c.__hash
|
|
10129
|
+
}, _defaultExport$c));
|
|
10130
|
+
|
|
10131
|
+
LeftHeader.propTypes = {
|
|
10132
|
+
filter: PropTypes.string,
|
|
10133
|
+
setFilter: PropTypes.func
|
|
10134
|
+
};
|
|
10135
|
+
|
|
10136
|
+
const EmptySelection = () => /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("p", {
|
|
10137
|
+
className: "jsx-".concat(_defaultExport$c.__hash) + " " + "emptyList"
|
|
10138
|
+
}, i18n.t('No items selected')), /*#__PURE__*/React__default.createElement(_JSXStyle, {
|
|
10139
|
+
id: _defaultExport$c.__hash
|
|
10140
|
+
}, _defaultExport$c));
|
|
10141
|
+
|
|
10142
|
+
const RightHeader = () => /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("p", {
|
|
10143
|
+
className: "jsx-".concat(_defaultExport$c.__hash) + " " + "rightHeader"
|
|
10144
|
+
}, i18n.t('Selected Items')), /*#__PURE__*/React__default.createElement(_JSXStyle, {
|
|
10145
|
+
id: _defaultExport$c.__hash
|
|
10146
|
+
}, _defaultExport$c));
|
|
10147
|
+
|
|
10148
|
+
const SourceEmptyPlaceholder = ({
|
|
10149
|
+
loading,
|
|
10150
|
+
filter,
|
|
10151
|
+
options,
|
|
10152
|
+
noItemsMessage
|
|
10153
|
+
}) => {
|
|
10154
|
+
let message = '';
|
|
10155
|
+
|
|
10156
|
+
if (!loading && !options.length && !filter) {
|
|
10157
|
+
message = noItemsMessage;
|
|
10158
|
+
} else if (!loading && !options.length && filter) {
|
|
10159
|
+
message = i18n.t('Nothing found for {{searchTerm}}', {
|
|
10160
|
+
searchTerm: filter
|
|
10161
|
+
});
|
|
10162
|
+
}
|
|
10163
|
+
|
|
10164
|
+
return message && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("p", {
|
|
10165
|
+
className: "jsx-".concat(_defaultExport$c.__hash) + " " + "emptyList"
|
|
10166
|
+
}, message), /*#__PURE__*/React__default.createElement(_JSXStyle, {
|
|
10167
|
+
id: _defaultExport$c.__hash
|
|
10168
|
+
}, _defaultExport$c));
|
|
10169
|
+
};
|
|
10170
|
+
|
|
10171
|
+
SourceEmptyPlaceholder.propTypes = {
|
|
10172
|
+
filter: PropTypes.string,
|
|
10173
|
+
loading: PropTypes.bool,
|
|
10174
|
+
noItemsMessage: PropTypes.string,
|
|
10175
|
+
options: PropTypes.array
|
|
10176
|
+
};
|
|
10177
|
+
|
|
10058
10178
|
const ItemSelector$1 = ({
|
|
10059
|
-
|
|
10179
|
+
initialSelected,
|
|
10180
|
+
noItemsMessage,
|
|
10181
|
+
onFetch,
|
|
10060
10182
|
onSelect,
|
|
10061
|
-
initialSelectedItemIds,
|
|
10062
|
-
leftHeader,
|
|
10063
10183
|
rightFooter
|
|
10064
10184
|
}) => {
|
|
10065
|
-
const [
|
|
10185
|
+
const [state, setState] = React.useState({
|
|
10186
|
+
filter: '',
|
|
10187
|
+
selected: initialSelected,
|
|
10188
|
+
options: [],
|
|
10189
|
+
loading: true,
|
|
10190
|
+
nextPage: null
|
|
10191
|
+
});
|
|
10066
10192
|
|
|
10067
|
-
const
|
|
10068
|
-
|
|
10069
|
-
}
|
|
10070
|
-
id: _defaultExport$c.__hash
|
|
10071
|
-
}, _defaultExport$c));
|
|
10193
|
+
const setFilter = filter => setState(state => _objectSpread2(_objectSpread2({}, state), {}, {
|
|
10194
|
+
filter
|
|
10195
|
+
}));
|
|
10072
10196
|
|
|
10073
|
-
const
|
|
10074
|
-
|
|
10075
|
-
}
|
|
10076
|
-
|
|
10077
|
-
|
|
10197
|
+
const setSelected = selected => setState(state => _objectSpread2(_objectSpread2({}, state), {}, {
|
|
10198
|
+
selected
|
|
10199
|
+
}));
|
|
10200
|
+
|
|
10201
|
+
const debouncedFilter = useDebounce(state.filter, 500);
|
|
10202
|
+
|
|
10203
|
+
const fetchItems = async page => {
|
|
10204
|
+
var _result$dimensionItem;
|
|
10078
10205
|
|
|
10206
|
+
setState(state => _objectSpread2(_objectSpread2({}, state), {}, {
|
|
10207
|
+
loading: true
|
|
10208
|
+
}));
|
|
10209
|
+
const result = await onFetch(page, state.filter);
|
|
10210
|
+
const newOptions = (_result$dimensionItem = result.dimensionItems) === null || _result$dimensionItem === void 0 ? void 0 : _result$dimensionItem.map(({
|
|
10211
|
+
id,
|
|
10212
|
+
name,
|
|
10213
|
+
disabled
|
|
10214
|
+
}) => ({
|
|
10215
|
+
label: name,
|
|
10216
|
+
value: id,
|
|
10217
|
+
disabled
|
|
10218
|
+
}));
|
|
10219
|
+
setState(state => _objectSpread2(_objectSpread2({}, state), {}, {
|
|
10220
|
+
loading: false,
|
|
10221
|
+
options: page > 1 ? [...state.options, ...newOptions] : newOptions,
|
|
10222
|
+
nextPage: result.nextPage
|
|
10223
|
+
}));
|
|
10224
|
+
};
|
|
10225
|
+
|
|
10226
|
+
React.useEffect(() => {
|
|
10227
|
+
fetchItems(1);
|
|
10228
|
+
}, [debouncedFilter]);
|
|
10229
|
+
|
|
10230
|
+
const _onChange = React.useCallback(newSelected => {
|
|
10231
|
+
const newSelectedWithLabel = newSelected.map(value => ({
|
|
10232
|
+
value,
|
|
10233
|
+
label: [...state.options, ...state.selected].find(item => item.value === value).label
|
|
10234
|
+
}));
|
|
10235
|
+
setSelected(newSelectedWithLabel);
|
|
10236
|
+
onSelect(newSelectedWithLabel);
|
|
10237
|
+
}, [state.options, state.selected]);
|
|
10238
|
+
|
|
10239
|
+
const onEndReached = React.useCallback(() => {
|
|
10240
|
+
if (state.nextPage) {
|
|
10241
|
+
fetchItems(state.nextPage);
|
|
10242
|
+
}
|
|
10243
|
+
}, [state.nextPage]);
|
|
10079
10244
|
return /*#__PURE__*/React__default.createElement(ui.Transfer, {
|
|
10080
10245
|
onChange: ({
|
|
10081
10246
|
selected
|
|
10082
|
-
}) =>
|
|
10083
|
-
|
|
10084
|
-
|
|
10085
|
-
|
|
10086
|
-
|
|
10087
|
-
|
|
10088
|
-
|
|
10089
|
-
|
|
10247
|
+
}) => _onChange(selected),
|
|
10248
|
+
selected: state.selected.map(item => item.value),
|
|
10249
|
+
options: [...state.options, ...state.selected],
|
|
10250
|
+
loading: state.loading,
|
|
10251
|
+
loadingPicked: state.loading,
|
|
10252
|
+
sourceEmptyPlaceholder: /*#__PURE__*/React__default.createElement(SourceEmptyPlaceholder, {
|
|
10253
|
+
loading: state.loading,
|
|
10254
|
+
filter: debouncedFilter,
|
|
10255
|
+
options: state.options,
|
|
10256
|
+
noItemsMessage: noItemsMessage
|
|
10257
|
+
}),
|
|
10258
|
+
onEndReached: onEndReached,
|
|
10259
|
+
leftHeader: /*#__PURE__*/React__default.createElement(LeftHeader, {
|
|
10260
|
+
filter: state.filter,
|
|
10261
|
+
setFilter: setFilter
|
|
10262
|
+
}),
|
|
10090
10263
|
enableOrderChange: true,
|
|
10091
10264
|
height: TRANSFER_HEIGHT,
|
|
10092
10265
|
optionsWidth: TRANSFER_OPTIONS_WIDTH,
|
|
10093
10266
|
selectedWidth: TRANSFER_SELECTED_WIDTH,
|
|
10094
|
-
selectedEmptyComponent:
|
|
10095
|
-
rightHeader:
|
|
10267
|
+
selectedEmptyComponent: /*#__PURE__*/React__default.createElement(EmptySelection, null),
|
|
10268
|
+
rightHeader: /*#__PURE__*/React__default.createElement(RightHeader, null),
|
|
10096
10269
|
rightFooter: rightFooter,
|
|
10097
|
-
options: allItems.map(({
|
|
10098
|
-
id,
|
|
10099
|
-
name,
|
|
10100
|
-
disabled
|
|
10101
|
-
}) => ({
|
|
10102
|
-
label: name,
|
|
10103
|
-
value: id,
|
|
10104
|
-
disabled
|
|
10105
|
-
})),
|
|
10106
10270
|
renderOption: props => /*#__PURE__*/React__default.createElement(TransferOption, _extends({}, props, {
|
|
10107
10271
|
icon: GenericIcon
|
|
10108
10272
|
}))
|
|
@@ -10110,61 +10274,54 @@ const ItemSelector$1 = ({
|
|
|
10110
10274
|
};
|
|
10111
10275
|
|
|
10112
10276
|
ItemSelector$1.propTypes = {
|
|
10113
|
-
|
|
10114
|
-
id: PropTypes.string,
|
|
10115
|
-
name: PropTypes.string
|
|
10116
|
-
})).isRequired,
|
|
10277
|
+
onFetch: PropTypes.func.isRequired,
|
|
10117
10278
|
onSelect: PropTypes.func.isRequired,
|
|
10118
|
-
|
|
10119
|
-
|
|
10279
|
+
initialSelected: PropTypes.arrayOf(PropTypes.exact({
|
|
10280
|
+
label: PropTypes.string.isRequired,
|
|
10281
|
+
value: PropTypes.string.isRequired
|
|
10282
|
+
})),
|
|
10283
|
+
noItemsMessage: PropTypes.string,
|
|
10120
10284
|
rightFooter: PropTypes.node
|
|
10121
10285
|
};
|
|
10122
10286
|
ItemSelector$1.defaultProps = {
|
|
10123
|
-
|
|
10287
|
+
initialSelected: []
|
|
10124
10288
|
};
|
|
10125
10289
|
|
|
10126
10290
|
const DynamicDimension = ({
|
|
10127
|
-
context,
|
|
10128
10291
|
dimensionId,
|
|
10129
10292
|
onSelect,
|
|
10130
10293
|
selectedItems,
|
|
10131
10294
|
rightFooter
|
|
10132
10295
|
}) => {
|
|
10133
|
-
const
|
|
10134
|
-
React.useEffect(() => {
|
|
10135
|
-
if (!items || !items.length) {
|
|
10136
|
-
getItems();
|
|
10137
|
-
}
|
|
10138
|
-
}, []);
|
|
10296
|
+
const dataEngine = appRuntime.useDataEngine();
|
|
10139
10297
|
|
|
10140
|
-
const
|
|
10141
|
-
|
|
10142
|
-
|
|
10143
|
-
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
const formattedItems = selectedItemIds.map(id => ({
|
|
10147
|
-
id,
|
|
10148
|
-
name: items.find(item => item.id === id).name // TODO: Re: *** above, this won't work with pagination
|
|
10149
|
-
|
|
10150
|
-
})); // TODO: fetch the name from somewhere else, as not all content in selectedItems might be present in the items list
|
|
10298
|
+
const fetchItems = (page, searchTerm) => apiFetchItemsByDimension({
|
|
10299
|
+
dataEngine,
|
|
10300
|
+
dimensionId,
|
|
10301
|
+
searchTerm,
|
|
10302
|
+
page
|
|
10303
|
+
});
|
|
10151
10304
|
|
|
10152
|
-
|
|
10153
|
-
|
|
10154
|
-
|
|
10155
|
-
|
|
10156
|
-
|
|
10305
|
+
const onSelectItems = selectedItem => onSelect({
|
|
10306
|
+
dimensionId: dimensionId,
|
|
10307
|
+
items: selectedItem.map(item => ({
|
|
10308
|
+
id: item.value,
|
|
10309
|
+
name: item.label
|
|
10310
|
+
}))
|
|
10311
|
+
});
|
|
10157
10312
|
|
|
10158
10313
|
return /*#__PURE__*/React__default.createElement(ItemSelector$1, {
|
|
10314
|
+
initialSelected: selectedItems.map(item => ({
|
|
10315
|
+
value: item.id,
|
|
10316
|
+
label: item.name
|
|
10317
|
+
})),
|
|
10318
|
+
noItemsMessage: i18n.t('Nothing found'),
|
|
10319
|
+
onFetch: fetchItems,
|
|
10159
10320
|
onSelect: onSelectItems,
|
|
10160
|
-
|
|
10161
|
-
initialSelectedItemIds: selectedItems.map(item => item.id),
|
|
10162
|
-
rightFooter: rightFooter // TODO: Pass in a func prop to fetch items, instead of fetching them on this level, to enable the loading spinner?
|
|
10163
|
-
|
|
10321
|
+
rightFooter: rightFooter
|
|
10164
10322
|
});
|
|
10165
10323
|
};
|
|
10166
10324
|
DynamicDimension.propTypes = {
|
|
10167
|
-
context: PropTypes.object.isRequired,
|
|
10168
10325
|
dimensionId: PropTypes.string.isRequired,
|
|
10169
10326
|
selectedItems: PropTypes.arrayOf(PropTypes.shape({
|
|
10170
10327
|
id: PropTypes.string,
|
|
@@ -14008,6 +14165,67 @@ PivotTable.propTypes = {
|
|
|
14008
14165
|
onToggleContextualMenu: PropTypes.func
|
|
14009
14166
|
};
|
|
14010
14167
|
|
|
14168
|
+
const axisGetDimension = (axis, dimensionId) => AXIS.isValid(axis) && axis.find(dimension => dimensionIs(dimension, dimensionId));
|
|
14169
|
+
|
|
14170
|
+
const axisHasDimension = (axis, dimensionId) => Boolean(axisGetDimension(axis, dimensionId));
|
|
14171
|
+
|
|
14172
|
+
const layoutReplaceDimension = (layout, dimensionId, items) => {
|
|
14173
|
+
const axisId = DEFAULT_AXIS_IDS.find(a => axisHasDimension(layout[a], dimensionId));
|
|
14174
|
+
|
|
14175
|
+
if (!axisId) {
|
|
14176
|
+
return Object.assign({}, layout);
|
|
14177
|
+
}
|
|
14178
|
+
|
|
14179
|
+
const newAxisDimensions = layout[axisId].map(dimension => {
|
|
14180
|
+
if (dimensionIs(dimension, dimensionId)) {
|
|
14181
|
+
return Object.assign({}, dimension, {
|
|
14182
|
+
items
|
|
14183
|
+
});
|
|
14184
|
+
}
|
|
14185
|
+
|
|
14186
|
+
return dimension;
|
|
14187
|
+
});
|
|
14188
|
+
return Object.assign({}, layout, {
|
|
14189
|
+
[axisId]: newAxisDimensions
|
|
14190
|
+
});
|
|
14191
|
+
};
|
|
14192
|
+
|
|
14193
|
+
const layoutGetAllAxes = layout => [layout[AXIS_ID_COLUMNS], layout[AXIS_ID_ROWS], layout[AXIS_ID_FILTERS]];
|
|
14194
|
+
|
|
14195
|
+
const layoutGetAllDimensions = layout => layoutGetAllAxes(layout).reduce((allDimensions, axis) => {
|
|
14196
|
+
allDimensions.push(...axis);
|
|
14197
|
+
return allDimensions;
|
|
14198
|
+
}, []);
|
|
14199
|
+
|
|
14200
|
+
const layoutGetDimension = (layout, dimensionId) => layoutGetAllDimensions(layout).find(dimension => dimensionIs(dimension, dimensionId));
|
|
14201
|
+
|
|
14202
|
+
const isOuLevelIntId = id => ouIdHelper.hasLevelPrefix(id) ? Number.isInteger(parseInt(ouIdHelper.removePrefix(id), 10)) : false;
|
|
14203
|
+
|
|
14204
|
+
const replaceNumericOuLevelWithUid = ouLevels => item => {
|
|
14205
|
+
if (!isOuLevelIntId(item.id)) {
|
|
14206
|
+
return item;
|
|
14207
|
+
}
|
|
14208
|
+
|
|
14209
|
+
const ouIntId = parseInt(ouIdHelper.removePrefix(item.id), 10);
|
|
14210
|
+
const ouUid = ouLevels.find(l => parseInt(l.level, 10) === ouIntId).id;
|
|
14211
|
+
return Object.assign({}, item, {
|
|
14212
|
+
id: ouIdHelper.addLevelPrefix(ouUid)
|
|
14213
|
+
});
|
|
14214
|
+
};
|
|
14215
|
+
|
|
14216
|
+
const convertOuLevelsToUids = (ouLevels, layout) => {
|
|
14217
|
+
const ouDimension = layoutGetDimension(layout, DIMENSION_ID_ORGUNIT);
|
|
14218
|
+
const hasNumericOuLevels = ouDimension && dimensionGetItems(ouDimension).some(item => isOuLevelIntId(item.id));
|
|
14219
|
+
|
|
14220
|
+
if (hasNumericOuLevels) {
|
|
14221
|
+
const replaceNumericOuLevel = replaceNumericOuLevelWithUid(ouLevels);
|
|
14222
|
+
const updatedOuItems = dimensionGetItems(ouDimension).map(replaceNumericOuLevel);
|
|
14223
|
+
return layoutReplaceDimension(layout, DIMENSION_ID_ORGUNIT, updatedOuItems);
|
|
14224
|
+
}
|
|
14225
|
+
|
|
14226
|
+
return layout;
|
|
14227
|
+
};
|
|
14228
|
+
|
|
14011
14229
|
const hasRelativeItems = (dimension, itemIds = []) => dimension === DIMENSION_ID_ASSIGNED_CATEGORIES || dimension === DIMENSION_ID_ORGUNIT && Array.isArray(itemIds) && itemIds.some(id => ouIdHelper.hasLevelPrefix(id) || ouIdHelper.hasGroupPrefix(id) || ['USER_ORGUNIT', 'USER_ORGUNIT_CHILDREN', 'USER_ORGUNIT_GRAND_CHILDREN'].includes(id)) || dimension === DIMENSION_ID_PERIOD && Array.isArray(itemIds) && itemIds.some(id => getRelativePeriodIds().includes(id));
|
|
14012
14230
|
|
|
14013
14231
|
const LAYOUT = {
|
|
@@ -14027,13 +14245,6 @@ const layoutFilterDimensions = (layout, dimensionIds) => {
|
|
|
14027
14245
|
return filteredLayout;
|
|
14028
14246
|
};
|
|
14029
14247
|
|
|
14030
|
-
const layoutGetAllAxes = layout => [layout[AXIS_ID_COLUMNS], layout[AXIS_ID_ROWS], layout[AXIS_ID_FILTERS]];
|
|
14031
|
-
|
|
14032
|
-
const layoutGetAllDimensions = layout => layoutGetAllAxes(layout).reduce((allDimensions, axis) => {
|
|
14033
|
-
allDimensions.push(...axis);
|
|
14034
|
-
return allDimensions;
|
|
14035
|
-
}, []);
|
|
14036
|
-
|
|
14037
14248
|
const axisGetAllItems = axis => axis.reduce((allItems, dimension) => {
|
|
14038
14249
|
allItems.push(...dimensionGetItems(dimension));
|
|
14039
14250
|
return allItems;
|
|
@@ -14070,35 +14281,8 @@ const layoutGetAxisIdDimensionIdsObject = layout => DEFAULT_AXIS_IDS.reduce((obj
|
|
|
14070
14281
|
return obj;
|
|
14071
14282
|
}, {});
|
|
14072
14283
|
|
|
14073
|
-
const layoutGetDimension = (layout, dimensionId) => layoutGetAllDimensions(layout).find(dimension => dimensionIs(dimension, dimensionId));
|
|
14074
|
-
|
|
14075
14284
|
const layoutGetDimensionItems = (layout, dimensionId) => dimensionGetItems(layoutGetDimension(layout, dimensionId));
|
|
14076
14285
|
|
|
14077
|
-
const axisGetDimension = (axis, dimensionId) => AXIS.isValid(axis) && axis.find(dimension => dimensionIs(dimension, dimensionId));
|
|
14078
|
-
|
|
14079
|
-
const axisHasDimension = (axis, dimensionId) => Boolean(axisGetDimension(axis, dimensionId));
|
|
14080
|
-
|
|
14081
|
-
const layoutReplaceDimension = (layout, dimensionId, items) => {
|
|
14082
|
-
const axisId = DEFAULT_AXIS_IDS.find(a => axisHasDimension(layout[a], dimensionId));
|
|
14083
|
-
|
|
14084
|
-
if (!axisId) {
|
|
14085
|
-
return Object.assign({}, layout);
|
|
14086
|
-
}
|
|
14087
|
-
|
|
14088
|
-
const newAxisDimensions = layout[axisId].map(dimension => {
|
|
14089
|
-
if (dimensionIs(dimension, dimensionId)) {
|
|
14090
|
-
return Object.assign({}, dimension, {
|
|
14091
|
-
items
|
|
14092
|
-
});
|
|
14093
|
-
}
|
|
14094
|
-
|
|
14095
|
-
return dimension;
|
|
14096
|
-
});
|
|
14097
|
-
return Object.assign({}, layout, {
|
|
14098
|
-
[axisId]: newAxisDimensions
|
|
14099
|
-
});
|
|
14100
|
-
};
|
|
14101
|
-
|
|
14102
14286
|
const dimensionGetItemIds = dimension => dimensionGetItems(dimension).map(item => itemGetId(item));
|
|
14103
14287
|
|
|
14104
14288
|
const layoutGetDimensionIdItemIdsObject = layout => layoutGetAllDimensions(layout).reduce((obj, dimension) => {
|
|
@@ -14957,9 +15141,19 @@ function getYearOnYear$1 (store, layout, extraOptions) {
|
|
|
14957
15141
|
}, []);
|
|
14958
15142
|
}
|
|
14959
15143
|
|
|
14960
|
-
|
|
14961
|
-
|
|
14962
|
-
|
|
15144
|
+
const labelFontStyle = layout.fontStyle[FONT_STYLE_CATEGORY_AXIS_LABELS];
|
|
15145
|
+
return objectClean({
|
|
15146
|
+
categories,
|
|
15147
|
+
title: getAxisTitle(layout.domainAxisLabel, layout.fontStyle[FONT_STYLE_HORIZONTAL_AXIS_TITLE], FONT_STYLE_HORIZONTAL_AXIS_TITLE, layout.type),
|
|
15148
|
+
labels: labelFontStyle ? {
|
|
15149
|
+
style: {
|
|
15150
|
+
color: labelFontStyle[FONT_STYLE_OPTION_TEXT_COLOR],
|
|
15151
|
+
fontSize: "".concat(labelFontStyle[FONT_STYLE_OPTION_FONT_SIZE], "px"),
|
|
15152
|
+
fontWeight: labelFontStyle[FONT_STYLE_OPTION_BOLD] ? FONT_STYLE_OPTION_BOLD : 'normal',
|
|
15153
|
+
fontStyle: labelFontStyle[FONT_STYLE_OPTION_ITALIC] ? FONT_STYLE_OPTION_ITALIC : 'normal'
|
|
15154
|
+
}
|
|
15155
|
+
} : {}
|
|
15156
|
+
});
|
|
14963
15157
|
}
|
|
14964
15158
|
|
|
14965
15159
|
function getTwoCategory$1 (store, layout) {
|
|
@@ -15184,13 +15378,9 @@ function getPlotLineLabelStyle(fontStyle) {
|
|
|
15184
15378
|
};
|
|
15185
15379
|
}
|
|
15186
15380
|
|
|
15187
|
-
|
|
15188
|
-
return isNumeric(layout.rangeAxisMinValue) ? layout.rangeAxisMinValue : DEFAULT_MIN_VALUE;
|
|
15189
|
-
}
|
|
15381
|
+
const getMinValue = (rangeAxisMinValue, dataValues) => isNumeric(rangeAxisMinValue) ? rangeAxisMinValue : (dataValues === null || dataValues === void 0 ? void 0 : dataValues.some(value => value < DEFAULT_MIN_VALUE)) ? undefined : DEFAULT_MIN_VALUE;
|
|
15190
15382
|
|
|
15191
|
-
|
|
15192
|
-
return isNumeric(layout.rangeAxisMaxValue) ? layout.rangeAxisMaxValue : undefined;
|
|
15193
|
-
}
|
|
15383
|
+
const getMaxValue = (rangeAxisMaxValue, dataValues) => isNumeric(rangeAxisMaxValue) ? rangeAxisMaxValue : (dataValues === null || dataValues === void 0 ? void 0 : dataValues.every(value => value < DEFAULT_MIN_VALUE)) ? DEFAULT_MIN_VALUE : undefined;
|
|
15194
15384
|
|
|
15195
15385
|
function getSteps(layout) {
|
|
15196
15386
|
return isNumeric(layout.rangeAxisSteps) ? layout.rangeAxisSteps : undefined;
|
|
@@ -15298,14 +15488,15 @@ function getDefault$3(layout, series, extraOptions) {
|
|
|
15298
15488
|
|
|
15299
15489
|
const axes = [];
|
|
15300
15490
|
const filteredSeries = (_layout$series = layout.series) === null || _layout$series === void 0 ? void 0 : _layout$series.filter(layoutSeriesItem => series.some(seriesItem => seriesItem.id === layoutSeriesItem.dimensionItem));
|
|
15491
|
+
const dataValues = series === null || series === void 0 ? void 0 : series.map(item => item.data).flat();
|
|
15301
15492
|
|
|
15302
15493
|
if (isDualAxisType(layout.type) && hasCustomAxes(filteredSeries) && !axisHasRelativeItems(layout.columns)) {
|
|
15303
15494
|
const axisIdsMap = getAxisIdsMap(layout.series, series);
|
|
15304
15495
|
axes.push(...getMultipleAxes(extraOptions.multiAxisTheme, [...new Set(Object.keys(axisIdsMap))].sort((a, b) => a - b)));
|
|
15305
15496
|
} else {
|
|
15306
15497
|
axes.push(objectClean({
|
|
15307
|
-
min: getMinValue(layout),
|
|
15308
|
-
max: getMaxValue(layout),
|
|
15498
|
+
min: getMinValue(layout.rangeAxisMinValue, dataValues),
|
|
15499
|
+
max: getMaxValue(layout.rangeAxisMaxValue, dataValues),
|
|
15309
15500
|
tickAmount: getSteps(layout),
|
|
15310
15501
|
title: getAxisTitle(layout.rangeAxisLabel, layout.fontStyle[FONT_STYLE_VERTICAL_AXIS_TITLE], FONT_STYLE_VERTICAL_AXIS_TITLE, layout.type),
|
|
15311
15502
|
plotLines: arrayClean([getTargetLine(layout), getBaseLine(layout)]),
|
|
@@ -16130,7 +16321,8 @@ const DEFAULT_TRENDLINE = {
|
|
|
16130
16321
|
enabled: false,
|
|
16131
16322
|
symbol: 'circle',
|
|
16132
16323
|
radius: 2
|
|
16133
|
-
}
|
|
16324
|
+
},
|
|
16325
|
+
zIndex: 1
|
|
16134
16326
|
};
|
|
16135
16327
|
const isRegressionIneligible = type => arrayContains([VIS_TYPE_GAUGE, VIS_TYPE_PIE], type);
|
|
16136
16328
|
function addTrendLines (layout, series, isStacked) {
|
|
@@ -17165,6 +17357,7 @@ exports.axisHasPeriodDimension = axisHasPeriodDimension;
|
|
|
17165
17357
|
exports.axisIsEmpty = axisIsEmpty;
|
|
17166
17358
|
exports.canDimensionBeAddedToAxis = canDimensionBeAddedToAxisByVisType;
|
|
17167
17359
|
exports.colorSets = colorSets;
|
|
17360
|
+
exports.convertOuLevelsToUids = convertOuLevelsToUids;
|
|
17168
17361
|
exports.createVisualization = createVisualization;
|
|
17169
17362
|
exports.defaultFontStyle = defaultFontStyle;
|
|
17170
17363
|
exports.defaultVisType = defaultVisType;
|