react-date-picker
Version:
A carefully crafted date picker for React
244 lines (183 loc) • 8.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Button = undefined;
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 _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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactClass = require('react-class');
var _reactClass2 = _interopRequireDefault(_reactClass);
var _reactFlex = require('react-flex');
var _reactInlineBlock = require('react-inline-block');
var _reactInlineBlock2 = _interopRequireDefault(_reactInlineBlock);
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _joinFunctions = require('./joinFunctions');
var _joinFunctions2 = _interopRequireDefault(_joinFunctions);
var _join = require('./join');
var _join2 = _interopRequireDefault(_join);
var _bemFactory = require('./bemFactory');
var _bemFactory2 = _interopRequireDefault(_bemFactory);
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; }
var bem = (0, _bemFactory2.default)('react-date-picker__footer');
var SPACER = _react2.default.createElement(_reactFlex.Item, null);
var buttonClassName = 'react-date-picker__footer-button';
var preventDefault = function preventDefault(e) {
return e.preventDefault();
};
var Button = exports.Button = function Button(props) {
var disabledClassName = props.disabled ? buttonClassName + '--disabled' : '';
var className = (props.className || '') + ' ' + buttonClassName + ' ' + disabledClassName;
return _react2.default.createElement('button', _extends({
tabIndex: -1
}, props, {
className: className
}));
};
var Footer = function (_Component) {
_inherits(Footer, _Component);
function Footer() {
_classCallCheck(this, Footer);
return _possibleConstructorReturn(this, Object.getPrototypeOf(Footer).apply(this, arguments));
}
_createClass(Footer, [{
key: 'render',
value: function render() {
var props = this.p = (0, _objectAssign2.default)({}, this.props);
var className = (0, _join2.default)(props.className, bem(), bem(null, 'theme-' + props.theme));
var todayButton = this.renderTodayButton();
var clearButton = this.renderClearButton();
var okButton = this.renderOkButton();
var cancelButton = this.renderCancelButton();
if (!todayButton && !clearButton && !okButton && !cancelButton) {
return null;
}
var middleSpacer = okButton || cancelButton ? SPACER : null;
var spacer = !props.centerButtons ? middleSpacer : null;
var children = [props.centerButtons && SPACER, todayButton, clearButton, spacer, okButton, cancelButton, props.centerButtons && SPACER];
if (props.renderChildren) {
children = props.renderChildren(children, props);
}
var flexProps = (0, _objectAssign2.default)({}, props);
delete flexProps.actionEvent;
delete flexProps.buttonFactory;
delete flexProps.cancelButton;
delete flexProps.cancelButtonText;
delete flexProps.centerButtons;
delete flexProps.clearDate;
delete flexProps.cleanup;
delete flexProps.clearButton;
delete flexProps.clearButtonText;
delete flexProps.isDatePickerFooter;
delete flexProps.onCancelClick;
delete flexProps.onClearClick;
delete flexProps.onOkClick;
delete flexProps.onTodayClick;
delete flexProps.okButton;
delete flexProps.okButtonText;
delete flexProps.selectDate;
delete flexProps.theme;
delete flexProps.todayButton;
delete flexProps.todayButtonText;
if (typeof props.cleanup == 'function') {
props.cleanup(flexProps);
}
return _react2.default.createElement(_reactFlex.Flex, _extends({
inline: true,
row: true
}, flexProps, {
justifyContent: 'center',
className: className,
children: children
}));
}
}, {
key: 'renderTodayButton',
value: function renderTodayButton() {
if (!this.props.todayButton) {
return null;
}
return this.renderButton(this.props.todayButtonText, this.props.onTodayClick);
}
}, {
key: 'renderClearButton',
value: function renderClearButton() {
if (!this.props.clearButton) {
return null;
}
return this.renderButton({
children: this.props.clearButtonText,
disabled: this.props.clearDate === undefined
}, this.props.onClearClick);
}
}, {
key: 'renderOkButton',
value: function renderOkButton() {
if (!this.props.okButton) {
return null;
}
return this.renderButton(this.props.okButtonText, this.props.onOkClick);
}
}, {
key: 'renderCancelButton',
value: function renderCancelButton() {
if (!this.props.cancelButton) {
return null;
}
return this.renderButton(this.props.cancelButtonText, this.props.onCancelClick);
}
}, {
key: 'renderButton',
value: function renderButton(props, fn) {
var text = props.children;
var p = props;
if (typeof props == 'string') {
p = {};
text = props;
}
if (typeof fn == 'function' && !p.onClick && !p.disabled) {
p.onClick = fn;
}
var Factory = this.props.buttonFactory;
var onMouseDown = p.onMouseDown ? (0, _joinFunctions2.default)(p.onMouseDown, preventDefault) : preventDefault;
return _react2.default.createElement(
Factory,
_extends({ tabIndex: 0 }, p, { onMouseDown: onMouseDown }),
text
);
}
}]);
return Footer;
}(_reactClass2.default);
exports.default = Footer;
Footer.defaultProps = {
actionEvent: 'onClick',
theme: 'default',
buttonFactory: Button,
todayButton: true,
clearButton: true,
okButton: true,
cancelButton: true,
todayButtonText: 'Today',
clearButtonText: 'Clear',
okButtonText: 'OK',
cancelButtonText: 'Cancel',
isDatePickerFooter: true
};
Footer.propTypes = {
theme: _react.PropTypes.string,
centerButtons: _react.PropTypes.bool,
cokButtonText: _react.PropTypes.node,
clearButtonText: _react.PropTypes.node,
cancelButtonText: _react.PropTypes.node,
todayButtonText: _react.PropTypes.node,
onTodayClick: _react.PropTypes.func,
onClearClick: _react.PropTypes.func,
onOkClick: _react.PropTypes.func,
onCancelClick: _react.PropTypes.func
};