@dhis2/analytics 26.3.0-alpha.1 → 26.3.0-alpha.2

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 (41) hide show
  1. package/build/cjs/__demo__/DimensionsPanel.stories.js +1 -0
  2. package/build/cjs/api/analytics/Analytics.js +0 -7
  3. package/build/cjs/api/analytics/AnalyticsBase.js +6 -24
  4. package/build/cjs/api/analytics/AnalyticsRequest.js +10 -33
  5. package/build/cjs/api/analytics/AnalyticsRequestBase.js +1 -3
  6. package/build/cjs/api/analytics/AnalyticsRequestPropertiesMixin.js +0 -19
  7. package/build/cjs/api/analytics/utils.js +2 -23
  8. package/build/cjs/assets/DynamicDimensionIcon.js +12 -38
  9. package/build/cjs/components/DimensionsPanel/List/DimensionItem.js +37 -29
  10. package/build/cjs/components/DimensionsPanel/List/OptionsButton.js +7 -6
  11. package/build/cjs/components/DimensionsPanel/List/RecommendedIcon.js +1 -2
  12. package/build/cjs/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +190 -366
  13. package/build/cjs/components/DimensionsPanel/List/styles/DimensionItem.module.css +83 -0
  14. package/build/cjs/components/DimensionsPanel/List/styles/DimensionList.style.js +2 -2
  15. package/build/cjs/components/DimensionsPanel/List/styles/RecommendedIcon.style.js +4 -4
  16. package/build/cjs/components/DimensionsPanel/styles/DimensionsPanel.style.js +1 -1
  17. package/build/cjs/modules/layout/dimension.js +2 -9
  18. package/build/cjs/modules/layout/dimensionCreate.js +0 -3
  19. package/build/es/__demo__/DimensionsPanel.stories.js +1 -0
  20. package/build/es/api/analytics/Analytics.js +0 -7
  21. package/build/es/api/analytics/AnalyticsBase.js +6 -24
  22. package/build/es/api/analytics/AnalyticsRequest.js +10 -33
  23. package/build/es/api/analytics/AnalyticsRequestBase.js +1 -3
  24. package/build/es/api/analytics/AnalyticsRequestPropertiesMixin.js +0 -19
  25. package/build/es/api/analytics/utils.js +1 -20
  26. package/build/es/assets/DynamicDimensionIcon.js +12 -38
  27. package/build/es/components/DimensionsPanel/List/DimensionItem.js +38 -30
  28. package/build/es/components/DimensionsPanel/List/OptionsButton.js +7 -6
  29. package/build/es/components/DimensionsPanel/List/RecommendedIcon.js +1 -2
  30. package/build/es/components/DimensionsPanel/List/__tests__/__snapshots__/DimensionItem.spec.js.snap +190 -366
  31. package/build/es/components/DimensionsPanel/List/styles/DimensionItem.module.css +83 -0
  32. package/build/es/components/DimensionsPanel/List/styles/DimensionList.style.js +2 -2
  33. package/build/es/components/DimensionsPanel/List/styles/RecommendedIcon.style.js +4 -4
  34. package/build/es/components/DimensionsPanel/styles/DimensionsPanel.style.js +1 -1
  35. package/build/es/modules/layout/dimension.js +1 -7
  36. package/build/es/modules/layout/dimensionCreate.js +1 -4
  37. package/package.json +1 -1
  38. package/build/cjs/api/analytics/AnalyticsTrackedEntities.js +0 -31
  39. package/build/cjs/components/DimensionsPanel/List/styles/DimensionItem.style.js +0 -73
  40. package/build/es/api/analytics/AnalyticsTrackedEntities.js +0 -24
  41. package/build/es/components/DimensionsPanel/List/styles/DimensionItem.style.js +0 -66
@@ -7,11 +7,11 @@ exports.styles = void 0;
7
7
  var _ui = require("@dhis2/ui");
