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

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