@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.
- package/CHANGELOG.md +117 -0
- package/HiAlertModal/HiAlertModal.js +56 -13
- package/HiColoredLabel/HiColoredLabel.js +1 -1
- package/HiDatePicker/Caption.js +8 -1
- package/HiDatePicker/HiDatePicker.js +9 -3
- package/HiDatePicker/HiDateRangePicker.js +9 -3
- package/HiDatePicker/HiDateRangeSelector.js +54 -4
- package/HiDatePicker/NavBar.js +8 -1
- package/HiDatePicker/Overlays/CustomOverlayLayoutWithoutFooter.js +123 -0
- package/HiDatePicker/Overlays/MonthPickerOverlay.js +4 -4
- package/HiDatePicker/Overlays/YearPickerOverlay.js +2 -2
- package/HiDatePicker/hiLocaleUtils.js +144 -0
- package/HiDatePicker/stylesheet.js +31 -6
- package/HiForm/HiFormControl.js +4 -4
- package/HiForm/HiInput.js +19 -7
- package/HiForm/HiUploadField.js +2 -1
- package/HiNotice/HiKPI.js +3 -3
- package/HiNotice/HiKPINotice.js +12 -9
- package/HiPin/HiPin.js +1 -1
- package/HiSelect/HiSelect.js +6 -5
- package/HiSelect/HiSuggestSelect.js +21 -2
- package/HiSelect/SelectInput.js +5 -1
- package/HiSelectNew/HiSelect.js +163 -59
- package/HiSelectNew/HiSelectInput.js +8 -1
- package/HiSelectableList/HiSelectableList.js +4 -30
- package/HiSelectableList/HiSelectableListItem.js +19 -12
- package/README.md +9 -10
- package/es/HiAlertModal/HiAlertModal.js +55 -13
- package/es/HiColoredLabel/HiColoredLabel.js +1 -1
- package/es/HiDatePicker/Caption.js +7 -1
- package/es/HiDatePicker/HiDatePicker.js +8 -3
- package/es/HiDatePicker/HiDateRangePicker.js +8 -3
- package/es/HiDatePicker/HiDateRangeSelector.js +48 -4
- package/es/HiDatePicker/NavBar.js +7 -1
- package/es/HiDatePicker/Overlays/CustomOverlayLayoutWithoutFooter.js +106 -0
- package/es/HiDatePicker/Overlays/MonthPickerOverlay.js +4 -4
- package/es/HiDatePicker/Overlays/YearPickerOverlay.js +2 -2
- package/es/HiDatePicker/hiLocaleUtils.js +131 -0
- package/es/HiDatePicker/stylesheet.js +30 -6
- package/es/HiForm/HiFormControl.js +4 -4
- package/es/HiForm/HiInput.js +19 -7
- package/es/HiForm/HiUploadField.js +2 -1
- package/es/HiNotice/HiKPI.js +3 -3
- package/es/HiNotice/HiKPINotice.js +10 -9
- package/es/HiPin/HiPin.js +1 -1
- package/es/HiSelect/HiSelect.js +6 -5
- package/es/HiSelect/HiSuggestSelect.js +21 -2
- package/es/HiSelect/SelectInput.js +5 -1
- package/es/HiSelectNew/HiSelect.js +166 -56
- package/es/HiSelectNew/HiSelectInput.js +7 -1
- package/es/HiSelectableList/HiSelectableList.js +5 -25
- package/es/HiSelectableList/HiSelectableListItem.js +23 -16
- package/es/index.js +2 -1
- package/index.es.js +2 -1
- package/index.js +10 -2
- package/package.json +1 -1
- package/umd/hipay-material-ui.development.js +6207 -1359
- package/umd/hipay-material-ui.production.min.js +2 -2
package/es/HiNotice/HiKPI.js
CHANGED
@@ -136,7 +136,7 @@ HiKPI.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
136
136
|
active: PropTypes.bool,
|
137
137
|
|
138
138
|
/**
|
139
|
-
* KPI
|
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
|
-
*
|
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
|
-
|
19
|
+
activeKpi,
|
20
20
|
minify,
|
21
21
|
onClickOnKPI
|
22
22
|
}) => {
|
23
23
|
return React.createElement("div", {
|
24
24
|
className: classes.container
|
25
|
-
}, kpis.map(
|
25
|
+
}, Object.keys(kpis).map(key => {
|
26
|
+
const kpi = kpis[key];
|
26
27
|
return React.createElement(HiKPI, {
|
27
|
-
key:
|
28
|
-
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:
|
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
|
-
|
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.
|
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
|
-
|
72
|
+
activeKpi: null,
|
72
73
|
minify: false
|
73
74
|
};
|
74
75
|
export default withStyles(styles, {
|
package/es/HiPin/HiPin.js
CHANGED
package/es/HiSelect/HiSelect.js
CHANGED
@@ -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
|
-
|
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
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
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'
|
257
|
-
|
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
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
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
|
-
|
478
|
-
|
479
|
-
}
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
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
|
-
|
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
|
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
|
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)));
|