@hipay/hipay-material-ui 2.0.0-beta.61 → 2.0.0-beta.62

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 (39) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/HiDatePicker/HiDateRangeSelector.js +1 -1
  3. package/{HiSelectNew → HiSelect}/HiDynamicSelect.js +3 -3
  4. package/{HiSelectNew → HiSelect}/HiNestedSelect.js +9 -9
  5. package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +9 -9
  6. package/HiSelect/HiSelect.js +489 -607
  7. package/{HiSelectNew → HiSelect}/HiSelectContent.js +7 -7
  8. package/HiSelect/index.js +41 -3
  9. package/HiSelectableList/HiSelectableList.js +59 -3
  10. package/HiSelectableList/HiSelectableListItem.js +22 -10
  11. package/README.md +15 -0
  12. package/es/HiDatePicker/HiDateRangeSelector.js +1 -1
  13. package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
  14. package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
  15. package/es/HiSelect/HiSelect.js +441 -564
  16. package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
  17. package/es/HiSelect/index.js +4 -1
  18. package/es/HiSelectableList/HiSelectableList.js +56 -4
  19. package/es/HiSelectableList/HiSelectableListItem.js +18 -10
  20. package/index.es.js +1 -1
  21. package/index.js +1 -1
  22. package/package.json +3 -2
  23. package/umd/hipay-material-ui.development.js +41669 -39595
  24. package/umd/hipay-material-ui.production.min.js +2 -2
  25. package/HiSelect/SelectInput.js +0 -369
  26. package/HiSelectNew/HiSelect.js +0 -929
  27. package/HiSelectNew/HiSelectField.js +0 -146
  28. package/HiSelectNew/index.js +0 -69
  29. package/es/HiSelect/SelectInput.js +0 -321
  30. package/es/HiSelectNew/HiSelect.js +0 -852
  31. package/es/HiSelectNew/HiSelectField.js +0 -111
  32. package/es/HiSelectNew/index.js +0 -6
  33. /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  34. /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  35. /package/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
  36. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  37. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  38. /package/es/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  39. /package/es/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
@@ -179,7 +179,7 @@ function (_React$PureComponent) {
179
179
  return id !== item.id;
180
180
  }), item);
181
181
  } else {
182
- onChange(event, (0, _toConsumableArray2.default)(value).concat([item.id]), item);
182
+ onChange(event, [].concat((0, _toConsumableArray2.default)(value), [item.id]), item);
183
183
  }
184
184
  };
185
185
 
@@ -209,13 +209,13 @@ function (_React$PureComponent) {
209
209
  });
210
210
  } else {
211
211
  _this.setState({
212
- suggestions: (0, _toConsumableArray2.default)(hasAll ? [(0, _extends2.default)({
212
+ suggestions: [].concat((0, _toConsumableArray2.default)(hasAll ? [(0, _extends2.default)({
213
213
  id: '_all',
214
214
  label: translations.all
215
215
  }, iconAll && {
216
216
  type: 'icon',
217
217
  icon: iconAll
218
- })] : []).concat((0, _toConsumableArray2.default)(suggestions))
218
+ })] : []), (0, _toConsumableArray2.default)(suggestions))
219
219
  });
220
220
  }
221
221
  };
@@ -251,22 +251,22 @@ function (_React$PureComponent) {
251
251
  var search = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
252
252
  var loading = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
253
253
  // build item list
254
- var itemList = (0, _toConsumableArray2.default)(loading ? [{
254
+ var itemList = [].concat((0, _toConsumableArray2.default)(loading ? [{
255
255
  id: '_loading',
256
256
  type: 'loader',
257
257
  disabled: true,
258
258
  centered: true,
259
259
  hideCheckbox: true,
260
260
  label: 'loading'
261
- }] : []).concat((0, _toConsumableArray2.default)(search !== '' ? (0, _toConsumableArray2.default)(options.filter(function (item) {
261
+ }] : []), (0, _toConsumableArray2.default)(search !== '' ? (0, _toConsumableArray2.default)(options.filter(function (item) {
262
262
  return item.label && _this.props.filterFunc(item, search);
263
- })) : (0, _toConsumableArray2.default)(_this.props.hasAll ? [(0, _extends2.default)({
263
+ })) : [].concat((0, _toConsumableArray2.default)(_this.props.hasAll ? [(0, _extends2.default)({
264
264
  id: '_all',
265
265
  label: _this.props.translations.all
266
266
  }, _this.props.iconAll && {
267
267
  type: 'icon',
268
268
  icon: _this.props.iconAll
269
- })] : []).concat((0, _toConsumableArray2.default)(options))));
269
+ })] : []), (0, _toConsumableArray2.default)(options))));
270
270
  return {
271
271
  itemList: itemList
272
272
  };
package/HiSelect/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
@@ -11,16 +13,46 @@ Object.defineProperty(exports, "default", {
11
13
  return _HiSelect.default;
12
14
  }
13
15
  });
