@hipay/hipay-material-ui 2.0.0-beta.58 → 2.0.0-beta.60

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 (48) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/HiCell/CellNumeric.js +1 -1
  3. package/HiColoredLabel/HiColoredLabel.js +16 -4
  4. package/HiDatePicker/HiDatePicker.js +11 -2
  5. package/HiDatePicker/HiDateRangePicker.js +49 -8
  6. package/HiDatePicker/HiDateRangeSelector.js +39 -30
  7. package/HiDatePicker/Overlays/YearPickerOverlay.js +8 -3
  8. package/HiForm/HiFormControl.js +26 -11
  9. package/HiForm/HiFormLabel.js +3 -1
  10. package/HiForm/HiInput.js +33 -1
  11. package/HiForm/HiUpload.js +290 -45
  12. package/HiForm/HiUploadField.js +19 -51
  13. package/HiForm/HiUploadInput.js +18 -7
  14. package/HiSelect/HiSuggestSelect.js +3 -3
  15. package/HiSelectNew/HiDynamicSelect.js +3 -3
  16. package/HiSelectNew/HiNestedSelect.js +29 -15
  17. package/HiSelectNew/HiNestedSelectContent.js +29 -15
  18. package/HiSelectNew/HiSelect.js +23 -12
  19. package/HiSelectNew/HiSelectContent.js +23 -11
  20. package/HiSelectNew/HiSelectInput.js +4 -4
  21. package/HiSelectableList/HiSelectableListItem.js +8 -10
  22. package/README.md +1 -1
  23. package/es/HiCell/CellNumeric.js +1 -1
  24. package/es/HiColoredLabel/HiColoredLabel.js +21 -4
  25. package/es/HiDatePicker/HiDatePicker.js +11 -2
  26. package/es/HiDatePicker/HiDateRangePicker.js +42 -8
  27. package/es/HiDatePicker/HiDateRangeSelector.js +38 -27
  28. package/es/HiDatePicker/Overlays/YearPickerOverlay.js +8 -3
  29. package/es/HiForm/HiFormControl.js +27 -11
  30. package/es/HiForm/HiFormLabel.js +3 -1
  31. package/es/HiForm/HiInput.js +32 -1
  32. package/es/HiForm/HiUpload.js +276 -35
  33. package/es/HiForm/HiUploadField.js +19 -43
  34. package/es/HiForm/HiUploadInput.js +16 -7
  35. package/es/HiSelect/HiSuggestSelect.js +3 -3
  36. package/es/HiSelectNew/HiNestedSelect.js +17 -7
  37. package/es/HiSelectNew/HiNestedSelectContent.js +16 -6
  38. package/es/HiSelectNew/HiSelect.js +15 -3
  39. package/es/HiSelectNew/HiSelectContent.js +11 -2
  40. package/es/HiSelectNew/HiSelectInput.js +4 -3
  41. package/es/HiSelectableList/HiSelectableListItem.js +8 -10
  42. package/es/utils/helpers.js +6 -5
  43. package/index.es.js +1 -1
  44. package/index.js +1 -1
  45. package/package.json +3 -2
  46. package/umd/hipay-material-ui.development.js +4632 -1923
  47. package/umd/hipay-material-ui.production.min.js +2 -2
  48. package/utils/helpers.js +6 -4
@@ -59,13 +59,11 @@ var styles = function styles(theme) {
59
59
  marginTop: 2
60
60
  },
61
61
  iconButton: {
62
- position: 'absolute',
63
- right: 5,
64
62
  cursor: 'pointer',
65
63
  zIndex: 1,
66
- top: '-5px',
67
- height: 24,
68
- width: 24,
64
+ height: 20,
65
+ width: 20,
66
+ marginLeft: 3,
69
67
  '&$iconButtonError': {
70
68
  color: theme.palette.negative.main
71
69
  },
@@ -74,11 +72,18 @@ var styles = function styles(theme) {
74
72
  },
75
73
  '&$iconButtonInfoActive': {
76
74
  color: theme.palette.primary.main
75
+ },
76
+ '&$iconFullWidth': {
77
+ position: 'absolute',
78
+ right: 5,
79
+ marginLeft: 0,
80
+ bottom: 0
77
81
  }
78
82
  },
