UNPKG

@atlaskit/calendar

Version:

An interactive calendar for date selection experiences.

88 lines (86 loc) • 2.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useHandleDateSelect; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _dateToString = _interopRequireDefault(require("../utils/date-to-string")); var arrowKeys = { ArrowDown: 'down', ArrowLeft: 'left', ArrowRight: 'right', ArrowUp: 'up' }; // eslint-disable-next-line @repo/internal/react/require-jsdoc function useHandleDateSelect(_ref) { var _ref$day = (0, _slicedToArray2.default)(_ref.day, 1), dayValue = _ref$day[0], _ref$month = (0, _slicedToArray2.default)(_ref.month, 1), monthValue = _ref$month[0], _ref$year = (0, _slicedToArray2.default)(_ref.year, 1), yearValue = _ref$year[0], _ref$selected = (0, _slicedToArray2.default)(_ref.selected, 2), selectedValue = _ref$selected[0], setSelectedValue = _ref$selected[1], _ref$previous = (0, _slicedToArray2.default)(_ref.previous, 2), setPreviouslySelectedValue = _ref$previous[1], onSelect = _ref.onSelect, navigate = _ref.navigate; var dateRef = (0, _react.useRef)({ day: dayValue, month: monthValue, year: yearValue }); (0, _react.useEffect)(function () { dateRef.current = { day: dayValue, month: monthValue, year: yearValue }; }, [dayValue, monthValue, yearValue]); var triggerOnSelect = (0, _react.useCallback)(function (_ref2) { var year = _ref2.year, month = _ref2.month, day = _ref2.day; var iso = (0, _dateToString.default)({ year: year, month: month, day: day }); onSelect({ day: day, month: month, year: year, iso: iso }); setPreviouslySelectedValue(selectedValue); setSelectedValue([iso]); }, [onSelect, selectedValue, setPreviouslySelectedValue, setSelectedValue]); var handleClickDay = (0, _react.useCallback)(function (_ref3) { var year = _ref3.year, month = _ref3.month, day = _ref3.day; triggerOnSelect({ year: year, month: month, day: day }); }, [triggerOnSelect]); var handleContainerKeyDown = (0, _react.useCallback)(function (e) { var key = e.key; var arrowKey = arrowKeys[key]; if (key === 'Enter' || key === ' ') { e.preventDefault(); triggerOnSelect(dateRef.current); } else if (arrowKey) { e.preventDefault(); navigate(arrowKey); } }, [triggerOnSelect, navigate]); return { handleClickDay: handleClickDay, handleContainerKeyDown: handleContainerKeyDown }; }