@dhis2/analytics 26.4.1 → 26.6.0

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 (89) hide show
  1. package/build/cjs/__fixtures__/fixtures.js +1 -0
  2. package/build/cjs/__fixtures__/json/api/analytics/outlierDetection.json +213 -0
  3. package/build/cjs/api/analytics/Analytics.js +7 -0
  4. package/build/cjs/api/analytics/AnalyticsAggregate.js +27 -1
  5. package/build/cjs/api/analytics/AnalyticsBase.js +32 -13
  6. package/build/cjs/api/analytics/AnalyticsRequest.js +33 -10
  7. package/build/cjs/api/analytics/AnalyticsRequestBase.js +12 -6
  8. package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -0
  9. package/build/cjs/api/analytics/AnalyticsResponse.js +42 -39
  10. package/build/cjs/api/analytics/AnalyticsTrackedEntities.js +31 -0
  11. package/build/cjs/api/analytics/__tests__/Analytics.spec.js +5 -0
  12. package/build/cjs/api/analytics/__tests__/AnalyticsAggregate.spec.js +29 -0
  13. package/build/cjs/api/analytics/__tests__/AnalyticsBase.spec.js +36 -2
  14. package/build/cjs/api/analytics/utils.js +21 -2
  15. package/build/cjs/components/DataDimension/DataDimension.js +31 -7
  16. package/build/cjs/components/DataDimension/DataTypeSelector.js +29 -8
  17. package/build/cjs/components/DataDimension/GroupSelector.js +7 -7
  18. package/build/cjs/components/DataDimension/ItemSelector.js +79 -61
  19. package/build/cjs/components/PeriodDimension/PeriodDimension.js +5 -2
  20. package/build/cjs/components/PeriodDimension/PeriodTransfer.js +64 -31
  21. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +1 -1
  22. package/build/cjs/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +1 -12
  23. package/build/cjs/components/VisTypeIcon.js +6 -1
  24. package/build/cjs/index.js +43 -1
  25. package/build/cjs/locales/en/translations.json +5 -1
  26. package/build/cjs/modules/__tests__/getAdaptedUiLayoutByType.spec.js +15 -0
  27. package/build/cjs/modules/axis.js +4 -0
  28. package/build/cjs/modules/getAdaptedUiLayoutByType.js +9 -0
  29. package/build/cjs/modules/layout/axisGetDimensionIds.js +1 -1
  30. package/build/cjs/modules/layout/dimension.js +9 -2
  31. package/build/cjs/modules/layout/dimensionCreate.js +3 -0
  32. package/build/cjs/modules/layout/dimensionGetId.js +9 -3
  33. package/build/cjs/modules/layout/layoutFilterDimensions.js +1 -1
  34. package/build/cjs/modules/layout/layoutGetAxisIdDimensionIdsObject.js +1 -1
  35. package/build/cjs/modules/layout/layoutGetDimensionIdItemIdsObject.js +1 -1
  36. package/build/cjs/modules/layout/layoutHasDynamicDimension.js +1 -1
  37. package/build/cjs/modules/layoutTypes.js +4 -2
  38. package/build/cjs/modules/layoutUiRules/__tests__/rules.spec.js +13 -1
  39. package/build/cjs/modules/layoutUiRules/index.js +12 -0
  40. package/build/cjs/modules/layoutUiRules/rules.js +22 -2
  41. package/build/cjs/modules/layoutUiRules/rulesHelper.js +4 -2
  42. package/build/cjs/modules/layoutUiRules/rulesUtils.js +7 -2
  43. package/build/cjs/modules/visTypeToLayoutType.js +2 -1
  44. package/build/cjs/modules/visTypes.js +9 -3
  45. package/build/es/__fixtures__/fixtures.js +1 -0
  46. package/build/es/__fixtures__/json/api/analytics/outlierDetection.json +213 -0
  47. package/build/es/api/analytics/Analytics.js +7 -0
  48. package/build/es/api/analytics/AnalyticsAggregate.js +27 -1
  49. package/build/es/api/analytics/AnalyticsBase.js +31 -13
  50. package/build/es/api/analytics/AnalyticsRequest.js +33 -10
  51. package/build/es/api/analytics/AnalyticsRequestBase.js +12 -6
  52. package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +19 -0
  53. package/build/es/api/analytics/AnalyticsResponse.js +42 -39
  54. package/build/es/api/analytics/AnalyticsTrackedEntities.js +24 -0
  55. package/build/es/api/analytics/__tests__/Analytics.spec.js +5 -0
  56. package/build/es/api/analytics/__tests__/AnalyticsAggregate.spec.js +29 -0
  57. package/build/es/api/analytics/__tests__/AnalyticsBase.spec.js +34 -1
  58. package/build/es/api/analytics/utils.js +18 -1
  59. package/build/es/components/DataDimension/DataDimension.js +27 -6
  60. package/build/es/components/DataDimension/DataTypeSelector.js +30 -9
  61. package/build/es/components/DataDimension/GroupSelector.js +7 -7
  62. package/build/es/components/DataDimension/ItemSelector.js +80 -62
  63. package/build/es/components/PeriodDimension/PeriodDimension.js +5 -2
  64. package/build/es/components/PeriodDimension/PeriodTransfer.js +65 -32
  65. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodDimension.spec.js.snap +1 -1
  66. package/build/es/components/PeriodDimension/__tests__/__snapshots__/PeriodSelector.spec.js.snap +1 -12
  67. package/build/es/components/VisTypeIcon.js +8 -3
  68. package/build/es/index.js +4 -4
  69. package/build/es/locales/en/translations.json +5 -1
  70. package/build/es/modules/__tests__/getAdaptedUiLayoutByType.spec.js +16 -1
  71. package/build/es/modules/axis.js +5 -1
  72. package/build/es/modules/getAdaptedUiLayoutByType.js +10 -1
  73. package/build/es/modules/layout/axisGetDimensionIds.js +1 -1
  74. package/build/es/modules/layout/dimension.js +7 -1
  75. package/build/es/modules/layout/dimensionCreate.js +4 -1
  76. package/build/es/modules/layout/dimensionGetId.js +10 -4
  77. package/build/es/modules/layout/layoutFilterDimensions.js +1 -1
  78. package/build/es/modules/layout/layoutGetAxisIdDimensionIdsObject.js +1 -1
  79. package/build/es/modules/layout/layoutGetDimensionIdItemIdsObject.js +1 -1
  80. package/build/es/modules/layout/layoutHasDynamicDimension.js +1 -1
  81. package/build/es/modules/layoutTypes.js +2 -1
  82. package/build/es/modules/layoutUiRules/__tests__/rules.spec.js +14 -2
  83. package/build/es/modules/layoutUiRules/index.js +2 -2
  84. package/build/es/modules/layoutUiRules/rules.js +22 -3
  85. package/build/es/modules/layoutUiRules/rulesHelper.js +3 -2
  86. package/build/es/modules/layoutUiRules/rulesUtils.js +6 -2
  87. package/build/es/modules/visTypeToLayoutType.js +4 -3
  88. package/build/es/modules/visTypes.js +7 -3
  89. package/package.json +6 -3
