@atlaskit/calendar
Version:
An interactive calendar for date selection experiences.
76 lines (75 loc) • 2.27 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import { useCallback, useEffect, useRef } from 'react';
import { arrowKeys } from '../constants';
import dateToString from '../utils/date-to-string';
// eslint-disable-next-line @repo/internal/react/require-jsdoc
export default function useHandleDateSelect(_ref) {
var _ref$day = _slicedToArray(_ref.day, 1),
dayValue = _ref$day[0],
_ref$month = _slicedToArray(_ref.month, 1),
monthValue = _ref$month[0],
_ref$year = _slicedToArray(_ref.year, 1),
yearValue = _ref$year[0],
_ref$selected = _slicedToArray(_ref.selected, 2),
selectedValue = _ref$selected[0],
setSelectedValue = _ref$selected[1],
_ref$previous = _slicedToArray(_ref.previous, 2),
setPreviouslySelectedValue = _ref$previous[1],
onSelect = _ref.onSelect,
navigate = _ref.navigate;
var dateRef = useRef({
day: dayValue,
month: monthValue,
year: yearValue
});
useEffect(function () {
dateRef.current = {
day: dayValue,
month: monthValue,
year: yearValue
};
}, [dayValue, monthValue, yearValue]);
var triggerOnSelect = useCallback(function (_ref2) {
var year = _ref2.year,
month = _ref2.month,
day = _ref2.day;
var iso = dateToString({
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 = useCallback(function (_ref3) {
var year = _ref3.year,
month = _ref3.month,
day = _ref3.day;
triggerOnSelect({
year: year,
month: month,
day: day
});
}, [triggerOnSelect]);
var handleContainerKeyDown = 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
};
}