@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.
Files changed (41) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/HiDatePicker/HiDateRangeSelector.js +1 -1
  3. package/HiForm/HiInput.js +11 -3
  4. package/{HiSelectNew → HiSelect}/HiDynamicSelect.js +3 -3
  5. package/{HiSelectNew → HiSelect}/HiNestedSelect.js +9 -9
  6. package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +9 -9
  7. package/HiSelect/HiSelect.js +499 -608
  8. package/{HiSelectNew → HiSelect}/HiSelectContent.js +7 -7
  9. package/HiSelect/index.js +41 -3
  10. package/HiSelectableList/HiSelectableList.js +59 -3
  11. package/HiSelectableList/HiSelectableListItem.js +21 -6
  12. package/README.md +15 -0
  13. package/es/HiDatePicker/HiDateRangeSelector.js +1 -1
  14. package/es/HiForm/HiInput.js +11 -3
  15. package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
  16. package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
  17. package/es/HiSelect/HiSelect.js +451 -565
  18. package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
  19. package/es/HiSelect/index.js +4 -1
  20. package/es/HiSelectableList/HiSelectableList.js +56 -4
  21. package/es/HiSelectableList/HiSelectableListItem.js +18 -6
  22. package/index.es.js +1 -1
  23. package/index.js +1 -1
  24. package/package.json +2 -1
  25. package/umd/hipay-material-ui.development.js +41761 -39667
  26. package/umd/hipay-material-ui.production.min.js +2 -2
  27. package/HiSelect/SelectInput.js +0 -369
  28. package/HiSelectNew/HiSelect.js +0 -929
  29. package/HiSelectNew/HiSelectField.js +0 -146
  30. package/HiSelectNew/index.js +0 -69
  31. package/es/HiSelect/SelectInput.js +0 -321
  32. package/es/HiSelectNew/HiSelect.js +0 -852
  33. package/es/HiSelectNew/HiSelectField.js +0 -111
  34. package/es/HiSelectNew/index.js +0 -6
  35. /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  36. /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  37. /package/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
  38. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  39. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  40. /package/es/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  41. /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,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: onKeyDown ? '-1' : 0,
320
+ tabIndex: 0,
309
321
  classes: {
310
322
  root: !secondaryInline ? classes.checkboxWithSecondaryInline : classes.checkbox
311
323
  },
package/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license HiPay-Material-UI v2.0.0-beta.61
1
+ /** @license HiPay-Material-UI v2.0.0-beta.63
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.61
1
+ /** @license HiPay-Material-UI v2.0.0-beta.63
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
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@hipay/hipay-material-ui",
3
+ "private": false,
3
4
  "author": "HiPay PSYCHE Team",
4
- "version": "2.0.0-beta.61",
5
+ "version": "2.0.0-beta.63",
5
6
  "description": "React components that implement Google's Material Design.",
6
7
  "keywords": [
7
8
  "react",