@hipay/hipay-material-ui 2.0.0-beta.61 → 2.0.0-beta.63
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +136 -0
- package/HiDatePicker/HiDateRangeSelector.js +1 -1
- package/HiForm/HiInput.js +11 -3
- package/{HiSelectNew → HiSelect}/HiDynamicSelect.js +3 -3
- package/{HiSelectNew → HiSelect}/HiNestedSelect.js +9 -9
- package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +9 -9
- package/HiSelect/HiSelect.js +499 -608
- package/{HiSelectNew → HiSelect}/HiSelectContent.js +7 -7
- package/HiSelect/index.js +41 -3
- package/HiSelectableList/HiSelectableList.js +59 -3
- package/HiSelectableList/HiSelectableListItem.js +21 -6
- package/README.md +15 -0
- package/es/HiDatePicker/HiDateRangeSelector.js +1 -1
- package/es/HiForm/HiInput.js +11 -3
- package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
- package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
- package/es/HiSelect/HiSelect.js +451 -565
- package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
- package/es/HiSelect/index.js +4 -1
- package/es/HiSelectableList/HiSelectableList.js +56 -4
- package/es/HiSelectableList/HiSelectableListItem.js +18 -6
- package/index.es.js +1 -1
- package/index.js +1 -1
- package/package.json +2 -1
- package/umd/hipay-material-ui.development.js +41761 -39667
- package/umd/hipay-material-ui.production.min.js +2 -2
- package/HiSelect/SelectInput.js +0 -369
- package/HiSelectNew/HiSelect.js +0 -929
- package/HiSelectNew/HiSelectField.js +0 -146
- package/HiSelectNew/index.js +0 -69
- package/es/HiSelect/SelectInput.js +0 -321
- package/es/HiSelectNew/HiSelect.js +0 -852
- package/es/HiSelectNew/HiSelectField.js +0 -111
- package/es/HiSelectNew/index.js +0 -6
- /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
- /package/es/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
- /package/es/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
- /package/es/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
- /package/es/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
@@ -37,7 +37,7 @@ export const styles = theme => ({
|
|
37
37
|
width: '100%'
|
38
38
|
})
|
39
39
|
});
|
40
|
-
export
|
40
|
+
export const filterValue = function (item, searchValue) {
|
41
41
|
return searchValue === '' || foldAccents(item.label.toString().toLowerCase()).search(foldAccents(searchValue.toLowerCase())) !== -1;
|
42
42
|
};
|
43
43
|
/**
|
package/es/HiSelect/index.js
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
export { default } from './HiSelect';
|
2
|
+
export { default as HiNestedSelect } from './HiNestedSelect';
|
2
3
|
export { default as HiSelectField } from './HiSelectField';
|
3
|
-
export { default as
|
4
|
+
export { default as HiSelectInput } from './HiSelectInput';
|
5
|
+
export { default as HiSelectContent } from './HiSelectContent';
|
6
|
+
export { default as HiNestedSelectContent, findFinalItemRecursively, getRecursiveFinalItemIdList } from './HiNestedSelectContent';
|
4
7
|
export { default as HiSuggestSelect } from './HiSuggestSelect';
|
5
8
|
export { default as HiSuggestSelectField } from './HiSuggestSelectField';
|
@@ -5,7 +5,8 @@ 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 } from '../utils/helpers';
|
8
|
+
import { getNextItemSelectable, foldAccents } from '../utils/helpers';
|
9
|
+
import keycode from 'keycode';
|
9
10
|
export const styles = () => ({
|
10
11
|
root: {
|
11
12
|
padding: 0
|
@@ -13,6 +14,8 @@ export const styles = () => ({
|
|
13
14
|
});
|
14
15
|
/**
|
15
16
|
* Construit une liste d'item sélectionnable (avec checkbox)
|
17
|
+
* - la navigation au clavier est gérée par l'event KeyDown
|
18
|
+
* - le premier focus est géré sur le DidMount
|
16
19
|
*/
|
17
20
|
|
18
21
|
class HiSelectableList extends React.PureComponent {
|
@@ -23,6 +26,23 @@ class HiSelectableList extends React.PureComponent {
|
|
23
26
|
this.props.onSelect(event, item);
|
24
27
|
};
|
25
28
|
|
29
|
+
this.handleKeyDown = event => {
|
30
|
+
let nextItem;
|
31
|
+
const key = keycode(event);
|
32
|
+
|
33
|
+
if (key === 'down') {
|
34
|
+
event.preventDefault();
|
35
|
+
nextItem = getNextItemSelectable(document.activeElement, 'down');
|
36
|
+
} else if (key === 'up') {
|
37
|
+
event.preventDefault();
|
38
|
+
nextItem = getNextItemSelectable(document.activeElement, 'up');
|
39
|
+
}
|
40
|
+
|
41
|
+
if (nextItem) {
|
42
|
+
nextItem.focus();
|
43
|
+
}
|
44
|
+
};
|
45
|
+
|
26
46
|
this.buildRecursiveListItem = (item, level = 0) => {
|
27
47
|
const _this$props = this.props,
|
28
48
|
{
|
@@ -56,7 +76,8 @@ class HiSelectableList extends React.PureComponent {
|
|
56
76
|
onKeyDown: onKeyDown,
|
57
77
|
onKeyUp: onKeyUp,
|
58
78
|
selected: selectedItemIdList.includes(item.id) // item props override upper props (disabled, hideCheckbox, icon, level...)
|
59
|
-
|
79
|
+
,
|
80
|
+
item: item
|
60
81
|
}, item)), item.children && item.children.length > 0 && item.children.filter(subItem => !(subItem.displayed === false)).map(subItem => this.buildRecursiveListItem(subItem, level + 1)));
|
61
82
|
};
|
62
83
|
|
@@ -83,6 +104,23 @@ class HiSelectableList extends React.PureComponent {
|
|
83
104
|
};
|
84
105
|
}
|
85
106
|
|
107
|
+
componentDidMount() {
|
108
|
+
if (this.props.overlay && this.props.overlay.getElementsByTagName('li')[0]) {
|
109
|
+
let item = this.props.overlay.getElementsByTagName('li')[0];
|
110
|
+
const value = this.props.value && typeof this.props.value === 'object' ? this.props.value[0] : this.props.value;
|
111
|
+
|
112
|
+
if (value) {
|
113
|
+
if (typeof this.props.value[0] === 'string') {
|
114
|
+
item = this.props.overlay.getElementsByTagName('li')[value];
|
115
|
+
} else if (typeof this.props.value[0] === 'number') {
|
116
|
+
item = this.props.overlay.getElementsByTagName('li')[value - 1];
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
item.focus();
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
86
124
|
render() {
|
87
125
|
const {
|
88
126
|
classes,
|
@@ -95,7 +133,11 @@ class HiSelectableList extends React.PureComponent {
|
|
95
133
|
}
|
96
134
|
|
97
135
|
return React.createElement(List, {
|
98
|
-
className: classes.root
|
136
|
+
className: classes.root,
|
137
|
+
onKeyDown: this.handleKeyDown,
|
138
|
+
innerRef: el => {
|
139
|
+
this.el = el;
|
140
|
+
}
|
99
141
|
}, itemList.filter(item => !(item.displayed === false)) // don't remove if undefined
|
100
142
|
.map(item => this.buildRecursiveListItem(item)));
|
101
143
|
}
|
@@ -170,6 +212,11 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
170
212
|
*/
|
171
213
|
onSelect: PropTypes.func.isRequired,
|
172
214
|
|
215
|
+
/**
|
216
|
+
* Overlay récupéré au niveau de la div précédant le HiSelectInput
|
217
|
+
*/
|
218
|
+
overlay: PropTypes.object,
|
219
|
+
|
173
220
|
/**
|
174
221
|
* Liste des id des éléments sélectionnés
|
175
222
|
*/
|
@@ -183,7 +230,12 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
183
230
|
/**
|
184
231
|
* Liste des éléments à placer en premier, peu import le tri
|
185
232
|
*/
|
186
|
-
sortAppendList: PropTypes.array
|
233
|
+
sortAppendList: PropTypes.array,
|
234
|
+
|
235
|
+
/**
|
236
|
+
* Value(s) du select
|
237
|
+
*/
|
238
|
+
value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array])
|
187
239
|
} : {};
|
188
240
|
export default withStyles(styles, {
|
189
241
|
hiComponent: true,
|
@@ -12,6 +12,7 @@ import HiLoader from '../HiLoader';
|
|
12
12
|
import withStyles from '../styles/withStyles';
|
13
13
|
import { escapeHTML } from '../utils/helpers';
|
14
14
|
import pure from 'recompose/pure';
|
15
|
+
import keycode from 'keycode';
|
15
16
|
const PureListSubheader = pure(ListSubheader);
|
16
17
|
const PureListItem = pure(ListItem);
|
17
18
|
export const styles = theme => ({
|
@@ -160,6 +161,7 @@ export const styles = theme => ({
|
|
160
161
|
});
|
161
162
|
/**
|
162
163
|
* Construit un élément de liste sélectionnable (avec checkbox)
|
164
|
+
* - la sélection/déséclection d'un item est géré avec KeyDown
|
163
165
|
*/
|
164
166
|
|
165
167
|
class HiSelectableListItem extends React.PureComponent {
|
@@ -172,6 +174,18 @@ class HiSelectableListItem extends React.PureComponent {
|
|
172
174
|
});
|
173
175
|
};
|
174
176
|
|
177
|
+
this.handleKeyDown = item => event => {
|
178
|
+
const key = keycode(event);
|
179
|
+
|
180
|
+
if (key === 'space' || key === 'enter') {
|
181
|
+
event.preventDefault();
|
182
|
+
|
183
|
+
if (item) {
|
184
|
+
this.props.onSelect(null, item);
|
185
|
+
}
|
186
|
+
}
|
187
|
+
};
|
188
|
+
|
175
189
|
this.state = {
|
176
190
|
hover: false
|
177
191
|
};
|
@@ -236,8 +250,6 @@ class HiSelectableListItem extends React.PureComponent {
|
|
236
250
|
fallbackImage,
|
237
251
|
hideCheckbox,
|
238
252
|
onSelect,
|
239
|
-
onKeyDown,
|
240
|
-
onKeyUp,
|
241
253
|
indeterminate,
|
242
254
|
indeterminateIcon,
|
243
255
|
icon,
|
@@ -253,7 +265,8 @@ class HiSelectableListItem extends React.PureComponent {
|
|
253
265
|
secondaryLabel,
|
254
266
|
thin,
|
255
267
|
type,
|
256
|
-
color
|
268
|
+
color,
|
269
|
+
item
|
257
270
|
} = this.props; // Return simple loader list item
|
258
271
|
|
259
272
|
if (type === 'loader') {
|
@@ -294,8 +307,7 @@ class HiSelectableListItem extends React.PureComponent {
|
|
294
307
|
onClick: onSelect,
|
295
308
|
onMouseEnter: this.setHover(true),
|
296
309
|
onMouseLeave: this.setHover(false),
|
297
|
-
onKeyDown
|
298
|
-
onKeyUp
|
310
|
+
onKeyDown: this.handleKeyDown(item)
|
299
311
|
}, {
|
300
312
|
style: {
|
301
313
|
paddingLeft: `${paddingLeft + level * 32}px`
|
@@ -305,7 +317,7 @@ class HiSelectableListItem extends React.PureComponent {
|
|
305
317
|
[classes.labelWithoutSecondaryInline]: !secondaryInline || !secondaryLabel && !info
|
306
318
|
})
|
307
319
|
}, !hideCheckbox && !pinned && React.createElement(HiCheckbox, {
|
308
|
-
tabIndex:
|
320
|
+
tabIndex: 0,
|
309
321
|
classes: {
|
310
322
|
root: !secondaryInline ? classes.checkboxWithSecondaryInline : classes.checkbox
|
311
323
|
},
|
package/index.es.js
CHANGED
package/index.js
CHANGED
package/package.json
CHANGED