@hipay/hipay-material-ui 2.0.0-beta.56 → 2.0.0-beta.58

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 (58) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/HiAlertModal/HiAlertModal.js +56 -13
  3. package/HiColoredLabel/HiColoredLabel.js +1 -1
  4. package/HiDatePicker/Caption.js +8 -1
  5. package/HiDatePicker/HiDatePicker.js +9 -3
  6. package/HiDatePicker/HiDateRangePicker.js +9 -3
  7. package/HiDatePicker/HiDateRangeSelector.js +54 -4
  8. package/HiDatePicker/NavBar.js +8 -1
  9. package/HiDatePicker/Overlays/CustomOverlayLayoutWithoutFooter.js +123 -0
  10. package/HiDatePicker/Overlays/MonthPickerOverlay.js +4 -4
  11. package/HiDatePicker/Overlays/YearPickerOverlay.js +2 -2
  12. package/HiDatePicker/hiLocaleUtils.js +144 -0
  13. package/HiDatePicker/stylesheet.js +31 -6
  14. package/HiForm/HiFormControl.js +4 -4
  15. package/HiForm/HiInput.js +19 -7
  16. package/HiForm/HiUploadField.js +2 -1
  17. package/HiNotice/HiKPI.js +3 -3
  18. package/HiNotice/HiKPINotice.js +12 -9
  19. package/HiPin/HiPin.js +1 -1
  20. package/HiSelect/HiSelect.js +6 -5
  21. package/HiSelect/HiSuggestSelect.js +21 -2
  22. package/HiSelect/SelectInput.js +5 -1
  23. package/HiSelectNew/HiSelect.js +163 -59
  24. package/HiSelectNew/HiSelectInput.js +8 -1
  25. package/HiSelectableList/HiSelectableList.js +4 -30
  26. package/HiSelectableList/HiSelectableListItem.js +19 -12
  27. package/README.md +9 -10
  28. package/es/HiAlertModal/HiAlertModal.js +55 -13
  29. package/es/HiColoredLabel/HiColoredLabel.js +1 -1
  30. package/es/HiDatePicker/Caption.js +7 -1
  31. package/es/HiDatePicker/HiDatePicker.js +8 -3
  32. package/es/HiDatePicker/HiDateRangePicker.js +8 -3
  33. package/es/HiDatePicker/HiDateRangeSelector.js +48 -4
  34. package/es/HiDatePicker/NavBar.js +7 -1
  35. package/es/HiDatePicker/Overlays/CustomOverlayLayoutWithoutFooter.js +106 -0
  36. package/es/HiDatePicker/Overlays/MonthPickerOverlay.js +4 -4
  37. package/es/HiDatePicker/Overlays/YearPickerOverlay.js +2 -2
  38. package/es/HiDatePicker/hiLocaleUtils.js +131 -0
  39. package/es/HiDatePicker/stylesheet.js +30 -6
  40. package/es/HiForm/HiFormControl.js +4 -4
  41. package/es/HiForm/HiInput.js +19 -7
  42. package/es/HiForm/HiUploadField.js +2 -1
  43. package/es/HiNotice/HiKPI.js +3 -3
  44. package/es/HiNotice/HiKPINotice.js +10 -9
  45. package/es/HiPin/HiPin.js +1 -1
  46. package/es/HiSelect/HiSelect.js +6 -5
  47. package/es/HiSelect/HiSuggestSelect.js +21 -2
  48. package/es/HiSelect/SelectInput.js +5 -1
  49. package/es/HiSelectNew/HiSelect.js +166 -56
  50. package/es/HiSelectNew/HiSelectInput.js +7 -1
  51. package/es/HiSelectableList/HiSelectableList.js +5 -25
  52. package/es/HiSelectableList/HiSelectableListItem.js +23 -16
  53. package/es/index.js +2 -1
  54. package/index.es.js +2 -1
  55. package/index.js +10 -2
  56. package/package.json +1 -1
  57. package/umd/hipay-material-ui.development.js +6207 -1359
  58. package/umd/hipay-material-ui.production.min.js +2 -2
