@hipay/hipay-material-ui 2.0.0-beta.60 → 2.0.0-beta.62
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 +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: {
|