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

Sign up to get free protection for your applications and to get access to all the features.
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
  /**