@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.
- 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
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
6
6
|
value: true
|
7
7
|
});
|
8
|
-
exports.default = exports.styles = void 0;
|
8
|
+
exports.default = exports.filterValue = exports.styles = void 0;
|
9
9
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
11
11
|
|
@@ -70,6 +70,12 @@ var styles = function styles(theme) {
|
|
70
70
|
})
|
71
71
|
};
|
72
72
|
};
|
73
|
+
|
74
|
+
exports.styles = styles;
|
75
|
+
|
76
|
+
var filterValue = function filterValue(item, searchValue) {
|
77
|
+
return searchValue === '' || (0, _helpers.foldAccents)(item.label.toString().toLowerCase()).search((0, _helpers.foldAccents)(searchValue.toLowerCase())) !== -1;
|
78
|
+
};
|
73
79
|
/**
|
74
80
|
*
|
75
81
|
* Utilisé pour tous types de selects dans les formulaires.
|
@@ -86,7 +92,7 @@ var styles = function styles(theme) {
|
|
86
92
|
*/
|
87
93
|
|
88
94
|
|
89
|
-
exports.
|
95
|
+
exports.filterValue = filterValue;
|
90
96
|
|
91
97
|
var HiSelectContent =
|
92
98
|
/*#__PURE__*/
|
@@ -173,7 +179,7 @@ function (_React$PureComponent) {
|
|
173
179
|
return id !== item.id;
|
174
180
|
}), item);
|
175
181
|
} else {
|
176
|
-
onChange(event, (0, _toConsumableArray2.default)(value)
|
182
|
+
onChange(event, [].concat((0, _toConsumableArray2.default)(value), [item.id]), item);
|
177
183
|
}
|
178
184
|
};
|
179
185
|
|
@@ -203,13 +209,13 @@ function (_React$PureComponent) {
|
|
203
209
|
});
|
204
210
|
} else {
|
205
211
|
_this.setState({
|
206
|
-
suggestions: (0, _toConsumableArray2.default)(hasAll ? [(0, _extends2.default)({
|
212
|
+
suggestions: [].concat((0, _toConsumableArray2.default)(hasAll ? [(0, _extends2.default)({
|
207
213
|
id: '_all',
|
208
214
|
label: translations.all
|
209
215
|
}, iconAll && {
|
210
216
|
type: 'icon',
|
211
217
|
icon: iconAll
|
212
|
-
})] : [])
|
218
|
+
})] : []), (0, _toConsumableArray2.default)(suggestions))
|
213
219
|
});
|
214
220
|
}
|
215
221
|
};
|
@@ -245,22 +251,22 @@ function (_React$PureComponent) {
|
|
245
251
|
var search = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
246
252
|
var loading = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
247
253
|
// build item list
|
248
|
-
var itemList = (0, _toConsumableArray2.default)(loading ? [{
|
254
|
+
var itemList = [].concat((0, _toConsumableArray2.default)(loading ? [{
|
249
255
|
id: '_loading',
|
250
256
|
type: 'loader',
|
251
257
|
disabled: true,
|
252
258
|
centered: true,
|
253
259
|
hideCheckbox: true,
|
254
260
|
label: 'loading'
|
255
|
-
}] : [])
|
256
|
-
return item.label &&
|
257
|
-
})) : (0, _toConsumableArray2.default)(_this.props.hasAll ? [(0, _extends2.default)({
|
261
|
+
}] : []), (0, _toConsumableArray2.default)(search !== '' ? (0, _toConsumableArray2.default)(options.filter(function (item) {
|
262
|
+
return item.label && _this.props.filterFunc(item, search);
|
263
|
+
})) : [].concat((0, _toConsumableArray2.default)(_this.props.hasAll ? [(0, _extends2.default)({
|
258
264
|
id: '_all',
|
259
265
|
label: _this.props.translations.all
|
260
266
|
}, _this.props.iconAll && {
|
261
267
|
type: 'icon',
|
262
268
|
icon: _this.props.iconAll
|
263
|
-
})] : [])
|
269
|
+
})] : []), (0, _toConsumableArray2.default)(options))));
|
264
270
|
return {
|
265
271
|
itemList: itemList
|
266
272
|
};
|
@@ -395,7 +401,8 @@ HiSelectContent.defaultProps = {
|
|
395
401
|
n_children: '%s items',
|
396
402
|
one_child: '%s item'
|
397
403
|
},
|
398
|
-
type: 'text'
|
404
|
+
type: 'text',
|
405
|
+
filterFunc: filterValue
|
399
406
|
};
|
400
407
|
HiSelectContent.propTypes = process.env.NODE_ENV !== "production" ? {
|
401
408
|
autoHeight: _propTypes.default.bool,
|
@@ -420,6 +427,11 @@ HiSelectContent.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
420
427
|
*/
|
421
428
|
fallbackImage: _propTypes.default.string,
|
422
429
|
|
430
|
+
/*
|
431
|
+
* Fonction de filtrage custom
|
432
|
+
*/
|
433
|
+
filterFunc: _propTypes.default.func,
|
434
|
+
|
423
435
|
/**
|
424
436
|
* Affiche l'élément 'All'
|
425
437
|
*/
|
@@ -172,8 +172,6 @@ function (_React$PureComponent) {
|
|
172
172
|
|
173
173
|
if (_this.props.onKeyDown) {
|
174
174
|
_this.props.onKeyDown(event);
|
175
|
-
|
176
|
-
event.preventDefault();
|
177
175
|
} else if (key === 'down' || key === 'up') {
|
178
176
|
_this.props.onClick();
|
179
177
|
} else if (key === 'enter' && _this.props.onSubmit) {
|
@@ -215,9 +213,11 @@ function (_React$PureComponent) {
|
|
215
213
|
_this.handleBlur = function (event) {
|
216
214
|
if ((!_this.input || !_this.input.contains(event.relatedTarget)) && _this.props.onBlur) {
|
217
215
|
_this.props.onBlur(event);
|
218
|
-
} else if (_this.input && (!_this.resetIcon || !_this.resetIcon.contains(event.relatedTarget))) {
|
219
|
-
_this.input.focus();
|
220
216
|
}
|
217
|
+
/* else if (this.input && (!this.resetIcon || !this.resetIcon.contains(event.relatedTarget))) {
|
218
|
+
this.input.focus();
|
219
|
+
}*/
|
220
|
+
|
221
221
|
};
|
222
222
|
|
223
223
|
_this.ref = function (el) {
|
@@ -71,7 +71,7 @@ var styles = function styles(theme) {
|
|
71
71
|
display: 'block'
|
72
72
|
},
|
73
73
|
'&$inline': {
|
74
|
-
|
74
|
+
minHeight: 40,
|
75
75
|
'& $secondaryLabel': {
|
76
76
|
display: 'inline-block'
|
77
77
|
}
|
@@ -122,12 +122,13 @@ var styles = function styles(theme) {
|
|
122
122
|
minWidth: '50%',
|
123
123
|
padding: '5px 0',
|
124
124
|
'&$listItemContentSelected': {
|
125
|
-
marginBottom:
|
125
|
+
marginBottom: 1,
|
126
126
|
marginLeft: -4
|
127
127
|
},
|
128
128
|
'& strong': {
|
129
129
|
fontWeight: theme.typography.fontWeightMedium
|
130
|
-
}
|
130
|
+
},
|
131
|
+
display: 'contents'
|
131
132
|
}),
|
132
133
|
listItemContentSelected: {},
|
133
134
|
label: {
|
@@ -157,7 +158,6 @@ var styles = function styles(theme) {
|
|
157
158
|
fontSize: 12,
|
158
159
|
textOverflow: 'ellipsis',
|
159
160
|
textAlign: 'right',
|
160
|
-
padding: '4px 0px 4px 8px',
|
161
161
|
alignSelf: 'center'
|
162
162
|
}),
|
163
163
|
img: {
|
@@ -171,9 +171,9 @@ var styles = function styles(theme) {
|
|
171
171
|
verticalAlign: 'middle'
|
172
172
|
},
|
173
173
|
labelContent: {
|
174
|
-
display: 'flex',
|
174
|
+
display: '-webkit-flex',
|
175
175
|
alignItems: 'center',
|
176
|
-
maxWidth: '
|
176
|
+
maxWidth: '85%',
|
177
177
|
'&$labelWithoutSecondaryInline': {
|
178
178
|
maxWidth: '100%'
|
179
179
|
}
|
@@ -189,9 +189,6 @@ var styles = function styles(theme) {
|
|
189
189
|
},
|
190
190
|
'&$infosWithoutSecondaryInline': {
|
191
191
|
paddingLeft: 28
|
192
|
-
},
|
193
|
-
'&$infosWithSecondaryInline': {
|
194
|
-
marginTop: -8
|
195
192
|
}
|
196
193
|
},
|
197
194
|
infosInlineWithoutSecondary: {},
|
@@ -278,7 +275,8 @@ function (_React$PureComponent) {
|
|
278
275
|
}
|
279
276
|
|
280
277
|
return _react.default.createElement("div", {
|
281
|
-
className: classes.label
|
278
|
+
className: classes.label,
|
279
|
+
title: label
|
282
280
|
}, label);
|
283
281
|
}
|
284
282
|
}, {
|
package/README.md
CHANGED
@@ -226,7 +226,7 @@ npm install -g conventional-changelog-cli
|
|
226
226
|
npm install -g cz-conventional-changelog
|
227
227
|
```
|
228
228
|
|
229
|
-
1. Changer la version dans packages/hipay-material-ui/package.json
|
229
|
+
1. Changer la version dans package.json et dans packages/hipay-material-ui/package.json
|
230
230
|
2. Générer le fichier HI-CHANGELOG.md : ```npm run changelog```
|
231
231
|
3. Commiter la release : ```git ci -am "chore(release): VERSION DATE```
|
232
232
|
4. Build : ```npm run build```
|
package/es/HiCell/CellNumeric.js
CHANGED
@@ -25,7 +25,7 @@ class CellNumeric extends React.PureComponent {
|
|
25
25
|
let title = '';
|
26
26
|
|
27
27
|
if (currency) {
|
28
|
-
displayedValue = formatCurrencyAmount(value, view, locale, currency);
|
28
|
+
displayedValue = formatCurrencyAmount(value, view, locale, currency, precision);
|
29
29
|
title = formatCurrencyAmount(value, 'l', locale, currency);
|
30
30
|
} else {
|
31
31
|
displayedValue = formatNumber(value, view, locale, precision);
|
@@ -8,7 +8,7 @@ import withStyles from '../styles/withStyles';
|
|
8
8
|
import { capitalize } from '../utils/helpers';
|
9
9
|
import { fade } from '../styles/colorManipulator';
|
10
10
|
export const styles = theme => ({
|
11
|
-
root:
|
11
|
+
root: {
|
12
12
|
display: 'inline-block',
|
13
13
|
alignItems: 'baseline',
|
14
14
|
maxWidth: '100%',
|
@@ -18,7 +18,12 @@ export const styles = theme => ({
|
|
18
18
|
overflow: 'hidden',
|
19
19
|
whiteSpace: 'nowrap',
|
20
20
|
lineHeight: 1
|
21
|
-
}
|
21
|
+
},
|
22
|
+
body1: _objectSpread({}, theme.typography.b1),
|
23
|
+
body2: _objectSpread({}, theme.typography.b2),
|
24
|
+
body3: _objectSpread({}, theme.typography.b3),
|
25
|
+
body4: _objectSpread({}, theme.typography.b4),
|
26
|
+
body5: _objectSpread({}, theme.typography.b5),
|
22
27
|
color: {
|
23
28
|
fontWeight: 400
|
24
29
|
},
|
@@ -111,6 +116,7 @@ function HiColoredLabel(props) {
|
|
111
116
|
const {
|
112
117
|
classes,
|
113
118
|
className,
|
119
|
+
fontSize,
|
114
120
|
label,
|
115
121
|
color,
|
116
122
|
active,
|
@@ -119,7 +125,7 @@ function HiColoredLabel(props) {
|
|
119
125
|
style,
|
120
126
|
theme
|
121
127
|
} = props,
|
122
|
-
other = _objectWithoutProperties(props, ["classes", "className", "label", "color", "active", "outlined", "fontWeight", "style", "theme"]);
|
128
|
+
other = _objectWithoutProperties(props, ["classes", "className", "fontSize", "label", "color", "active", "outlined", "fontWeight", "style", "theme"]);
|
123
129
|
|
124
130
|
const isHiColor = ['primary', 'secondary', 'positive', 'negative', 'middle', 'neutral'].includes(color);
|
125
131
|
const isHexColor = !isHiColor && /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color);
|
@@ -129,7 +135,12 @@ function HiColoredLabel(props) {
|
|
129
135
|
[classes.activeColor]: active,
|
130
136
|
[classes.outlined]: outlined,
|
131
137
|
[classes[`activeColor${capitalize(color)}`]]: active && isHiColor,
|
132
|
-
[classes[`color${capitalize(color)}`]]: !active && isHiColor
|
138
|
+
[classes[`color${capitalize(color)}`]]: !active && isHiColor,
|
139
|
+
[classes.body1]: fontSize >= 15,
|
140
|
+
[classes.body2]: fontSize === 14,
|
141
|
+
[classes.body3]: fontSize === 13,
|
142
|
+
[classes.body4]: fontSize === 12,
|
143
|
+
[classes.body5]: fontSize <= 11
|
133
144
|
}, className),
|
134
145
|
style: _objectSpread({}, style, isHexColor && {
|
135
146
|
backgroundColor: active ? color : fade(color, 0.08),
|
@@ -162,6 +173,11 @@ HiColoredLabel.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
162
173
|
*/
|
163
174
|
color: PropTypes.string,
|
164
175
|
|
176
|
+
/**
|
177
|
+
* Taille du text
|
178
|
+
*/
|
179
|
+
fontSize: PropTypes.number,
|
180
|
+
|
165
181
|
/**
|
166
182
|
* Graisse du text
|
167
183
|
*/
|
@@ -180,6 +196,7 @@ HiColoredLabel.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
180
196
|
HiColoredLabel.defaultProps = {
|
181
197
|
active: false,
|
182
198
|
color: 'primary',
|
199
|
+
fontSize: 15,
|
183
200
|
outlined: false
|
184
201
|
};
|
185
202
|
export default withStyles(styles, {
|
@@ -169,7 +169,8 @@ class HiDatePicker extends React.Component {
|
|
169
169
|
renderYearPickerOverlay(propsOverlay) {
|
170
170
|
const yearPickerProps = {
|
171
171
|
value: this.state.currentMonth,
|
172
|
-
onChange: this.handleCurrentMonthChange
|
172
|
+
onChange: this.handleCurrentMonthChange,
|
173
|
+
disableFutureDays: this.props.disableFutureDays
|
173
174
|
};
|
174
175
|
return React.createElement(YearPickerOverlay, _extends({
|
175
176
|
key: 'year-picker-overlay'
|
@@ -240,7 +241,10 @@ class HiDatePicker extends React.Component {
|
|
240
241
|
const inputProps = _objectSpread({}, onReset && {
|
241
242
|
onReset: this.handleReset
|
242
243
|
}, props, {
|
243
|
-
onChange: this.handleInputChange
|
244
|
+
onChange: this.handleInputChange,
|
245
|
+
HiInputProps: {
|
246
|
+
onSubmit: this.props.onSubmit
|
247
|
+
}
|
244
248
|
});
|
245
249
|
|
246
250
|
return React.createElement("div", {
|
@@ -338,6 +342,11 @@ HiDatePicker.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
338
342
|
*/
|
339
343
|
onReset: PropTypes.func,
|
340
344
|
|
345
|
+
/**
|
346
|
+
* Callback lorsque l'utilisateur tape sur "Entrée"
|
347
|
+
*/
|
348
|
+
onSubmit: PropTypes.func,
|
349
|
+
|
341
350
|
/**
|
342
351
|
* Traductions
|
343
352
|
*/
|
@@ -171,6 +171,29 @@ class HiDateRangePicker extends React.Component {
|
|
171
171
|
}));
|
172
172
|
};
|
173
173
|
|
174
|
+
this.handleKeyDown = name => event => {
|
175
|
+
if (event.key === 'Tab' && !event.shiftKey) {
|
176
|
+
let nodeName = document.activeElement.nodeName;
|
177
|
+
|
178
|
+
if (this.props[name] && nodeName === 'INPUT' && document.activeElement.nextSibling.children.length > 0) {
|
179
|
+
document.activeElement.nextSibling.focus();
|
180
|
+
} else if (name === 'from') {
|
181
|
+
this.handleDayPickerBlur('from');
|
182
|
+
this.handleDayPickerFocus('to');
|
183
|
+
this.toInput.handleInputFocus();
|
184
|
+
setTimeout(() => {
|
185
|
+
document.getElementById(`${this.props.id}-to`).focus();
|
186
|
+
}, 1);
|
187
|
+
} else if (name === 'to') {
|
188
|
+
this.handleDayPickerBlur('to');
|
189
|
+
this.toInput.handleInputBlur(event);
|
190
|
+
setTimeout(() => {
|
191
|
+
document.activeElement.blur();
|
192
|
+
}, 1);
|
193
|
+
}
|
194
|
+
}
|
195
|
+
};
|
196
|
+
|
174
197
|
this.openPanel = panel => {
|
175
198
|
this.setState({
|
176
199
|
openedPanel: panel
|
@@ -246,7 +269,7 @@ class HiDateRangePicker extends React.Component {
|
|
246
269
|
const yearPickerProps = {
|
247
270
|
value: this.state.currentMonth,
|
248
271
|
onChange: this.handleCurrentMonthChange,
|
249
|
-
|
272
|
+
disableFutureDays: this.props.disableFutureDays
|
250
273
|
};
|
251
274
|
return React.createElement(YearPickerOverlay, _extends({
|
252
275
|
key: `${name}-year-picker-overlay`
|
@@ -385,7 +408,10 @@ class HiDateRangePicker extends React.Component {
|
|
385
408
|
}, {
|
386
409
|
id: `${id}-from`,
|
387
410
|
onChange: this.handleInputChange('from'),
|
388
|
-
disabled
|
411
|
+
disabled,
|
412
|
+
HiInputProps: {
|
413
|
+
onSubmit: this.props.onSubmit
|
414
|
+
}
|
389
415
|
});
|
390
416
|
|
391
417
|
const toInputProps = _objectSpread({}, onReset && {
|
@@ -397,7 +423,10 @@ class HiDateRangePicker extends React.Component {
|
|
397
423
|
}, {
|
398
424
|
id: `${id}-to`,
|
399
425
|
onChange: this.handleInputChange('to'),
|
400
|
-
disabled
|
426
|
+
disabled,
|
427
|
+
HiInputProps: {
|
428
|
+
onSubmit: this.props.onSubmit
|
429
|
+
}
|
401
430
|
});
|
402
431
|
|
403
432
|
const toClass = classNames(classes.toInput, {
|
@@ -408,8 +437,8 @@ class HiDateRangePicker extends React.Component {
|
|
408
437
|
className: classNames(classes.root, classes.rangePickerContainer)
|
409
438
|
}, React.createElement("div", {
|
410
439
|
className: classes.fromInput,
|
411
|
-
onFocus: () => this.handleDayPickerFocus('from')
|
412
|
-
|
440
|
+
onFocus: () => this.handleDayPickerFocus('from'),
|
441
|
+
onKeyDown: this.handleKeyDown('from')
|
413
442
|
}, React.createElement("div", null, React.createElement(DayPickerInput, {
|
414
443
|
key: this.state.keyFrom,
|
415
444
|
ref: el => {
|
@@ -429,7 +458,8 @@ class HiDateRangePicker extends React.Component {
|
|
429
458
|
}))), React.createElement("div", {
|
430
459
|
className: toClass,
|
431
460
|
onFocus: () => this.handleDayPickerFocus('to'),
|
432
|
-
onBlur: () => this.handleDayPickerBlur('to')
|
461
|
+
onBlur: () => this.handleDayPickerBlur('to'),
|
462
|
+
onKeyDown: this.handleKeyDown('to')
|
433
463
|
}, React.createElement(DayPickerInput, {
|
434
464
|
key: this.state.keyTo,
|
435
465
|
ref: el => {
|
@@ -443,8 +473,7 @@ class HiDateRangePicker extends React.Component {
|
|
443
473
|
inputProps: toInputProps,
|
444
474
|
format: enableTime ? `${format} HH:mm` : format,
|
445
475
|
formatDate: MomentLocaleUtils.formatDate,
|
446
|
-
parseDate: MomentLocaleUtils.parseDate
|
447
|
-
,
|
476
|
+
parseDate: MomentLocaleUtils.parseDate,
|
448
477
|
placeholder: ''
|
449
478
|
})));
|
450
479
|
|
@@ -597,6 +626,11 @@ HiDateRangePicker.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
597
626
|
*/
|
598
627
|
onReset: PropTypes.func,
|
599
628
|
|
629
|
+
/**
|
630
|
+
* Callback lorsque l'utilisateur tape sur "Entrée"
|
631
|
+
*/
|
632
|
+
onSubmit: PropTypes.func,
|
633
|
+
|
600
634
|
/**
|
601
635
|
* Si true, le calendrier sera dans une div static plutot que dans une popper absolute
|
602
636
|
*/
|
@@ -2,7 +2,7 @@ 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 moment from 'moment';
|
5
|
+
import moment from 'moment-timezone';
|
6
6
|
import { findDOMNode } from 'react-dom';
|
7
7
|
import Grid from '@material-ui/core/Grid';
|
8
8
|
import withStyles from '../styles/withStyles';
|
@@ -52,7 +52,7 @@ export function yearAndQuarter(format, date, t) {
|
|
52
52
|
const indexM = split.findIndex(findM);
|
53
53
|
return indexY < indexM ? date.format(`${split[indexY]}${s}[${t.short_quarter}]Q`) : date.format(`[${t.short_quarter}]Q${s}${split[indexY]}`);
|
54
54
|
}
|
55
|
-
export function buildDateRangeOptionByKey(key, t, format) {
|
55
|
+
export function buildDateRangeOptionByKey(key, t, format, timezoneName) {
|
56
56
|
let from;
|
57
57
|
let label;
|
58
58
|
let info;
|
@@ -67,71 +67,71 @@ export function buildDateRangeOptionByKey(key, t, format) {
|
|
67
67
|
switch (key) {
|
68
68
|
case 'custom':
|
69
69
|
label = t.custom_period;
|
70
|
-
from = moment().subtract(15, 'day').startOf('day');
|
71
|
-
to = moment().endOf('day');
|
70
|
+
from = moment().tz(timezoneName).subtract(15, 'day').startOf('day');
|
71
|
+
to = moment().tz(timezoneName).endOf('day');
|
72
72
|
type = 'primary-highlight';
|
73
73
|
break;
|
74
74
|
|
75
75
|
case 'cd':
|
76
76
|
label = t.today;
|
77
|
-
from = moment().startOf('day');
|
78
|
-
to = moment().endOf('day');
|
77
|
+
from = moment().tz(timezoneName).startOf('day');
|
78
|
+
to = moment().tz(timezoneName).endOf('day');
|
79
79
|
info = `${from.format(format)}`;
|
80
80
|
break;
|
81
81
|
|
82
82
|
case 'pd':
|
83
83
|
label = t.yesterday;
|
84
|
-
from = moment().subtract(1, 'day').startOf('day');
|
85
|
-
to = moment().subtract(1, 'day').endOf('day');
|
84
|
+
from = moment().tz(timezoneName).subtract(1, 'day').startOf('day');
|
85
|
+
to = moment().tz(timezoneName).subtract(1, 'day').endOf('day');
|
86
86
|
info = `${from.format(format)}`;
|
87
87
|
break;
|
88
88
|
|
89
89
|
case 'cw':
|
90
90
|
label = t.current_week;
|
91
|
-
from = moment().startOf('week');
|
92
|
-
to = moment();
|
91
|
+
from = moment().tz(timezoneName).startOf('week');
|
92
|
+
to = moment().tz(timezoneName);
|
93
93
|
info = `${t.short_week}${from.format('w')}, \n ${from.format(format)} ${t.to_now}`;
|
94
94
|
break;
|
95
95
|
|
96
96
|
case 'pw':
|
97
97
|
label = t.previous_week;
|
98
|
-
from = moment().subtract(1, 'week').startOf('week');
|
99
|
-
to = moment().subtract(1, 'week').endOf('week');
|
98
|
+
from = moment().tz(timezoneName).subtract(1, 'week').startOf('week');
|
99
|
+
to = moment().tz(timezoneName).subtract(1, 'week').endOf('week');
|
100
100
|
info = `${t.short_week}${from.format('w')}, ${from.format(format)} ${t.to} ${to.format(format)}`;
|
101
101
|
break;
|
102
102
|
|
103
103
|
case 'cm':
|
104
104
|
label = t.current_month;
|
105
|
-
from = moment().startOf('month');
|
106
|
-
to = moment();
|
105
|
+
from = moment().tz(timezoneName).startOf('month');
|
106
|
+
to = moment().tz(timezoneName);
|
107
107
|
info = `${from.format(format)} ${t.to_now}, ${to.diff(from, 'days') + 1} ${t.days}`;
|
108
108
|
break;
|
109
109
|
|
110
110
|
case 'pm':
|
111
111
|
label = t.previous_month;
|
112
|
-
from = moment().subtract(1, 'month').startOf('month');
|
113
|
-
to = moment().subtract(1, 'month').endOf('month');
|
112
|
+
from = moment().tz(timezoneName).subtract(1, 'month').startOf('month');
|
113
|
+
to = moment().tz(timezoneName).subtract(1, 'month').endOf('month');
|
114
114
|
info = `${yearAndMonth(format, from)}, ${from.daysInMonth()} ${t.days}`;
|
115
115
|
break;
|
116
116
|
|
117
117
|
case 'cq':
|
118
118
|
label = t.current_quarter;
|
119
|
-
from = moment().startOf('quarter');
|
120
|
-
to = moment();
|
119
|
+
from = moment().tz(timezoneName).startOf('quarter');
|
120
|
+
to = moment().tz(timezoneName);
|
121
121
|
info = `${yearAndQuarter(format, from, t)}, ${from.format(format)} ${t.to_now}, ${to.diff(from, 'days') + 1} ${t.days}`;
|
122
122
|
break;
|
123
123
|
|
124
124
|
case 'pq':
|
125
125
|
label = t.previous_quarter;
|
126
|
-
from = moment().subtract(1, 'quarter').startOf('quarter');
|
127
|
-
to = moment().subtract(1, 'quarter').endOf('quarter');
|
126
|
+
from = moment().tz(timezoneName).subtract(1, 'quarter').startOf('quarter');
|
127
|
+
to = moment().tz(timezoneName).subtract(1, 'quarter').endOf('quarter');
|
128
128
|
info = `${yearAndQuarter(format, from, t)}, ${to.diff(from, 'days') + 1} ${t.days}`;
|
129
129
|
break;
|
130
130
|
|
131
131
|
case 'cy':
|
132
132
|
label = t.current_year;
|
133
|
-
from = moment().startOf('year');
|
134
|
-
to = moment();
|
133
|
+
from = moment().tz(timezoneName).startOf('year');
|
134
|
+
to = moment().tz(timezoneName);
|
135
135
|
info = `${from.format(format)} ${t.to_now}, ${to.diff(from, 'days') + 1} ${t.days}`;
|
136
136
|
break;
|
137
137
|
|
@@ -190,8 +190,8 @@ class HiDateRangeSelector extends React.Component {
|
|
190
190
|
const selectedOption = this.options.find(option => option.id === value);
|
191
191
|
|
192
192
|
if (selectedOption) {
|
193
|
-
this.props.onChange('from', selectedOption.from.
|
194
|
-
this.props.onChange('to', selectedOption.to.
|
193
|
+
this.props.onChange('from', new Date(selectedOption.from.format('YYYY-MM-DD HH:mm:ss')));
|
194
|
+
this.props.onChange('to', new Date(selectedOption.to.format('YYYY-MM-DD HH:mm:ss')));
|
195
195
|
this.props.onChange('fromError', false);
|
196
196
|
this.props.onChange('toError', false);
|
197
197
|
}
|
@@ -201,8 +201,7 @@ class HiDateRangeSelector extends React.Component {
|
|
201
201
|
}
|
202
202
|
};
|
203
203
|
|
204
|
-
this.
|
205
|
-
this.options = props.availableOptionKeys.map(key => buildDateRangeOptionByKey(key, props.translations, props.format));
|
204
|
+
this.options = props.availableOptionKeys.map(key => buildDateRangeOptionByKey(key, props.translations, props.format, props.timezoneName));
|
206
205
|
this.state = {
|
207
206
|
selectedPreset: props.defaultPreset,
|
208
207
|
containerWidth: 0
|
@@ -299,7 +298,8 @@ class HiDateRangeSelector extends React.Component {
|
|
299
298
|
classes: {
|
300
299
|
root: classes.dateSelect
|
301
300
|
},
|
302
|
-
staticPosition: staticPosition
|
301
|
+
staticPosition: staticPosition,
|
302
|
+
onSubmit: this.props.onSubmit
|
303
303
|
}, selectProps))), React.createElement(Grid, {
|
304
304
|
item: true,
|
305
305
|
xs: 12,
|
@@ -341,6 +341,7 @@ HiDateRangeSelector.defaultProps = {
|
|
341
341
|
format: 'YYYY-DD-MM',
|
342
342
|
minimumDate: new Date(2013, 4, 1),
|
343
343
|
// by default 1 May 2013
|
344
|
+
timezoneName: 'Europe/Paris',
|
344
345
|
translations: {
|
345
346
|
today: 'Today',
|
346
347
|
hour: 'Hour',
|
@@ -459,6 +460,11 @@ HiDateRangeSelector.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
459
460
|
*/
|
460
461
|
onChange: PropTypes.func.isRequired,
|
461
462
|
|
463
|
+
/**
|
464
|
+
* Callback lorsque l'utilisateur tape sur "Entrée"
|
465
|
+
*/
|
466
|
+
onSubmit: PropTypes.func,
|
467
|
+
|
462
468
|
/**
|
463
469
|
* true si champs obligatoire
|
464
470
|
*/
|
@@ -479,6 +485,11 @@ HiDateRangeSelector.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
479
485
|
*/
|
480
486
|
staticPosition: PropTypes.bool,
|
481
487
|
|
488
|
+
/**
|
489
|
+
* Timezone de l'utilisateur
|
490
|
+
*/
|
491
|
+
timezoneName: PropTypes.string,
|
492
|
+
|
482
493
|
/**
|
483
494
|
* Date de fin sélectionnée
|
484
495
|
*/
|
@@ -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
|
}
|