@talend/react-components
Version:
Set of react components.
102 lines (101 loc) • 3.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DateTimeRangePickerException = DateTimeRangePickerException;
exports.default = void 0;
var _react = require("react");
var _isBefore = require("date-fns/isBefore");
var _isEqual = require("date-fns/isEqual");
var _propTypes = _interopRequireDefault(require("prop-types"));
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 DateTimeRangePickerException(code, message) {
this.message = (0, _errorMessages.default)(message);
this.code = code;
}
function DateTimeRangeManager(props) {
const {
onChange,
startDateTime,
endDateTime
} = props;
const initialState = {
startDateTime,
endDateTime
};
const [state, setState] = (0, _react.useState)(initialState);
const [startDateErrors, setStartDateErrors] = (0, _react.useState)([]);
const [endDateErrors, setEndDateErrors] = (0, _react.useState)([]);
(0, _react.useEffect)(() => {
if (!(0, _isEqual.isEqual)(state.startDateTime, startDateTime) || !(0, _isEqual.isEqual)(state.endDateTime, endDateTime)) {
setState({
startDateTime,
endDateTime
});
}
}, [startDateTime, endDateTime]);
function onRangeChange(event, nextState, origin) {
const errors = [...(nextState.errors || [])];
if (nextState.startDateTime && nextState.endDateTime && !isNaN(nextState.startDateTime) && !isNaN(nextState.endDateTime)) {
if (!(0, _isBefore.isBefore)(nextState.startDateTime, nextState.endDateTime)) {
errors.push(new DateTimeRangePickerException('INVALID_RANGE_START_AFTER_END', 'INVALID_RANGE_START_AFTER_END'));
}
}
const payload = {
...nextState,
origin,
errors,
errorMessage: errors[0] ? errors[0].message : null
};
onChange(event, payload);
}
function onStartChange(event, {
datetime,
errors
}) {
setStartDateErrors(errors);
const allErrors = [...(errors || []), ...(endDateErrors || [])];
const nextState = {
...state,
startDateTime: datetime,
errors: allErrors
};
setState(nextState);
onRangeChange(event, nextState, 'RANGE_START');
}
function onEndChange(event, {
datetime,
errors
}) {
setEndDateErrors(errors);
const allErrors = [...(startDateErrors || []), ...(errors || [])];
const nextState = {
...state,
endDateTime: datetime,
errors: allErrors
};
setState(nextState);
onRangeChange(event, nextState, 'RANGE_END');
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Context.DateTimeRangeContext.Provider, {
value: {
startDateTime: state.startDateTime,
endDateTime: state.endDateTime,
onStartChange,
onEndChange
},
children: props.children
});
}
DateTimeRangeManager.displayName = 'DateTimeRange.Manager';
DateTimeRangeManager.propTypes = {
children: _propTypes.default.element,
startDateTime: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]),
endDateTime: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]),
onChange: _propTypes.default.func.isRequired
};
var _default = exports.default = DateTimeRangeManager;
//# sourceMappingURL=Manager.component.js.map