UNPKG

@appannie/react-infinite-calendar

Version:

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

104 lines (90 loc) 3.85 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray'); var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties'); var recompose = require('recompose'); var index = require('./index.js'); var index$1 = require('../utils/index.js'); var withMultipleDates$1 = require('../Header/withMultipleDates.js'); var dateFnV2 = require('../utils/dateFnV2.js'); var parse = require('../utils/parse.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray); var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties); var enhanceDay = recompose.withPropsOnChange(['selected'], function (props) { return { isSelected: props.selected.indexOf(props.date) !== -1 }; }); // Enhance year component var enhanceYears = recompose.withProps(function (_ref) { var displayDate = _ref.displayDate; return { selected: displayDate ? parse.parseDate(displayDate) : null }; }); // Enhancer to handle selecting and displaying multiple dates var withMultipleDates = recompose.compose(index.withDefaultProps, recompose.withState('scrollDate', 'setScrollDate', getInitialDate), recompose.withState('displayDate', 'setDisplayDate', getInitialDate), index$1.withImmutableProps(function (_ref2) { var DayComponent = _ref2.DayComponent, HeaderComponent = _ref2.HeaderComponent, YearsComponent = _ref2.YearsComponent; return { DayComponent: enhanceDay(DayComponent), HeaderComponent: withMultipleDates$1['default'](HeaderComponent), YearsComponent: enhanceYears(YearsComponent) }; }), recompose.withProps(function (_ref3) { var displayDate = _ref3.displayDate, onSelect = _ref3.onSelect, setDisplayDate = _ref3.setDisplayDate; _ref3.scrollToDate; var props = _objectWithoutProperties__default['default'](_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 index$1.sanitizeDate(date, props); }).map(function (date) { return dateFnV2.format(date, 'yyyy-MM-dd'); }) }; })); function handleSelect(date, _ref4) { var onSelect = _ref4.onSelect, setDisplayDate = _ref4.setDisplayDate; onSelect(date); setDisplayDate(date); } function handleYearSelect(date, callback) { callback(parse.parseDate(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 dateFnV2.format(date, 'yyyy-MM-dd'); }); var index = selectedMap.indexOf(dateFnV2.format(date, 'yyyy-MM-dd')); return index === -1 ? [].concat(_toConsumableArray__default['default'](selected), [date]) : [].concat(_toConsumableArray__default['default'](selected.slice(0, index)), _toConsumableArray__default['default'](selected.slice(index + 1))); } exports.defaultMultipleDateInterpolation = defaultMultipleDateInterpolation; exports.enhanceDay = enhanceDay; exports.withMultipleDates = withMultipleDates;