8
8
  const styles = {
9
9
  recommendedIcon: {
10
- backgroundColor: _ui.theme.secondary300,
11
- height: '8px',
12
- width: '8px',
10
+ backgroundColor: _ui.theme.secondary400,
11
+ height: '6px',
12
+ width: '6px',
13
13
  borderRadius: '4px',
14
- marginLeft: '5px',
14
+ marginLeft: '6px',
15
15
  display: 'inline-block',
16
16
  cursor: 'pointer'
17
17
  }
@@ -10,7 +10,7 @@ const styles = {
10
10
  height: '100%',
11
11
  display: 'flex',
12
12
  flexDirection: 'column',
13
- backgroundColor: _ui.colors.grey050,
13
+ backgroundColor: _ui.colors.white,
14
14
  padding: '8px',
15
15
  overflow: 'hidden'
16
16
  },
@@ -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_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;
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;
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,13 +43,6 @@ 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;
53
46
  const DIMENSION_PROP_PROGRAM_STAGE = {
54
47
  name: 'programStage',
55
48
  defaultValue: {},
@@ -64,5 +57,5 @@ const DIMENSION_PROP_REPETITION = {
64
57
  isValid: prop => Array.isArray(prop)
65
58
  };
66
59
  exports.DIMENSION_PROP_REPETITION = 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];
60
+ const DIMENSION_PROPS = [DIMENSION_PROP_ID, DIMENSION_PROP_ITEMS, DIMENSION_PROP_FILTER, DIMENSION_PROP_LEGEND_SET, DIMENSION_PROP_PROGRAM_STAGE, DIMENSION_PROP_REPETITION];
68
61
  exports.DIMENSION_PROPS = DIMENSION_PROPS;
@@ -21,9 +21,6 @@ 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
- }),
27
24
  ...(args.programStage && {
28
25
  [_dimension.DIMENSION_PROP_PROGRAM_STAGE.name]: args.programStage
29
26
  }),
@@ -62,6 +62,7 @@ storiesOf('DimensionsPanel', module).add('locked dimension', () => {
62
62
  return /*#__PURE__*/React.createElement(DimensionsPanel, {
63
63
  dimensions: [...fixedDimensions, ...dynamicDimensions],
64
64
  onDimensionClick: onDimensionClick,
65
+ selectedIds: [DIMENSION_ID_DATA],
65
66
  lockedDimension: dimension => dimension === DIMENSION_ID_DATA
66
67
  });
67
68
  });
@@ -6,15 +6,12 @@ import AnalyticsEnrollments from './AnalyticsEnrollments.js';
6
6
  import AnalyticsEvents from './AnalyticsEvents.js';
7
7
  import AnalyticsRequest from './AnalyticsRequest.js';
8
8
  import AnalyticsResponse from './AnalyticsResponse.js';
9
- import AnalyticsTrackedEntities from './AnalyticsTrackedEntities.js';
10
9
 
