@sis-cc/dotstatsuite-visions 12.19.0 → 12.20.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.
@@ -16,6 +16,10 @@ var _ramda = require('ramda');
16
16
 
17
17
  var R = _interopRequireWildcard(_ramda);
18
18
 
19
+ var _classnames = require('classnames');
20
+
21
+ var _classnames2 = _interopRequireDefault(_classnames);
22
+
19
23
  var _Box = require('@mui/material/Box');
20
24
 
21
25
  var _Box2 = _interopRequireDefault(_Box);
@@ -38,6 +42,10 @@ var _Button = require('@mui/material/Button');
38
42
 
39
43
  var _Button2 = _interopRequireDefault(_Button);
40
44
 
45
+ var _ArrowBack = require('@mui/icons-material/ArrowBack');
46
+
47
+ var _ArrowBack2 = _interopRequireDefault(_ArrowBack);
48
+
41
49
  var _ = require('..');
42
50
 
43
51
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
@@ -52,6 +60,20 @@ var useStyles = (0, _makeStyles2.default)(function (theme) {
52
60
  textTransform: 'none',
53
61
  color: theme.palette.grey[700]
54
62
  }, R.pathOr({}, ['mixins', 'expansionPanel', 'title'], theme)),
63
+ labelSelected: {
64
+ color: theme.palette.primary.main
65
+ },
66
+ tabSelected: {
67
+ backgroundColor: theme.palette.action.hover + ' !important',
68
+ '&:hover': {
69
+ backgroundColor: theme.palette.action.selected + ' !important'
70
+ }
71
+ },
72
+ tab: {
73
+ '&:hover': {
74
+ backgroundColor: '' + theme.palette.action.selected
75
+ }
76
+ },
55
77
  tabPanel: {
56
78
  backgroundColor: theme.palette.background.default,
57
79
  position: 'absolute',
@@ -71,7 +93,9 @@ var TabPanel = function TabPanel(props) {
71
93
  classes = props.classes,
72
94
  labels = props.labels,
73
95
  onClose = props.onClose,
74
- other = _objectWithoutProperties(props, ['children', 'open', 'item', 'classes', 'labels', 'onClose']);
96
+ isNarrow = props.isNarrow,
97
+ setOpen = props.setOpen,
98
+ other = _objectWithoutProperties(props, ['children', 'open', 'item', 'classes', 'labels', 'onClose', 'isNarrow', 'setOpen']);
75
99
 
76
100
  return _react2.default.createElement(
77
101
  'div',
@@ -80,11 +104,27 @@ var TabPanel = function TabPanel(props) {
80
104
  hidden: !open,
81
105
  id: 'vertical-tabpanel-' + item.index,
82
106
  'aria-labelledby': 'vertical-tab-' + item.index,
83
- className: classes.tabPanel
107
+ className: isNarrow ? classes.tabPanelNarrow : classes.tabPanel
84
108
  }, other),
85
109
  open && _react2.default.createElement(
86
110
  _Box2.default,
87
111
  { sx: { p: 3 } },
112
+ isNarrow && _react2.default.createElement(
113
+ _Button2.default,
114
+ {
115
+ onClick: function onClick() {
116
+ return setOpen(false);
117
+ },
118
+ 'data-testid': 'back_button',
119
+ 'aria-label': R.prop('cancel', labels),
120
+ sx: {
121
+ padding: 0,
122
+ float: 'left'
123
+ },
124
+ size: 'large'
125
+ },
126
+ _react2.default.createElement(_ArrowBack2.default, null)
127
+ ),
88
128
  _react2.default.createElement(
89
129
  _Button2.default,
90
130
  {
@@ -109,31 +149,44 @@ TabPanel.propTypes = process.env.NODE_ENV !== "production" ? {
109
149
  classes: _propTypes2.default.object,
110
150
  labels: _propTypes2.default.object,
111
151
  onClose: _propTypes2.default.func,
112
- children: _propTypes2.default.node
152
+ children: _propTypes2.default.node,
153
+ isNarrow: _propTypes2.default.bool,
154
+ setOpen: _propTypes2.default.func
113
155
  } : {};
114
156
 
115
157
  var PaperComponent = function PaperComponent(props) {
158
+ var _cx;
159
+
116
160
  var classes = useStyles();
117
- // const Chip = R.isNil(props.tag) ? InternalTag : props.tag;
118
161
  return _react2.default.createElement(
119
162
  _material.Paper,
120
163
  props,
121
164
  _react2.default.createElement(
122
- _material.Typography,
123
- { noWrap: true, variant: 'body2', title: props.label, className: classes.label },
124
- props.label
165
+ _Box2.default,
166
+ { sx: { display: 'flex', justifyContent: 'space-between', width: '100%' } },
167
+ _react2.default.createElement(
168
+ _material.Typography,
169
+ {
170
+ noWrap: true,
171
+ variant: 'body2',
172
+ title: props.label,
173
+ className: (0, _classnames2.default)(classes.label, (_cx = {}, _cx[classes.labelSelected] = props.selected, _cx))
174
+ },
175
+ props.label
176
+ ),
177
+ props.tag
125
178
  )
126
179
  );
127
180
  };
128
181
  PaperComponent.propTypes = process.env.NODE_ENV !== "production" ? {
129
182
  label: _propTypes2.default.string,
130
183
  tag: _propTypes2.default.elementType,
131
- items: _propTypes2.default.array,
132
- tagValueLabel: _propTypes2.default.func,
133
- tagValue: _propTypes2.default.string
184
+ selected: _propTypes2.default.bool
134
185
  } : {};
135
186
 
136
187
  var DynamicDrawer = function DynamicDrawer(props) {
188
+ var classNames = useStyles();
189
+
137
190
  var _useState = (0, _react.useState)(false),
138
191
  open = _useState[0],
139
192
  setOpen = _useState[1];
@@ -150,6 +203,22 @@ var DynamicDrawer = function DynamicDrawer(props) {
150
203
  allSelection = _useState4[0],
151
204
  setAllSelection = _useState4[1];
152
205
 
206
+ var getCounter = function getCounter(items, tagAccessor) {
207
+ var selectedItemsIds = R.reduce(function (acc, item) {
208
+ if (R.prop('isSelected', item)) {
209
+ return R.append(item.id, acc);
210
+ }
211
+ return acc;
212
+ }, [], items);
213
+ var itemsIds = R.pluck('id', items);
214
+ var count = R.pipe(R.uniq, R.length)(selectedItemsIds);
215
+ var total = R.pipe(R.uniq, R.length)(itemsIds);
216
+ if (R.is(Function, tagAccessor)) {
217
+ return tagAccessor(count, total);
218
+ }
219
+ return count + '/' + total;
220
+ };
221
+
153
222
  var list = props.list,
154
223
  labelRenderer = props.labelRenderer,
155
224
  onClick = props.onClick,
@@ -164,11 +233,12 @@ var DynamicDrawer = function DynamicDrawer(props) {
164
233
  allItems = props.allItems,
165
234
  periodPanel = props.periodPanel,
166
235
  classes = props.classes,
167
- tag = props.tag,
168
236
  _props$testId = props.testId,
169
237
  testId = _props$testId === undefined ? 'tabs' : _props$testId,
238
+ tagAccessor = props.tagAccessor,
239
+ tagAriaLabel = props.tagAriaLabel,
170
240
  children = props.children,
171
- rest = _objectWithoutProperties(props, ['list', 'labelRenderer', 'onClick', 'handleChangePanel', 'isNarrow', 'labels', 'disableAccessor', 'expandAll', 'collapseAll', 'expandedIds', 'allItems', 'periodPanel', 'classes', 'tag', 'testId', 'children']);
241
+ rest = _objectWithoutProperties(props, ['list', 'labelRenderer', 'onClick', 'handleChangePanel', 'isNarrow', 'labels', 'disableAccessor', 'expandAll', 'collapseAll', 'expandedIds', 'allItems', 'periodPanel', 'classes', 'testId', 'tagAccessor', 'tagAriaLabel', 'children']);
172
242
 
173
243
  var handleChange = function handleChange(e, item) {
174
244
  console.log({ item: item, selection: selection, allSelection: allSelection });
@@ -183,6 +253,13 @@ var DynamicDrawer = function DynamicDrawer(props) {
183
253
  setSelection({});
184
254
  setOpen(false);
185
255
  };
256
+ var handleClose = function handleClose() {
257
+ setOpen(false);
258
+ setAllSelection({});
259
+ setSelection({});
260
+ };
261
+ var isHidden = open && isNarrow;
262
+ var isNotHiddenButton = !R.isEmpty(allSelection) && isNarrow;
186
263
 
187
264
  return _react2.default.createElement(
188
265
  'div',
@@ -196,25 +273,59 @@ var DynamicDrawer = function DynamicDrawer(props) {
196
273
  onChange: handleChange,
197
274
  'aria-label': 'filters',
198
275
  'data-testid': testId,
199
- sx: { width: '100%', height: '100%', borderRight: 1, borderColor: 'divider' }
276
+ sx: {
277
+ display: isHidden ? 'none' : 'flex',
278
+ width: '100%',
279
+ height: '100%',
280
+ borderRight: 1,
281
+ borderColor: 'divider'
282
+ }
200
283
  },
201
284
  R.map(function (item) {
285
+ var _cx2;
286
+
287
+ var Chip = R.isNil(item.tag) ? _.Tag : item.tag;
288
+ var tagValueLabel = R.isNil(item.tag) && getCounter(item.values, tagAriaLabel);
289
+
202
290
  return _react2.default.createElement(_material.Tab, {
203
291
  key: item.id,
204
292
  id: filter.id,
205
293
  'data-testid': item.id + '-tab',
206
294
  component: function component(props) {
207
- return PaperComponent(_extends({ label: labelRenderer(item), tag: tag }, props));
295
+ return PaperComponent(_extends({
296
+ label: labelRenderer(item),
297
+ selected: filter.id === item.id,
298
+ tag: R.isNil(item.tag) ? _react2.default.createElement(
299
+ Chip,
300
+ { items: item.values, tagValueLabel: tagValueLabel },
301
+ getCounter(item.values, tagAccessor)
302
+ ) : item.tag
303
+ }, props));
208
304
  },
209
305
  label: labelRenderer(item),
210
306
  'aria-label': labelRenderer(item),
211
- sx: { alignItems: 'start', maxWidth: '100%' },
212
307
  value: item,
213
308
  'aria-selected': filter.id === item.id,
309
+ className: (0, _classnames2.default)(classNames.tab, (_cx2 = {}, _cx2[classNames.tabSelected] = filter.id === item.id, _cx2)),
310
+ sx: {
311
+ alignItems: 'start',
312
+ maxWidth: '100%'
313
+ },
214
314
  wrapped: true
215
315
  });
216
316
  })(list),
217
- open && _react2.default.createElement(
317
+ open && !isNarrow && _react2.default.createElement(
318
+ _.Button,
319
+ {
320
+ sx: { float: 'bottom', margin: '10px' },
321
+ 'aria-label': R.prop('apply', labels),
322
+ id: 'apply_button',
323
+ variant: 'contained',
324
+ onClick: handleSubmit
325
+ },
326
+ R.prop('apply', labels)
327
+ ),
328
+ isNotHiddenButton && _react2.default.createElement(
218
329
  _.Button,
219
330
  {
220
331
  sx: { float: 'bottom', margin: '10px' },
@@ -234,9 +345,9 @@ var DynamicDrawer = function DynamicDrawer(props) {
234
345
  open: open,
235
346
  labels: labels,
236
347
  classes: classes,
237
- onClose: function onClose() {
238
- return setOpen(false);
239
- }
348
+ onClose: handleClose,
349
+ isNarrow: isNarrow,
350
+ setOpen: setOpen
240
351
  },
241
352
  R.equals(filter.id, periodPanel) ? children : _react2.default.createElement(_AdvancedSelection2.default, _extends({
242
353
  id: filter.id,
@@ -10,10 +10,6 @@ var _propTypes = require('prop-types');
10
10
 
11
11
  var _propTypes2 = _interopRequireDefault(_propTypes);
12
12
 
13
- var _classnames = require('classnames');
14
-
15
- var _classnames2 = _interopRequireDefault(_classnames);
16
-
17
13
  var _ramda = require('ramda');
18
14
 
19
15
  var R = _interopRequireWildcard(_ramda);
@@ -28,74 +24,68 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
28
24
 
29
25
  var mapIndexed = R.addIndex(R.map);
30
26
  var ButtonCarousel = function ButtonCarousel(_ref) {
31
- var _cx;
32
-
33
27
  var selectionModes = _ref.selectionModes,
34
28
  selectionMode = _ref.selectionMode,
35
29
  setSelectionMode = _ref.setSelectionMode,
36
- isNarrow = _ref.isNarrow,
37
30
  classes = _ref.classes;
38
31
 
39
32
  return _react2.default.createElement(
40
33
  _material.Box,
41
34
  {
42
35
  sx: {
43
- display: 'flex',
44
36
  overflowX: 'auto',
45
- gap: 2,
46
- padding: 2,
47
- scrollSnapType: 'x mandatory',
48
- '&::-webkit-scrollbar': { display: 'none' }, // Hide scrollbar on Webkit
49
- scrollbarWidth: 'none' // Hide scrollbar on Firefox
37
+ overflowY: 'hidden',
38
+ whiteSpace: 'nowrap',
39
+ display: 'block', // allow horizontal scrolling
40
+ width: '100%',
41
+ maxWidth: '100%',
42
+ '&::-webkit-scrollbar': { display: 'none' }, // optional: hide scrollbar
43
+ scrollbarWidth: 'none'
50
44
  }
51
45
  },
52
- _react2.default.createElement(
53
- 'div',
54
- { className: (0, _classnames2.default)(classes.selectModeContainer, (_cx = {}, _cx[classes.narrowHeader] = isNarrow, _cx)) },
55
- mapIndexed(function (_ref2) {
56
- var value = _ref2.value,
57
- label = _ref2.label,
58
- img = _ref2.img;
59
- return _react2.default.createElement(
60
- _.Tooltip,
46
+ mapIndexed(function (_ref2) {
47
+ var value = _ref2.value,
48
+ label = _ref2.label,
49
+ img = _ref2.img;
50
+ return _react2.default.createElement(
51
+ _.Tooltip,
52
+ {
53
+ key: value,
54
+ classes: { tooltip: classes.tooltip },
55
+ title: _react2.default.createElement('img', { style: { width: '72px', height: '90px' }, src: img, alt: value }),
56
+ tabIndex: -1
57
+ },
58
+ _react2.default.createElement(
59
+ _material.Button,
61
60
  {
62
- key: value,
63
- classes: { tooltip: classes.tooltip },
64
- title: _react2.default.createElement('img', { style: { width: '72px', height: '90px' }, src: img, alt: value }),
65
- tabIndex: -1
61
+ className: classes.selectButton,
62
+ selected: value === selectionMode,
63
+ onClick: function onClick() {
64
+ setSelectionMode(value);
65
+ },
66
+ 'aria-pressed': value === selectionMode,
67
+ 'aria-label': label,
68
+ tabIndex: 0,
69
+ sx: {
70
+ flex: '0 0 auto', // Prevents buttons from shrinking
71
+ scrollSnapAlign: 'center',
72
+ minWidth: 120, // Minimum width for buttons
73
+ whiteSpace: 'nowrap'
74
+ }
66
75
  },
67
76
  _react2.default.createElement(
68
- _material.Button,
69
- {
70
- className: classes.selectButton,
71
- selected: value === selectionMode,
72
- onClick: function onClick() {
73
- setSelectionMode(value);
74
- },
75
- 'aria-pressed': value === selectionMode,
76
- 'aria-label': label,
77
- tabIndex: 0,
78
- sx: {
79
- flex: '0 0 auto', // Prevents buttons from shrinking
80
- scrollSnapAlign: 'center',
81
- minWidth: 120, // Minimum width for buttons
82
- whiteSpace: 'nowrap'
83
- }
84
- },
77
+ _material.Paper,
78
+ { elevation: 0, className: classes.selectModeItem, key: value },
85
79
  _react2.default.createElement(
86
- _material.Paper,
87
- { elevation: 0, className: classes.selectModeItem, key: value },
88
- _react2.default.createElement(
89
- _material.Typography,
90
- null,
91
- label
92
- ),
93
- !R.isNil(img) && R.is(String, img) && _react2.default.createElement('img', { src: img, alt: value })
94
- )
80
+ _material.Typography,
81
+ null,
82
+ label
83
+ ),
84
+ !R.isNil(img) && R.is(String, img) && _react2.default.createElement('img', { src: img, alt: value })
95
85
  )
96
- );
97
- }, selectionModes)
98
- )
86
+ )
87
+ );
88
+ }, selectionModes)
99
89
  );
100
90
  };
101
91
 
@@ -110,7 +100,6 @@ ButtonCarousel.propTypes = process.env.NODE_ENV !== "production" ? {
110
100
  })).isRequired,
111
101
  selectionMode: _propTypes2.default.string.isRequired,
112
102
  setSelectionMode: _propTypes2.default.func.isRequired,
113
- classes: _propTypes2.default.object.isRequired,
114
- isNarrow: _propTypes2.default.bool.isRequired
103
+ classes: _propTypes2.default.object.isRequired
115
104
  } : {};
116
105
  module.exports = exports['default'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sis-cc/dotstatsuite-visions",
3
- "version": "12.19.0",
3
+ "version": "12.20.2",
4
4
  "description": "Library of visual components",
5
5
  "author": "OECD",
6
6
  "homepage": "https://visions-qa.siscc.org/#o",
@@ -37,7 +37,6 @@
37
37
  "@mui/styles": "^5.16.5",
38
38
  "@react-hook/size": "^2.1.1",
39
39
  "classnames": "^2.2.6",
40
- "cross-env": "^7.0.3",
41
40
  "date-fns": "^1.30.1",
42
41
  "isemail": "^3.2.0",
43
42
  "numeral": "^2.0.6",