UNPKG

@talend/react-components

Version:
102 lines (101 loc) 3.54 kB
"use strict"; 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