@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.
- 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)));
|