79
83
  iconButtonError: {},
80
84
  iconButtonInfo: {},
81
85
  iconButtonInfoActive: {},
86
+ iconFullWidth: {},
82
87
  errorDiv: (0, _extends2.default)({}, theme.typography.b3, {
83
88
  backgroundColor: theme.palette.negative.main,
84
89
  color: '#FFFFFF',
@@ -97,8 +102,15 @@ var styles = function styles(theme) {
97
102
  borderTop: '4px solid #000',
98
103
  position: 'absolute',
99
104
  bottom: -4,
100
- right: 13
105
+ '&$arrowNotFullWidth': {
106
+ left: 8
107
+ },
108
+ '&$arrowFullWidth': {
109
+ right: 13
110
+ }
101
111
  },
112
+ arrowNotFullWidth: {},
113
+ arrowFullWidth: {},
102
114
  errorDivArrowDown: {
103
115
  borderTopColor: theme.palette.negative.main
104
116
  },
@@ -118,7 +130,8 @@ var styles = function styles(theme) {
118
130
  borderTopColor: '#ffffff'
119
131
  },
120
132
  icon: {
121
- position: 'absolute'
133
+ position: 'absolute',
134
+ fontSize: 19
122
135
  }
123
136
  };
124
137
  };
@@ -197,6 +210,8 @@ function (_React$PureComponent) {
197
210
  (0, _createClass2.default)(HiFormControl, [{
198
211
  key: "render",
199
212
  value: function render() {
213
+ var _classNames2;
214
+
200
215
  var _this$props = this.props,
201
216
  children = _this$props.children,
202
217
  classes = _this$props.classes,
@@ -229,7 +244,7 @@ function (_React$PureComponent) {
229
244
  }, others), error && errorText && helperOpen && _react.default.createElement("div", {
230
245
  className: classes.errorDiv
231
246
  }, _react.default.createElement("div", {
232
- className: (0, _classnames.default)(classes.arrowDown, classes.errorDivArrowDown)
247
+ className: (0, _classnames.default)(classes.arrowDown, classes.errorDivArrowDown, fullWidth ? [classes.arrowFullWidth] : [classes.arrowNotFullWidth])
233
248
  }), _react.default.createElement("span", {
234
249
  // eslint-disable-next-line react/no-danger
235
250
  dangerouslySetInnerHTML: {
@@ -238,7 +253,7 @@ function (_React$PureComponent) {
238
253
  })), helperIcon && helperText && !error && helperOpen && _react.default.createElement("div", {
239
254
  className: classes.helperDiv
240
255
  }, _react.default.createElement("div", {
241
- className: (0, _classnames.default)(classes.arrowDown, classes.helperDivArrowDown)
256
+ className: (0, _classnames.default)(classes.arrowDown, classes.helperDivArrowDown, fullWidth ? [classes.arrowFullWidth] : [classes.arrowNotFullWidth])
242
257
  }), _react.default.createElement("span", {
243
258
  // eslint-disable-next-line react/no-danger
244
259
  dangerouslySetInnerHTML: {
@@ -251,12 +266,12 @@ function (_React$PureComponent) {
251
266
  disabled: disabled,
252
267
  focused: !disabled && (focused || hovered)
253
268
  }, InputLabelProps), error && errorText && _react.default.createElement(_HiIconButton.default, {
254
- className: (0, _classnames.default)(classes.iconButton, classes.iconButtonError),
269
+ className: (0, _classnames.default)(classes.iconButton, classes.iconButtonError, (0, _defineProperty2.default)({}, classes.iconFullWidth, fullWidth)),
255
270
  onClick: this.handleHelperClick
256
271
  }, _react.default.createElement(_Warning.default, {
257
272
  className: (0, _classnames.default)(classes.icon)
258
273
  })), helperIcon && helperText && !error && _react.default.createElement(_HiIconButton.default, {
259
- className: (0, _classnames.default)(classes.iconButton, classes.iconButtonInfo, (0, _defineProperty2.default)({}, classes.iconButtonInfoActive, helperOpen)),
274
+ className: (0, _classnames.default)(classes.iconButton, classes.iconButtonInfo, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.iconButtonInfoActive, helperOpen), (0, _defineProperty2.default)(_classNames2, classes.iconFullWidth, fullWidth), _classNames2)),
260
275
  onClick: this.handleHelperClick
261
276
  }, _react.default.createElement(_Info.default, {
262
277
  className: (0, _classnames.default)(classes.icon)
@@ -45,7 +45,9 @@ var styles = function styles(theme) {
45
45
  },
46
46
  '&$error': {
47
47
  color: theme.palette.negative.main
48
- }
48
+ },
49
+ display: 'flex',
50
+ alignItems: 'center'
49
51
  }),
50
52
  optional: {
51
53
  fontSize: 11,
package/HiForm/HiInput.js CHANGED
@@ -29,6 +29,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
29
29
 
30
30
  var _classnames = _interopRequireDefault(require("classnames"));
31
31
 
32
+ var _index = _interopRequireDefault(require("keycode/index"));
33
+
32
34
  var _Input = _interopRequireDefault(require("@material-ui/core/Input"));
33
35
 
34
36
  var _HiIcon = _interopRequireDefault(require("../HiIcon"));
@@ -169,6 +171,25 @@ function (_React$PureComponent) {
169
171
 
170
172
  (0, _classCallCheck2.default)(this, HiInput);
171
173
  _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(HiInput).call(this));
174
+
175
+ _this.handleKeyDown = function (event) {
176
+ var key = (0, _index.default)(event);
177
+
178
+ if (_this.props.onKeyDown) {
179
+ _this.props.onKeyDown(event);
180
+ }
181
+
182
+ if (key === 'enter' && _this.props.onSubmit) {
183
+ _this.props.onSubmit(event);
184
+ }
185
+ };
186
+
187
+ _this.handleClick = function () {
188
+ if (_this.props.onClick) {
189
+ _this.props.onClick();
190
+ }
191
+ };
192
+
172
193
  _this.state = {
173
194
  focused: false
174
195
  };
@@ -380,7 +401,8 @@ function (_React$PureComponent) {
380
401
  value: value,
381
402
  placeholder: placeholder,
382
403
  onFocus: this.handleFocus,
383
- onKeyDown: this.props.onKeyDown,
404
+ onKeyDown: this.handleKeyDown,
405
+ onClick: this.handleClick,
384
406
  onBlur: this.handleBlur,
385
407
  inputRef: this.getInputElement,
386
408
  disabled: disabled,
@@ -509,6 +531,11 @@ HiInput.propTypes = process.env.NODE_ENV !== "production" ? {
509
531
  */
510
532
  onChange: _propTypes.default.func,
511
533
 
534
+ /**
535
+ * Fonction de callback appelée au click dans l'input
536
+ */
537
+ onClick: _propTypes.default.func,
538
+
512
539
  /**
513
540
  * Fonction de callback appelée au focus du champs
514
541
  */
@@ -549,6 +576,11 @@ HiInput.propTypes = process.env.NODE_ENV !== "production" ? {
549
576
  */
550
577
  onRightIconClick: _propTypes.default.func,
551
578
 
579
+ /**
580
+ * Fonction de callback appelée lorsque l'utilisateur tape sur "Entrée"
581
+ */
582
+ onSubmit: _propTypes.default.func,
583
+
552
584
  /**
553
585
  * Passe une ref callback au composant div parent
554
586
  */
@@ -7,12 +7,12 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = exports.styles = void 0;
9
9
 
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
11
 
14
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
13
 
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
+
16
16
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
17
 
18
18
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -29,6 +29,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
29
29
 
30
30
  var _classnames = _interopRequireDefault(require("classnames"));
31
31
 
32
+ var _index = _interopRequireDefault(require("keycode/index"));
33
+
32
34
  var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
33
35
 
34
36
  var _HiUploadInput = _interopRequireDefault(require("./HiUploadInput"));
@@ -38,7 +40,7 @@ var _HiIcon = _interopRequireDefault(require("../HiIcon"));
38
40
  var styles = function styles(theme) {
39
41
  return {
40
42
  flexContainer: {
41
- display: ' flex',
43
+ display: 'flex',
42
44
  alignItems: 'center'
43
45
  },
44
46
  statusIcon: {
@@ -52,8 +54,10 @@ var styles = function styles(theme) {
52
54
  color: "".concat(theme.palette.middle.main, " !important"),
53
55
  fontSize: '80px'
54
56
  },
57
+ dragOver: {},
55
58
  inputContainer: {
56
- flex: '1'
59
+ flex: '1',
60
+ width: 'calc(100% - 88px)'
57
61
  },
58
62
  empty: {
59
63
  border: "1px solid ".concat(theme.palette.input.bottomLine),
@@ -67,7 +71,18 @@ var styles = function styles(theme) {
67
71
  error: {
68
72
  border: "1px solid ".concat(theme.palette.negative.main),
69
73
  color: "".concat(theme.palette.negative.main, " !important")
70
- }
74
+ },
75
+ fileButton: {
76
+ marginRight: 8,
77
+ '&$focusable': {
78
+ cursor: 'pointer',
79
+ '&:hover, &:focus, &$dragOver': {
80
+ border: "1px solid ".concat(theme.palette.primary.main),
81
+ color: "".concat(theme.palette.primary.main, " !important")
82
+ }
83
+ }
84
+ },
85
+ focusable: {}
71
86
  };
72
87
  };
73
88
 
@@ -79,38 +94,248 @@ function (_React$PureComponent) {
79
94
  (0, _inherits2.default)(HiUpload, _React$PureComponent);
80
95
 
81
96
  function HiUpload() {
97
+ var _this;
98
+
82
99
  (0, _classCallCheck2.default)(this, HiUpload);
83
- return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(HiUpload).apply(this, arguments));
84
- }
100
+ _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(HiUpload).call(this));
101
+
102
+ _this.handleDrop = function (event) {
103
+ if (event.path[0].id === _this.uploadIconRef.props.id) {
104
+ event.preventDefault();
105
+ event.stopPropagation();
106
+
107
+ if (_this.state.droppable) {
108
+ var index = _this.getNextInputIndex();
109
+
110
+ var param = _this.handleFile(event.dataTransfer.files, index);
111
+
112
+ _this.setState({
113
+ dragOver: false
114
+ });
115
+
116
+ _this.props.onChange(param, 0);
117
+ } else {
118
+ _this.setState({
119
+ dragOver: false
120
+ });
121
+ }
122
+ }
123
+ };
124
+
125
+ _this.handleDragEnter = function (event) {
126
+ event.preventDefault();
127
+ event.stopPropagation();
128
+
129
+ if (event.path[0].id === _this.uploadIconRef.props.id) {
130
+ if (event.dataTransfer.items.length !== 1) {
131
+ event.dataTransfer.dropEffect = 'none';
132
+
133
+ _this.props.onChange({
134
+ errorMessage: _this.props.translations.errorDragEnter,
135
+ value: null
136
+ }, 0);
137
+
138
+ _this.setState({
139
+ dragOver: true
140
+ });
141
+ } else {
142
+ _this.setState({
143
+ droppable: true,
144
+ dragOver: true
145
+ });
146
+ }
147
+ }
148
+ };
149
+
150
+ _this.handleDragLeave = function (event) {
151
+ event.preventDefault();
152
+ event.stopPropagation();
153
+
154
+ if (event.path[0].id === _this.uploadIconRef.props.id && event.relatedTarget.parentElement !== _this.uploadFieldRef) {
155
+ _this.props.onChange({
156
+ errorMessage: '',
157
+ value: null
158
+ }, 0);
159
+
160
+ _this.setState({
161
+ droppable: false,
162
+ dragOver: false
163
+ });
164
+ }
165
+ };
166
+
167
+ _this.handleChange = function (event) {
168
+ var index = _this.getNextInputIndex();
169
+
170
+ var param = _this.handleFile(event.target.files, index);
171
+
172
+ _this.props.onChange(param, index);
173
+ };
174
+
175
+ _this.handleEmptyField = function (event) {
176
+ event.target.value = '';
177
+ };
178
+
179
+ _this.handleKeyPress = function (event) {
180
+ var key = (0, _index.default)(event);
181
+
182
+ if (key === 'enter' || key === 'space') {
183
+ event.preventDefault();
184
+
185
+ _this.uploadInput.click();
186
+ }
187
+ };
188
+
189
+ _this.handleFile = function (files, index) {
190
+ var error = false;
191
+ var errorMessage = '';
192
+ var file = null;
193
+
194
+ if (files.length === 1) {
195
+ file = files[0];
196
+
197
+ if (_this.props.inputs[index] && file.size > _this.props.inputs[index].maxSize) {
198
+ errorMessage += _this.props.translations.errorSize.replace('maxSize', _this.props.inputs[index].maxSize / 1000000);
199
+ error = true;
200
+ }
201
+
202
+ if (_this.props.inputs[index] && _this.props.inputs[index].acceptedTypes && _this.props.inputs[index].acceptedTypes.length !== 0 && _this.props.inputs[index].acceptedTypes.indexOf(file.type) === -1) {
203
+ errorMessage += _this.props.translations.errorType;
204
+ error = true;
205
+ }
206
+ } else {
207
+ errorMessage = _this.props.translations.errorDropMultiple;
208
+ }
209
+
210
+ return {
211
+ errorMessage: errorMessage,
212
+ error: error,
213
+ value: file
214
+ };
215
+ };
216
+
217
+ _this.createInputs = function (others) {
218
+ var _this$props = _this.props,
219
+ inputs = _this$props.inputs,
220
+ values = _this$props.values;
221
+ var files = inputs; // unlimited number of files
222
+
223
+ if (inputs.length === 0) {
224
+ files = values;
225
+ }
226
+
227
+ var inputComponents = [];
228
+
229
+ for (var i = 0; i < files.length; i += 1) {
230
+ if (files.length > 1 || values[i] && values[i].value) {
231
+ inputComponents.push(_react.default.createElement(_HiUploadInput.default, (0, _extends2.default)({
232
+ maxSize: inputs[i] ? inputs[i].maxSize : undefined,
233
+ acceptedTypes: inputs[i] ? inputs[i].acceptedTypes : undefined,
234
+ placeholder: inputs[i] ? inputs[i].placeholder : undefined,
235
+ value: values[i] ? values[i].value : null,
236
+ error: values[i] ? values[i].error : null,
237
+ errorMessage: values[i] ? values[i].errorMessage : null,
238
+ onSeeFile: _this.handleSeeFile,
239
+ onDeleteFile: _this.props.onDeleteFile,
240
+ onChange: _this.props.onChange,
241
+ index: i,
242
+ key: inputs[i] ? inputs[i].id : "doc-".concat(i)
243
+ }, others)));
244
+ }
245
+ }
246
+
247
+ return inputComponents;
248
+ };
249
+
250
+ _this.uploadFieldRef = void 0;
251
+ _this.state = {
252
+ dragOver: false,
253
+ droppable: false
254
+ };
255
+ return _this;
256
+ } // When component mounts, we add eventListeners to handle the file drag and drop
257
+
85
258
 
86
259
  (0, _createClass2.default)(HiUpload, [{
260
+ key: "componentDidMount",
261
+ value: function componentDidMount() {
262
+ this.uploadFieldRef.addEventListener('dragenter', this.handleDragEnter, false);
263
+ this.uploadFieldRef.addEventListener('dragleave', this.handleDragLeave, false);
264
+ this.uploadFieldRef.addEventListener('dragover', function (event) {
265
+ event.preventDefault();
266
+ }, false);
267
+ this.uploadFieldRef.addEventListener('drop', this.handleDrop, false);
268
+ }
269
+ }, {
270
+ key: "componentWillUnmount",
271
+ value: function componentWillUnmount() {
272
+ this.uploadFieldRef.removeEventListener('dragenter', this.handleDragEnter, false);
273
+ this.uploadFieldRef.removeEventListener('dragleave', this.handleDragLeave, false);
274
+ this.uploadFieldRef.removeEventListener('dragover', function (event) {
275
+ event.preventDefault();
276
+ }, false);
277
+ this.uploadFieldRef.removeEventListener('drop', this.handleDrop, false);
278
+ }
279
+ }, {
280
+ key: "getNextInputIndex",
281
+ value: function getNextInputIndex() {
282
+ var index = 0; // Add an input at the end
283
+
284
+ if (!this.props.inputs.length) {
285
+ index = this.props.values.length + 1;
286
+ } else {
287
+ // First empty input
288
+ for (var i = 0; i < this.props.values.length; i += 1) {
289
+ if (!this.props.values[i] || this.props.values[i].error || !this.props.values[i].value) {
290
+ index = i;
291
+ break;
292
+ }
293
+ }
294
+ }
295
+
296
+ return index;
297
+ } // Action when files are dropped on the field
298
+
299
+ }, {
87
300
  key: "render",
88
301
  value: function render() {
89
302
  var _classNames,
90
- _this = this;
91
-
92
- var _this$props = this.props,
93
- inputs = _this$props.inputs,
94
- classes = _this$props.classes,
95
- values = _this$props.values,
96
- others = (0, _objectWithoutProperties2.default)(_this$props, ["inputs", "classes", "values"]);
303
+ _classNames2,
304
+ _this2 = this;
305
+
306
+ var _this$props2 = this.props,
307
+ id = _this$props2.id,
308
+ inputs = _this$props2.inputs,
309
+ classes = _this$props2.classes,
310
+ values = _this$props2.values,
311
+ focused = _this$props2.focused,
312
+ others = (0, _objectWithoutProperties2.default)(_this$props2, ["id", "inputs", "classes", "values", "focused"]);
313
+ var _this$state = this.state,
314
+ dragOver = _this$state.dragOver,
315
+ droppable = _this$state.droppable;
97
316
  var complete = true;
98
317
  var empty = true;
99
- var error = false;
100
-
101
- for (var i = 0, len = values.length; i < len; i += 1) {
102
- var value = values[i];
318
+ var error = false; // For unlimited inputs: always grey
103
319
 
104
- if (value !== undefined) {
105
- complete = value.value === null || value.error ? false : complete;
106
- empty = value.value !== null && !value.error ? false : empty;
107
- error = value.error || error;
108
- } else {
109
- complete = false;
320
+ if (!inputs.length) {
321
+ complete = false;
322
+ } else if (values.length === 0 || inputs.length > 0 && inputs.length !== values.length) {
323
+ complete = false;
324
+ } else {
325
+ for (var i = 0, len = values.length; i < len; i += 1) {
326
+ var value = values[i];
327
+
328
+ if (value !== undefined) {
329
+ complete = value.value === null || value.error ? false : complete;
330
+ empty = value.value !== null && !value.error ? false : empty;
331
+ error = value.error || error;
332
+ } else {
333
+ complete = false;
334
+ }
110
335
  }
111
336
  }
112
337
 
113
- var statusClass = (0, _classnames.default)(classes.statusIcon, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.empty, empty), (0, _defineProperty2.default)(_classNames, classes.complete, complete), (0, _defineProperty2.default)(_classNames, classes.error, error), _classNames));
338
+ var statusClass = (0, _classnames.default)(classes.statusIcon, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.empty, empty), (0, _defineProperty2.default)(_classNames, classes.complete, complete), _classNames));
114
339
  var icon;
115
340
 
116
341
  if (error) {
@@ -121,29 +346,43 @@ function (_React$PureComponent) {
121
346
  icon = 'file_upload';
122
347
  }
123
348
 
349
+ var focusable = true;
350
+
351
+ if (complete && values.length > 1) {
352
+ focusable = false;
353
+ }
354
+
355
+ var iconClass = (0, _classnames.default)(statusClass, classes.fileButton, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.dragOver, dragOver), (0, _defineProperty2.default)(_classNames2, classes.droppable, droppable), (0, _defineProperty2.default)(_classNames2, classes.focused, focused), (0, _defineProperty2.default)(_classNames2, classes.error, error && !focused), (0, _defineProperty2.default)(_classNames2, classes.focusable, focusable), _classNames2));
124
356
  return _react.default.createElement("div", {
125
357
  className: classes.flexContainer
126
- }, _react.default.createElement(_HiIcon.default, {
127
- className: statusClass,
358
+ }, _react.default.createElement("label", {
359
+ htmlFor: "flat-button-file",
360
+ ref: function ref(label) {
361
+ _this2.uploadFieldRef = label;
362
+ },
363
+ tabIndex: "-1"
364
+ }, _react.default.createElement("input", {
365
+ hidden: true,
366
+ id: "flat-button-file",
367
+ type: !complete || values.length === 1 ? 'file' : 'hidden',
368
+ onChange: this.handleChange,
369
+ onClick: focusable ? this.handleEmptyField : undefined,
370
+ ref: function ref(el) {
371
+ _this2.uploadInput = el;
372
+ }
373
+ }), _react.default.createElement(_HiIcon.default, {
374
+ ref: function ref(uploadIcon) {
375
+ _this2.uploadIconRef = uploadIcon;
376
+ },
377
+ id: "iconUpload-".concat(id),
378
+ className: iconClass,
128
379
  icon: icon,
129
- size: 32
130
- }), _react.default.createElement("div", {
380
+ size: 32,
381
+ tabIndex: focusable ? '0' : '-1',
382
+ onKeyPress: this.handleKeyPress
383
+ })), _react.default.createElement("div", {
131
384
  className: classes.inputContainer
132
- }, inputs.map(function (item, index) {
133
- return _react.default.createElement(_HiUploadInput.default, (0, _extends2.default)({
134
- maxSize: item.maxSize,
135
- acceptedTypes: item.acceptedTypes,
136
- placeholder: item.placeholder,
137
- value: values[index] ? values[index].value : null,
138
- error: values[index] ? values[index].error : null,
139
- errorMessage: values[index] ? values[index].errorMessage : null,
140
- onSeeFile: _this.handleSeeFile,
141
- onDeleteFile: _this.props.onDeleteFile,
142
- onChange: _this.props.onChange,
143
- index: index,
144
- key: item.id
145
- }, others));
146
- })));
385
+ }, this.createInputs(others)));
147
386
  }
148
387
  }]);
149
388
  return HiUpload;
@@ -170,8 +409,14 @@ HiUpload.propTypes = process.env.NODE_ENV !== "production" ? {
170
409
  */
171
410
  helperText: _propTypes.default.string,
172
411
 
412
+ /**
413
+ * id du composant
414
+ */
415
+ id: _propTypes.default.string.isRequired,
416
+
173
417
  /**
174
418
  * Array containing each of the inputs the component has to show (represented by an object).
419
+ * If empty => unlimited number of files accepted
175
420
  */
176
421
  inputs: _propTypes.default.array.isRequired,
177
422
 
@@ -191,7 +436,7 @@ HiUpload.propTypes = process.env.NODE_ENV !== "production" ? {
191
436
  onSeeFile: _propTypes.default.func,
192
437
 
193
438
  /**
194
- * Valeurs des inputs
439
+ * True if can upload an unlimited number of files
195
440
  */
196
441
  values: _propTypes.default.array
197
442
  } : {};