react-day-picker
Version:
Flexible date picker component for React
192 lines (163 loc) • 7.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _DateUtils = require('./DateUtils');
var _Helpers = require('./Helpers');
var _classNames = require('./classNames');
var _classNames2 = _interopRequireDefault(_classNames);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable jsx-a11y/no-static-element-interactions, react/forbid-prop-types */
function handleEvent(handler, day, modifiers) {
if (!handler) {
return undefined;
}
return function (e) {
e.persist();
handler(day, modifiers, e);
};
}
var Day = function (_Component) {
_inherits(Day, _Component);
function Day() {
_classCallCheck(this, Day);
return _possibleConstructorReturn(this, (Day.__proto__ || Object.getPrototypeOf(Day)).apply(this, arguments));
}
_createClass(Day, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps) {
var _this2 = this;
var propNames = Object.keys(this.props);
var nextPropNames = Object.keys(nextProps);
if (propNames.length !== nextPropNames.length) {
return true;
}
return propNames.some(function (name) {
if (name === 'modifiers' || name === 'modifiersStyles' || name === 'classNames') {
var prop = _this2.props[name];
var nextProp = nextProps[name];
var modifiers = Object.keys(prop);
var nextModifiers = Object.keys(nextProp);
if (modifiers.length !== nextModifiers.length) {
return true;
}
return modifiers.some(function (mod) {
return !(0, _Helpers.hasOwnProp)(nextProp, mod) || prop[mod] !== nextProp[mod];
});
}
if (name === 'day') {
return !(0, _DateUtils.isSameDay)(_this2.props[name], nextProps[name]);
}
return !(0, _Helpers.hasOwnProp)(nextProps, name) || _this2.props[name] !== nextProps[name];
});
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
classNames = _props.classNames,
modifiersStyles = _props.modifiersStyles,
day = _props.day,
tabIndex = _props.tabIndex,
empty = _props.empty,
modifiers = _props.modifiers,
onMouseEnter = _props.onMouseEnter,
onMouseLeave = _props.onMouseLeave,
onMouseUp = _props.onMouseUp,
onMouseDown = _props.onMouseDown,
onClick = _props.onClick,
onKeyDown = _props.onKeyDown,
onTouchStart = _props.onTouchStart,
onTouchEnd = _props.onTouchEnd,
onFocus = _props.onFocus,
ariaLabel = _props.ariaLabel,
ariaDisabled = _props.ariaDisabled,
ariaSelected = _props.ariaSelected,
children = _props.children;
var className = classNames.day;
if (classNames !== _classNames2.default) {
// When using CSS modules prefix the modifier as required by the BEM syntax
className += ' ' + Object.keys(modifiers).join(' ');
} else {
className += Object.keys(modifiers).map(function (modifier) {
return ' ' + className + '--' + modifier;
}).join('');
}
var style = void 0;
if (modifiersStyles) {
Object.keys(modifiers).filter(function (modifier) {
return !!modifiersStyles[modifier];
}).forEach(function (modifier) {
style = _extends({}, style, modifiersStyles[modifier]);
});
}
if (empty) {
return _react2.default.createElement('div', { 'aria-disabled': true, className: className, style: style });
}
return _react2.default.createElement(
'div',
{
className: className,
tabIndex: tabIndex,
style: style,
role: 'gridcell',
'aria-label': ariaLabel,
'aria-disabled': ariaDisabled,
'aria-selected': ariaSelected,
onClick: handleEvent(onClick, day, modifiers),
onKeyDown: handleEvent(onKeyDown, day, modifiers),
onMouseEnter: handleEvent(onMouseEnter, day, modifiers),
onMouseLeave: handleEvent(onMouseLeave, day, modifiers),
onMouseUp: handleEvent(onMouseUp, day, modifiers),
onMouseDown: handleEvent(onMouseDown, day, modifiers),
onTouchEnd: handleEvent(onTouchEnd, day, modifiers),
onTouchStart: handleEvent(onTouchStart, day, modifiers),
onFocus: handleEvent(onFocus, day, modifiers)
},
children
);
}
}]);
return Day;
}(_react.Component);
Day.propTypes = {
classNames: _propTypes2.default.shape({
day: _propTypes2.default.string.isRequired
}).isRequired,
day: _propTypes2.default.instanceOf(Date).isRequired,
children: _propTypes2.default.node.isRequired,
ariaDisabled: _propTypes2.default.bool,
ariaLabel: _propTypes2.default.string,
ariaSelected: _propTypes2.default.bool,
empty: _propTypes2.default.bool,
modifiers: _propTypes2.default.object,
modifiersStyles: _propTypes2.default.object,
onClick: _propTypes2.default.func,
onKeyDown: _propTypes2.default.func,
onMouseEnter: _propTypes2.default.func,
onMouseLeave: _propTypes2.default.func,
onMouseDown: _propTypes2.default.func,
onMouseUp: _propTypes2.default.func,
onTouchEnd: _propTypes2.default.func,
onTouchStart: _propTypes2.default.func,
onFocus: _propTypes2.default.func,
tabIndex: _propTypes2.default.number
};
Day.defaultProps = {
tabIndex: -1
};
Day.defaultProps = {
modifiers: {},
modifiersStyles: {},
empty: false
};
exports.default = Day;
//# sourceMappingURL=Day.js.map
;