@atlaskit/calendar
Version:
An interactive calendar for date selection experiences.
88 lines (86 loc) • 2.7 kB
JavaScript
"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
};
}