@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.
Files changed (49) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/HiDatePicker/HiDatePicker.js +37 -12
  3. package/HiDatePicker/HiDateRangePicker.js +71 -57
  4. package/HiDatePicker/HiDateRangeSelector.js +34 -20
  5. package/HiDatePicker/stylesheet.js +32 -17
  6. package/HiSelect/HiSelect.js +489 -607
  7. package/HiSelect/index.js +41 -3
  8. package/HiSelectableList/HiSelectableList.js +68 -3
  9. package/HiSelectableList/HiSelectableListItem.js +22 -10
  10. package/README.md +15 -0
  11. package/es/HiDatePicker/HiDatePicker.js +30 -10
  12. package/es/HiDatePicker/HiDateRangePicker.js +38 -21
  13. package/es/HiDatePicker/HiDateRangeSelector.js +24 -13
  14. package/es/HiDatePicker/stylesheet.js +32 -17
  15. package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
  16. package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
  17. package/es/HiSelect/HiSelect.js +441 -564
  18. package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
  19. package/es/HiSelect/index.js +4 -1
  20. package/es/HiSelectableList/HiSelectableList.js +65 -4
  21. package/es/HiSelectableList/HiSelectableListItem.js +18 -10
  22. package/es/styles/createPalette.js +1 -1
  23. package/es/utils/helpers.js +9 -1
  24. package/index.es.js +1 -1
  25. package/index.js +1 -1
  26. package/package.json +1 -1
  27. package/styles/createPalette.js +1 -1
  28. package/umd/hipay-material-ui.development.js +7860 -7749
  29. package/umd/hipay-material-ui.production.min.js +2 -2
  30. package/utils/helpers.js +9 -1
  31. package/HiSelect/SelectInput.js +0 -369
  32. package/HiSelectNew/HiSelect.js +0 -929
  33. package/HiSelectNew/HiSelectField.js +0 -146
  34. package/HiSelectNew/index.js +0 -69
  35. package/es/HiSelect/SelectInput.js +0 -321
  36. package/es/HiSelectNew/HiSelect.js +0 -852
  37. package/es/HiSelectNew/HiSelectField.js +0 -111
  38. package/es/HiSelectNew/index.js +0 -6
  39. /package/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  40. /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  41. /package/{HiSelectNew → HiSelect}/HiNestedSelect.js +0 -0
  42. /package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +0 -0
  43. /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  44. /package/{HiSelectNew → HiSelect}/HiSelectContent.js +0 -0
  45. /package/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
  46. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  47. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  48. /package/es/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  49. /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 var filterValue = function (item, searchValue) {
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
  /**
@@ -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 SelectInput } from './SelectInput';
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: onKeyDown ? '-1' : 0,
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: 'rgba(0, 0, 0, 0.12)',
33
+ divider: '#D9D9DB',
34
34
  // The background colors used to style the surfaces.
35
35
  // Consistency between these values is important.
36
36
  background: {
@@ -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
@@ -1,4 +1,4 @@
1
- /** @license HiPay-Material-UI v2.0.0-beta.60
1
+ /** @license HiPay-Material-UI v2.0.0-beta.62
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license HiPay-Material-UI v2.0.0-beta.60
1
+ /** @license HiPay-Material-UI v2.0.0-beta.62
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@hipay/hipay-material-ui",
3
3
  "private": false,
4
4
  "author": "HiPay PSYCHE Team",
5
- "version": "2.0.0-beta.60",
5
+ "version": "2.0.0-beta.62",
6
6
  "description": "React components that implement Google's Material Design.",
7
7
  "keywords": [
8
8
  "react",
@@ -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: 'rgba(0, 0, 0, 0.12)',
51
+ divider: '#D9D9DB',
52
52
  // The background colors used to style the surfaces.
53
53
  // Consistency between these values is important.
54
54
  background: {