react-infinite-calendar
Version:
Infinite scrolling date-picker built with React, with localization, themes, keyboard support, and more.
128 lines (111 loc) • 3.7 kB
JavaScript
'use strict';
exports.__esModule = true;
exports.default = defaultSelectionRenderer;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _CSSTransitionGroup = require('react-transition-group/CSSTransitionGroup');
var _CSSTransitionGroup2 = _interopRequireDefault(_CSSTransitionGroup);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _parse = require('date-fns/parse');
var _parse2 = _interopRequireDefault(_parse);
var _format = require('date-fns/format');
var _format2 = _interopRequireDefault(_format);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var styles = {
'root': 'Cal__Header__root',
'landscape': 'Cal__Header__landscape',
'dateWrapper': 'Cal__Header__dateWrapper',
'day': 'Cal__Header__day',
'wrapper': 'Cal__Header__wrapper',
'blank': 'Cal__Header__blank',
'active': 'Cal__Header__active',
'year': 'Cal__Header__year',
'date': 'Cal__Header__date',
'range': 'Cal__Header__range'
};
var animation = {
'enter': 'Cal__Animation__enter',
'enterActive': 'Cal__Animation__enterActive',
'leave': 'Cal__Animation__leave',
'leaveActive': 'Cal__Animation__leaveActive'
};
function defaultSelectionRenderer(value, _ref) {
var display = _ref.display,
key = _ref.key,
locale = _ref.locale.locale,
dateFormat = _ref.dateFormat,
onYearClick = _ref.onYearClick,
scrollToDate = _ref.scrollToDate,
setDisplay = _ref.setDisplay,
shouldAnimate = _ref.shouldAnimate;
var date = (0, _parse2.default)(value);
var values = date && [{
active: display === 'years',
handleClick: function handleClick(e) {
onYearClick(date, e, key);
setDisplay('years');
},
item: 'year',
title: display === 'days' ? 'Change year' : null,
value: date.getFullYear()
}, {
active: display === 'days',
handleClick: function handleClick(e) {
if (display !== 'days') {
setDisplay('days');
} else if (date) {
scrollToDate(date, -40, true);
}
},
item: 'day',
title: display === 'days' ? 'Scroll to ' + (0, _format2.default)(date, dateFormat, { locale: locale }) : null,
value: (0, _format2.default)(date, dateFormat, { locale: locale })
}];
return _react2.default.createElement(
'div',
{
key: key,
className: styles.wrapper,
'aria-label': (0, _format2.default)(date, dateFormat + ' YYYY', { locale: locale })
},
values.map(function (_ref2) {
var _classNames;
var handleClick = _ref2.handleClick,
item = _ref2.item,
key = _ref2.key,
value = _ref2.value,
active = _ref2.active,
title = _ref2.title;
return _react2.default.createElement(
'div',
{
key: item,
className: (0, _classnames2.default)(styles.dateWrapper, styles[item], (_classNames = {}, _classNames[styles.active] = active, _classNames)),
title: title
},
_react2.default.createElement(
_CSSTransitionGroup2.default,
{
transitionName: animation,
transitionEnterTimeout: 250,
transitionLeaveTimeout: 250,
transitionEnter: shouldAnimate,
transitionLeave: shouldAnimate
},
_react2.default.createElement(
'span',
{
key: item + '-' + value,
className: styles.date,
'aria-hidden': true,
onClick: handleClick
},
value
)
)
);
})
);
}
module.exports = exports['default'];