16
+ Object.defineProperty(exports, "HiNestedSelect", {
17
+ enumerable: true,
18
+ get: function get() {
19
+ return _HiNestedSelect.default;
20
+ }
21
+ });
14
22
  Object.defineProperty(exports, "HiSelectField", {
15
23
  enumerable: true,
16
24
  get: function get() {
17
25
  return _HiSelectField.default;
18
26
  }
19
27
  });
20
- Object.defineProperty(exports, "SelectInput", {
28
+ Object.defineProperty(exports, "HiSelectInput", {
29
+ enumerable: true,
30
+ get: function get() {
31
+ return _HiSelectInput.default;
32
+ }
33
+ });
34
+ Object.defineProperty(exports, "HiSelectContent", {
35
+ enumerable: true,
36
+ get: function get() {
37
+ return _HiSelectContent.default;
38
+ }
39
+ });
40
+ Object.defineProperty(exports, "HiNestedSelectContent", {
41
+ enumerable: true,
42
+ get: function get() {
43
+ return _HiNestedSelectContent.default;
44
+ }
45
+ });
46
+ Object.defineProperty(exports, "findFinalItemRecursively", {
47
+ enumerable: true,
48
+ get: function get() {
49
+ return _HiNestedSelectContent.findFinalItemRecursively;
50
+ }
51
+ });
52
+ Object.defineProperty(exports, "getRecursiveFinalItemIdList", {
21
53
  enumerable: true,
22
54
  get: function get() {
23
- return _SelectInput.default;
55
+ return _HiNestedSelectContent.getRecursiveFinalItemIdList;
24
56
  }
25
57
  });
26
58
  Object.defineProperty(exports, "HiSuggestSelect", {
@@ -38,9 +70,15 @@ Object.defineProperty(exports, "HiSuggestSelectField", {
38
70
 
39
71
  var _HiSelect = _interopRequireDefault(require("./HiSelect"));
40
72
 
73
+ var _HiNestedSelect = _interopRequireDefault(require("./HiNestedSelect"));
74
+
41
75
  var _HiSelectField = _interopRequireDefault(require("./HiSelectField"));
42
76
 
43
- var _SelectInput = _interopRequireDefault(require("./SelectInput"));
77
+ var _HiSelectInput = _interopRequireDefault(require("./HiSelectInput"));
78
+
79
+ var _HiSelectContent = _interopRequireDefault(require("./HiSelectContent"));
80
+
81
+ var _HiNestedSelectContent = _interopRequireWildcard(require("./HiNestedSelectContent"));
44
82
 
45
83
  var _HiSuggestSelect = _interopRequireDefault(require("./HiSuggestSelect"));
46
84
 
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = exports.styles = void 0;
9
9
 
10
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+
10
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
13
 
12
14
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -33,6 +35,8 @@ var _HiSelectableListItem = _interopRequireDefault(require("./HiSelectableListIt
33
35
 
34
36
  var _helpers = require("../utils/helpers");
35
37
 
38
+ var _keycode = _interopRequireDefault(require("keycode"));
39
+
36
40
  var styles = function styles() {
37
41
  return {
38
42
  root: {
@@ -42,6 +46,8 @@ var styles = function styles() {
42
46
  };
43
47
  /**
44
48
  * Construit une liste d'item sélectionnable (avec checkbox)
49
+ * - la navigation au clavier est gérée par l'event KeyDown
50
+ * - le premier focus est géré sur le DidMount
45
51
  */
46
52
 
47
53
 
@@ -71,6 +77,23 @@ function (_React$PureComponent) {
71
77
  };
72
78
  };
73
79
 
80
+ _this.handleKeyDown = function (event) {
81
+ var nextItem;
82
+ var key = (0, _keycode.default)(event);
83
+
84
+ if (key === 'down') {
85
+ event.preventDefault();
86
+ nextItem = (0, _helpers.getNextItemSelectable)(document.activeElement, 'down');
87
+ } else if (key === 'up') {
88
+ event.preventDefault();
89
+ nextItem = (0, _helpers.getNextItemSelectable)(document.activeElement, 'up');
90
+ }
91
+
92
+ if (nextItem) {
93
+ nextItem.focus();
94
+ }
95
+ };
96
+
74
97
  _this.buildRecursiveListItem = function (item) {
75
98
  var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
76
99
  var _this$props = _this.props,
@@ -103,7 +126,8 @@ function (_React$PureComponent) {
103
126
  onKeyDown: onKeyDown,
104
127
  onKeyUp: onKeyUp,
105
128
  selected: selectedItemIdList.includes(item.id) // item props override upper props (disabled, hideCheckbox, icon, level...)
106
-
129
+ ,
130
+ item: item
107
131
  }, item)), item.children && item.children.length > 0 && item.children.filter(function (subItem) {
108
132
  return !(subItem.displayed === false);
109
133
  }).map(function (subItem) {
@@ -137,6 +161,24 @@ function (_React$PureComponent) {
137
161
  }
138
162
 
139
163
  (0, _createClass2.default)(HiSelectableList, [{
164
+ key: "componentDidMount",
165
+ value: function componentDidMount() {
166
+ if (this.props.overlay && this.props.overlay.getElementsByTagName('li')[0]) {
167
+ var item = this.props.overlay.getElementsByTagName('li')[0];
168
+ var value = (0, _typeof2.default)(this.props.value) === 'object' ? this.props.value[0] : this.props.value;
169
+
170
+ if (value) {
171
+ if (typeof this.props.value[0] === 'string') {
172
+ item = this.props.overlay.getElementsByTagName('li')[value];
173
+ } else if (typeof this.props.value[0] === 'number') {
174
+ item = this.props.overlay.getElementsByTagName('li')[value - 1];
175
+ }
176
+ }
177
+
178
+ item.focus();
179
+ }
180
+ }
181
+ }, {
140
182
  key: "render",
141
183
  value: function render() {
142
184
  var _this2 = this;
@@ -151,7 +193,11 @@ function (_React$PureComponent) {
151
193
  }
152
194
 
153
195
  return _react.default.createElement(_List.default, {
154
- className: classes.root
196
+ className: classes.root,
197
+ onKeyDown: this.handleKeyDown,
198
+ innerRef: function innerRef(el) {
199
+ _this2.el = el;
200
+ }
155
201
  }, itemList.filter(function (item) {
156
202
  return !(item.displayed === false);
157
203
  }) // don't remove if undefined
@@ -231,6 +277,11 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
231
277
  */
232
278
  onSelect: _propTypes.default.func.isRequired,
233
279
 
280
+ /**
281
+ * Overlay récupéré au niveau de la div précédant le HiSelectInput
282
+ */
283
+ overlay: _propTypes.default.object,
284
+
234
285
  /**
235
286
  * Liste des id des éléments sélectionnés
236
287
  */
@@ -244,7 +295,12 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
244
295
  /**
245
296
  * Liste des éléments à placer en premier, peu import le tri
246
297
  */
247
- sortAppendList: _propTypes.default.array
298
+ sortAppendList: _propTypes.default.array,
299
+
300
+ /**
301
+ * Value(s) du select
302
+ */
303
+ value: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string, _propTypes.default.array])
248
304
  } : {};
249
305
 
250
306
  var _default = (0, _withStyles.default)(styles, {
@@ -47,6 +47,8 @@ var _helpers = require("../utils/helpers");
47
47
 
48
48
  var _pure = _interopRequireDefault(require("recompose/pure"));
49
49
 
50
+ var _keycode = _interopRequireDefault(require("keycode"));
51
+
50
52
  var PureListSubheader = (0, _pure.default)(_ListSubheader.default);
51
53
  var PureListItem = (0, _pure.default)(_ListItem.default);
52
54
 
@@ -98,9 +100,6 @@ var styles = function styles(theme) {
98
100
  cursor: 'default',
99
101
  opacity: 'inherit'
100
102
  },
101
- selected: {
102
- backgroundColor: theme.palette.action.selected
103
- },
104
103
  pinned: {
105
104
  display: 'inherit',
106
105
  marginRight: 8,
@@ -198,6 +197,7 @@ var styles = function styles(theme) {
198
197
  };
199
198
  /**
200
199
  * Construit un élément de liste sélectionnable (avec checkbox)
200
+ * - la sélection/déséclection d'un item est géré avec KeyDown
201
201
  */
202
202
 
203
203
 
@@ -222,6 +222,20 @@ function (_React$PureComponent) {
222
222
  };
223
223
  };
224
224
 
225
+ _this.handleKeyDown = function (item) {
226
+ return function (event) {
227
+ var key = (0, _keycode.default)(event);
228
+
229
+ if (key === 'space' || key === 'enter') {
230
+ event.preventDefault();
231
+
232
+ if (item) {
233
+ _this.props.onSelect(null, item);
234
+ }
235
+ }
236
+ };
237
+ };
238
+
225
239
  _this.state = {
226
240
  hover: false
227
241
  };
@@ -292,8 +306,6 @@ function (_React$PureComponent) {
292
306
  fallbackImage = _this$props2.fallbackImage,
293
307
  hideCheckbox = _this$props2.hideCheckbox,
294
308
  onSelect = _this$props2.onSelect,
295
- onKeyDown = _this$props2.onKeyDown,
296
- onKeyUp = _this$props2.onKeyUp,
297
309
  indeterminate = _this$props2.indeterminate,
298
310
  indeterminateIcon = _this$props2.indeterminateIcon,
299
311
  icon = _this$props2.icon,
@@ -309,7 +321,8 @@ function (_React$PureComponent) {
309
321
  secondaryLabel = _this$props2.secondaryLabel,
310
322
  thin = _this$props2.thin,
311
323
  type = _this$props2.type,
312
- color = _this$props2.color; // Return simple loader list item
324
+ color = _this$props2.color,
325
+ item = _this$props2.item; // Return simple loader list item
313
326
 
314
327
  if (type === 'loader') {
315
328
  return _react.default.createElement(_ListItem.default, null, _react.default.createElement(_HiLoader.default, {
@@ -335,14 +348,13 @@ function (_React$PureComponent) {
335
348
  classes: {
336
349
  root: classes.root
337
350
  },
338
- className: (0, _classnames.default)(classes.listItem, classes.listItemHover, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.selected, selected), (0, _defineProperty2.default)(_classNames, classes.thin, thin), (0, _defineProperty2.default)(_classNames, classes.pinned, pinned), (0, _defineProperty2.default)(_classNames, classes.inline, secondaryInline), (0, _defineProperty2.default)(_classNames, classes.listItemWithoutSecondaryInline, !secondaryInline), (0, _defineProperty2.default)(_classNames, classes.listItemInlineWithInfoWithoutSecondary, secondaryInline && info && !secondaryLabel), _classNames)),
351
+ className: (0, _classnames.default)(classes.listItem, classes.listItemHover, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.thin, thin), (0, _defineProperty2.default)(_classNames, classes.pinned, pinned), (0, _defineProperty2.default)(_classNames, classes.inline, secondaryInline), (0, _defineProperty2.default)(_classNames, classes.listItemWithoutSecondaryInline, !secondaryInline), (0, _defineProperty2.default)(_classNames, classes.listItemInlineWithInfoWithoutSecondary, secondaryInline && info && !secondaryLabel), _classNames)),
339
352
  disabled: disabled
340
353
  }, disabled || {
341
354
  onClick: onSelect,
342
355
  onMouseEnter: this.setHover(true),
343
356
  onMouseLeave: this.setHover(false),
344
- onKeyDown: onKeyDown,
345
- onKeyUp: onKeyUp
357
+ onKeyDown: this.handleKeyDown(item)
346
358
  }, {
347
359
  style: {
348
360
  paddingLeft: "".concat(paddingLeft + level * 32, "px")
@@ -350,7 +362,7 @@ function (_React$PureComponent) {
350
362
  }), _react.default.createElement("div", {
351
363
  className: (0, _classnames.default)(classes.labelContent, (0, _defineProperty2.default)({}, classes.labelWithoutSecondaryInline, !secondaryInline || !secondaryLabel && !info))
352
364
  }, !hideCheckbox && !pinned && _react.default.createElement(_HiCheckbox.default, {
353
- tabIndex: onKeyDown ? '-1' : 0,
365
+ tabIndex: 0,
354
366
  classes: {
355
367
  root: !secondaryInline ? classes.checkboxWithSecondaryInline : classes.checkbox
356
368
  },
package/README.md CHANGED
@@ -78,6 +78,18 @@ https://reactjs.org/docs/reconciliation.html
78
78
  - Attention aux refs et aux mutations
79
79
  ex: ne pas passer une arrow fonction directement dans les props d'un composant. Même pour y inclure un index ou une valeur contextuelle !
80
80
 
81
+ #### Gestion des événements clavier
82
+
83
+ - **Evénement capturé** : on part sur le _KeyDown_, c'est le seul à capturer toutes les touches du clavier ([source](https://www.w3schools.com/jsref/event_onkeypress.asp))
84
+
85
+ - **Capturing** : il s'agit de la première phase par laquelle passe un événement lors de sa capture, durant celle-ci, il descend dans l’arborescence HTML en partant de l'élément racine (en React : Parent => Enfant, on peut le capturer avec _onKeyDownCapture_)
86
+
87
+ - **Bubbling** : c'est la deuxième phase par laquelle passe un événement et celle capturée par défaut lorsque l'on fait un _onKeyDown_. A ce moment, l'événement remonte vers l'élément HTML racine (en React : Enfant => Parent)
88
+
89
+ - **PreventDefault** : on l'utilisera à chaque fois qu'il faudra éviter un comportement par défaut du navigateur.
90
+
91
+ - **StopPropagation** : il permet de stopper la capture dès qu'il est appelé. Couplé au Capturing on peut, par exemple, éviter qu'un événement soit capturé dans un composant enfant.
92
+
81
93
  ## Contribuer
82
94
 
83
95
  #### A savoir
@@ -300,3 +312,6 @@ au lieu de
300
312
  Attention aux index.js.
301
313
  La bonne syntaxe est :
302
314
  export { default as MyComponente } from './MyComponente';
315
+
316
+
317
+ [source]: https://www.w3schools.com/jsref/event_onkeypress.asp
@@ -6,7 +6,7 @@ import moment from 'moment-timezone';
6
6
  import { findDOMNode } from 'react-dom';
7
7
  import Grid from '@material-ui/core/Grid';
8
8
  import withStyles from '../styles/withStyles';
9
- import HiSelectField from '../HiSelectNew/HiSelectField';
9
+ import HiSelectField from '../HiSelect/HiSelectField';
10
10
  import HiDateRangePicker from './HiDateRangePicker';
11
11
  import HiFormControl from '../HiForm/HiFormControl';
12
12
  export function findSeparator(format) {
@@ -46,7 +46,7 @@ function findFinalItemRecursively(itemList, searchId) {
46
46
  return foundItem;
47
47
  }
48
48
 
49
- export var filterValue = function (item, searchValue) {
49
+ export const filterValue = function (item, searchValue) {
50
50
  return searchValue === '' || foldAccents(item.label.toString().toLowerCase()).search(foldAccents(searchValue.toLowerCase())) !== -1;
51
51
  };
52
52
  /**
@@ -42,7 +42,7 @@ export function findFinalItemRecursively(itemList, searchId) {
42
42
  });
43
43
  return foundItem;
44
44
  }
45
- export var filterValue = function (item, searchValue) {
45
+ export const filterValue = function (item, searchValue) {
46
46
  return searchValue === '' || foldAccents(item.label.toString().toLowerCase()).search(foldAccents(searchValue.toLowerCase())) !== -1;
47
47
  };
48
48
  /**