11
10
  /**
12
11
  * @description
13
12
  * Analytics class used to request analytics data from Web API.
14
13
  *
15
14
  * @requires analytics.AnalyticsAggregate
16
- * @requires analytics.AnalyticsTrackedEntities
17
- * @requires analytics.AnalyticsEnrollments
18
15
  * @requires analytics.AnalyticsEvents
19
16
  * @requires analytics.AnalyticsRequest
20
17
  * @requires analytics.AnalyticsResponse
@@ -34,7 +31,6 @@ import AnalyticsTrackedEntities from './AnalyticsTrackedEntities.js';
34
31
  class Analytics {
35
32
  /**
36
33
  * @param {!module:analytics.AnalyticsAggregate} analyticsAggregate The AnalyticsAggregate instance
37
- * @param {!module:analytics.AnalyticsTrackedEntities} analyticsTrackedEntities The AnalyticsTrackedEntities instance
38
34
  * @param {!module:analytics.AnalyticsEnrollments} analyticsEnrollments The AnalyticsEnrollments instance
39
35
  * @param {!module:analytics.AnalyticsEvents} analyticsEvents The AnalyticsEvents instance
40
36
  * @param {!module:analytics.AnalyticsRequest} analyticsRequest The AnalyticsRequest class
@@ -43,14 +39,12 @@ class Analytics {
43
39
  constructor(_ref) {
44
40
  let {
45
41
  aggregate,
46
- trackedEntities,
47
42
  enrollments,
48
43
  events,
49
44
  request,
50
45
  response
51
46
  } = _ref;
52
47
  this.aggregate = aggregate;
53
- this.trackedEntities = trackedEntities;
54
48
  this.enrollments = enrollments;
55
49
  this.events = events;
56
50
  this.request = request;
@@ -73,7 +67,6 @@ class Analytics {
73
67
  if (!Analytics.getAnalytics.analytics) {
74
68
  Analytics.getAnalytics.analytics = new Analytics({
75
69
  aggregate: new AnalyticsAggregate(dataEngine),
76
- trackedEntities: new AnalyticsTrackedEntities(dataEngine),
77
70
  enrollments: new AnalyticsEnrollments(dataEngine),
78
71
  events: new AnalyticsEvents(dataEngine),
79
72
  request: AnalyticsRequest,
@@ -1,19 +1,13 @@
1
1
  import sortBy from 'lodash/sortBy';
2
2
  import AnalyticsRequest from './AnalyticsRequest.js';
3
- import { formatRequestPath } from './utils.js';
4
3
  const analyticsQuery = {
5
4
  resource: 'analytics',
6
5
  id: _ref => {
7
6
  let {
8
7
  path,
9
- program,
10
- trackedEntityType
8
+ program
11
9
  } = _ref;
12
- return formatRequestPath({
13
- path,
14
- program,
15
- trackedEntityType
16
- });
10
+ return [path, program].filter(Boolean).join('/');
17
11
  },
18
12
  params: _ref2 => {
19
13
  let {
@@ -33,14 +27,9 @@ const analyticsDataQuery = {
33
27
  id: _ref3 => {
34
28
  let {
35
29
  path,
36
- program,
37
- trackedEntityType
30
+ program
38
31
  } = _ref3;
39
- return formatRequestPath({
40
- path,
41
- program,
42
- trackedEntityType
43
- });
32
+ return [path, program].filter(Boolean).join('/');
44
33
  },
45
34
  params: _ref4 => {
46
35
  let {
@@ -62,14 +51,9 @@ const analyticsMetaDataQuery = {
62
51
  id: _ref5 => {
63
52
  let {
64
53
  path,
65
- program,
66
- trackedEntityType
54
+ program
67
55
  } = _ref5;
68
- return formatRequestPath({
69
- path,
70
- program,
71
- trackedEntityType
72
- });
56
+ return [path, program].filter(Boolean).join('/');
73
57
  },
74
58
  params: _ref6 => {
75
59
  let {
@@ -161,7 +145,6 @@ class AnalyticsBase {
161
145
  variables: {
162
146
  path: req.path,
163
147
  program: req.program,
164
- trackedEntityType: req.trackedEntityType,
165
148
  dimensions: generateDimensionStrings(req.dimensions),
166
149
  filters: generateDimensionStrings(req.filters),
167
150
  parameters: req.parameters,
@@ -204,7 +187,6 @@ class AnalyticsBase {
204
187
  variables: {
205
188
  path: req.path,
206
189
  program: req.program,
207
- trackedEntityType: req.trackedEntityType,
208
190
  dimensions: generateDimensionStrings(req.dimensions, options),
209
191
  filters: generateDimensionStrings(req.filters, options),
210
192
  parameters: req.parameters
@@ -4,7 +4,6 @@ import AnalyticsRequestBase from './AnalyticsRequestBase.js';
4
4
  import AnalyticsRequestDimensionsMixin from './AnalyticsRequestDimensionsMixin.js';
5
5
  import AnalyticsRequestFiltersMixin from './AnalyticsRequestFiltersMixin.js';
6
6
  import AnalyticsRequestPropertiesMixin from './AnalyticsRequestPropertiesMixin.js';
7
- import { formatDimension } from './utils.js';
8
7
 
9
8
  /**
10
9
  * @description
@@ -42,7 +41,6 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
42
41
  fromVisualization(visualization) {
43
42
  let passFilterAsDimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
44
43
  let request = this;
45
- const outputType = visualization.outputType;
46
44
 
47
45
  // extract dimensions from visualization
48
46
  const columns = visualization.columns || [];
@@ -53,28 +51,19 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
53
51
  if ((_d$legendSet = d.legendSet) !== null && _d$legendSet !== void 0 && _d$legendSet.id) {
54
52
  dimension += `-${d.legendSet.id}`;
55
53
  }
54
+ if ((_d$programStage = d.programStage) !== null && _d$programStage !== void 0 && _d$programStage.id) {
55
+ dimension = `${d.programStage.id}.${dimension}`;
56
+ }
56
57
  if (d.filter) {
57
58
  dimension += `:${d.filter}`;
58
59
  }
59
- const programStageId = (_d$programStage = d.programStage) === null || _d$programStage === void 0 ? void 0 : _d$programStage.id;
60
60
  if ((_d$repetition = d.repetition) !== null && _d$repetition !== void 0 && (_d$repetition$indexes = _d$repetition.indexes) !== null && _d$repetition$indexes !== void 0 && _d$repetition$indexes.length) {
61
61
  d.repetition.indexes.forEach(index => {
62
- var _d$program;
63
- request = request.addDimension(formatDimension({
64
- programId: (_d$program = d.program) === null || _d$program === void 0 ? void 0 : _d$program.id,
65
- programStageId: `${programStageId}[${index}]`,
66
- dimension,
67
- outputType
68
- }));
62
+ request = request.addDimension(dimension.replace(/\./, `[${index}].`));
69
63
  });
70
64
  } else {
71
- var _d$program2, _d$items;
72
- request = request.addDimension(formatDimension({
73
- programId: (_d$program2 = d.program) === null || _d$program2 === void 0 ? void 0 : _d$program2.id,
74
- programStageId,
75
- dimension,
76
- outputType
77
- }), (_d$items = d.items) === null || _d$items === void 0 ? void 0 : _d$items.map(item => item.id));
65
+ var _d$items;
66
+ request = request.addDimension(dimension, (_d$items = d.items) === null || _d$items === void 0 ? void 0 : _d$items.map(item => item.id));
78
67
  }
79
68
  });
80
69
 
@@ -89,29 +78,17 @@ class AnalyticsRequest extends AnalyticsRequestDimensionsMixin(AnalyticsRequestF
89
78
  request = request.addDimension(f.dimension, (_f$items = f.items) === null || _f$items === void 0 ? void 0 : _f$items.map(item => item.id));
90
79
  } else {
91
80
  var _f$programStage, _f$repetition, _f$repetition$indexes;
92
- let filterString = f.dimension;
81
+ let filterString = (_f$programStage = f.programStage) !== null && _f$programStage !== void 0 && _f$programStage.id ? `${f.programStage.id}.${f.dimension}` : f.dimension;
93
82
  if (f.filter) {
94
83
  filterString += `:${f.filter}`;
95
84
  }
96
- const programStageId = (_f$programStage = f.programStage) === null || _f$programStage === void 0 ? void 0 : _f$programStage.id;
97
85
  if ((_f$repetition = f.repetition) !== null && _f$repetition !== void 0 && (_f$repetition$indexes = _f$repetition.indexes) !== null && _f$repetition$indexes !== void 0 && _f$repetition$indexes.length) {
98
86
  f.repetition.indexes.forEach(index => {
99
- var _f$program;
100
- request = request.addFilter(formatDimension({
101
- programId: (_f$program = f.program) === null || _f$program === void 0 ? void 0 : _f$program.id,
102
- programStageId: `${programStageId}[${index}]`,
103
- dimension: filterString,
104
- outputType
105
- }));
87
+ request = request.addFilter(filterString.replace(/\./, `[${index}].`));
106
88
  });
107
89
  } else {
108
- var _f$program2, _f$items2;
109
- request = request.addFilter(formatDimension({
110
- programId: (_f$program2 = f.program) === null || _f$program2 === void 0 ? void 0 : _f$program2.id,
111
- programStageId,
112
- dimension: filterString,
113
- outputType
114
- }), (_f$items2 = f.items) === null || _f$items2 === void 0 ? void 0 : _f$items2.map(item => item.id));
90
+ var _f$items2;
91
+ request = request.addFilter(filterString, (_f$items2 = f.items) === null || _f$items2 === void 0 ? void 0 : _f$items2.map(item => item.id));
115
92
  }
116
93
  }
117
94
  });
@@ -18,7 +18,6 @@ class AnalyticsRequestBase {
18
18
  format = 'json',
19
19
  path,
20
20
  program,
21
- trackedEntityType,
22
21
  dimensions = [],
23
22
  filters = [],
24
23
  parameters = {}
@@ -27,7 +26,6 @@ class AnalyticsRequestBase {
27
26
  this.format = format.toLowerCase();
28
27
  this.path = path;
29
28
  this.program = program;
30
- this.trackedEntityType = trackedEntityType;
31
29
  this.dimensions = dimensions;
32
30
  this.filters = filters;
33
31
  this.parameters = {
@@ -66,7 +64,7 @@ class AnalyticsRequestBase {
66
64
  }
67
65
  return dimension;
68
66
  });
69
- const endPoint = [this.endPoint, this.path, this.program, this.trackedEntityType].filter(Boolean).join('/');
67
+ const endPoint = [this.endPoint, this.path, this.program].filter(e => !!e).join('/');
70
68
  return `${endPoint}.${this.format}?dimension=${encodedDimensions.join('&dimension=')}`;
71
69
  }
72
70
 
@@ -491,25 +491,6 @@ class extends base {
491
491
  return new AnalyticsRequest(this);
492
492
  }
493
493
 
494
- /**
495
- * Sets the tracked entity type for the request.
496
- * It appends the tracked entity type id to the request's path.
497
- *
498
- * @param {!String} trackedEntityType The tracked entity type id
499
- *
500
- * @returns {AnalyticsRequest} A new instance of the class for chaining purposes
501
- *
502
- * @example
503
- * const req = new analytics.request()
504
- * .withTrackedEntityType('nEenWmSyUEp');
505
- */
506
- withTrackedEntityType(trackedEntityType) {
507
- if (trackedEntityType) {
508
- this.trackedEntityType = trackedEntityType;
509
- }
510
- return new AnalyticsRequest(this);
511
- }
512
-
513
494
  /**
514
495
  * Sets the program for the request.
515
496
  * It appends the program id to the request's path.
@@ -2,23 +2,4 @@
2
2
  const whitelistURI = ',&$=/;:';
3
3
  const whitelistURICodes = whitelistURI.split('').map(c => encodeURIComponent(c));
4
4
  const whitelistRegExp = new RegExp(`(?:${whitelistURICodes.join('|')})`, 'g');
5
- export const customEncodeURIComponent = uri => encodeURIComponent(uri).replace(whitelistRegExp, decodeURIComponent);
6
- export const formatRequestPath = _ref => {
7
- let {
8
- path,
9
- program,
10
- trackedEntityType
11
- } = _ref;
12
- return [path, program, trackedEntityType].filter(Boolean).join('/');
13
- };
14
- export const formatDimension = _ref2 => {
15
- let {
16
- outputType,
17
- programId,
18
- programStageId,
19
- dimension
20
- } = _ref2;
21
- return [
22
- // XXX it would be clearer to have this consistent with what is sent in the request as for EVENT/ENROLLMENT
23
- outputType === 'TRACKED_ENTITY' ? programId : undefined, programStageId, dimension].filter(Boolean).join('.');
24
- };
5
+ export const customEncodeURIComponent = uri => encodeURIComponent(uri).replace(whitelistRegExp, decodeURIComponent);
@@ -1,47 +1,21 @@
1
1
  import React from 'react';
2
2
  const DynamicDimensionIcon = () => {
3
3
  return /*#__PURE__*/React.createElement("svg", {
4
- width: "16px",
5
- height: "16px",
6
- viewBox: "0 0 16 16",
7
- version: "1.1",
8
- xmlns: "http://www.w3.org/2000/svg"
9
- }, /*#__PURE__*/React.createElement("g", {
10
- id: "Exp",
11
- stroke: "none",
12
- strokeWidth: "1",
13
- fill: "none",
14
- fillRule: "evenodd"
15
- }, /*#__PURE__*/React.createElement("g", {
16
- id: "Artboard",
17
- transform: "translate(-80.000000, -9.000000)"
18
- }, /*#__PURE__*/React.createElement("g", {
19
- id: "icon_dimension_new",
20
- transform: "translate(80.000000, 9.000000)"
21
- }, /*#__PURE__*/React.createElement("rect", {
22
- id: "frame",
23
- x: "0",
24
- y: "0",
25
4
  width: "16",
26
- height: "16"
27
- }), /*#__PURE__*/React.createElement("g", {
28
- id: "module",
29
- transform: "translate(4.000000, 4.000000)",
30
- stroke: "#000000",
5
+ height: "16",
6
+ fill: "none",
7
+ xmlns: "http://www.w3.org/2000/svg"
8
+ }, /*#__PURE__*/React.createElement("path", {
9
+ clipRule: "evenodd",
10
+ d: "m4.832 5.674 2.831-1.11a.913.913 0 0 1 .673 0l2.83 1.11a.548.548 0 0 1 .334.517V9.81a.548.548 0 0 1-.332.517l-2.831 1.11a.92.92 0 0 1-.673 0l-2.83-1.11a.548.548 0 0 1-.334-.517V6.19a.548.548 0 0 1 .332-.517Z",
11
+ stroke: "#212934",
31
12
  strokeLinecap: "round",
32
13
  strokeLinejoin: "round"
33
- }, /*#__PURE__*/React.createElement("path", {
34
- d: "M0.33209728,1.1742111 L3.16308174,0.0641666694 C3.37911767,-0.0213888898 3.61963794,-0.0213888898 3.83567387,0.0641666694 L6.66665833,1.1742111 C6.87300668,1.26220739 7.00497003,1.467 6.99984343,1.69127776 L6.99984343,5.30887771 C7.00517859,5.53285411 6.87376309,5.73756106 6.66790272,5.82594437 L3.83691826,6.93629991 C3.62076407,7.02123336 3.38048032,7.02123336 3.16432613,6.93629991 L0.333341668,5.82594437 C0.126993317,5.73794808 -0.00497002591,5.53315547 0.000156574133,5.30887771 L0.000156574133,1.69127776 C-0.00517858533,1.46730136 0.126236906,1.26259441 0.33209728,1.1742111 Z",
35
- id: "Shape"
36
- }), /*#__PURE__*/React.createElement("path", {
37
- d: "M3.5,2.72795833 L0.322,1.48195833",
38
- id: "Shape"
39
- }), /*#__PURE__*/React.createElement("path", {
40
- d: "M3.5,2.72795833 L6.678,1.48195833",
41
- id: "Shape"
42
14
  }), /*#__PURE__*/React.createElement("path", {
43
- d: "M3.5,6.78125 L3.5,2.72795833",
44
- id: "Shape"
45
- }))))));
15
+ d: "M8 7.228 4.822 5.982M8 7.228l3.178-1.246M8 11.281V7.228",
16
+ stroke: "#212934",
17
+ strokeLinecap: "round",
18
+ strokeLinejoin: "round"
19
+ }));
46
20
  };
