UNPKG

@appannie/react-infinite-calendar

Version:

Infinite scrolling date-picker built with React, with localization, themes, keyboard support, and more.

111 lines (92 loc) 3.32 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _objectSpread = require('@babel/runtime/helpers/objectSpread2'); var recompose = require('recompose'); var dateFnV2 = require('../utils/dateFnV2.js'); var index = require('../utils/index.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread); var enhanceDay = recompose.withProps(function (props) { return { isHighlighted: props.highlightedDate === props.date }; }); var withKeyboardSupport = recompose.compose(recompose.withState('highlightedDate', 'setHighlight'), index.withImmutableProps(function (_ref) { var DayComponent = _ref.DayComponent; return { DayComponent: enhanceDay(DayComponent) }; }), recompose.withHandlers({ onKeyDown: function onKeyDown(props) { return function (e) { return handleKeyDown(e, props); }; } }), recompose.withProps(function (_ref2) { var highlightedDate = _ref2.highlightedDate, onKeyDown = _ref2.onKeyDown, passThrough = _ref2.passThrough, setHighlight = _ref2.setHighlight; return { passThrough: _objectSpread__default['default'](_objectSpread__default['default']({}, passThrough), {}, { Day: _objectSpread__default['default'](_objectSpread__default['default']({}, passThrough.Day), {}, { highlightedDate: dateFnV2.format(highlightedDate, 'yyyy-MM-dd'), onClick: function onClick(date) { setHighlight(null); passThrough.Day.onClick(date); } }), rootNode: { onKeyDown: onKeyDown } }) }; })); function handleKeyDown(e, props) { var minDate = props.minDate, maxDate = props.maxDate, onClick = props.passThrough.Day.onClick, setScrollDate = props.setScrollDate, setHighlight = props.setHighlight; var highlightedDate = getInitialDate(props); var delta = 0; if ([index.keyCodes.left, index.keyCodes.up, index.keyCodes.right, index.keyCodes.down].indexOf(e.keyCode) > -1 && typeof e.preventDefault === 'function') { e.preventDefault(); } switch (e.keyCode) { case index.keyCodes.enter: onClick && onClick(highlightedDate); return; case index.keyCodes.left: delta = -1; break; case index.keyCodes.right: delta = +1; break; case index.keyCodes.down: delta = +7; break; case index.keyCodes.up: delta = -7; break; default: delta = 0; } if (delta) { var newHighlightedDate = dateFnV2.addDays(highlightedDate, delta); // Make sure the new highlighted date isn't before min / max if (dateFnV2.isBefore(newHighlightedDate, minDate)) { newHighlightedDate = new Date(minDate); } else if (dateFnV2.isAfter(newHighlightedDate, maxDate)) { newHighlightedDate = new Date(maxDate); } setScrollDate(newHighlightedDate); setHighlight(newHighlightedDate); } } function getInitialDate(_ref3) { var highlightedDate = _ref3.highlightedDate, selected = _ref3.selected, displayDate = _ref3.displayDate; return highlightedDate || selected.start || displayDate || selected || new Date(); } exports.withKeyboardSupport = withKeyboardSupport;