@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.
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: {