47
21
  export default DynamicDimensionIcon;
@@ -2,14 +2,15 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2
2
  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; }
3
3
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
4
4
  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); }
5
- import { IconLock16 } from '@dhis2/ui';
5
+ import { CssVariables } from '@dhis2/ui';
6
+ import cx from 'classnames';
6
7
  import PropTypes from 'prop-types';
7
8
  import React, { Component, createRef } from 'react';
8
9
  import DynamicDimensionIcon from '../../../assets/DynamicDimensionIcon.js';
9
10
  import { DIMENSION_PROP_NO_ITEMS, getPredefinedDimensionProp } from '../../../modules/predefinedDimensions.js';
10
11
  import OptionsButton from './OptionsButton.js';
11
12
  import RecommendedIcon from './RecommendedIcon.js';
12
- import { styles } from './styles/DimensionItem.style.js';
13
+ import style from './styles/DimensionItem.module.css';
13
14
  class DimensionItem extends Component {
14
15
  constructor() {
15
16
  super(...arguments);
@@ -30,23 +31,18 @@ class DimensionItem extends Component {
30
31
  _defineProperty(this, "getDimensionIcon", () => {
31
32
  const Icon = getPredefinedDimensionProp(this.props.id, 'icon');
32
33
  return Icon ? /*#__PURE__*/React.createElement(Icon, {
33
- style: styles.fixedDimensionIcon
34
+ className: style.fixedDimensionIcon
34
35
  }) : /*#__PURE__*/React.createElement(DynamicDimensionIcon, {
35
- style: styles.dynamicDimensionIcon
36
+ className: "dynamic-dimension-icon"
36
37
  });
37
38
  });
38
39
  _defineProperty(this, "getDimensionType", () => {
39
40
  const {
40
41
  id,
41
- name,
42
- isDeactivated
42
+ name
43
43
  } = this.props;
44
44
  return /*#__PURE__*/React.createElement("span", {
45
- "data-dimensionid": id,
46
- style: {
47
- ...styles.text,
48
- ...(isDeactivated ? styles.textDeactivated : {})
49
- }
45
+ "data-dimensionid": id
50
46
  }, name);
51
47
  });
52
48
  }
@@ -60,51 +56,63 @@ class DimensionItem extends Component {
60
56
  onClick,
61
57
  onOptionsClick,
62
58
  innerRef,
63
- style,
64
59
  dataTest,
60
+ className,
65
61
  ...rest
66
62
  } = this.props;
67
63
  const Icon = this.getDimensionIcon();
68
64
  const Label = this.getDimensionType();
69
- const itemStyle = isSelected && !isDeactivated ? {
70
- ...styles.item,
71
- ...styles.selected
72
- } : styles.item;
73
65
  const optionsRef = /*#__PURE__*/createRef();
66
+ const LockIcon = /*#__PURE__*/React.createElement("svg", {
67
+ width: "7",
68
+ height: "9",
69
+ fill: "none",
70
+ xmlns: "http://www.w3.org/2000/svg"
71
+ }, /*#__PURE__*/React.createElement("path", {
72
+ fillRule: "evenodd",
73
+ clipRule: "evenodd",
74
+ d: "M3.5 1A1.5 1.5 0 0 0 2 2.5V3h3v-.5A1.5 1.5 0 0 0 3.5 1ZM1 2.5V3H0v6h7V3H6v-.5a2.5 2.5 0 0 0-5 0ZM1 8V4h5v4H1Zm3-1V5H3v2h1Z",
75
+ fill: "none"
76
+ }));
74
77
  const onLabelClick = () => {
75
78
  if (!isDeactivated && !getPredefinedDimensionProp(id, DIMENSION_PROP_NO_ITEMS)) {
76
79
  onClick(id);
77
80
  }
78
81
  };
79
- return /*#__PURE__*/React.createElement("li", _extends({
82
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CssVariables, {
83
+ colors: true
84
+ }), /*#__PURE__*/React.createElement("li", _extends({
80
85
  onMouseOver: this.onMouseOver,
81
86
  onMouseLeave: this.onMouseExit,
82
87
  ref: innerRef,
83
- style: Object.assign({}, itemStyle, style, !isDeactivated && styles.clickable),
88
+ className: cx(style.item, {
89
+ [style.deactivated]: isDeactivated,
90
+ [style.selected]: isSelected && !isDeactivated
91
+ }, className),
84
92
  "data-test": dataTest,
85
93
  onClick: onLabelClick
86
94
  }, rest), /*#__PURE__*/React.createElement("div", {
87
- className: "label",
95
+ className: style.label,
88
96
  tabIndex: 0,
89
- style: styles.label,
90
97
  "data-test": `${dataTest}-button-${id}`
91
98
  }, /*#__PURE__*/React.createElement("div", {
92
- style: styles.iconWrapper
99
+ className: style.iconWrapper
93
100
  }, Icon), /*#__PURE__*/React.createElement("div", {
94
- style: styles.labelWrapper
95
- }, Label, /*#__PURE__*/React.createElement(RecommendedIcon, {
101
+ className: style.labelWrapper
102
+ }, /*#__PURE__*/React.createElement("span", {
103
+ className: style.labelText
104
+ }, Label), /*#__PURE__*/React.createElement(RecommendedIcon, {
96
105
  isRecommended: isRecommended,
97
106
  dataTest: `${dataTest}-recommended-icon`
98
- })), isLocked && /*#__PURE__*/React.createElement("div", {
99
- style: styles.iconWrapper
100
- }, /*#__PURE__*/React.createElement(IconLock16, null))), onOptionsClick ? /*#__PURE__*/React.createElement("div", {
101
- style: styles.optionsWrapper,
107
+ }))), onOptionsClick ? /*#__PURE__*/React.createElement("div", {
108
+ className: style.optionsWrapper,
102
109
  ref: optionsRef,
103
110
  "data-test": `${dataTest}-menu-${id}`
104
111
  }, this.state.mouseOver && !isDeactivated && !isLocked ? /*#__PURE__*/React.createElement(OptionsButton, {
105
- style: styles.optionsButton,
106
112
  onClick: this.onOptionsClick(id, optionsRef)
107
- }) : null) : null);
113
+ }) : null) : null, isLocked && /*#__PURE__*/React.createElement("div", {
114
+ className: style.lockWrapper
115
+ }, LockIcon)));
108
116
  }
