@hipay/hipay-material-ui 2.0.0-beta.60 → 2.0.0-beta.62
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +126 -0
- package/HiDatePicker/HiDatePicker.js +37 -12
- package/HiDatePicker/HiDateRangePicker.js +71 -57
- package/HiDatePicker/HiDateRangeSelector.js +34 -20
- package/HiDatePicker/stylesheet.js +32 -17
- package/HiSelect/HiSelect.js +489 -607
- package/HiSelect/index.js +41 -3
- package/HiSelectableList/HiSelectableList.js +68 -3
- package/HiSelectableList/HiSelectableListItem.js +22 -10
- package/README.md +15 -0
- package/es/HiDatePicker/HiDatePicker.js +30 -10
- package/es/HiDatePicker/HiDateRangePicker.js +38 -21
- package/es/HiDatePicker/HiDateRangeSelector.js +24 -13
- package/es/HiDatePicker/stylesheet.js +32 -17
- package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
- package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
- package/es/HiSelect/HiSelect.js +441 -564
- package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
- package/es/HiSelect/index.js +4 -1
- package/es/HiSelectableList/HiSelectableList.js +65 -4
- package/es/HiSelectableList/HiSelectableListItem.js +18 -10
- package/es/styles/createPalette.js +1 -1
- package/es/utils/helpers.js +9 -1
- package/index.es.js +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/styles/createPalette.js +1 -1
- package/umd/hipay-material-ui.development.js +7860 -7749
- package/umd/hipay-material-ui.production.min.js +2 -2
- package/utils/helpers.js +9 -1
- 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}/HiDynamicSelect.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiNestedSelect.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
- /package/{HiSelectNew → HiSelect}/HiSelectContent.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,11 +76,16 @@ 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
|
|
63
84
|
this.compareItem = (a, b) => {
|
85
|
+
if (this.props.comparItemFunc) {
|
86
|
+
return this.props.comparItemFunc(a, b);
|
87
|
+
}
|
88
|
+
|
64
89
|
if (a.label === undefined || b.label === undefined) {
|
65
90
|
return 0;
|
66
91
|
}
|
@@ -79,6 +104,23 @@ class HiSelectableList extends React.PureComponent {
|
|
79
104
|
};
|
80
105
|
}
|
81
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 = 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
|
+
|
82
124
|
render() {
|
83
125
|
const {
|
84
126
|
classes,
|
@@ -91,7 +133,11 @@ class HiSelectableList extends React.PureComponent {
|
|
91
133
|
}
|
92
134
|
|
93
135
|
return React.createElement(List, {
|
94
|
-
className: classes.root
|
136
|
+
className: classes.root,
|
137
|
+
onKeyDown: this.handleKeyDown,
|
138
|
+
innerRef: el => {
|
139
|
+
this.el = el;
|
140
|
+
}
|
95
141
|
}, itemList.filter(item => !(item.displayed === false)) // don't remove if undefined
|
96
142
|
.map(item => this.buildRecursiveListItem(item)));
|
97
143
|
}
|
@@ -123,6 +169,11 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
123
169
|
*/
|
124
170
|
classes: PropTypes.object,
|
125
171
|
|
172
|
+
/**
|
173
|
+
* Fonction de comparaison utilisée pour les tris
|
174
|
+
*/
|
175
|
+
comparItemFunc: PropTypes.func,
|
176
|
+
|
126
177
|
/**
|
127
178
|
* Désactive la listes
|
128
179
|
*/
|
@@ -161,6 +212,11 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
161
212
|
*/
|
162
213
|
onSelect: PropTypes.func.isRequired,
|
163
214
|
|
215
|
+
/**
|
216
|
+
* Overlay récupéré au niveau de la div précédant le HiSelectInput
|
217
|
+
*/
|
218
|
+
overlay: PropTypes.object,
|
219
|
+
|
164
220
|
/**
|
165
221
|
* Liste des id des éléments sélectionnés
|
166
222
|
*/
|
@@ -174,7 +230,12 @@ HiSelectableList.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
174
230
|
/**
|
175
231
|
* Liste des éléments à placer en premier, peu import le tri
|
176
232
|
*/
|
177
|
-
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])
|
178
239
|
} : {};
|
179
240
|
export default withStyles(styles, {
|
180
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 => ({
|
@@ -61,9 +62,6 @@ export const styles = theme => ({
|
|
61
62
|
cursor: 'default',
|
62
63
|
opacity: 'inherit'
|
63
64
|
},
|
64
|
-
selected: {
|
65
|
-
backgroundColor: theme.palette.action.selected
|
66
|
-
},
|
67
65
|
pinned: {
|
68
66
|
display: 'inherit',
|
69
67
|
marginRight: 8,
|
@@ -160,6 +158,7 @@ export const styles = theme => ({
|
|
160
158
|
});
|
161
159
|
/**
|
162
160
|
* Construit un élément de liste sélectionnable (avec checkbox)
|
161
|
+
* - la sélection/déséclection d'un item est géré avec KeyDown
|
163
162
|
*/
|
164
163
|
|
165
164
|
class HiSelectableListItem extends React.PureComponent {
|
@@ -172,6 +171,18 @@ class HiSelectableListItem extends React.PureComponent {
|
|
172
171
|
});
|
173
172
|
};
|
174
173
|
|
174
|
+
this.handleKeyDown = item => event => {
|
175
|
+
const key = keycode(event);
|
176
|
+
|
177
|
+
if (key === 'space' || key === 'enter') {
|
178
|
+
event.preventDefault();
|
179
|
+
|
180
|
+
if (item) {
|
181
|
+
this.props.onSelect(null, item);
|
182
|
+
}
|
183
|
+
}
|
184
|
+
};
|
185
|
+
|
175
186
|
this.state = {
|
176
187
|
hover: false
|
177
188
|
};
|
@@ -236,8 +247,6 @@ class HiSelectableListItem extends React.PureComponent {
|
|
236
247
|
fallbackImage,
|
237
248
|
hideCheckbox,
|
238
249
|
onSelect,
|
239
|
-
onKeyDown,
|
240
|
-
onKeyUp,
|
241
250
|
indeterminate,
|
242
251
|
indeterminateIcon,
|
243
252
|
icon,
|
@@ -253,7 +262,8 @@ class HiSelectableListItem extends React.PureComponent {
|
|
253
262
|
secondaryLabel,
|
254
263
|
thin,
|
255
264
|
type,
|
256
|
-
color
|
265
|
+
color,
|
266
|
+
item
|
257
267
|
} = this.props; // Return simple loader list item
|
258
268
|
|
259
269
|
if (type === 'loader') {
|
@@ -282,7 +292,6 @@ class HiSelectableListItem extends React.PureComponent {
|
|
282
292
|
},
|
283
293
|
className: classNames(classes.listItem, classes.listItemHover, {
|
284
294
|
[classes.disabled]: disabled,
|
285
|
-
[classes.selected]: selected,
|
286
295
|
[classes.thin]: thin,
|
287
296
|
[classes.pinned]: pinned,
|
288
297
|
[classes.inline]: secondaryInline,
|
@@ -294,8 +303,7 @@ class HiSelectableListItem extends React.PureComponent {
|
|
294
303
|
onClick: onSelect,
|
295
304
|
onMouseEnter: this.setHover(true),
|
296
305
|
onMouseLeave: this.setHover(false),
|
297
|
-
onKeyDown
|
298
|
-
onKeyUp
|
306
|
+
onKeyDown: this.handleKeyDown(item)
|
299
307
|
}, {
|
300
308
|
style: {
|
301
309
|
paddingLeft: `${paddingLeft + level * 32}px`
|
@@ -305,7 +313,7 @@ class HiSelectableListItem extends React.PureComponent {
|
|
305
313
|
[classes.labelWithoutSecondaryInline]: !secondaryInline || !secondaryLabel && !info
|
306
314
|
})
|
307
315
|
}, !hideCheckbox && !pinned && React.createElement(HiCheckbox, {
|
308
|
-
tabIndex:
|
316
|
+
tabIndex: 0,
|
309
317
|
classes: {
|
310
318
|
root: !secondaryInline ? classes.checkboxWithSecondaryInline : classes.checkbox
|
311
319
|
},
|
@@ -30,7 +30,7 @@ export const light = {
|
|
30
30
|
hint: 'rgba(0, 0, 0, 0.38)'
|
31
31
|
},
|
32
32
|
// The color used to divide different elements.
|
33
|
-
divider: '
|
33
|
+
divider: '#D9D9DB',
|
34
34
|
// The background colors used to style the surfaces.
|
35
35
|
// Consistency between these values is important.
|
36
36
|
background: {
|
package/es/utils/helpers.js
CHANGED
@@ -250,7 +250,7 @@ export function getNextItemSelectable(node, direction) {
|
|
250
250
|
*/
|
251
251
|
|
252
252
|
export function foldAccents(toFold) {
|
253
|
-
return toFold.replace(/([àáâãäå])|([ç])|([èéêë])|([ìíîï])|([ñ])|([òóôõöø])|([ß])|([ùúûü])|([ÿ])|([æ])|([œ])/g, (str, a, c, e, i, n, o, s, u, y, ae, oe) => {
|
253
|
+
return toFold.replace(/([àáâãäå])|([ç])|([èéêë])|([ìíîï])|([ñ])|([òóôõöø])|([ß])|([ùúûü])|([ÿ])|([æ])|([œ])|([+])|([\\])|([\[])|([\]])|([\(])|([\)])|([?])|([*])/g, (str, a, c, e, i, n, o, s, u, y, ae, oe, plus, backSlash, lc, rc, lp, rp, interogation, star) => {
|
254
254
|
if (a) return 'a';
|
255
255
|
if (c) return 'c';
|
256
256
|
if (e) return 'e';
|
@@ -262,6 +262,14 @@ export function foldAccents(toFold) {
|
|
262
262
|
if (y) return 'y';
|
263
263
|
if (ae) return 'ae';
|
264
264
|
if (oe) return 'oe';
|
265
|
+
if (plus) return '\\+';
|
266
|
+
if (backSlash) return '\\\\';
|
267
|
+
if (lc) return '\\[';
|
268
|
+
if (rc) return '\\]';
|
269
|
+
if (lp) return '\\(';
|
270
|
+
if (rp) return '\\)';
|
271
|
+
if (interogation) return '\\?';
|
272
|
+
if (star) return '\\*';
|
265
273
|
return str;
|
266
274
|
});
|
267
275
|
}
|
package/index.es.js
CHANGED
package/index.js
CHANGED
package/package.json
CHANGED
package/styles/createPalette.js
CHANGED
@@ -48,7 +48,7 @@ var light = {
|
|
48
48
|
hint: 'rgba(0, 0, 0, 0.38)'
|
49
49
|
},
|
50
50
|
// The color used to divide different elements.
|
51
|
-
divider: '
|
51
|
+
divider: '#D9D9DB',
|
52
52
|
// The background colors used to style the surfaces.
|
53
53
|
// Consistency between these values is important.
|
54
54
|
background: {
|