UNPKG

@razorpay/blade

Version:

The Design System that powers Razorpay

167 lines (164 loc) 5.87 kB
import _slicedToArray from '@babel/runtime/helpers/slicedToArray'; import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray'; import dayjs from 'dayjs'; import { useState, useEffect } from 'react'; import { useUncontrolledDates } from './useControlledDates.js'; function isInRange(date, range) { var _range = _toConsumableArray(range).sort(function (a, b) { return a.getTime() - b.getTime(); }); return dayjs(_range[0]).startOf('day').subtract(1, 'ms').isBefore(date) && dayjs(_range[1]).endOf('day').add(1, 'ms').isAfter(date); } function useDatesState(_ref) { var type = _ref.type, level = _ref.level, value = _ref.value, defaultValue = _ref.defaultValue, onChange = _ref.onChange, allowSingleDateInRange = _ref.allowSingleDateInRange, allowDeselect = _ref.allowDeselect, onMouseLeave = _ref.onMouseLeave, _ref$applyTimezone = _ref.applyTimezone, applyTimezone = _ref$applyTimezone === void 0 ? true : _ref$applyTimezone; var _useUncontrolledDates = useUncontrolledDates({ type: type, value: value, defaultValue: defaultValue, onChange: onChange, applyTimezone: applyTimezone }), _useUncontrolledDates2 = _slicedToArray(_useUncontrolledDates, 2), _value = _useUncontrolledDates2[0], setValue = _useUncontrolledDates2[1]; var _useState = useState(type === 'range' ? _value[0] && !_value[1] ? _value[0] : null : null), _useState2 = _slicedToArray(_useState, 2), pickedDate = _useState2[0], setPickedDate = _useState2[1]; var _useState3 = useState(null), _useState4 = _slicedToArray(_useState3, 2), hoveredDate = _useState4[0], setHoveredDate = _useState4[1]; var onDateChange = function onDateChange(date, changeValue) { var shouldChangeValue = (changeValue === 'month' || changeValue === 'year') && type === 'default'; if (shouldChangeValue) { var prevDate = _value || new Date(); var newDate = new Date(prevDate); if (changeValue === 'month') { newDate.setMonth(date.getMonth()); } else if (changeValue === 'year') { newDate.setFullYear(date.getFullYear()); } date = newDate; } if (type === 'range') { if (pickedDate instanceof Date && !_value[1]) { if (dayjs(date).isSame(pickedDate, level) && !allowSingleDateInRange) { setPickedDate(null); setHoveredDate(null); setValue([null, null]); return; } var result = [date, pickedDate]; result.sort(function (a, b) { return a.getTime() - b.getTime(); }); setValue(result); setHoveredDate(null); setPickedDate(null); return; } if (_value[0] && !_value[1] && dayjs(date).isSame(_value[0], level) && !allowSingleDateInRange) { setPickedDate(null); setHoveredDate(null); setValue([null, null]); return; } setValue([date, null]); setHoveredDate(null); setPickedDate(date); return; } if (_value && allowDeselect && dayjs(date).isSame(_value, level)) { setValue(null); } else { setValue(date); } }; var isDateInRange = function isDateInRange(date) { if (pickedDate instanceof Date && hoveredDate instanceof Date) { return isInRange(date, [hoveredDate, pickedDate]); } if (_value[0] instanceof Date && _value[1] instanceof Date) { return isInRange(date, _value); } return false; }; var handleReset = function handleReset() { setPickedDate(null); setHoveredDate(null); setValue([null, null]); }; var onRootMouseLeave = type === 'range' ? function (event) { onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(event); setHoveredDate(null); } : onMouseLeave; var isFirstInRange = function isFirstInRange(date) { if (!(_value[0] instanceof Date)) { return false; } if (dayjs(date).isSame(_value[0], level)) { return !(hoveredDate && dayjs(hoveredDate).isBefore(_value[0])); } return false; }; var isLastInRange = function isLastInRange(date) { if (_value[1] instanceof Date) { return dayjs(date).isSame(_value[1], level); } if (!(_value[0] instanceof Date) || !hoveredDate) { return false; } return dayjs(hoveredDate).isBefore(_value[0]) && dayjs(date).isSame(_value[0], level); }; var getControlProps = function getControlProps(date) { if (type === 'range') { return { selected: _value.some(function (selection) { return selection && dayjs(selection).isSame(date, level); }), inRange: isDateInRange(date), firstInRange: isFirstInRange(date), lastInRange: isLastInRange(date), 'data-autofocus': !!_value[0] && dayjs(_value[0]).isSame(date, level) || undefined, 'data-celltype': level, 'data-date': "".concat(date.getMonth(), "-").concat(date.getDate()) }; } var selected = dayjs(_value).isSame(date, level); return { selected: selected, 'data-autofocus': selected || undefined, 'data-celltype': level, 'data-date': "".concat(date.getMonth(), "-").concat(date.getDate()) }; }; var onHoveredDateChange = type === 'range' && pickedDate ? setHoveredDate : function () {}; useEffect(function () { if (type === 'range' && !_value[0] && !_value[1]) { setPickedDate(null); } }, [value]); return { onDateChange: onDateChange, onRootMouseLeave: onRootMouseLeave, onHoveredDateChange: onHoveredDateChange, getControlProps: getControlProps, setPickedDate: setPickedDate, pickedDate: pickedDate, controlledValue: _value, setControlledValue: setValue, handleReset: handleReset }; } export { useDatesState }; //# sourceMappingURL=useDatesState.js.map