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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/HiDatePicker/HiDateRangeSelector.js +1 -1
  3. package/HiForm/HiInput.js +11 -3
  4. package/{HiSelectNew → HiSelect}/HiDynamicSelect.js +3 -3
  5. package/{HiSelectNew → HiSelect}/HiNestedSelect.js +9 -9
  6. package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +9 -9
  7. package/HiSelect/HiSelect.js +499 -608
  8. package/{HiSelectNew → HiSelect}/HiSelectContent.js +7 -7
  9. package/HiSelect/index.js +41 -3
  10. package/HiSelectableList/HiSelectableList.js +59 -3
  11. package/HiSelectableList/HiSelectableListItem.js +21 -6
  12. package/README.md +15 -0
  13. package/es/HiDatePicker/HiDateRangeSelector.js +1 -1
  14. package/es/HiForm/HiInput.js +11 -3
  15. package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
  16. package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
  17. package/es/HiSelect/HiSelect.js +451 -565
  18. package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
  19. package/es/HiSelect/index.js +4 -1
  20. package/es/HiSelectableList/HiSelectableList.js +56 -4
  21. package/es/HiSelectableList/HiSelectableListItem.js +18 -6
  22. package/index.es.js +1 -1
  23. package/index.js +1 -1
  24. package/package.json +2 -1
  25. package/umd/hipay-material-ui.development.js +41761 -39667
  26. package/umd/hipay-material-ui.production.min.js +2 -2
  27. package/HiSelect/SelectInput.js +0 -369
  28. package/HiSelectNew/HiSelect.js +0 -929
  29. package/HiSelectNew/HiSelectField.js +0 -146
  30. package/HiSelectNew/index.js +0 -69
  31. package/es/HiSelect/SelectInput.js +0 -321
  32. package/es/HiSelectNew/HiSelect.js +0 -852
  33. package/es/HiSelectNew/HiSelectField.js +0 -111
  34. package/es/HiSelectNew/index.js +0 -6
  35. /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  36. /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  37. /package/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
  38. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  39. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  40. /package/es/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  41. /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 = this.props.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
 
@@ -198,6 +200,7 @@ var styles = function styles(theme) {
198
200
  };
199
201
  /**
200
202
  * Construit un élément de liste sélectionnable (avec checkbox)
203
+ * - la sélection/déséclection d'un item est géré avec KeyDown
201
204
  */
202
205
 
203
206
 
@@ -222,6 +225,20 @@ function (_React$PureComponent) {
222
225
  };
223
226
  };
224
227
 
228
+ _this.handleKeyDown = function (item) {
229
+ return function (event) {
230
+ var key = (0, _keycode.default)(event);
231
+
232
+ if (key === 'space' || key === 'enter') {
233
+ event.preventDefault();
234
+
235
+ if (item) {
236
+ _this.props.onSelect(null, item);
237
+ }
238
+ }
239
+ };
240
+ };
241
+
225
242
  _this.state = {
226
243
  hover: false
227
244
  };
@@ -292,8 +309,6 @@ function (_React$PureComponent) {
292
309
  fallbackImage = _this$props2.fallbackImage,
293
310
  hideCheckbox = _this$props2.hideCheckbox,
294
311
  onSelect = _this$props2.onSelect,
295
- onKeyDown = _this$props2.onKeyDown,
296
- onKeyUp = _this$props2.onKeyUp,
297
312
  indeterminate = _this$props2.indeterminate,
298
313
  indeterminateIcon = _this$props2.indeterminateIcon,
299
314
  icon = _this$props2.icon,
@@ -309,7 +324,8 @@ function (_React$PureComponent) {
309
324
  secondaryLabel = _this$props2.secondaryLabel,
310
325
  thin = _this$props2.thin,
311
326
  type = _this$props2.type,
312
- color = _this$props2.color; // Return simple loader list item
327
+ color = _this$props2.color,
328
+ item = _this$props2.item; // Return simple loader list item
313
329
 
314
330
  if (type === 'loader') {
315
331
  return _react.default.createElement(_ListItem.default, null, _react.default.createElement(_HiLoader.default, {
@@ -341,8 +357,7 @@ function (_React$PureComponent) {
341
357
  onClick: onSelect,
342
358
  onMouseEnter: this.setHover(true),
343
359
  onMouseLeave: this.setHover(false),
344
- onKeyDown: onKeyDown,
345
- onKeyUp: onKeyUp
360
+ onKeyDown: this.handleKeyDown(item)
346
361
  }, {
347
362
  style: {
348
363
  paddingLeft: "".concat(paddingLeft + level * 32, "px")
@@ -350,7 +365,7 @@ function (_React$PureComponent) {
350
365
  }), _react.default.createElement("div", {
351
366
  className: (0, _classnames.default)(classes.labelContent, (0, _defineProperty2.default)({}, classes.labelWithoutSecondaryInline, !secondaryInline || !secondaryLabel && !info))
352
367
  }, !hideCheckbox && !pinned && _react.default.createElement(_HiCheckbox.default, {
353
- tabIndex: onKeyDown ? '-1' : 0,
368
+ tabIndex: 0,
354
369
  classes: {
355
370
  root: !secondaryInline ? classes.checkboxWithSecondaryInline : classes.checkbox
356
371
  },
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) {
@@ -141,9 +141,9 @@ class HiInput extends React.PureComponent {
141
141
  }
142
142
  };
143
143
 
144
- this.handleClick = () => {
144
+ this.handleClick = event => {
145
145
  if (this.props.onClick) {
146
- this.props.onClick();
146
+ this.props.onClick(event);
147
147
  }
148
148
  };
149
149
 
@@ -291,6 +291,7 @@ class HiInput extends React.PureComponent {
291
291
  rows,
292
292
  inputClassName,
293
293
  onReset,
294
+ spellcheck,
294
295
  startAdornmentColor
295
296
  } = this.props;
296
297
  const {
@@ -385,6 +386,7 @@ class HiInput extends React.PureComponent {
385
386
  }
386
387
  }, eraseIcon, endAdornment),
387
388
  inputProps: {
389
+ spellCheck: spellcheck ? "true" : "false",
388
390
  className: classNames(inputClassName, classes.inputPropsClassName, {
389
391
  [classes.inputText]: !multiline,
390
392
  [classes.inputTextArea]: multiline
@@ -405,7 +407,8 @@ HiInput.defaultProps = {
405
407
  type: 'text',
406
408
  multiline: false,
407
409
  error: false,
408
- onlyNumbers: false
410
+ onlyNumbers: false,
411
+ spellcheck: false
409
412
  };
410
413
  HiInput.propTypes = process.env.NODE_ENV !== "production" ? {
411
414
  /**
@@ -552,6 +555,11 @@ HiInput.propTypes = process.env.NODE_ENV !== "production" ? {
552
555
  */
553
556
  rows: PropTypes.number,
554
557
 
558
+ /**
559
+ * Active browser default spellcheck (red underline)
560
+ */
561
+ spellcheck: PropTypes.bool,
562
+
555
563
  /**
556
564
  * Icône à afficher à gauche de l'input
557
565
  */
@@ -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
  /**