109
117
  }
110
118
  DimensionItem.propTypes = {
@@ -112,12 +120,12 @@ DimensionItem.propTypes = {
112
120
  isSelected: PropTypes.bool.isRequired,
113
121
  // XXX
114
122
  name: PropTypes.string.isRequired,
123
+ className: PropTypes.string,
115
124
  dataTest: PropTypes.string,
116
125
  innerRef: PropTypes.func,
117
126
  isDeactivated: PropTypes.bool,
118
127
  isLocked: PropTypes.bool,
119
128
  isRecommended: PropTypes.bool,
120
- style: PropTypes.object,
121
129
  onClick: PropTypes.func,
122
130
  onOptionsClick: PropTypes.func
123
131
  };
@@ -1,18 +1,19 @@
1
+ import _JSXStyle from "styled-jsx/style";
1
2
  import { IconMore16 } from '@dhis2/ui';
2
3
  import PropTypes from 'prop-types';
3
4
  import React from 'react';
4
5
  const OptionsButton = _ref => {
5
6
  let {
6
- style,
7
7
  onClick
8
8
  } = _ref;
9
- return /*#__PURE__*/React.createElement("button", {
10
- style: style,
11
- onClick: onClick
12
- }, /*#__PURE__*/React.createElement(IconMore16, null));
9
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
10
+ onClick: onClick,
11
+ className: "jsx-2728765288"
12
+ }, /*#__PURE__*/React.createElement(IconMore16, null)), /*#__PURE__*/React.createElement(_JSXStyle, {
13
+ id: "2728765288"
14
+ }, ["button.jsx-2728765288{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:20px;width:20px;padding:0;border:none;background:none;outline:none;cursor:pointer;border-top-right-radius:2px;border-bottom-left-radius:2px;}", "button.jsx-2728765288:hover{background-color:rgba(0,0,0,0.09);}"]));
13
15
  };
14
16
  OptionsButton.propTypes = {
15
- style: PropTypes.object,
16
17
  onClick: PropTypes.func
17
18
  };
18
19
  export default OptionsButton;
@@ -10,8 +10,7 @@ const RecommendedIcon = _ref => {
10
10
  } = _ref;
11
11
  return isRecommended ? /*#__PURE__*/React.createElement(Tooltip, {
12
12
  content: i18n.t('Dimension recommended with selected data'),
13
- placement: "bottom",
14
- maxWidth: 160
13
+ placement: "bottom"
15
14
  }, /*#__PURE__*/React.createElement("div", {
16
15
  style: styles.recommendedIcon,
17
16
  "data-test": dataTest