@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.
- package/CHANGELOG.md +117 -0
- package/HiCell/CellNumeric.js +1 -1
- package/HiColoredLabel/HiColoredLabel.js +16 -4
- package/HiDatePicker/HiDatePicker.js +11 -2
- package/HiDatePicker/HiDateRangePicker.js +49 -8
- package/HiDatePicker/HiDateRangeSelector.js +39 -30
- package/HiDatePicker/Overlays/YearPickerOverlay.js +8 -3
- package/HiForm/HiFormControl.js +26 -11
- package/HiForm/HiFormLabel.js +3 -1
- package/HiForm/HiInput.js +33 -1
- package/HiForm/HiUpload.js +290 -45
- package/HiForm/HiUploadField.js +19 -51
- package/HiForm/HiUploadInput.js +18 -7
- package/HiSelect/HiSuggestSelect.js +3 -3
- package/HiSelectNew/HiDynamicSelect.js +3 -3
- package/HiSelectNew/HiNestedSelect.js +29 -15
- package/HiSelectNew/HiNestedSelectContent.js +29 -15
- package/HiSelectNew/HiSelect.js +23 -12
- package/HiSelectNew/HiSelectContent.js +23 -11
- package/HiSelectNew/HiSelectInput.js +4 -4
- package/HiSelectableList/HiSelectableListItem.js +8 -10
- package/README.md +1 -1
- package/es/HiCell/CellNumeric.js +1 -1
- package/es/HiColoredLabel/HiColoredLabel.js +21 -4
- package/es/HiDatePicker/HiDatePicker.js +11 -2
- package/es/HiDatePicker/HiDateRangePicker.js +42 -8
- package/es/HiDatePicker/HiDateRangeSelector.js +38 -27
- package/es/HiDatePicker/Overlays/YearPickerOverlay.js +8 -3
- package/es/HiForm/HiFormControl.js +27 -11
- package/es/HiForm/HiFormLabel.js +3 -1
- package/es/HiForm/HiInput.js +32 -1
- package/es/HiForm/HiUpload.js +276 -35
- package/es/HiForm/HiUploadField.js +19 -43
- package/es/HiForm/HiUploadInput.js +16 -7
- package/es/HiSelect/HiSuggestSelect.js +3 -3
- package/es/HiSelectNew/HiNestedSelect.js +17 -7
- package/es/HiSelectNew/HiNestedSelectContent.js +16 -6
- package/es/HiSelectNew/HiSelect.js +15 -3
- package/es/HiSelectNew/HiSelectContent.js +11 -2
- package/es/HiSelectNew/HiSelectInput.js +4 -3
- package/es/HiSelectableList/HiSelectableListItem.js +8 -10
- package/es/utils/helpers.js +6 -5
- package/index.es.js +1 -1
- package/index.js +1 -1
- package/package.json +3 -2
- package/umd/hipay-material-ui.development.js +4632 -1923
- package/umd/hipay-material-ui.production.min.js +2 -2
- package/utils/helpers.js +6 -4
package/HiForm/HiFormControl.js
CHANGED
|
@@ -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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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)(
|
|
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)
|
package/HiForm/HiFormLabel.js
CHANGED
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.
|
|
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
|
*/
|
package/HiForm/HiUpload.js
CHANGED
|
@@ -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: '
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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),
|
|
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(
|
|
127
|
-
|
|
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
|
-
|
|
380
|
+
size: 32,
|
|
381
|
+
tabIndex: focusable ? '0' : '-1',
|
|
382
|
+
onKeyPress: this.handleKeyPress
|
|
383
|
+
})), _react.default.createElement("div", {
|
|
131
384
|
className: classes.inputContainer
|
|
132
|
-
},
|
|
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
|
-
*
|
|
439
|
+
* True if can upload an unlimited number of files
|
|
195
440
|
*/
|
|
196
441
|
values: _propTypes.default.array
|
|
197
442
|
} : {};
|