UNPKG

@braineet/ui

Version:

Braineet design system

113 lines 4.73 kB
var _excluded = ["value", "form", "field", "minDate", "onChange", "disabled", "autoFocus", "endDateProps", "startDateProps"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } import React, { useState, useRef } from 'react'; import Button from '../button'; import { DatePicker, convertUTCToLocalDate, convertLocalToUTCDate } from '../datepicker'; import Icon from '../icon'; import RangeDateInput from './RangeDateInput'; import { RangeContainer } from './RangeDatePicker.styles'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; var DatePickerRange = function DatePickerRange(_ref) { var v = _ref.value, form = _ref.form, field = _ref.field, minDate = _ref.minDate, onChange = _ref.onChange, disabled = _ref.disabled, autoFocus = _ref.autoFocus, endDateProps = _ref.endDateProps, startDateProps = _ref.startDateProps, restProps = _objectWithoutPropertiesLoose(_ref, _excluded); var value = (field == null ? void 0 : field.value) || v; var startRef = useRef(); var endRef = useRef(); var _useState = useState((value == null ? void 0 : value[0]) || null), startDate = _useState[0], setStartDate = _useState[1]; var _useState2 = useState((value == null ? void 0 : value[1]) || null), endDate = _useState2[0], setEndDate = _useState2[1]; var focusEnd = React.useCallback(function () { startRef.current.setOpen(false); endRef.current.setFocus(); }, [startRef, endRef]); var focusStart = React.useCallback(function () { endRef.current.setOpen(false); startRef.current.setFocus(); }, [startRef, endRef]); var handleChange = function handleChange(date, start) { var dates = [convertLocalToUTCDate(start ? date : startDate), convertLocalToUTCDate(start ? endDate : date)]; if (start) { if (date) focusEnd(); if (!value) setStartDate(date || null); } else if (!value) setEndDate(date || null); if (onChange) onChange(dates); if (field != null && field.name && form) form.setFieldValue(field == null ? void 0 : field.name, dates); }; React.useEffect(function () { if (value) { setStartDate(value[0] ? new Date(value[0]) : null); setEndDate(value[1] ? new Date(value[1]) : null); } }, [value]); var handleKeyDown = function handleKeyDown(e, start) { if (e.key === 'Tab' && !e.shiftKey && start) { e.preventDefault(); focusEnd(); } if (e.key === 'Tab' && e.shiftKey && !start) { e.preventDefault(); focusStart(); } }; return /*#__PURE__*/_jsxs(RangeContainer, { children: [/*#__PURE__*/_jsx(DatePicker, _extends({ ref: startRef, selected: convertUTCToLocalDate(startDate), startDate: convertUTCToLocalDate(startDate), endDate: convertUTCToLocalDate(endDate), selectsStart: true, onChange: function onChange(date) { return handleChange(date, true); }, onKeyDown: function onKeyDown(e) { return handleKeyDown(e, true); }, customInput: /*#__PURE__*/_jsx(RangeDateInput, _extends({}, startDateProps == null ? void 0 : startDateProps.inputProps)), minDate: minDate, autoFocus: autoFocus, monthsShown: 2, placement: "bottom-start", disabled: disabled }, restProps, startDateProps)), /*#__PURE__*/_jsx(Icon, { name: "arrow_right_small" }), /*#__PURE__*/_jsx(DatePicker, _extends({ ref: endRef, selected: convertUTCToLocalDate(endDate), startDate: convertUTCToLocalDate(startDate), endDate: convertUTCToLocalDate(endDate), selectsEnd: true, onChange: function onChange(date) { return handleChange(date, false); }, onKeyDown: function onKeyDown(e) { return handleKeyDown(e, false); }, minDate: startDate || minDate, customInput: /*#__PURE__*/_jsx(RangeDateInput, _extends({}, endDateProps == null ? void 0 : endDateProps.inputProps)), showPreviousMonths: false, monthsShown: 2, placement: "bottom-end", openToDate: endDate || startDate, disabled: disabled }, restProps, endDateProps)), /*#__PURE__*/_jsx(Button, { tabIndex: "-1", icon: "date", onClick: focusStart, margin: "0 2px", disabled: disabled })] }); }; export default DatePickerRange;