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

Sign up to get free protection for your applications and to get access to all the features.
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
  } : {};