@@ -136,7 +136,7 @@ HiKPI.propTypes = process.env.NODE_ENV !== "production" ? {
136
136
  active: PropTypes.bool,
137
137
 
138
138
  /**
139
- * KPI id
139
+ * Corps du KPI
140
140
  */
141
141
  body: PropTypes.any.isRequired,
142
142
 
@@ -161,9 +161,9 @@ HiKPI.propTypes = process.env.NODE_ENV !== "production" ? {
161
161
  disable: PropTypes.bool,
162
162
 
163
163
  /**
164
- * Corps du KPI
164
+ * KPI id
165
165
  */
166
- id: PropTypes.number.isRequired,
166
+ id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
167
167
 
168
168
  /**
169
169
  * Corps minifié du KPI si nécessaire
@@ -16,16 +16,17 @@ const styles = () => ({
16
16
  const HiKPINotice = ({
17
17
  classes,
18
18
  kpis,
19
- activeKpis,
19
+ activeKpi,
20
20
  minify,
21
21
  onClickOnKPI
22
22
  }) => {
23
23
  return React.createElement("div", {
24
24
  className: classes.container
25
- }, kpis.map(kpi => {
25
+ }, Object.keys(kpis).map(key => {
26
+ const kpi = kpis[key];
26
27
  return React.createElement(HiKPI, {
27
- key: kpi.id,
28
- id: kpi.id,
28
+ key: key,
29
+ id: key,
29
30
  type: kpi.type,
30
31
  color: kpi.color,
31
32
  title: kpi.title,
@@ -33,8 +34,8 @@ const HiKPINotice = ({
33
34
  bodyMinify: kpi.bodyMinify,
34
35
  subtitle: kpi.subtitle,
35
36
  tooltip: kpi.tooltip,
36
- onClick: onClickOnKPI,
37
- active: !!activeKpis.includes(kpi.id),
37
+ onClick: () => onClickOnKPI(key),
38
+ active: activeKpi === key,
38
39
  minify: minify,
39
40
  disable: kpi.disable
40
41
  });
@@ -45,7 +46,7 @@ HiKPINotice.propTypes = process.env.NODE_ENV !== "production" ? {
45
46
  /**
46
47
  * Extension du style appliqué au composant
47
48
  */
48
- activeKpis: PropTypes.array,
49
+ activeKpi: PropTypes.string,
49
50
 
50
51
  /**
51
52
  * Liste des KPIs
@@ -55,7 +56,7 @@ HiKPINotice.propTypes = process.env.NODE_ENV !== "production" ? {
55
56
  /**
56
57
  * Fonction appelée au clic sur un KPI
57
58
  */
58
- kpis: PropTypes.array.isRequired,
59
+ kpis: PropTypes.object.isRequired,
59
60
 
60
61
  /**
61
62
  * Liste des KPIS actifs
@@ -68,7 +69,7 @@ HiKPINotice.propTypes = process.env.NODE_ENV !== "production" ? {
68
69
  onClickOnKPI: PropTypes.func
69
70
  } : {};
70
71
  HiKPINotice.defaultProps = {
71
- activeKpis: [],
72
+ activeKpi: null,
72
73
  minify: false
73
74
  };
74
75
  export default withStyles(styles, {
package/es/HiPin/HiPin.js CHANGED
@@ -6,7 +6,7 @@ import { withStyles } from '../styles';
6
6
  export const styles = theme => ({
7
7
  root: {
8
8
  display: 'inline-block',
9
- padding: '0 9px',
9
+ padding: '1px 9px',
10
10
  height: 16,
11
11
  lineHeight: '16px',
12
12
  minWidth: 25,
@@ -193,17 +193,13 @@ class HiSelect extends React.PureComponent {
193
193
  nextItem = getNextItemSelectable(document.activeElement, 'down');
194
194
  } else if (event.key === 'ArrowUp') {
195
195
  nextItem = getNextItemSelectable(document.activeElement, 'up');
196
- } else if (event.key === 'Tab') {
196
+ } else if (event.key === 'Tab' || event.key === 'Escape') {
197
197
  /* if (!this.props.staticPosition) {
198
198
  document.body.style.overflow = 'auto';
199
199
  } */
200
200
  this.setState({
201
201
  open: false
202
202
  });
203
- } else if (event.key === 'Escape') {
204
- this.setState({
205
- open: false
206
- });
207
203
  }
208
204
 
209
205
  if (nextItem) {
@@ -216,6 +212,10 @@ class HiSelect extends React.PureComponent {
216
212
  this.focusOnSelectedItem();
217
213
  } else if (event.key === 'Enter' && this.props.onSubmit) {
218
214
  this.props.onSubmit(event);
215
+ } else if (event.key === 'Tab' || event.key === 'Escape') {
216
+ this.setState({
217
+ open: false
218
+ });
219
219
  }
220
220
  };
221
221
 
@@ -682,6 +682,7 @@ class HiSelect extends React.PureComponent {
682
682
  onClick: this.handleClick,
683
683
  onFocus: this.handleFocus,
684
684
  onBlur: this.handleBlur,
685
+ onKeyDown: this.handleKeyDown,
685
686
  onMouseEnter: this.props.onMouseEnter,
686
687
  onMouseLeave: this.props.onMouseLeave,
687
688
  refElement: el => {
@@ -24,7 +24,8 @@ export const styles = theme => ({
24
24
  width: '100% !important',
25
25
  transform: 'none !important',
26
26
  zIndex: '9 !important',
27
- top: '100% !important'
27
+ top: '100% !important',
28
+ textOverflow: 'ellipsis'
28
29
  },
29
30
  paper: {
30
31
  borderRadius: '0px 2px',
@@ -125,10 +126,14 @@ class HiSuggestSelect extends React.PureComponent {
125
126
  }
126
127
  }
127
128
 
128
- handleFocus() {
129
+ handleFocus(event) {
129
130
  this.setState({
130
131
  focused: true
131
132
  });
133
+
134
+ if (this.props.onFocusInput) {
135
+ this.props.onFocusInput(event);
136
+ }
132
137
  }
133
138
 
134
139
  handleBlur(event) {
@@ -140,6 +145,10 @@ class HiSuggestSelect extends React.PureComponent {
140
145
  focused: false
141
146
  });
142
147
  }
148
+
149
+ if (this.props.onBlurInput) {
150
+ this.props.onBlurInput(event);
151
+ }
143
152
  }
144
153
 
145
154
  render() {
@@ -261,6 +270,16 @@ HiSuggestSelect.propTypes = process.env.NODE_ENV !== "production" ? {
261
270
  */
262
271
  loading: PropTypes.bool,
263
272
 
273
+ /**
274
+ * Fonction de callback appelée lorsqu'on blur le champ de recherche
275
+ */
276
+ onBlurInput: PropTypes.func,
277
+
278
+ /**
279
+ * Fonction de callback appelée lorsqu'on focus le champs de recherche
280
+ */
281
+ onFocusInput: PropTypes.func,
282
+
264
283
  /**
265
284
  * Fonction de callback appelée lorsqu'on écrit dans le champ
266
285
  */
@@ -13,7 +13,10 @@ export const styles = theme => ({
13
13
  maxWidth: 500,
14
14
  display: 'flex',
15
15
  justifyContent: 'center',
16
- padding: 8,
16
+ paddingTop: 7,
17
+ paddingBottom: 9,
18
+ paddingRight: 8,
19
+ paddingLeft: 8,
17
20
  cursor: 'pointer'
18
21
  },
19
22
  underline: {
@@ -182,6 +185,7 @@ class SelectInput extends React.PureComponent {
182
185
  className: iconClass,
183
186
  icon: "arrow_drop_down"
184
187
  })) : React.createElement(ButtonBase, {
188
+ component: "div",
185
189
  id: id,
186
190
  classes: {
187
191
  root: rootClass
@@ -6,7 +6,6 @@ import Scrollbars from 'react-custom-scrollbars';
6
6
  import Grow from '@material-ui/core/Grow';
7
7
  import Paper from '@material-ui/core/Paper';
8
8
  import Popper from '@material-ui/core/Popper';
9
- import { findDOMNode } from 'react-dom';
10
9
  import ClickAwayListener from '@material-ui/core/ClickAwayListener';
11
10
  import HiSelectableList from '../HiSelectableList';
12
11
  import HiInput from '../HiForm/HiInput';
@@ -64,7 +63,10 @@ export const styles = theme => ({
64
63
  }, theme.typography.b1, {
65
64
  display: 'inline-flex',
66
65
  width: '100%'
67
- })
66
+ }),
67
+ separator: {
68
+ borderTop: `1px solid ${theme.palette.input.bottomLine}`
69
+ }
68
70
  });
69
71
  /**
70
72
  *
@@ -143,7 +145,14 @@ class HiSelect extends React.PureComponent {
143
145
  }, React.createElement("img", {
144
146
  className: classes.labelImg,
145
147
  src: item.img,
146
- alt: item.label
148
+ alt: item.label,
149
+ onError: e => {
150
+ if (item.fallbackImage) {
151
+ e.target.src = `${item.fallbackImage}`;
152
+ } else {
153
+ e.target.style.display = 'none';
154
+ }
155
+ }
147
156
  }), item.label);
148
157
  } else {
149
158
  inputValue = item.label;
@@ -154,11 +163,12 @@ class HiSelect extends React.PureComponent {
154
163
  };
155
164
 
156
165
  this.focusOnFirstItem = () => {
157
- const overlay = findDOMNode(this.overlay);
158
- setTimeout(() => {
159
- const item = overlay.getElementsByTagName('li')[0];
160
- item.focus();
161
- }, 1);
166
+ if (this.overlay && this.overlay.getElementsByTagName('li')[0]) {
167
+ setTimeout(() => {
168
+ const item = this.overlay.getElementsByTagName('li')[0];
169
+ item.focus();
170
+ }, 1);
171
+ }
162
172
  };
163
173
 
164
174
  this.getInputElement = el => {
@@ -194,15 +204,14 @@ class HiSelect extends React.PureComponent {
194
204
  };
195
205
 
196
206
  this.focusOnSelectedItem = selectedValue => {
197
- const overlay = findDOMNode(this.overlay);
198
207
  setTimeout(() => {
199
208
  // On initialise au premier élément pour être sûr de ne pas se retrouver avec un focus of undefined
200
- let item = overlay.getElementsByTagName('li')[0];
209
+ let item = this.overlay.getElementsByTagName('li')[0];
201
210
 
202
211
  if (selectedValue && typeof selectedValue === 'string') {
203
- item = overlay.getElementsByTagName('li')[selectedValue];
212
+ item = this.overlay.getElementsByTagName('li')[selectedValue];
204
213
  } else if (selectedValue && typeof selectedValue === 'number') {
205
- item = overlay.getElementsByTagName('li')[selectedValue - 1];
214
+ item = this.overlay.getElementsByTagName('li')[selectedValue - 1];
206
215
  }
207
216
 
208
217
  if (item) {
@@ -239,6 +248,17 @@ class HiSelect extends React.PureComponent {
239
248
  });
240
249
  };
241
250
 
251
+ this.handleKeyDownInput = event => {
252
+ const key = keycode(event);
253
+
254
+ if (key === 'down' || key === 'up') {
255
+ this.handleClick();
256
+ } else if (key === 'enter' && this.props.onSubmit) {
257
+ event.preventDefault();
258
+ this.props.onSubmit(event);
259
+ }
260
+ };
261
+
242
262
  this.handleKeyDown = event => {
243
263
  let nextItem;
244
264
  const key = keycode(event);
@@ -253,13 +273,9 @@ class HiSelect extends React.PureComponent {
253
273
  this.setState({
254
274
  open: false
255
275
  });
256
- } else if (key === 'space' || key === 'enter' && !this.props.multiple) {
257
- event.preventDefault();
258
- const item = this.props.options.find(elem => String(elem.id) === event.target.id);
259
- this.handleSelect(null, item);
260
- } else if (key === 'enter' && this.props.multiple) {
276
+ } else if (key === 'space') {
277
+ // Cancel scroll
261
278
  event.preventDefault();
262
- this.handleClose();
263
279
  }
264
280
 
265
281
  if (nextItem) {
@@ -267,6 +283,63 @@ class HiSelect extends React.PureComponent {
267
283
  }
268
284
  };
269
285
 
286
+ this.getItemById = id => {
287
+ let item;
288
+
289
+ if (this.props.hasAll && String(id) === '_all') {
290
+ return {
291
+ id: '_all'
292
+ };
293
+ }
294
+
295
+ for (let i = 0; i < this.props.options.length; i += 1) {
296
+ const elem = this.props.options[i];
297
+
298
+ if (String(elem.id) === String(id)) {
299
+ item = elem;
300
+ break;
301
+ }
302
+
303
+ if (elem.children) {
304
+ for (let j = 0; j < elem.children.length; j += 1) {
305
+ if (String(elem.children[j].id) === String(id)) {
306
+ item = elem.children[j];
307
+ break;
308
+ }
309
+ }
310
+ }
311
+ }
312
+
313
+ return item;
314
+ };
315
+
316
+ this.handleKeyUp = event => {
317
+ const key = keycode(event);
318
+
319
+ if (key === 'esc') {
320
+ this.setState({
321
+ open: false
322
+ });
323
+ } else if (key === 'space' || key === 'enter' && !this.props.multiple) {
324
+ event.preventDefault();
325
+ const item = this.getItemById(event.target.id);
326
+
327
+ if (item) {
328
+ // Select for nested select
329
+ if (this.props.hiSelectableListProps && this.props.hiSelectableListProps.onSelect) {
330
+ this.props.hiSelectableListProps.onSelect(null, item);
331
+ } else {
332
+ this.handleSelect(null, item);
333
+ }
334
+ } else {
335
+ console.warn(`Can not find item #${event.target.id}`);
336
+ }
337
+ } else if (key === 'enter' && this.props.multiple) {
338
+ event.preventDefault();
339
+ this.handleClose();
340
+ }
341
+ };
342
+
270
343
  this.handleKeyDownSearch = event => {
271
344
  const key = keycode(event);
272
345
 
@@ -275,6 +348,10 @@ class HiSelect extends React.PureComponent {
275
348
  } else if (this.overlay && key === 'esc' || key === 'enter') {
276
349
  event.preventDefault();
277
350
  this.handleClose();
351
+ } else if (key === 'tab') {
352
+ this.setState({
353
+ open: false
354
+ });
278
355
  }
279
356
  };
280
357
 
@@ -370,7 +447,8 @@ class HiSelect extends React.PureComponent {
370
447
  open: false,
371
448
  focused: false,
372
449
  searchValue: props.searchValue ? undefined : '',
373
- suggestions: props.options
450
+ suggestions: props.options,
451
+ openDown: true
374
452
  };
375
453
  this.handleClick = this.handleClick.bind(this);
376
454
  this.handleClose = this.handleClose.bind(this);
@@ -466,43 +544,74 @@ class HiSelect extends React.PureComponent {
466
544
  [classes.popperWidth]: !this.props.containerWidth,
467
545
  [classes.popperRightAlign]: this.props.containerWidth && this.props.align === 'right'
468
546
  });
469
- const content = React.createElement(ClickAwayListener, {
470
- onClickAway: this.handleClickAway
471
- }, React.createElement(Grow, {
472
- in: open,
473
- id: "menu-list",
474
- style: {
475
- transformOrigin: '0 0 0'
547
+
548
+ const searchInput = position => {
549
+ if (searchable) {
550
+ return React.createElement(HiInput, _extends({
551
+ value: searchValue,
552
+ autoFocus: true,
553
+ inputRef: this.getInputElement,
554
+ onKeyDown: this.handleKeyDownSearch,
555
+ onChange: this.handleSearch,
556
+ onReset: this.handleSearchReset,
557
+ placeholder: translations.search,
558
+ startAdornment: 'search',
559
+ tabIndex: 0,
560
+ className: classNames({
561
+ [classes.separator]: position === 'top'
562
+ })
563
+ }, hiSearchInputProps));
476
564
  }
477
- }, React.createElement(Paper, {
478
- className: classes.paper
479
- }, !!searchable && React.createElement(HiInput, _extends({
480
- value: searchValue,
481
- autoFocus: true,
482
- inputRef: this.getInputElement,
483
- onKeyDown: this.handleKeyDownSearch,
484
- onChange: this.handleSearch,
485
- onReset: this.handleSearchReset,
486
- placeholder: translations.search,
487
- startAdornment: 'search',
488
- tabIndex: 0
489
- }, hiSearchInputProps)), startAdornment, React.createElement(Scrollbars, _extends({
490
- ref: contentEl => {
491
- this.optionsContent = contentEl;
492
- },
493
- autoHeight: true,
494
- autoHeightMax: 400 // TODO ?
495
-
496
- }, onScrollReachBottom && {
497
- onScroll: this.handleScroll
498
- }), React.createElement(HiSelectableList, _extends({
499
- type: type,
500
- itemList: itemList,
501
- onKeyDown: this.handleKeyDown,
502
- onSelect: this.handleSelect,
503
- selectedItemIdList: selectedItemIdList,
504
- fallbackImage: this.props.fallbackImage
505
- }, hiSelectableListProps))))));
565
+
566
+ return null;
567
+ }; // Replace popper onSearch when popper displayed on top of selectButton
568
+
569
+
570
+ if (this.placement && this.placement.indexOf('top') >= 0 && !!searchable) {
571
+ // +1 for search input
572
+ const nbItems = itemList.length <= 10 ? itemList.length + 1 : 11;
573
+ popperStyle.transform = `translate3d(-1px, -${nbItems * 40 + 2}px, 0px)`;
574
+ } else if (this.placement && this.placement.indexOf('top') < 0 && !!searchable) {
575
+ popperStyle.transform = 'translate3d(-1px, 40px, 0px)';
576
+ }
577
+
578
+ const content = ({
579
+ placement
580
+ }) => {
581
+ if (placement !== this.placement) {
582
+ this.placement = placement;
583
+ }
584
+
585
+ return React.createElement(ClickAwayListener, {
586
+ onClickAway: this.handleClickAway
587
+ }, React.createElement(Grow, {
588
+ in: open,
589
+ id: "menu-list",
590
+ style: {
591
+ transformOrigin: '0 0 0'
592
+ }
593
+ }, React.createElement(Paper, {
594
+ className: classes.paper
595
+ }, (this.placement && this.placement.indexOf('bottom') >= 0 || staticPosition) && searchInput('bottom'), startAdornment, React.createElement(Scrollbars, _extends({
596
+ ref: contentEl => {
597
+ this.optionsContent = contentEl;
598
+ },
599
+ autoHeight: true,
600
+ autoHeightMax: 400 // TODO ?
601
+
602
+ }, onScrollReachBottom && {
603
+ onScroll: this.handleScroll
604
+ }), React.createElement(HiSelectableList, _extends({
605
+ type: type,
606
+ itemList: itemList,
607
+ onKeyDown: this.handleKeyDown,
608
+ onKeyUp: this.handleKeyUp,
609
+ onSelect: this.handleSelect,
610
+ selectedItemIdList: selectedItemIdList,
611
+ fallbackImage: this.props.fallbackImage
612
+ }, hiSelectableListProps))), this.placement && this.placement.indexOf('top') >= 0 && !staticPosition && searchInput('top'))));
613
+ };
614
+
506
615
  return React.createElement("div", {
507
616
  className: classes.root,
508
617
  ref: el => {
@@ -520,6 +629,7 @@ class HiSelect extends React.PureComponent {
520
629
  onClick: this.handleClick,
521
630
  onFocus: this.handleFocus,
522
631
  onBlur: this.handleBlur,
632
+ onKeyDown: this.handleKeyDownInput,
523
633
  onSubmit: onSubmit,
524
634
  onMouseEnter: this.props.onMouseEnter,
525
635
  onMouseLeave: this.props.onMouseLeave,
@@ -532,7 +642,7 @@ class HiSelect extends React.PureComponent {
532
642
  })), open && staticPosition ? React.createElement("div", {
533
643
  style: popperStyle,
534
644
  className: popperClass
535
- }, content) : React.createElement(Popper, {
645
+ }, content({})) : React.createElement(Popper, {
536
646
  anchorEl: this.inputEl,
537
647
  placement: "bottom-start",
538
648
  open: open,
@@ -127,6 +127,7 @@ class HiSelectInput extends React.PureComponent {
127
127
 
128
128
  if (this.props.onKeyDown) {
129
129
  this.props.onKeyDown(event);
130
+ event.preventDefault();
130
131
  } else if (key === 'down' || key === 'up') {
131
132
  this.props.onClick();
132
133
  } else if (key === 'enter' && this.props.onSubmit) {
@@ -146,8 +147,12 @@ class HiSelectInput extends React.PureComponent {
146
147
  };
147
148
 
148
149
  this.handleClick = event => {
150
+ // Do not open select if press on resetIcon
149
151
  if ((!this.resetIcon || !this.resetIcon.contains(event.target)) && this.props.onClick) {
150
- this.props.onClick(event);
152
+ // Do not open select if press enter on button => submit form
153
+ if (event.type !== 'keydown' || keycode(event) !== 'enter') {
154
+ this.props.onClick(event);
155
+ }
151
156
  }
152
157
  };
153
158
 
@@ -225,6 +230,7 @@ class HiSelectInput extends React.PureComponent {
225
230
  }, value || placeholder), React.createElement(ArrowDropDownIcon, {
226
231
  className: iconClass
227
232
  })) : React.createElement(ButtonBase, {
233
+ component: "div",
228
234
  id: id,
229
235
  className: rootClass,
230
236
  onClick: this.handleClick,
@@ -5,8 +5,7 @@ import PropTypes from 'prop-types';
5
5
  import List from '@material-ui/core/List';
6
6
  import withStyles from '../styles/withStyles';
7
7
  import HiSelectableListItem from './HiSelectableListItem';
8
- import { foldAccents, getNextItemSelectable } from '../utils/helpers';
9
- import keycode from 'keycode';
8
+ import { foldAccents } from '../utils/helpers';
10
9
  export const styles = () => ({
11
10
  root: {
12
11
  padding: 0
@@ -24,27 +23,6 @@ class HiSelectableList extends React.PureComponent {
24
23
  this.props.onSelect(event, item);
25
24
  };
26
25
 
27
- this.handleKeyDown = event => {
28
- let nextItem;
29
- const key = keycode(event);
30
-
31
- if (key === 'down') {
32
- event.preventDefault();
33
- nextItem = getNextItemSelectable(document.activeElement, 'down');
34
- } else if (key === 'up') {
35
- event.preventDefault();
36
- nextItem = getNextItemSelectable(document.activeElement, 'up');
37
- } else if (key === 'space' || key === 'enter' && !this.props.multiple) {
38
- event.preventDefault();
39
- const item = this.props.options.find(elem => String(elem.id) === event.target.id);
40
- this.handleSelect(null, item);
41
- }
42
-
43
- if (nextItem) {
44
- nextItem.focus();
45
- }
46
- };
47
-
48
26
  this.buildRecursiveListItem = (item, level = 0) => {
49
27
  const _this$props = this.props,
50
28
  {
@@ -56,9 +34,10 @@ class HiSelectableList extends React.PureComponent {
56
34
  icon,
57
35
  selectedItemIdList,
58
36
  sort,
59
- onKeyDown = this.handleKeyDown
37
+ onKeyDown,
38
+ onKeyUp
60
39
  } = _this$props,
61
- others = _objectWithoutProperties(_this$props, ["checkedIcon", "disabled", "disabledItemIdList", "hideCheckbox", "hoverIcon", "icon", "selectedItemIdList", "sort", "onKeyDown"]);
40
+ others = _objectWithoutProperties(_this$props, ["checkedIcon", "disabled", "disabledItemIdList", "hideCheckbox", "hoverIcon", "icon", "selectedItemIdList", "sort", "onKeyDown", "onKeyUp"]);
62
41
 
63
42
  if (sort && item.children) {
64
43
  item.children.sort(this.compareItem);
@@ -75,6 +54,7 @@ class HiSelectableList extends React.PureComponent {
75
54
  level: level,
76
55
  onSelect: this.handleSelect(item),
77
56
  onKeyDown: onKeyDown,
57
+ onKeyUp: onKeyUp,
78
58
  selected: selectedItemIdList.includes(item.id) // item props override upper props (disabled, hideCheckbox, icon, level...)
79
59
 
80
60
  }, item)), item.children && item.children.length > 0 && item.children.filter(subItem => !(subItem.displayed === false)).map(subItem => this.buildRecursiveListItem(subItem, level + 1)));