UNPKG

@braineet/ui

Version:

Braineet design system

114 lines 4.94 kB
var _excluded = ["value", "form", "field", "minDate", "onChange", "disabled", "autoFocus", "endDateProps", "startDateProps"]; function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } 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 } from "react/jsx-runtime"; import { 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;