@appannie/react-infinite-calendar
Version:
Infinite scrolling date-picker built with React, with localization, themes, keyboard support, and more.
148 lines (130 loc) • 4.64 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
var dateFnV2 = require('../utils/dateFnV2.js');
var recompose = require('recompose');
var index = require('./index.js');
var index$2 = require('../utils/index.js');
var index$1 = require('./Range/index.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
var isTouchDevice = false;
var withMonthRange = recompose.compose(index.withDefaultProps, recompose.withState('scrollDate', 'setScrollDate', index$1.getInitialDate), recompose.withState('selectionStart', 'setSelectionStart', null), index$2.withImmutableProps(function (_ref) {
var YearsComponent = _ref.YearsComponent;
return {
YearsComponent: YearsComponent
};
}), recompose.withProps(function (_ref2) {
var passThrough = _ref2.passThrough,
selected = _ref2.selected,
props = _objectWithoutProperties__default['default'](_ref2, ["passThrough", "selected"]);
return {
/* eslint-disable sort-keys */
passThrough: _objectSpread__default['default'](_objectSpread__default['default']({}, passThrough), {}, {
Years: {
onSelect: function onSelect(date) {
return handleSelect(date, _objectSpread__default['default']({
selected: selected
}, props));
},
handlers: {
onMouseOver: !isTouchDevice && props.selectionStart ? function (e) {
return handleMouseOver(e, _objectSpread__default['default']({
selected: selected
}, props));
} : null
}
}
}),
selected: {
start: selected && selected.start,
end: selected && selected.end
}
};
}));
function handleSelect(date, _ref3) {
var onSelect = _ref3.onSelect,
selectionStart = _ref3.selectionStart,
setSelectionStart = _ref3.setSelectionStart,
min = _ref3.min,
max = _ref3.max,
minDate = _ref3.minDate,
maxDate = _ref3.maxDate;
if (selectionStart) {
onSelect(_objectSpread__default['default']({
eventType: index$1.EVENT_TYPE.END
}, getMonthRangeDate({
start: selectionStart,
end: date,
minSelected: minDate,
maxSelected: maxDate,
minScrolled: min,
maxScrolled: max
})));
setSelectionStart(null);
} else {
onSelect(_objectSpread__default['default']({
eventType: index$1.EVENT_TYPE.START
}, getMonthRangeDate({
start: date,
end: date,
minSelected: minDate,
maxSelected: maxDate,
minScrolled: min,
maxScrolled: max
})));
setSelectionStart(date);
}
}
function handleMouseOver(e, _ref4) {
var onSelect = _ref4.onSelect,
selectionStart = _ref4.selectionStart;
e.stopPropagation();
var month = e.target.getAttribute('data-month');
if (!month) {
return;
}
onSelect(_objectSpread__default['default']({
eventType: index$1.EVENT_TYPE.HOVER
}, getMonthRangeDate({
start: selectionStart,
end: month
})));
}
function getMonthRangeDate(_ref5) {
var start = _ref5.start,
end = _ref5.end,
minSelected = _ref5.minSelected,
maxSelected = _ref5.maxSelected,
minScrolled = _ref5.minScrolled,
maxScrolled = _ref5.maxScrolled;
var sortedDate = index$1.getSortedSelection({
start: start,
end: end
});
var compareStartDate = [];
var compareEndDate = [];
if (sortedDate.start) {
compareStartDate.push(sortedDate.start, dateFnV2.startOfMonth(sortedDate.start));
minScrolled && compareStartDate.push(minScrolled);
minSelected && compareStartDate.push(minSelected);
}
if (sortedDate.end) {
compareEndDate.push(dateFnV2.endOfMonth(sortedDate.end));
maxScrolled && compareEndDate.push(maxScrolled);
maxSelected && compareEndDate.push(maxSelected);
}
return {
start: compareStartDate.length > 0 ? dateFnV2.max.apply(void 0, compareStartDate) : sortedDate.start,
end: compareEndDate.length > 0 ? dateFnV2.min.apply(void 0, compareEndDate) : sortedDate.end
};
}
if (typeof window !== 'undefined') {
window.addEventListener('touchstart', function onTouch() {
isTouchDevice = true;
window.removeEventListener('touchstart', onTouch, false);
});
}
exports.withMonthRange = withMonthRange;