@hipay/hipay-material-ui 2.0.0-beta.59 → 2.0.0-beta.60
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +58 -0
- package/HiCell/CellNumeric.js +1 -1
- 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 +20 -1
- package/HiForm/HiUpload.js +290 -45
- package/HiForm/HiUploadField.js +19 -51
- package/HiForm/HiUploadInput.js +18 -7
- package/HiSelectNew/HiDynamicSelect.js +3 -3
- package/HiSelectNew/HiNestedSelect.js +9 -9
- package/HiSelectNew/HiNestedSelectContent.js +9 -9
- package/HiSelectNew/HiSelect.js +22 -23
- package/HiSelectNew/HiSelectContent.js +7 -7
- package/HiSelectableList/HiSelectableListItem.js +3 -7
- package/README.md +1 -1
- package/es/HiCell/CellNumeric.js +1 -1
- 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 +19 -1
- package/es/HiForm/HiUpload.js +276 -35
- package/es/HiForm/HiUploadField.js +19 -43
- package/es/HiForm/HiUploadInput.js +16 -7
- package/es/HiSelectNew/HiSelect.js +15 -16
- package/es/HiSelectableList/HiSelectableListItem.js +3 -7
- 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 +29594 -21713
- package/umd/hipay-material-ui.production.min.js +2 -2
- package/utils/helpers.js +6 -4
@@ -10,8 +10,15 @@ class YearPickerOverlay extends React.Component {
|
|
10
10
|
super(props);
|
11
11
|
this.years = [];
|
12
12
|
this.handleYearClick = this.handleYearClick.bind(this);
|
13
|
+
let minDate = props.minimumDate;
|
14
|
+
|
15
|
+
if (!minDate) {
|
16
|
+
let today = new Date();
|
17
|
+
minDate = new Date(today.getFullYear() - 5, today.getMonth(), today.getDate()); // by default 5 years from now
|
18
|
+
}
|
19
|
+
|
13
20
|
const currentYear = new Date().getFullYear();
|
14
|
-
const minimumYear =
|
21
|
+
const minimumYear = minDate.getFullYear();
|
15
22
|
this.years = [currentYear]; // get years from minimum date to now
|
16
23
|
|
17
24
|
if (!props.disablePastDays && currentYear > minimumYear) {
|
@@ -55,8 +62,6 @@ class YearPickerOverlay extends React.Component {
|
|
55
62
|
}
|
56
63
|
|
57
64
|
YearPickerOverlay.defaultProps = {
|
58
|
-
minimumDate: new Date(2013, 4, 1),
|
59
|
-
// by default 1 May 2013
|
60
65
|
translations: {
|
61
66
|
year: 'Year'
|
62
67
|
}
|
@@ -22,13 +22,11 @@ export const styles = theme => ({
|
|
22
22
|
marginTop: 2
|
23
23
|
},
|
24
24
|
iconButton: {
|
25
|
-
position: 'absolute',
|
26
|
-
right: 5,
|
27
25
|
cursor: 'pointer',
|
28
26
|
zIndex: 1,
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
height: 20,
|
28
|
+
width: 20,
|
29
|
+
marginLeft: 3,
|
32
30
|
'&$iconButtonError': {
|
33
31
|
color: theme.palette.negative.main
|
34
32
|
},
|
@@ -37,11 +35,18 @@ export const styles = theme => ({
|
|
37
35
|
},
|
38
36
|
'&$iconButtonInfoActive': {
|
39
37
|
color: theme.palette.primary.main
|
38
|
+
},
|
39
|
+
'&$iconFullWidth': {
|
40
|
+
position: 'absolute',
|
41
|
+
right: 5,
|
42
|
+
marginLeft: 0,
|
43
|
+
bottom: 0
|
40
44
|
}
|
41
45
|
},
|
42
46
|
iconButtonError: {},
|
43
47
|
iconButtonInfo: {},
|
44
48
|
iconButtonInfoActive: {},
|
49
|
+
iconFullWidth: {},
|
45
50
|
errorDiv: _objectSpread({}, theme.typography.b3, {
|
46
51
|
backgroundColor: theme.palette.negative.main,
|
47
52
|
color: '#FFFFFF',
|
@@ -60,8 +65,15 @@ export const styles = theme => ({
|
|
60
65
|
borderTop: '4px solid #000',
|
61
66
|
position: 'absolute',
|
62
67
|
bottom: -4,
|
63
|
-
|
68
|
+
'&$arrowNotFullWidth': {
|
69
|
+
left: 8
|
70
|
+
},
|
71
|
+
'&$arrowFullWidth': {
|
72
|
+
right: 13
|
73
|
+
}
|
64
74
|
},
|
75
|
+
arrowNotFullWidth: {},
|
76
|
+
arrowFullWidth: {},
|
65
77
|
errorDivArrowDown: {
|
66
78
|
borderTopColor: theme.palette.negative.main
|
67
79
|
},
|
@@ -81,7 +93,8 @@ export const styles = theme => ({
|
|
81
93
|
borderTopColor: '#ffffff'
|
82
94
|
},
|
83
95
|
icon: {
|
84
|
-
position: 'absolute'
|
96
|
+
position: 'absolute',
|
97
|
+
fontSize: 19
|
85
98
|
}
|
86
99
|
});
|
87
100
|
/**
|
@@ -176,7 +189,7 @@ class HiFormControl extends React.PureComponent {
|
|
176
189
|
}, others), error && errorText && helperOpen && React.createElement("div", {
|
177
190
|
className: classes.errorDiv
|
178
191
|
}, React.createElement("div", {
|
179
|
-
className: classNames(classes.arrowDown, classes.errorDivArrowDown)
|
192
|
+
className: classNames(classes.arrowDown, classes.errorDivArrowDown, fullWidth ? [classes.arrowFullWidth] : [classes.arrowNotFullWidth])
|
180
193
|
}), React.createElement("span", {
|
181
194
|
// eslint-disable-next-line react/no-danger
|
182
195
|
dangerouslySetInnerHTML: {
|
@@ -185,7 +198,7 @@ class HiFormControl extends React.PureComponent {
|
|
185
198
|
})), helperIcon && helperText && !error && helperOpen && React.createElement("div", {
|
186
199
|
className: classes.helperDiv
|
187
200
|
}, React.createElement("div", {
|
188
|
-
className: classNames(classes.arrowDown, classes.helperDivArrowDown)
|
201
|
+
className: classNames(classes.arrowDown, classes.helperDivArrowDown, fullWidth ? [classes.arrowFullWidth] : [classes.arrowNotFullWidth])
|
189
202
|
}), React.createElement("span", {
|
190
203
|
// eslint-disable-next-line react/no-danger
|
191
204
|
dangerouslySetInnerHTML: {
|
@@ -198,13 +211,16 @@ class HiFormControl extends React.PureComponent {
|
|
198
211
|
disabled: disabled,
|
199
212
|
focused: !disabled && (focused || hovered)
|
200
213
|
}, InputLabelProps), error && errorText && React.createElement(HiIconButton, {
|
201
|
-
className: classNames(classes.iconButton, classes.iconButtonError
|
214
|
+
className: classNames(classes.iconButton, classes.iconButtonError, {
|
215
|
+
[classes.iconFullWidth]: fullWidth
|
216
|
+
}),
|
202
217
|
onClick: this.handleHelperClick
|
203
218
|
}, React.createElement(Warning, {
|
204
219
|
className: classNames(classes.icon)
|
205
220
|
})), helperIcon && helperText && !error && React.createElement(HiIconButton, {
|
206
221
|
className: classNames(classes.iconButton, classes.iconButtonInfo, {
|
207
|
-
[classes.iconButtonInfoActive]: helperOpen
|
222
|
+
[classes.iconButtonInfoActive]: helperOpen,
|
223
|
+
[classes.iconFullWidth]: fullWidth
|
208
224
|
}),
|
209
225
|
onClick: this.handleHelperClick
|
210
226
|
}, React.createElement(Info, {
|
package/es/HiForm/HiFormLabel.js
CHANGED
package/es/HiForm/HiInput.js
CHANGED
@@ -2,6 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread";
|
|
2
2
|
import React from 'react';
|
3
3
|
import PropTypes from 'prop-types';
|
4
4
|
import classNames from 'classnames';
|
5
|
+
import keycode from 'keycode/index';
|
5
6
|
import Input from '@material-ui/core/Input';
|
6
7
|
import HiIcon from '../HiIcon';
|
7
8
|
import HiIconButton from '../HiIconButton';
|
@@ -128,6 +129,18 @@ class HiInput extends React.PureComponent {
|
|
128
129
|
constructor() {
|
129
130
|
super();
|
130
131
|
|
132
|
+
this.handleKeyDown = event => {
|
133
|
+
const key = keycode(event);
|
134
|
+
|
135
|
+
if (this.props.onKeyDown) {
|
136
|
+
this.props.onKeyDown(event);
|
137
|
+
}
|
138
|
+
|
139
|
+
if (key === 'enter' && this.props.onSubmit) {
|
140
|
+
this.props.onSubmit(event);
|
141
|
+
}
|
142
|
+
};
|
143
|
+
|
131
144
|
this.handleClick = () => {
|
132
145
|
if (this.props.onClick) {
|
133
146
|
this.props.onClick();
|
@@ -353,7 +366,7 @@ class HiInput extends React.PureComponent {
|
|
353
366
|
value: value,
|
354
367
|
placeholder: placeholder,
|
355
368
|
onFocus: this.handleFocus,
|
356
|
-
onKeyDown: this.
|
369
|
+
onKeyDown: this.handleKeyDown,
|
357
370
|
onClick: this.handleClick,
|
358
371
|
onBlur: this.handleBlur,
|
359
372
|
inputRef: this.getInputElement,
|
@@ -519,6 +532,11 @@ HiInput.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
519
532
|
*/
|
520
533
|
onRightIconClick: PropTypes.func,
|
521
534
|
|
535
|
+
/**
|
536
|
+
* Fonction de callback appelée lorsque l'utilisateur tape sur "Entrée"
|
537
|
+
*/
|
538
|
+
onSubmit: PropTypes.func,
|
539
|
+
|
522
540
|
/**
|
523
541
|
* Passe une ref callback au composant div parent
|
524
542
|
*/
|
package/es/HiForm/HiUpload.js
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
2
1
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
2
|
+
import _extends from "@babel/runtime/helpers/extends";
|
3
3
|
import React from 'react';
|
4
4
|
import PropTypes from 'prop-types';
|
5
5
|
import classNames from 'classnames';
|
6
|
+
import keycode from 'keycode/index';
|
6
7
|
import withStyles from '../styles/withStyles';
|
7
8
|
import HiUploadInput from './HiUploadInput';
|
8
9
|
import HiIcon from '../HiIcon';
|
9
10
|
export const styles = theme => ({
|
10
11
|
flexContainer: {
|
11
|
-
display: '
|
12
|
+
display: 'flex',
|
12
13
|
alignItems: 'center'
|
13
14
|
},
|
14
15
|
statusIcon: {
|
@@ -22,8 +23,10 @@ export const styles = theme => ({
|
|
22
23
|
color: `${theme.palette.middle.main} !important`,
|
23
24
|
fontSize: '80px'
|
24
25
|
},
|
26
|
+
dragOver: {},
|
25
27
|
inputContainer: {
|
26
|
-
flex: '1'
|
28
|
+
flex: '1',
|
29
|
+
width: 'calc(100% - 88px)'
|
27
30
|
},
|
28
31
|
empty: {
|
29
32
|
border: `1px solid ${theme.palette.input.bottomLine}`,
|
@@ -37,39 +40,249 @@ export const styles = theme => ({
|
|
37
40
|
error: {
|
38
41
|
border: `1px solid ${theme.palette.negative.main}`,
|
39
42
|
color: `${theme.palette.negative.main} !important`
|
40
|
-
}
|
43
|
+
},
|
44
|
+
fileButton: {
|
45
|
+
marginRight: 8,
|
46
|
+
'&$focusable': {
|
47
|
+
cursor: 'pointer',
|
48
|
+
'&:hover, &:focus, &$dragOver': {
|
49
|
+
border: `1px solid ${theme.palette.primary.main}`,
|
50
|
+
color: `${theme.palette.primary.main} !important`
|
51
|
+
}
|
52
|
+
}
|
53
|
+
},
|
54
|
+
focusable: {}
|
41
55
|
});
|
42
56
|
|
43
57
|
class HiUpload extends React.PureComponent {
|
58
|
+
constructor() {
|
59
|
+
super();
|
60
|
+
|
61
|
+
this.handleDrop = event => {
|
62
|
+
if (event.path[0].id === this.uploadIconRef.props.id) {
|
63
|
+
event.preventDefault();
|
64
|
+
event.stopPropagation();
|
65
|
+
|
66
|
+
if (this.state.droppable) {
|
67
|
+
const index = this.getNextInputIndex();
|
68
|
+
const param = this.handleFile(event.dataTransfer.files, index);
|
69
|
+
this.setState({
|
70
|
+
dragOver: false
|
71
|
+
});
|
72
|
+
this.props.onChange(param, 0);
|
73
|
+
} else {
|
74
|
+
this.setState({
|
75
|
+
dragOver: false
|
76
|
+
});
|
77
|
+
}
|
78
|
+
}
|
79
|
+
};
|
80
|
+
|
81
|
+
this.handleDragEnter = event => {
|
82
|
+
event.preventDefault();
|
83
|
+
event.stopPropagation();
|
84
|
+
|
85
|
+
if (event.path[0].id === this.uploadIconRef.props.id) {
|
86
|
+
if (event.dataTransfer.items.length !== 1) {
|
87
|
+
event.dataTransfer.dropEffect = 'none';
|
88
|
+
this.props.onChange({
|
89
|
+
errorMessage: this.props.translations.errorDragEnter,
|
90
|
+
value: null
|
91
|
+
}, 0);
|
92
|
+
this.setState({
|
93
|
+
dragOver: true
|
94
|
+
});
|
95
|
+
} else {
|
96
|
+
this.setState({
|
97
|
+
droppable: true,
|
98
|
+
dragOver: true
|
99
|
+
});
|
100
|
+
}
|
101
|
+
}
|
102
|
+
};
|
103
|
+
|
104
|
+
this.handleDragLeave = event => {
|
105
|
+
event.preventDefault();
|
106
|
+
event.stopPropagation();
|
107
|
+
|
108
|
+
if (event.path[0].id === this.uploadIconRef.props.id && event.relatedTarget.parentElement !== this.uploadFieldRef) {
|
109
|
+
this.props.onChange({
|
110
|
+
errorMessage: '',
|
111
|
+
value: null
|
112
|
+
}, 0);
|
113
|
+
this.setState({
|
114
|
+
droppable: false,
|
115
|
+
dragOver: false
|
116
|
+
});
|
117
|
+
}
|
118
|
+
};
|
119
|
+
|
120
|
+
this.handleChange = event => {
|
121
|
+
const index = this.getNextInputIndex();
|
122
|
+
const param = this.handleFile(event.target.files, index);
|
123
|
+
this.props.onChange(param, index);
|
124
|
+
};
|
125
|
+
|
126
|
+
this.handleEmptyField = event => {
|
127
|
+
event.target.value = '';
|
128
|
+
};
|
129
|
+
|
130
|
+
this.handleKeyPress = event => {
|
131
|
+
const key = keycode(event);
|
132
|
+
|
133
|
+
if (key === 'enter' || key === 'space') {
|
134
|
+
event.preventDefault();
|
135
|
+
this.uploadInput.click();
|
136
|
+
}
|
137
|
+
};
|
138
|
+
|
139
|
+
this.handleFile = (files, index) => {
|
140
|
+
let error = false;
|
141
|
+
let errorMessage = '';
|
142
|
+
let file = null;
|
143
|
+
|
144
|
+
if (files.length === 1) {
|
145
|
+
file = files[0];
|
146
|
+
|
147
|
+
if (this.props.inputs[index] && file.size > this.props.inputs[index].maxSize) {
|
148
|
+
errorMessage += this.props.translations.errorSize.replace('maxSize', this.props.inputs[index].maxSize / 1000000);
|
149
|
+
error = true;
|
150
|
+
}
|
151
|
+
|
152
|
+
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) {
|
153
|
+
errorMessage += this.props.translations.errorType;
|
154
|
+
error = true;
|
155
|
+
}
|
156
|
+
} else {
|
157
|
+
errorMessage = this.props.translations.errorDropMultiple;
|
158
|
+
}
|
159
|
+
|
160
|
+
return {
|
161
|
+
errorMessage,
|
162
|
+
error,
|
163
|
+
value: file
|
164
|
+
};
|
165
|
+
};
|
166
|
+
|
167
|
+
this.createInputs = others => {
|
168
|
+
const {
|
169
|
+
inputs,
|
170
|
+
values
|
171
|
+
} = this.props;
|
172
|
+
let files = inputs; // unlimited number of files
|
173
|
+
|
174
|
+
if (inputs.length === 0) {
|
175
|
+
files = values;
|
176
|
+
}
|
177
|
+
|
178
|
+
const inputComponents = [];
|
179
|
+
|
180
|
+
for (let i = 0; i < files.length; i += 1) {
|
181
|
+
if (files.length > 1 || values[i] && values[i].value) {
|
182
|
+
inputComponents.push(React.createElement(HiUploadInput, _extends({
|
183
|
+
maxSize: inputs[i] ? inputs[i].maxSize : undefined,
|
184
|
+
acceptedTypes: inputs[i] ? inputs[i].acceptedTypes : undefined,
|
185
|
+
placeholder: inputs[i] ? inputs[i].placeholder : undefined,
|
186
|
+
value: values[i] ? values[i].value : null,
|
187
|
+
error: values[i] ? values[i].error : null,
|
188
|
+
errorMessage: values[i] ? values[i].errorMessage : null,
|
189
|
+
onSeeFile: this.handleSeeFile,
|
190
|
+
onDeleteFile: this.props.onDeleteFile,
|
191
|
+
onChange: this.props.onChange,
|
192
|
+
index: i,
|
193
|
+
key: inputs[i] ? inputs[i].id : `doc-${i}`
|
194
|
+
}, others)));
|
195
|
+
}
|
196
|
+
}
|
197
|
+
|
198
|
+
return inputComponents;
|
199
|
+
};
|
200
|
+
|
201
|
+
this.uploadFieldRef = void 0;
|
202
|
+
this.state = {
|
203
|
+
dragOver: false,
|
204
|
+
droppable: false
|
205
|
+
};
|
206
|
+
} // When component mounts, we add eventListeners to handle the file drag and drop
|
207
|
+
|
208
|
+
|
209
|
+
componentDidMount() {
|
210
|
+
this.uploadFieldRef.addEventListener('dragenter', this.handleDragEnter, false);
|
211
|
+
this.uploadFieldRef.addEventListener('dragleave', this.handleDragLeave, false);
|
212
|
+
this.uploadFieldRef.addEventListener('dragover', event => {
|
213
|
+
event.preventDefault();
|
214
|
+
}, false);
|
215
|
+
this.uploadFieldRef.addEventListener('drop', this.handleDrop, false);
|
216
|
+
}
|
217
|
+
|
218
|
+
componentWillUnmount() {
|
219
|
+
this.uploadFieldRef.removeEventListener('dragenter', this.handleDragEnter, false);
|
220
|
+
this.uploadFieldRef.removeEventListener('dragleave', this.handleDragLeave, false);
|
221
|
+
this.uploadFieldRef.removeEventListener('dragover', event => {
|
222
|
+
event.preventDefault();
|
223
|
+
}, false);
|
224
|
+
this.uploadFieldRef.removeEventListener('drop', this.handleDrop, false);
|
225
|
+
}
|
226
|
+
|
227
|
+
getNextInputIndex() {
|
228
|
+
let index = 0; // Add an input at the end
|
229
|
+
|
230
|
+
if (!this.props.inputs.length) {
|
231
|
+
index = this.props.values.length + 1;
|
232
|
+
} else {
|
233
|
+
// First empty input
|
234
|
+
for (let i = 0; i < this.props.values.length; i += 1) {
|
235
|
+
if (!this.props.values[i] || this.props.values[i].error || !this.props.values[i].value) {
|
236
|
+
index = i;
|
237
|
+
break;
|
238
|
+
}
|
239
|
+
}
|
240
|
+
}
|
241
|
+
|
242
|
+
return index;
|
243
|
+
} // Action when files are dropped on the field
|
244
|
+
|
245
|
+
|
44
246
|
render() {
|
45
247
|
const _this$props = this.props,
|
46
248
|
{
|
249
|
+
id,
|
47
250
|
inputs,
|
48
251
|
classes,
|
49
|
-
values
|
252
|
+
values,
|
253
|
+
focused
|
50
254
|
} = _this$props,
|
51
|
-
others = _objectWithoutProperties(_this$props, ["inputs", "classes", "values"]);
|
255
|
+
others = _objectWithoutProperties(_this$props, ["id", "inputs", "classes", "values", "focused"]);
|
52
256
|
|
257
|
+
const {
|
258
|
+
dragOver,
|
259
|
+
droppable
|
260
|
+
} = this.state;
|
53
261
|
let complete = true;
|
54
262
|
let empty = true;
|
55
|
-
let error = false;
|
263
|
+
let error = false; // For unlimited inputs: always grey
|
56
264
|
|
57
|
-
|
58
|
-
|
265
|
+
if (!inputs.length) {
|
266
|
+
complete = false;
|
267
|
+
} else if (values.length === 0 || inputs.length > 0 && inputs.length !== values.length) {
|
268
|
+
complete = false;
|
269
|
+
} else {
|
270
|
+
for (let i = 0, len = values.length; i < len; i += 1) {
|
271
|
+
const value = values[i];
|
59
272
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
273
|
+
if (value !== undefined) {
|
274
|
+
complete = value.value === null || value.error ? false : complete;
|
275
|
+
empty = value.value !== null && !value.error ? false : empty;
|
276
|
+
error = value.error || error;
|
277
|
+
} else {
|
278
|
+
complete = false;
|
279
|
+
}
|
66
280
|
}
|
67
281
|
}
|
68
282
|
|
69
283
|
const statusClass = classNames(classes.statusIcon, {
|
70
284
|
[classes.empty]: empty,
|
71
|
-
[classes.complete]: complete
|
72
|
-
[classes.error]: error
|
285
|
+
[classes.complete]: complete
|
73
286
|
});
|
74
287
|
let icon;
|
75
288
|
|
@@ -81,27 +294,49 @@ class HiUpload extends React.PureComponent {
|
|
81
294
|
icon = 'file_upload';
|
82
295
|
}
|
83
296
|
|
297
|
+
let focusable = true;
|
298
|
+
|
299
|
+
if (complete && values.length > 1) {
|
300
|
+
focusable = false;
|
301
|
+
}
|
302
|
+
|
303
|
+
const iconClass = classNames(statusClass, classes.fileButton, {
|
304
|
+
[classes.dragOver]: dragOver,
|
305
|
+
[classes.droppable]: droppable,
|
306
|
+
[classes.focused]: focused,
|
307
|
+
[classes.error]: error && !focused,
|
308
|
+
[classes.focusable]: focusable
|
309
|
+
});
|
84
310
|
return React.createElement("div", {
|
85
311
|
className: classes.flexContainer
|
86
|
-
}, React.createElement(
|
87
|
-
|
312
|
+
}, React.createElement("label", {
|
313
|
+
htmlFor: "flat-button-file",
|
314
|
+
ref: label => {
|
315
|
+
this.uploadFieldRef = label;
|
316
|
+
},
|
317
|
+
tabIndex: "-1"
|
318
|
+
}, React.createElement("input", {
|
319
|
+
hidden: true,
|
320
|
+
id: "flat-button-file",
|
321
|
+
type: !complete || values.length === 1 ? 'file' : 'hidden',
|
322
|
+
onChange: this.handleChange,
|
323
|
+
onClick: focusable ? this.handleEmptyField : undefined,
|
324
|
+
ref: el => {
|
325
|
+
this.uploadInput = el;
|
326
|
+
}
|
327
|
+
}), React.createElement(HiIcon, {
|
328
|
+
ref: uploadIcon => {
|
329
|
+
this.uploadIconRef = uploadIcon;
|
330
|
+
},
|
331
|
+
id: `iconUpload-${id}`,
|
332
|
+
className: iconClass,
|
88
333
|
icon: icon,
|
89
|
-
size: 32
|
90
|
-
|
334
|
+
size: 32,
|
335
|
+
tabIndex: focusable ? '0' : '-1',
|
336
|
+
onKeyPress: this.handleKeyPress
|
337
|
+
})), React.createElement("div", {
|
91
338
|
className: classes.inputContainer
|
92
|
-
},
|
93
|
-
maxSize: item.maxSize,
|
94
|
-
acceptedTypes: item.acceptedTypes,
|
95
|
-
placeholder: item.placeholder,
|
96
|
-
value: values[index] ? values[index].value : null,
|
97
|
-
error: values[index] ? values[index].error : null,
|
98
|
-
errorMessage: values[index] ? values[index].errorMessage : null,
|
99
|
-
onSeeFile: this.handleSeeFile,
|
100
|
-
onDeleteFile: this.props.onDeleteFile,
|
101
|
-
onChange: this.props.onChange,
|
102
|
-
index: index,
|
103
|
-
key: item.id
|
104
|
-
}, others)))));
|
339
|
+
}, this.createInputs(others)));
|
105
340
|
}
|
106
341
|
|
107
342
|
}
|
@@ -127,8 +362,14 @@ HiUpload.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
127
362
|
*/
|
128
363
|
helperText: PropTypes.string,
|
129
364
|
|
365
|
+
/**
|
366
|
+
* id du composant
|
367
|
+
*/
|
368
|
+
id: PropTypes.string.isRequired,
|
369
|
+
|
130
370
|
/**
|
131
371
|
* Array containing each of the inputs the component has to show (represented by an object).
|
372
|
+
* If empty => unlimited number of files accepted
|
132
373
|
*/
|
133
374
|
inputs: PropTypes.array.isRequired,
|
134
375
|
|
@@ -148,7 +389,7 @@ HiUpload.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
148
389
|
onSeeFile: PropTypes.func,
|
149
390
|
|
150
391
|
/**
|
151
|
-
*
|
392
|
+
* True if can upload an unlimited number of files
|
152
393
|
*/
|
153
394
|
values: PropTypes.array
|
154
395
|
} : {};
|
@@ -2,43 +2,8 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
3
3
|
import React from 'react';
|
4
4
|
import PropTypes from 'prop-types';
|
5
|
-
import withStyles from '../styles/withStyles';
|
6
5
|
import HiFormControl from './HiFormControl';
|
7
6
|
import HiUpload from './HiUpload';
|
8
|
-
export const styles = theme => ({
|
9
|
-
flexContainer: {
|
10
|
-
display: ' flex',
|
11
|
-
alignItems: 'center'
|
12
|
-
},
|
13
|
-
statusIcon: {
|
14
|
-
height: '80px',
|
15
|
-
width: '80px',
|
16
|
-
marginRight: '8px',
|
17
|
-
padding: '24px',
|
18
|
-
borderRadius: '2px',
|
19
|
-
backgroundColor: theme.palette.local.background2,
|
20
|
-
border: `1px solid ${theme.palette.middle.main}`,
|
21
|
-
color: `${theme.palette.middle.main} !important`,
|
22
|
-
fontSize: '80px'
|
23
|
-
},
|
24
|
-
inputContainer: {
|
25
|
-
flex: '1',
|
26
|
-
width: 'calc(100% - 88px)'
|
27
|
-
},
|
28
|
-
empty: {
|
29
|
-
border: `1px solid ${theme.palette.input.bottomLine}`,
|
30
|
-
color: `${theme.palette.neutral.main} !important`
|
31
|
-
},
|
32
|
-
complete: {
|
33
|
-
border: `1px solid ${theme.palette.positive.main}`,
|
34
|
-
color: `${theme.palette.positive.main} !important`,
|
35
|
-
fontSize: '32px'
|
36
|
-
},
|
37
|
-
error: {
|
38
|
-
border: `1px solid ${theme.palette.negative.main}`,
|
39
|
-
color: `${theme.palette.negative.main} !important`
|
40
|
-
}
|
41
|
-
});
|
42
7
|
|
43
8
|
class HiUploadField extends React.PureComponent {
|
44
9
|
render() {
|
@@ -48,9 +13,10 @@ class HiUploadField extends React.PureComponent {
|
|
48
13
|
label,
|
49
14
|
helperIcon,
|
50
15
|
helperText,
|
51
|
-
values
|
16
|
+
values,
|
17
|
+
fullWidth
|
52
18
|
} = _this$props,
|
53
|
-
others = _objectWithoutProperties(_this$props, ["className", "label", "helperIcon", "helperText", "values"]);
|
19
|
+
others = _objectWithoutProperties(_this$props, ["className", "label", "helperIcon", "helperText", "values", "fullWidth"]);
|
54
20
|
|
55
21
|
let empty = true;
|
56
22
|
let error = false;
|
@@ -72,7 +38,8 @@ class HiUploadField extends React.PureComponent {
|
|
72
38
|
errorText: errorText,
|
73
39
|
error: error,
|
74
40
|
helperIcon: helperIcon,
|
75
|
-
helperText: helperText
|
41
|
+
helperText: helperText,
|
42
|
+
fullWidth: fullWidth
|
76
43
|
}, React.createElement(HiUpload, _extends({
|
77
44
|
values: values
|
78
45
|
}, others)));
|
@@ -82,7 +49,9 @@ class HiUploadField extends React.PureComponent {
|
|
82
49
|
|
83
50
|
HiUploadField.defaultProps = {
|
84
51
|
helperText: '',
|
85
|
-
helperIcon: false
|
52
|
+
helperIcon: false,
|
53
|
+
seeFile: true,
|
54
|
+
fullWidth: false
|
86
55
|
};
|
87
56
|
HiUploadField.propTypes = process.env.NODE_ENV !== "production" ? {
|
88
57
|
/**
|
@@ -95,6 +64,11 @@ HiUploadField.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
95
64
|
*/
|
96
65
|
className: PropTypes.string,
|
97
66
|
|
67
|
+
/**
|
68
|
+
* Si "true", applique l'attribut css correspondant
|
69
|
+
*/
|
70
|
+
fullWidth: PropTypes.bool,
|
71
|
+
|
98
72
|
/**
|
99
73
|
* Si "true", le texte d'aide s'affichera seulement au clic sur l'icône "Information"
|
100
74
|
*/
|
@@ -130,12 +104,14 @@ HiUploadField.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
130
104
|
*/
|
131
105
|
onSeeFile: PropTypes.func,
|
132
106
|
|
107
|
+
/**
|
108
|
+
* set to false to hide the eye button
|
109
|
+
*/
|
110
|
+
seeFile: PropTypes.bool,
|
111
|
+
|
133
112
|
/**
|
134
113
|
* Valeurs des inputs
|
135
114
|
*/
|
136
115
|
values: PropTypes.array
|
137
116
|
} : {};
|
138
|
-
export default
|
139
|
-
hiComponent: true,
|
140
|
-
name: 'HmuiHiUploadField'
|
141
|
-
})(HiUploadField);
|
117
|
+
export default HiUploadField;
|