@@ -140,6 +140,7 @@ var _exportNames = {
140
140
  VIS_TYPE_PIVOT_TABLE: true,
141
141
  VIS_TYPE_SCATTER: true,
142
142
  VIS_TYPE_LINE_LIST: true,
143
+ VIS_TYPE_OUTLIER_TABLE: true,
143
144
  visTypeDisplayNames: true,
144
145
  visTypeIcons: true,
145
146
  getDisplayNameByVisType: true,
@@ -149,6 +150,7 @@ var _exportNames = {
149
150
  isYearOverYear: true,
150
151
  isDualAxisType: true,
151
152
  isSingleValue: true,
153
+ isOutlierTable: true,
152
154
  isTwoCategoryChartType: true,
153
155
  isLegendSetType: true,
154
156
  isColumnBasedType: true,
@@ -160,12 +162,15 @@ var _exportNames = {
160
162
  LAYOUT_TYPE_PIVOT_TABLE: true,
161
163
  LAYOUT_TYPE_SCATTER: true,
162
164
  LAYOUT_TYPE_LINE_LIST: true,
165
+ LAYOUT_TYPE_OUTLIER_TABLE: true,
163
166
  getAvailableAxes: true,
164
167
  getDisallowedDimensions: true,
168
+ getDimensionMaxNumberOfItems: true,
165
169
  getAxisMaxNumberOfItems: true,
166
170
  getAxisMaxNumberOfDimensions: true,
167
171
  getAxisMinNumberOfDimensions: true,
168
172
  hasAxisTooManyItems: true,
173
+ hasDimensionTooManyItems: true,
169
174
  getAxisPerLockedDimension: true,
170
175
  getAllLockedDimensionIds: true,
171
176
  canDimensionBeAddedToAxis: true,
@@ -247,7 +252,8 @@ var _exportNames = {
247
252
  DIMENSION_TYPE_ORGANISATION_UNIT: true,
248
253
  DIMENSION_TYPE_PERIOD: true,
249
254
  DIMENSION_TYPE_ORGANISATION_UNIT_GROUP_SET: true,
250
- DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM: true
255
+ DIMENSION_TYPE_EXPRESSION_DIMENSION_ITEM: true,
256
+ dataTypeMap: true
251
257
  };
252
258
  Object.defineProperty(exports, "ALL_DYNAMIC_DIMENSION_ITEMS", {
253
259
  enumerable: true,
@@ -741,6 +747,12 @@ Object.defineProperty(exports, "LAYOUT_TYPE_LINE_LIST", {
741
747
  return _layoutTypes.LAYOUT_TYPE_LINE_LIST;
742
748
  }
743
749
  });
750
+ Object.defineProperty(exports, "LAYOUT_TYPE_OUTLIER_TABLE", {
751
+ enumerable: true,
752
+ get: function () {
753
+ return _layoutTypes.LAYOUT_TYPE_OUTLIER_TABLE;
754
+ }
755
+ });
744
756
  Object.defineProperty(exports, "LAYOUT_TYPE_PIE", {
745
757
  enumerable: true,
746
758
  get: function () {
@@ -1071,6 +1083,12 @@ Object.defineProperty(exports, "VIS_TYPE_LINE_LIST", {
1071
1083
  return _visTypes.VIS_TYPE_LINE_LIST;
1072
1084
  }
1073
1085
  });
1086
+ Object.defineProperty(exports, "VIS_TYPE_OUTLIER_TABLE", {
1087
+ enumerable: true,
1088
+ get: function () {
1089
+ return _visTypes.VIS_TYPE_OUTLIER_TABLE;
1090
+ }
1091
+ });
1074
1092
  Object.defineProperty(exports, "VIS_TYPE_PIE", {
1075
1093
  enumerable: true,
1076
1094
  get: function () {
@@ -1293,6 +1311,12 @@ Object.defineProperty(exports, "createVisualization", {
1293
1311
  return _index10.createVisualization;
1294
1312
  }
1295
1313
  });
1314
+ Object.defineProperty(exports, "dataTypeMap", {
1315
+ enumerable: true,
1316
+ get: function () {
1317
+ return _dataTypes.dataTypeMap;
1318
+ }
1319
+ });
1296
1320
  Object.defineProperty(exports, "defaultFontStyle", {
1297
1321
  enumerable: true,
1298
1322
  get: function () {
@@ -1431,6 +1455,12 @@ Object.defineProperty(exports, "getDimensionById", {
1431
1455
  return _predefinedDimensions.getDimensionById;
1432
1456
  }
1433
1457
  });
1458
+ Object.defineProperty(exports, "getDimensionMaxNumberOfItems", {
1459
+ enumerable: true,
1460
+ get: function () {
1461
+ return _index9.getDimensionMaxNumberOfItems;
1462
+ }
1463
+ });
1434
1464
  Object.defineProperty(exports, "getDisallowedDimensions", {
1435
1465
  enumerable: true,
1436
1466
  get: function () {
@@ -1515,6 +1545,12 @@ Object.defineProperty(exports, "hasCustomAxes", {
1515
1545
  return _axis.hasCustomAxes;
1516
1546
  }
1517
1547
  });
1548
+ Object.defineProperty(exports, "hasDimensionTooManyItems", {
1549
+ enumerable: true,
1550
+ get: function () {
1551
+ return _index9.hasDimensionTooManyItems;
1552
+ }
1553
+ });
1518
1554
  Object.defineProperty(exports, "hasRelativeItems", {
1519
1555
  enumerable: true,
1520
1556
  get: function () {
@@ -1557,6 +1593,12 @@ Object.defineProperty(exports, "isMultiType", {
1557
1593
  return _visTypes.isMultiType;
1558
1594
  }
1559
1595
  });
1596
+ Object.defineProperty(exports, "isOutlierTable", {
1597
+ enumerable: true,
1598
+ get: function () {
1599
+ return _visTypes.isOutlierTable;
1600
+ }
1601
+ });
1560
1602
  Object.defineProperty(exports, "isSingleValue", {
1561
1603
  enumerable: true,
1562
1604
  get: function () {
@@ -44,6 +44,7 @@
44
44
  "Drag items here, or double click in the list, to start building a calculation formula": "Drag items here, or double click in the list, to start building a calculation formula",
45
45
  "Math operators": "Math operators",
46
46
  "Data Type": "Data Type",
47
+ "Only {{dataType}} can be used in {{visType}}": "Only {{dataType}} can be used in {{visType}}",
47
48
  "All types": "All types",
48
49
  "Disaggregation": "Disaggregation",
49
50
  "No data": "No data",
@@ -54,10 +55,12 @@
54
55
  "No data sets found": "No data sets found",
55
56
  "No event data items found": "No event data items found",
56
57
  "No program indicators found": "No program indicators found",
58
+ "No calculations found": "No calculations found",
57
59
  "No indicators found for \"{{- searchTerm}}\"": "No indicators found for \"{{- searchTerm}}\"",
58
60
  "No data sets found for \"{{- searchTerm}}\"": "No data sets found for \"{{- searchTerm}}\"",
59
61
  "No event data items found for \"{{- searchTerm}}\"": "No event data items found for \"{{- searchTerm}}\"",
60
62
  "No program indicators found for \"{{- searchTerm}}\"": "No program indicators found for \"{{- searchTerm}}\"",
63
+ "No calculations found for \"{{- searchTerm}}\"": "No calculations found for \"{{- searchTerm}}\"",
61
64
  "Nothing found for \"{{- searchTerm}}\"": "Nothing found for \"{{- searchTerm}}\"",
62
65
  "Calculation": "Calculation",
63
66
  "Metric type": "Metric type",
@@ -201,9 +204,9 @@
201
204
  "Year": "Year",
202
205
  "Select year": "Select year",
203
206
  "Period": "Period",
207
+ "Selected Periods": "Selected Periods",
204
208
  "Relative periods": "Relative periods",
205
209
  "Fixed periods": "Fixed periods",
206
- "Selected Periods": "Selected Periods",
207
210
  "No periods selected": "No periods selected",
208
211
  "Daily": "Daily",
209
212
  "Weekly": "Weekly",
@@ -371,6 +374,7 @@
371
374
  "Radar": "Radar",
372
375
  "Scatter": "Scatter",
373
376
  "Single value": "Single value",
377
+ "Outlier table": "Outlier table",
374
378
  "All charts": "All charts",
375
379
  "{{seriesName}} (trend)": "{{seriesName}} (trend)",
376
380
  "Trend": "Trend",
@@ -6,6 +6,7 @@ var _predefinedDimensions = require("../predefinedDimensions.js");
6
6
  var _visTypes = require("../visTypes.js");
7
7
  const someId = 'someId';
8
8
  const otherId = 'otherId';
9
+ const thirdId = 'thirdId';
9
10
  describe('getAdaptedUiLayoutByType', () => {
10
11
  it('column: moves all extra dimensions in columns and rows to filters', () => {
11
12
  const initialState = {
@@ -109,6 +110,20 @@ describe('getAdaptedUiLayoutByType', () => {
109
110
  };
110
111
  expect(actualState).toEqual(expectedState);
111
112
  });
113
+ it('outlier table: removes all dimensions but dx,pe,ou which are moved to columns', () => {
114
+ const initialState = {
115
+ [_axis.AXIS_ID_COLUMNS]: [_predefinedDimensions.DIMENSION_ID_DATA, someId],
116
+ [_axis.AXIS_ID_ROWS]: [_predefinedDimensions.DIMENSION_ID_PERIOD, otherId],
117
+ [_axis.AXIS_ID_FILTERS]: [_predefinedDimensions.DIMENSION_ID_ORGUNIT, thirdId]
118
+ };
119
+ const actualState = (0, _getAdaptedUiLayoutByType.getAdaptedUiLayoutByType)(initialState, _visTypes.VIS_TYPE_OUTLIER_TABLE);
120
+ const expectedState = {
121
+ [_axis.AXIS_ID_COLUMNS]: [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ORGUNIT],
122
+ [_axis.AXIS_ID_ROWS]: [],
123
+ [_axis.AXIS_ID_FILTERS]: []
124
+ };
125
+ expect(actualState).toEqual(expectedState);
126
+ });
112
127
  it('pivot -> sv with dimension strings', () => {
113
128
  const initialLayout = {
114
129
  [_axis.AXIS_ID_COLUMNS]: [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD],
@@ -35,6 +35,10 @@ const getAxisNamesByLayoutType = layoutType => {
35
35
  [_axis.AXIS_ID_ROWS]: _index.default.t('Points'),
36
36
  [_axis.AXIS_ID_FILTERS]: _index.default.t('Filter')
37
37
  };
38
+ case _layoutTypes.LAYOUT_TYPE_OUTLIER_TABLE:
39
+ return {
40
+ [_axis.AXIS_ID_COLUMNS]: _index.default.t('Columns')
41
+ };
38
42
  }
39
43
  };
40
44
  const getAxisNameByLayoutType = (axisId, layoutType) => {
@@ -33,6 +33,8 @@ const getAdaptedUiLayoutByType = (layout, type) => {
33
33
  return layout;
34
34
  case _visTypes.VIS_TYPE_SCATTER:
35
35
  return getScatterLayout(layout);
36
+ case _visTypes.VIS_TYPE_OUTLIER_TABLE:
37
+ return getOutlierTableLayout(layout);
36
38
  default:
37
39
  return getDefaultLayout(layout);
38
40
  }
@@ -107,6 +109,13 @@ const getSingleValueLayout = layout => {
107
109
  };
108
110
  };
109
111
 
112
+ // Transform from ui.layout to outlier table layout format
113
+ const getOutlierTableLayout = () => ({
114
+ [_axis.AXIS_ID_COLUMNS]: [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ORGUNIT],
115
+ [_axis.AXIS_ID_ROWS]: [],
116
+ [_axis.AXIS_ID_FILTERS]: []
117
+ });
118
+
110
119
  /**
111
120
  *
112
121
  * @param {string|object} dimension
@@ -6,5 +6,5 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.axisGetDimensionIds = void 0;
7
7
  var _axis = require("./axis.js");
8
8
  var _dimensionGetId = require("./dimensionGetId.js");
9
- const axisGetDimensionIds = axis => _axis.AXIS.isValid(axis) ? axis.map(dimension => (0, _dimensionGetId.dimensionGetId)(dimension)) : _axis.AXIS.defaultValue;
9
+ const axisGetDimensionIds = (axis, outputType) => _axis.AXIS.isValid(axis) ? axis.map(dimension => (0, _dimensionGetId.dimensionGetId)(dimension, outputType)) : _axis.AXIS.defaultValue;
10
10
  exports.axisGetDimensionIds = axisGetDimensionIds;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.DIMENSION_PROP_REPETITION = exports.DIMENSION_PROP_PROGRAM_STAGE = exports.DIMENSION_PROP_LEGEND_SET = exports.DIMENSION_PROP_ITEMS = exports.DIMENSION_PROP_ID = exports.DIMENSION_PROP_FILTER = exports.DIMENSION_PROPS = exports.DIMENSION = void 0;
6
+ exports.DIMENSION_PROP_REPETITION = exports.DIMENSION_PROP_PROGRAM_STAGE = exports.DIMENSION_PROP_PROGRAM = exports.DIMENSION_PROP_LEGEND_SET = exports.DIMENSION_PROP_ITEMS = exports.DIMENSION_PROP_ID = exports.DIMENSION_PROP_FILTER = exports.DIMENSION_PROPS = exports.DIMENSION = void 0;
7
7
  var _isObject = _interopRequireDefault(require("lodash/isObject"));
8
8
  var _isString = _interopRequireDefault(require("lodash/isString"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -43,6 +43,13 @@ const DIMENSION_PROP_LEGEND_SET = {
43
43
  isValid: prop => (0, _isString.default)(prop)
44
44
  };
45
45
  exports.DIMENSION_PROP_LEGEND_SET = DIMENSION_PROP_LEGEND_SET;
46
+ const DIMENSION_PROP_PROGRAM = {
47
+ name: 'program',
48
+ defaultValue: {},
49
+ required: false,
50
+ isValid: prop => (0, _isObject.default)(prop)
51
+ };
52
+ exports.DIMENSION_PROP_PROGRAM = DIMENSION_PROP_PROGRAM;
46
53
  const DIMENSION_PROP_PROGRAM_STAGE = {
47
54
  name: 'programStage',
48
55
  defaultValue: {},
@@ -57,5 +64,5 @@ const DIMENSION_PROP_REPETITION = {
57
64
  isValid: prop => Array.isArray(prop)
58
65
  };
59
66
  exports.DIMENSION_PROP_REPETITION = DIMENSION_PROP_REPETITION;
60
- const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET, DIMENSION_PROP_PROGRAM_STAGE, DIMENSION_PROP_REPETITION];
67
+ const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET, DIMENSION_PROP_PROGRAM, DIMENSION_PROP_PROGRAM_STAGE, DIMENSION_PROP_REPETITION];
61
68
  exports.DIMENSION_PROPS = DIMENSION_PROPS;
@@ -21,6 +21,9 @@ const dimensionCreate = function (dimensionId) {
21
21
  ...(args.legendSet && {
22
22
  [_dimension.DIMENSION_PROP_LEGEND_SET.name]: args.legendSet
23
23
  }),
24
+ ...(args.program && {
25
+ [_dimension.DIMENSION_PROP_PROGRAM.name]: args.program
26
+ }),
24
27
  ...(args.programStage && {
25
28
  [_dimension.DIMENSION_PROP_PROGRAM_STAGE.name]: args.programStage
26
29
  }),
@@ -4,9 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.dimensionGetId = void 0;
7
+ var _utils = require("../../api/analytics/utils.js");
7
8
  var _dimension = require("./dimension.js");
8
- const dimensionGetId = dimension => {
9
- var _dimension$DIMENSION_;
10
- return (_dimension$DIMENSION_ = dimension[_dimension.DIMENSION_PROP_PROGRAM_STAGE.name]) !== null && _dimension$DIMENSION_ !== void 0 && _dimension$DIMENSION_.id ? `${dimension[_dimension.DIMENSION_PROP_PROGRAM_STAGE.name].id}.${dimension[_dimension.DIMENSION_PROP_ID.name]}` : dimension[_dimension.DIMENSION_PROP_ID.name];
9
+ const dimensionGetId = (dimension, outputType) => {
10
+ var _dimension$DIMENSION_, _dimension$DIMENSION_2;
11
+ return (0, _utils.formatDimension)({
12
+ dimension: dimension[_dimension.DIMENSION_PROP_ID.name],
13
+ programId: (_dimension$DIMENSION_ = dimension[_dimension.DIMENSION_PROP_PROGRAM.name]) === null || _dimension$DIMENSION_ === void 0 ? void 0 : _dimension$DIMENSION_.id,
14
+ programStageId: (_dimension$DIMENSION_2 = dimension[_dimension.DIMENSION_PROP_PROGRAM_STAGE.name]) === null || _dimension$DIMENSION_2 === void 0 ? void 0 : _dimension$DIMENSION_2.id,
15
+ outputType
16
+ });
11
17
  };
12
18
  exports.dimensionGetId = dimensionGetId;
@@ -11,7 +11,7 @@ const layoutFilterDimensions = (layout, dimensionIds) => {
11
11
  const filteredLayout = Object.assign({}, layout);
12
12
  _axis.DEFAULT_AXIS_IDS.forEach(axisId => {
13
13
  if (_axis.AXIS.isValid(filteredLayout[axisId])) {
14
- filteredLayout[axisId] = filteredLayout[axisId].filter(dimension => !idArray.includes((0, _dimensionGetId.dimensionGetId)(dimension)));
14
+ filteredLayout[axisId] = filteredLayout[axisId].filter(dimension => !idArray.includes((0, _dimensionGetId.dimensionGetId)(dimension, layout.outputType)));
15
15
  }
16
16
  });
17
17
  return filteredLayout;
@@ -8,7 +8,7 @@ var _axis = require("./axis.js");
8
8
  var _axisGetDimensionIds = require("./axisGetDimensionIds.js");
9
9
  const layoutGetAxisIdDimensionIdsObject = layout => _axis.DEFAULT_AXIS_IDS.reduce((obj, axisId) => {
10
10
  if (_axis.AXIS.isValid(layout[axisId])) {
11
- obj[axisId] = (0, _axisGetDimensionIds.axisGetDimensionIds)(layout[axisId]);
11
+ obj[axisId] = (0, _axisGetDimensionIds.axisGetDimensionIds)(layout[axisId], layout.outputType);
12
12
  }
13
13
  return obj;
14
14
  }, {});
@@ -8,7 +8,7 @@ var _dimensionGetId = require("./dimensionGetId.js");
8
8
  var _dimensionGetItemIds = require("./dimensionGetItemIds.js");
9
9
  var _layoutGetAllDimensions = require("./layoutGetAllDimensions.js");
10
10
  const layoutGetDimensionIdItemIdsObject = layout => (0, _layoutGetAllDimensions.layoutGetAllDimensions)(layout).reduce((obj, dimension) => {
11
- obj[(0, _dimensionGetId.dimensionGetId)(dimension)] = (0, _dimensionGetItemIds.dimensionGetItemIds)(dimension);
11
+ obj[(0, _dimensionGetId.dimensionGetId)(dimension, layout.outputType)] = (0, _dimensionGetItemIds.dimensionGetItemIds)(dimension);
12
12
  return obj;
13
13
  }, {});
14
14
  exports.layoutGetDimensionIdItemIdsObject = layoutGetDimensionIdItemIdsObject;
@@ -9,6 +9,6 @@ var _dimensionGetId = require("./dimensionGetId.js");
9
9
  var _layoutGetAllDimensions = require("./layoutGetAllDimensions.js");
10
10
  const layoutHasDynamicDimension = layout => {
11
11
  const fixedIds = Object.keys((0, _predefinedDimensions.getPredefinedDimensions)());
12
- return Boolean((0, _layoutGetAllDimensions.layoutGetAllDimensions)(layout).find(dimension => !fixedIds.includes((0, _dimensionGetId.dimensionGetId)(dimension))));
12
+ return Boolean((0, _layoutGetAllDimensions.layoutGetAllDimensions)(layout).find(dimension => !fixedIds.includes((0, _dimensionGetId.dimensionGetId)(dimension, layout.outputType))));
13
13
  };
14
14
  exports.layoutHasDynamicDimension = layoutHasDynamicDimension;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.LAYOUT_TYPE_YEAR_OVER_YEAR = exports.LAYOUT_TYPE_SINGLE_VALUE = exports.LAYOUT_TYPE_SCATTER = exports.LAYOUT_TYPE_PIVOT_TABLE = exports.LAYOUT_TYPE_PIE = exports.LAYOUT_TYPE_LINE_LIST = exports.LAYOUT_TYPE_DEFAULT = void 0;
6
+ exports.LAYOUT_TYPE_YEAR_OVER_YEAR = exports.LAYOUT_TYPE_SINGLE_VALUE = exports.LAYOUT_TYPE_SCATTER = exports.LAYOUT_TYPE_PIVOT_TABLE = exports.LAYOUT_TYPE_PIE = exports.LAYOUT_TYPE_OUTLIER_TABLE = exports.LAYOUT_TYPE_LINE_LIST = exports.LAYOUT_TYPE_DEFAULT = void 0;
7
7
  const LAYOUT_TYPE_DEFAULT = 'LAYOUT_TYPE_DEFAULT';
8
8
  exports.LAYOUT_TYPE_DEFAULT = LAYOUT_TYPE_DEFAULT;
9
9
  const LAYOUT_TYPE_PIE = 'LAYOUT_TYPE_PIE';
@@ -17,4 +17,6 @@ exports.LAYOUT_TYPE_PIVOT_TABLE = LAYOUT_TYPE_PIVOT_TABLE;
17
17
  const LAYOUT_TYPE_SCATTER = 'LAYOUT_TYPE_SCATTER';
18
18
  exports.LAYOUT_TYPE_SCATTER = LAYOUT_TYPE_SCATTER;
19
19
  const LAYOUT_TYPE_LINE_LIST = 'LAYOUT_TYPE_LINE_LIST';
20
- exports.LAYOUT_TYPE_LINE_LIST = LAYOUT_TYPE_LINE_LIST;
20
+ exports.LAYOUT_TYPE_LINE_LIST = LAYOUT_TYPE_LINE_LIST;
21
+ const LAYOUT_TYPE_OUTLIER_TABLE = 'LAYOUT_TYPE_OUTLIER_TABLE';
22
+ exports.LAYOUT_TYPE_OUTLIER_TABLE = LAYOUT_TYPE_OUTLIER_TABLE;
@@ -4,12 +4,14 @@ var _axis = require("../../layout/axis.js");
4
4
  var _predefinedDimensions = require("../../predefinedDimensions.js");
5
5
  var _rules = require("../rules.js");
6
6
  // Consts
7
+ const validDims = [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ORGUNIT];
7
8
  const lockableDims = [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ORGUNIT];
8
- const disallowableDims = [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD];
9
+ const disallowableDims = [_predefinedDimensions.DIMENSION_ID_DATA, _predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ASSIGNED_CATEGORIES];
9
10
 
10
11
  // Helper fns
11
12
  const allArrayItemsAreValid = (allItems, validItems) => allItems.every(value => validItems.includes(value));
12
13
  const allArrayItemsAreValidAxisIds = array => allArrayItemsAreValid(array, _axis.ALL_AXIS_IDS);
14
+ const allArrayItemsAreValidDimensionIds = array => allArrayItemsAreValid(array, validDims);
13
15
  const onlyRulesWithProp = ruleProp => _rules.testResourceRules.filter(rule => rule[ruleProp]);
14
16
 
15
17
  // Partial tests
@@ -19,6 +21,9 @@ const testPropHasKeysAndValues = ruleProp => it('has keys and values', () => {
19
21
  const testPropIsArray = ruleProp => it('is an array', () => {
20
22
  expect(onlyRulesWithProp(ruleProp).every(rule => Array.isArray(rule[ruleProp]))).toBe(true);
21
23
  });
24
+ const testKeysAreValidDimensionIds = ruleProp => it('keys should be valid dimension ids', () => {
25
+ expect(onlyRulesWithProp(ruleProp).every(rule => allArrayItemsAreValidDimensionIds(Object.keys(rule[ruleProp])))).toBe(true);
26
+ });
22
27
  const testKeysAreValidAxisIds = ruleProp => it('keys should be valid axis ids', () => {
23
28
  expect(onlyRulesWithProp(ruleProp).every(rule => allArrayItemsAreValidAxisIds(Object.keys(rule[ruleProp])))).toBe(true);
24
29
  });
@@ -57,6 +62,13 @@ describe("verify each rule's ", () => {
57
62
  testNoValuesNegative(ruleProp);
58
63
  });
59
64
  });
65
+ describe('MAX_ITEMS_PER_DIM', () => {
66
+ const ruleProp = _rules.testResourceAllRuleProps['MAX_ITEMS_PER_DIM'];
67
+ testPropHasKeysAndValues(ruleProp);
68
+ testKeysAreValidDimensionIds(ruleProp);
69
+ testNoValuesZero(ruleProp);
70
+ testNoValuesNegative(ruleProp);
71
+ });
60
72
  describe('AVAILABLE_AXES', () => {
61
73
  const ruleProp = _rules.testResourceAllRuleProps['AVAILABLE_AXES'];
62
74
  testPropIsArray(ruleProp);
@@ -45,6 +45,12 @@ Object.defineProperty(exports, "getAxisPerLockedDimension", {
45
45
  return _rulesHelper.getAxisPerLockedDimByVisType;
46
46
  }
47
47
  });
48
+ Object.defineProperty(exports, "getDimensionMaxNumberOfItems", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _rulesHelper.getDimMaxNumberOfItemsByVisType;
52
+ }
53
+ });
48
54
  Object.defineProperty(exports, "getDisallowedDimensions", {
49
55
  enumerable: true,
50
56
  get: function () {
@@ -63,6 +69,12 @@ Object.defineProperty(exports, "hasAxisTooManyItems", {
63
69
  return _rulesUtils.hasAxisTooManyItemsByVisType;
64
70
  }
65
71
  });
72
+ Object.defineProperty(exports, "hasDimensionTooManyItems", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _rulesUtils.hasDimensionTooManyItemsByVisType;
76
+ }
77
+ });
66
78
  Object.defineProperty(exports, "isAxisFull", {
67
79
  enumerable: true,
68
80
  get: function () {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.testResourceRules = exports.testResourceRequiredProps = exports.testResourceAllRuleProps = exports.getMinNumberOfDimsPerAxisByVisType = exports.getMaxNumberOfItemsPerAxisByVisType = exports.getMaxNumberOfDimsPerAxisByVisType = exports.getLockedDimsByVisType = exports.getDisallowedDimsByVisType = exports.getAvailableAxesByVisType = void 0;
6
+ exports.testResourceRules = exports.testResourceRequiredProps = exports.testResourceAllRuleProps = exports.getMinNumberOfDimsPerAxisByVisType = exports.getMaxNumberOfItemsPerDimByVisType = exports.getMaxNumberOfItemsPerAxisByVisType = exports.getMaxNumberOfDimsPerAxisByVisType = exports.getLockedDimsByVisType = exports.getDisallowedDimsByVisType = exports.getAvailableAxesByVisType = void 0;
7
7
  var _axis = require("../layout/axis.js");
8
8
  var _predefinedDimensions = require("../predefinedDimensions.js");
9
9
  var _visTypes = require("../visTypes.js");
@@ -11,6 +11,7 @@ const RULE_PROP_AVAILABLE_AXES = 'availableAxes',
11
11
  RULE_PROP_MAX_DIMS_PER_AXIS = 'maxNumberOfDimsPerAxis',
12
12
  RULE_PROP_MIN_DIMS_PER_AXIS = 'minNumberOfDimsPerAxis',
13
13
  RULE_PROP_MAX_ITEMS_PER_AXIS = 'maxNumberOfItemsPerAxis',
14
+ RULE_PROP_MAX_ITEMS_PER_DIM = 'maxNumberOfItemsPerDim',
14
15
  RULE_PROP_DISALLOWED_DIMS = 'disallowedDims',
15
16
  RULE_PROP_LOCKED_DIMS = 'lockedDims';
16
17
  const defaultRules = {
@@ -88,6 +89,21 @@ const scatterRules = {
88
89
  const lineListRules = {
89
90
  [RULE_PROP_AVAILABLE_AXES]: [_axis.AXIS_ID_COLUMNS, _axis.AXIS_ID_FILTERS]
90
91
  };
92
+ const outlierTableRules = {
93
+ [RULE_PROP_AVAILABLE_AXES]: [_axis.AXIS_ID_COLUMNS],
94
+ [RULE_PROP_MIN_DIMS_PER_AXIS]: {
95
+ [_axis.AXIS_ID_COLUMNS]: 3
96
+ },
97
+ [RULE_PROP_MAX_ITEMS_PER_DIM]: {
98
+ [_predefinedDimensions.DIMENSION_ID_PERIOD]: 1
99
+ },
100
+ [RULE_PROP_LOCKED_DIMS]: {
101
+ [_predefinedDimensions.DIMENSION_ID_DATA]: _axis.AXIS_ID_COLUMNS,
102
+ [_predefinedDimensions.DIMENSION_ID_PERIOD]: _axis.AXIS_ID_COLUMNS,
103
+ [_predefinedDimensions.DIMENSION_ID_ORGUNIT]: _axis.AXIS_ID_COLUMNS
104
+ },
105
+ [RULE_PROP_DISALLOWED_DIMS]: [_predefinedDimensions.DIMENSION_ID_ASSIGNED_CATEGORIES]
106
+ };
91
107
  const visTypeToRules = {
92
108
  [_visTypes.VIS_TYPE_COLUMN]: defaultRules,
93
109
  [_visTypes.VIS_TYPE_STACKED_COLUMN]: defaultRules,
@@ -104,7 +120,8 @@ const visTypeToRules = {
104
120
  [_visTypes.VIS_TYPE_YEAR_OVER_YEAR_COLUMN]: yearOverYearRules,
105
121
  [_visTypes.VIS_TYPE_PIVOT_TABLE]: pivotTableRules,
106
122
  [_visTypes.VIS_TYPE_SCATTER]: scatterRules,
107
- [_visTypes.VIS_TYPE_LINE_LIST]: lineListRules
123
+ [_visTypes.VIS_TYPE_LINE_LIST]: lineListRules,
124
+ [_visTypes.VIS_TYPE_OUTLIER_TABLE]: outlierTableRules
108
125
  };
109
126
  const getRulesByVisType = visType => {
110
127
  const rules = visTypeToRules[visType];
@@ -122,6 +139,8 @@ const getMaxNumberOfDimsPerAxisByVisType = visType => getRulesByVisType(visType)
122
139
  exports.getMaxNumberOfDimsPerAxisByVisType = getMaxNumberOfDimsPerAxisByVisType;
123
140
  const getMinNumberOfDimsPerAxisByVisType = visType => getRulesByVisType(visType)[RULE_PROP_MIN_DIMS_PER_AXIS] || {};
124
141
  exports.getMinNumberOfDimsPerAxisByVisType = getMinNumberOfDimsPerAxisByVisType;
142
+ const getMaxNumberOfItemsPerDimByVisType = visType => getRulesByVisType(visType)[RULE_PROP_MAX_ITEMS_PER_DIM] || {};
143
+ exports.getMaxNumberOfItemsPerDimByVisType = getMaxNumberOfItemsPerDimByVisType;
125
144
  const getMaxNumberOfItemsPerAxisByVisType = visType => getRulesByVisType(visType)[RULE_PROP_MAX_ITEMS_PER_AXIS] || {};
126
145
  exports.getMaxNumberOfItemsPerAxisByVisType = getMaxNumberOfItemsPerAxisByVisType;
127
146
  const getDisallowedDimsByVisType = visType => getRulesByVisType(visType)[RULE_PROP_DISALLOWED_DIMS] || [];
@@ -139,6 +158,7 @@ const testResourceAllRuleProps = {
139
158
  MAX_DIMS_PER_AXIS: RULE_PROP_MAX_DIMS_PER_AXIS,
140
159
  MIN_DIMS_PER_AXIS: RULE_PROP_MIN_DIMS_PER_AXIS,
141
160
  MAX_ITEMS_PER_AXIS: RULE_PROP_MAX_ITEMS_PER_AXIS,
161
+ MAX_ITEMS_PER_DIM: RULE_PROP_MAX_ITEMS_PER_DIM,
142
162
  DISALLOWED_DIMS: RULE_PROP_DISALLOWED_DIMS,
143
163
  LOCKED_DIMS: RULE_PROP_LOCKED_DIMS
144
164
  };
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "getAvailableAxesByVisType", {
10
10
  return _rules.getAvailableAxesByVisType;
11
11
  }
12
12
  });
13
- exports.getAxisPerLockedDimByVisType = exports.getAxisMinNumberOfDimsByVisType = exports.getAxisMaxNumberOfItemsByVisType = exports.getAxisMaxNumberOfDimsByVisType = void 0;
13
+ exports.getDimMaxNumberOfItemsByVisType = exports.getAxisPerLockedDimByVisType = exports.getAxisMinNumberOfDimsByVisType = exports.getAxisMaxNumberOfItemsByVisType = exports.getAxisMaxNumberOfDimsByVisType = void 0;
14
14
  Object.defineProperty(exports, "getDisallowedDimsByVisType", {
15
15
  enumerable: true,
16
16
  get: function () {
@@ -29,4 +29,6 @@ exports.getAxisMinNumberOfDimsByVisType = getAxisMinNumberOfDimsByVisType;
29
29
  const getAxisPerLockedDimByVisType = (visType, dimensionId) => (0, _rules.getLockedDimsByVisType)(visType)[dimensionId];
30
30
  exports.getAxisPerLockedDimByVisType = getAxisPerLockedDimByVisType;
31
31
  const getAllLockedDimIdsByVisType = visType => Object.keys((0, _rules.getLockedDimsByVisType)(visType));
32
- exports.getAllLockedDimIdsByVisType = getAllLockedDimIdsByVisType;
32
+ exports.getAllLockedDimIdsByVisType = getAllLockedDimIdsByVisType;
33
+ const getDimMaxNumberOfItemsByVisType = (visType, dimensionId) => (0, _rules.getMaxNumberOfItemsPerDimByVisType)(visType)[dimensionId];
34
+ exports.getDimMaxNumberOfItemsByVisType = getDimMaxNumberOfItemsByVisType;
@@ -3,14 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isDimensionLockedByVisType = exports.isAxisFullByVisType = exports.hasAxisTooManyItemsByVisType = exports.getTransferableDimensionPerAxisByVisType = exports.canDimensionBeAddedToAxisByVisType = void 0;
6
+ exports.isDimensionLockedByVisType = exports.isAxisFullByVisType = exports.hasDimensionTooManyItemsByVisType = exports.hasAxisTooManyItemsByVisType = exports.getTransferableDimensionPerAxisByVisType = exports.canDimensionBeAddedToAxisByVisType = void 0;
7
7
  var _rules = require("./rules.js");
8
8
  var _rulesHelper = require("./rulesHelper.js");
9
9
  const hasAxisTooManyItemsByVisType = (visType, axisId, numberOfItems) => {
10
10
  const maxNumberOfItemsPerAxis = (0, _rulesHelper.getAxisMaxNumberOfItemsByVisType)(visType, axisId);
11
- return maxNumberOfItemsPerAxis ? numberOfItems > maxNumberOfItemsPerAxis : false;
11
+ return maxNumberOfItemsPerAxis && numberOfItems > maxNumberOfItemsPerAxis;
12
12
  };
13
13
  exports.hasAxisTooManyItemsByVisType = hasAxisTooManyItemsByVisType;
14
+ const hasDimensionTooManyItemsByVisType = (visType, dimensionId, numberOfItems) => {
15
+ const maxNumberOfItemsPerDimension = (0, _rulesHelper.getDimMaxNumberOfItemsByVisType)(visType, dimensionId);
16
+ return maxNumberOfItemsPerDimension && numberOfItems > maxNumberOfItemsPerDimension;
17
+ };
18
+ exports.hasDimensionTooManyItemsByVisType = hasDimensionTooManyItemsByVisType;
14
19
  const isDimensionLockedByVisType = (visType, dimensionId) => (0, _rulesHelper.getAllLockedDimIdsByVisType)(visType).includes(dimensionId);
15
20
  exports.isDimensionLockedByVisType = isDimensionLockedByVisType;
16
21
  const isAxisFullByVisType = (visType, axisId, axisDimensionsCount) => axisDimensionsCount >= (0, _rulesHelper.getAxisMaxNumberOfDimsByVisType)(visType, axisId);
@@ -22,7 +22,8 @@ const visTypeToLayoutType = {
22
22
  [_visTypes.VIS_TYPE_SINGLE_VALUE]: _layoutTypes.LAYOUT_TYPE_PIE,
23
23
  [_visTypes.VIS_TYPE_PIVOT_TABLE]: _layoutTypes.LAYOUT_TYPE_PIVOT_TABLE,
24
24
  [_visTypes.VIS_TYPE_SCATTER]: _layoutTypes.LAYOUT_TYPE_SCATTER,
25
- [_visTypes.VIS_TYPE_LINE_LIST]: _layoutTypes.LAYOUT_TYPE_LINE_LIST
25
+ [_visTypes.VIS_TYPE_LINE_LIST]: _layoutTypes.LAYOUT_TYPE_LINE_LIST,
26
+ [_visTypes.VIS_TYPE_OUTLIER_TABLE]: _layoutTypes.LAYOUT_TYPE_OUTLIER_TABLE
26
27
  };
27
28
  const getLayoutTypeByVisType = visType => visTypeToLayoutType[visType];
28
29
  exports.getLayoutTypeByVisType = getLayoutTypeByVisType;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.visTypeIcons = exports.visTypeDisplayNames = exports.isYearOverYear = exports.isVerticalType = exports.isTwoCategoryChartType = exports.isStacked = exports.isSingleValue = exports.isMultiType = exports.isLegendSetType = exports.isDualAxisType = exports.isColumnBasedType = exports.getDisplayNameByVisType = exports.defaultVisType = exports.VIS_TYPE_YEAR_OVER_YEAR_LINE = exports.VIS_TYPE_YEAR_OVER_YEAR_COLUMN = exports.VIS_TYPE_STACKED_COLUMN = exports.VIS_TYPE_STACKED_BAR = exports.VIS_TYPE_STACKED_AREA = exports.VIS_TYPE_SINGLE_VALUE = exports.VIS_TYPE_SCATTER = exports.VIS_TYPE_RADAR = exports.VIS_TYPE_PIVOT_TABLE = exports.VIS_TYPE_PIE = exports.VIS_TYPE_LINE_LIST = exports.VIS_TYPE_LINE = exports.VIS_TYPE_GROUP_CHARTS = exports.VIS_TYPE_GROUP_ALL = exports.VIS_TYPE_GAUGE = exports.VIS_TYPE_COLUMN = exports.VIS_TYPE_BUBBLE = exports.VIS_TYPE_BAR = exports.VIS_TYPE_AREA = void 0;
6
+ exports.visTypeIcons = exports.visTypeDisplayNames = exports.isYearOverYear = exports.isVerticalType = exports.isTwoCategoryChartType = exports.isStacked = exports.isSingleValue = exports.isOutlierTable = exports.isMultiType = exports.isLegendSetType = exports.isDualAxisType = exports.isColumnBasedType = exports.getDisplayNameByVisType = exports.defaultVisType = exports.VIS_TYPE_YEAR_OVER_YEAR_LINE = exports.VIS_TYPE_YEAR_OVER_YEAR_COLUMN = exports.VIS_TYPE_STACKED_COLUMN = exports.VIS_TYPE_STACKED_BAR = exports.VIS_TYPE_STACKED_AREA = exports.VIS_TYPE_SINGLE_VALUE = exports.VIS_TYPE_SCATTER = exports.VIS_TYPE_RADAR = exports.VIS_TYPE_PIVOT_TABLE = exports.VIS_TYPE_PIE = exports.VIS_TYPE_OUTLIER_TABLE = exports.VIS_TYPE_LINE_LIST = exports.VIS_TYPE_LINE = exports.VIS_TYPE_GROUP_CHARTS = exports.VIS_TYPE_GROUP_ALL = exports.VIS_TYPE_GAUGE = exports.VIS_TYPE_COLUMN = exports.VIS_TYPE_BUBBLE = exports.VIS_TYPE_BAR = exports.VIS_TYPE_AREA = void 0;
7
7
  var _ui = require("@dhis2/ui");
8
8
  var _index = _interopRequireDefault(require("../locales/index.js"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -45,6 +45,8 @@ const VIS_TYPE_GROUP_ALL = 'ALL';
45
45
  exports.VIS_TYPE_GROUP_ALL = VIS_TYPE_GROUP_ALL;
46
46
  const VIS_TYPE_GROUP_CHARTS = 'CHARTS';
47
47
  exports.VIS_TYPE_GROUP_CHARTS = VIS_TYPE_GROUP_CHARTS;
48
+ const VIS_TYPE_OUTLIER_TABLE = 'OUTLIER_TABLE';
49
+ exports.VIS_TYPE_OUTLIER_TABLE = VIS_TYPE_OUTLIER_TABLE;
48
50
  const visTypeDisplayNames = {
49
51
  [VIS_TYPE_PIVOT_TABLE]: _index.default.t('Pivot table'),
50
52
  [VIS_TYPE_AREA]: _index.default.t('Area'),
@@ -62,12 +64,13 @@ const visTypeDisplayNames = {
62
64
  [VIS_TYPE_RADAR]: _index.default.t('Radar'),
63
65
  [VIS_TYPE_SCATTER]: _index.default.t('Scatter'),
64
66
  [VIS_TYPE_SINGLE_VALUE]: _index.default.t('Single value'),
67
+ [VIS_TYPE_OUTLIER_TABLE]: _index.default.t('Outlier table'),
65
68
  [VIS_TYPE_GROUP_ALL]: _index.default.t('All types'),
66
69
  [VIS_TYPE_GROUP_CHARTS]: _index.default.t('All charts')
67
70
  };
68
71
  exports.visTypeDisplayNames = visTypeDisplayNames;
69
72
  const visTypeIcons = {
70
- [VIS_TYPE_PIVOT_TABLE]: _ui.IconTable24,
73
+ [VIS_TYPE_PIVOT_TABLE]: _ui.IconVisualizationPivotTable24,
71
74
  [VIS_TYPE_AREA]: _ui.IconVisualizationArea24,
72
75
  [VIS_TYPE_STACKED_AREA]: _ui.IconVisualizationAreaStacked24,
73
76
  [VIS_TYPE_BAR]: _ui.IconVisualizationBar24,
@@ -82,7 +85,8 @@ const visTypeIcons = {
82
85
  [VIS_TYPE_PIE]: _ui.IconVisualizationPie24,
83
86
  [VIS_TYPE_RADAR]: _ui.IconVisualizationRadar24,
84
87
  [VIS_TYPE_SCATTER]: _ui.IconVisualizationScatter24,
85
- [VIS_TYPE_SINGLE_VALUE]: _ui.IconVisualizationSingleValue24
88
+ [VIS_TYPE_SINGLE_VALUE]: _ui.IconVisualizationSingleValue24,
89
+ [VIS_TYPE_OUTLIER_TABLE]: _ui.IconVisualizationOutlierTable24
86
90
  };
87
91
  exports.visTypeIcons = visTypeIcons;
88
92
  const getDisplayNameByVisType = visType => {
@@ -113,6 +117,8 @@ const isMultiType = type => multiTypeTypes.includes(type);
113
117
  exports.isMultiType = isMultiType;
114
118
  const isSingleValue = type => type === VIS_TYPE_SINGLE_VALUE;
115
119
  exports.isSingleValue = isSingleValue;
120
+ const isOutlierTable = type => type === VIS_TYPE_OUTLIER_TABLE;
121
+ exports.isOutlierTable = isOutlierTable;
116
122
  const isTwoCategoryChartType = type => twoCategoryChartTypes.includes(type);
117
123
  exports.isTwoCategoryChartType = isTwoCategoryChartType;
118
124
  const isVerticalType = type => verticalTypes.includes(type);
@@ -87,6 +87,7 @@ export default (function x() {
87
87
  addFixture('/api/analytics/cluster', require('./json/api/analytics/cluster.json'));
88
88
  addFixture('/api/analytics/response', require('./json/api/analytics/response.json'));
89
89
  addFixture('/api/analytics/enrollments', require('./json/api/analytics/enrollments.json'));
90
+ addFixture('/api/analytics/outlierDetection', require('./json/api/analytics/outlierDetection.json'));
90
91
  return {
91
92
  get: getFixture,
92
93
  add: addFixture