UNPKG

react-infinite-calendar

Version:

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

128 lines (97 loc) 4.24 kB
'use strict'; exports.__esModule = true; exports.withMultipleDates = exports.enhanceDay = undefined; var _withState2 = require('recompose/withState'); var _withState3 = _interopRequireDefault(_withState2); var _withPropsOnChange2 = require('recompose/withPropsOnChange'); var _withPropsOnChange3 = _interopRequireDefault(_withPropsOnChange2); var _withProps2 = require('recompose/withProps'); var _withProps3 = _interopRequireDefault(_withProps2); var _compose2 = require('recompose/compose'); var _compose3 = _interopRequireDefault(_compose2); exports.defaultMultipleDateInterpolation = defaultMultipleDateInterpolation; var _ = require('./'); var _utils = require('../utils'); var _withMultipleDates = require('../Header/withMultipleDates'); var _withMultipleDates2 = _interopRequireDefault(_withMultipleDates); var _format = require('date-fns/format'); var _format2 = _interopRequireDefault(_format); var _parse = require('date-fns/parse'); var _parse2 = _interopRequireDefault(_parse); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } // Enhance Day component to display selected state based on an array of selected dates var enhanceDay = exports.enhanceDay = (0, _withPropsOnChange3.default)(['selected'], function (props) { return { isSelected: props.selected.indexOf(props.date) !== -1 }; }); // Enhance year component var enhanceYears = (0, _withProps3.default)(function (_ref) { var displayDate = _ref.displayDate; return { selected: displayDate ? (0, _parse2.default)(displayDate) : null }; }); // Enhancer to handle selecting and displaying multiple dates var withMultipleDates = (0, _compose3.default)(_.withDefaultProps, (0, _withState3.default)('scrollDate', 'setScrollDate', getInitialDate), (0, _withState3.default)('displayDate', 'setDisplayDate', getInitialDate), (0, _utils.withImmutableProps)(function (_ref2) { var DayComponent = _ref2.DayComponent, HeaderComponent = _ref2.HeaderComponent, YearsComponent = _ref2.YearsComponent; return { DayComponent: enhanceDay(DayComponent), HeaderComponent: (0, _withMultipleDates2.default)(HeaderComponent), YearsComponent: enhanceYears(YearsComponent) }; }), (0, _withProps3.default)(function (_ref3) { var displayDate = _ref3.displayDate, onSelect = _ref3.onSelect, setDisplayDate = _ref3.setDisplayDate, scrollToDate = _ref3.scrollToDate, props = _objectWithoutProperties(_ref3, ['displayDate', 'onSelect', 'setDisplayDate', 'scrollToDate']); return { passThrough: { Day: { onClick: function onClick(date) { return handleSelect(date, { onSelect: onSelect, setDisplayDate: setDisplayDate }); } }, Header: { setDisplayDate: setDisplayDate }, Years: { displayDate: displayDate, onSelect: function onSelect(year, e, callback) { return handleYearSelect(year, callback); }, selected: displayDate } }, selected: props.selected.filter(function (date) { return (0, _utils.sanitizeDate)(date, props); }).map(function (date) { return (0, _format2.default)(date, 'YYYY-MM-DD'); }) }; })); exports.withMultipleDates = withMultipleDates; function handleSelect(date, _ref4) { var onSelect = _ref4.onSelect, setDisplayDate = _ref4.setDisplayDate; onSelect(date); setDisplayDate(date); } function handleYearSelect(date, callback) { callback((0, _parse2.default)(date)); } function getInitialDate(_ref5) { var selected = _ref5.selected; return selected.length ? selected[0] : new Date(); } function defaultMultipleDateInterpolation(date, selected) { var selectedMap = selected.map(function (date) { return (0, _format2.default)(date, 'YYYY-MM-DD'); }); var index = selectedMap.indexOf((0, _format2.default)(date, 'YYYY-MM-DD')); return index === -1 ? [].concat(selected, [date]) : [].concat(selected.slice(0, index), selected.slice(index + 1)); }