UNPKG

react-infinite-calendar

Version:

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

70 lines (60 loc) 2.26 kB
import _withState from 'recompose/withState'; import _withPropsOnChange from 'recompose/withPropsOnChange'; import _withProps from 'recompose/withProps'; import _compose from 'recompose/compose'; function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } import { withDefaultProps } from './'; import { sanitizeDate, withImmutableProps } from '../utils'; import format from 'date-fns/format'; import parse from 'date-fns/parse'; export var enhanceDay = _withPropsOnChange(['selected'], function (props) { return { isSelected: props.selected === props.date }; }); var enhanceYear = _withPropsOnChange(['selected'], function (_ref) { var selected = _ref.selected; return { selected: parse(selected) }; }); // Enhancer to handle selecting and displaying a single date var withDateSelection = _compose(withDefaultProps, withImmutableProps(function (_ref2) { var DayComponent = _ref2.DayComponent, onSelect = _ref2.onSelect, setScrollDate = _ref2.setScrollDate, YearsComponent = _ref2.YearsComponent; return { DayComponent: enhanceDay(DayComponent), YearsComponent: enhanceYear(YearsComponent) }; }), _withState('scrollDate', 'setScrollDate', function (props) { return props.selected || new Date(); }), _withProps(function (_ref3) { var _onSelect = _ref3.onSelect, setScrollDate = _ref3.setScrollDate, props = _objectWithoutProperties(_ref3, ['onSelect', 'setScrollDate']); var selected = sanitizeDate(props.selected, props); return { passThrough: { Day: { onClick: _onSelect }, Years: { onSelect: function onSelect(year) { return handleYearSelect(year, { onSelect: _onSelect, selected: selected, setScrollDate: setScrollDate }); } } }, selected: selected && format(selected, 'YYYY-MM-DD') }; })); export { withDateSelection }; function handleYearSelect(date, _ref4) { var setScrollDate = _ref4.setScrollDate, selected = _ref4.selected, onSelect = _ref4.onSelect; var newDate = parse(date); onSelect(newDate); setScrollDate(newDate); }