@talend/react-components
Version:
Set of react components.
201 lines (200 loc) • 5.75 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DateRangePickerException = DateRangePickerException;
exports.default = void 0;
var _react = require("react");
var _isBefore = require("date-fns/isBefore");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _dateExtraction = require("../../Date/date-extraction");
var _errorMessages = _interopRequireDefault(require("../../shared/error-messages"));
var _Context = require("../Context");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function DateRangePickerException(code, message) {
this.message = (0, _errorMessages.default)(message);
this.code = code;
}
function extractRangeParts(startDate, endDate, options) {
const startDateParts = (0, _dateExtraction.extractDate)(startDate, options);
const endDateParts = (0, _dateExtraction.extractDate)(endDate, options);
return {
startDate: {
value: startDateParts.localDate,
textInput: startDateParts.textInput
},
endDate: {
value: endDateParts.localDate,
textInput: endDateParts.textInput
},
errors: startDateParts.errors.concat(endDateParts.errors),
errorMessage: startDateParts.errorMessage || endDateParts.errorMessage
};
}
function ContextualManager(props) {
const options = {
dateFormat: props.dateFormat
};
const initialState = extractRangeParts(props.startDate, props.endDate, options);
const [state, setState] = (0, _react.useState)(initialState);
(0, _react.useEffect)(() => {
if (props.startDate !== state.startDate.value || props.endDate !== state.endDate.value) {
const parts = extractRangeParts(props.startDate, props.endDate, options);
setState(parts);
}
}, [props.startDate, props.endDate]);
function onChange(event, nextState) {
const errors = [...(nextState.errors || [])];
const startDate = nextState.startDate.value;
const endDate = nextState.endDate.value;
if (startDate && endDate) {
if (!(0, _isBefore.isBefore)(startDate, endDate)) {
errors.push(new DateRangePickerException('INVALID_RANGE_START_AFTER_END', 'INVALID_RANGE_START_AFTER_END'));
}
}
if (props.onChange) {
const payload = {
startDate,
endDate,
errors,
errorMessage: errors[0] ? errors[0].message : null,
origin: nextState.origin
};
props.onChange(event, payload);
}
}
function onStartChange(event, {
date: startDate
}) {
const {
date,
textInput,
errors,
errorMessage
} = (0, _dateExtraction.extractFromDate)(startDate, options);
const nextState = {};
nextState.startDate = {
value: date,
textInput
};
nextState.errors = errors;
nextState.errorMessage = errorMessage;
setState(prevState => ({
...prevState,
...nextState
}));
onChange(event, {
...state,
...nextState,
origin: 'START_PICKER'
});
}
function onEndChange(event, {
date: endDate
}) {
const {
date,
textInput,
errors,
errorMessage
} = (0, _dateExtraction.extractFromDate)(endDate, options);
const nextState = {};
nextState.endDate = {
value: date,
textInput
};
nextState.errors = errors;
nextState.errorMessage = errorMessage;
setState(prevState => ({
...prevState,
...nextState
}));
onChange(event, {
...state,
...nextState,
origin: 'END_PICKER'
});
}
function onStartInputChange(event) {
const userInput = event.target.value;
const {
localDate,
textInput,
errors,
errorMessage
} = (0, _dateExtraction.extractPartsFromTextInput)(userInput, options);
const nextState = {
startDate: {
value: localDate,
textInput
},
errors,
errorMessage
};
setState(prevState => ({
...prevState,
...nextState
}));
onChange(event, {
...state,
...nextState,
origin: 'START_INPUT'
});
}
function onEndInputChange(event) {
const userInput = event.target.value;
const {
localDate,
textInput,
errors,
errorMessage
} = (0, _dateExtraction.extractPartsFromTextInput)(userInput, options);
const nextState = {
endDate: {
value: localDate,
textInput
},
errors,
errorMessage
};
setState(prevState => ({
...prevState,
...nextState
}));
onChange(event, {
...state,
...nextState,
origin: 'END_INPUT'
});
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Context.DateRangeContext.Provider, {
value: {
startDate: state.startDate,
endDate: state.endDate,
inputManagement: {
onStartChange: onStartInputChange,
onEndChange: onEndInputChange,
placeholder: props.dateFormat
},
pickerManagement: {
onStartChange,
onEndChange
}
},
children: props.children
});
}
ContextualManager.defaultProps = {
dateFormat: 'YYYY-MM-DD'
};
ContextualManager.displayName = 'DateRange.Manager';
ContextualManager.propTypes = {
children: _propTypes.default.element,
startDate: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]),
endDate: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]),
dateFormat: _propTypes.default.string,
onChange: _propTypes.default.func.isRequired
};
var _default = exports.default = ContextualManager;
//# sourceMappingURL=Manager.component.js.map