bee-datepicker
Version:
DatePicker ui component for react
287 lines (244 loc) • 9.68 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _mapSelf = require('rc-util/lib/Children/mapSelf');
var _mapSelf2 = _interopRequireDefault(_mapSelf);
var _MonthPanel = require('../month/MonthPanel');
var _MonthPanel2 = _interopRequireDefault(_MonthPanel);
var _YearPanel = require('../year/YearPanel');
var _YearPanel2 = _interopRequireDefault(_YearPanel);
var _DecadePanel = require('../decade/DecadePanel');
var _DecadePanel2 = _interopRequireDefault(_DecadePanel);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return 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) : _defaults(subClass, superClass); }
function goMonth(direction) {
var next = this.props.value.clone();
next.add(direction, 'months');
this.props.onValueChange(next);
}
function goYear(direction) {
var next = this.props.value.clone();
next.add(direction, 'years');
this.props.onValueChange(next);
}
function showIf(condition, el) {
return condition ? el : null;
}
var CalendarHeader = function (_React$Component) {
_inherits(CalendarHeader, _React$Component);
function CalendarHeader(props) {
_classCallCheck(this, CalendarHeader);
var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
_initialiseProps.call(_this);
_this.nextMonth = goMonth.bind(_this, 1);
_this.previousMonth = goMonth.bind(_this, -1);
_this.nextYear = goYear.bind(_this, 1);
_this.previousYear = goYear.bind(_this, -1);
_this.state = { yearPanelReferer: null };
return _this;
}
CalendarHeader.prototype.render = function render() {
var _this2 = this;
var props = this.props;
var prefixCls = props.prefixCls,
locale = props.locale,
mode = props.mode,
value = props.value,
showTimePicker = props.showTimePicker,
enableNext = props.enableNext,
enablePrev = props.enablePrev,
disabledMonth = props.disabledMonth,
renderFooter = props.renderFooter,
onChange = props.onChange,
onClear = props.onClear,
showMonthInput = props.showMonthInput;
var panel = null;
if (mode === 'month') {
panel = _react2["default"].createElement(_MonthPanel2["default"], {
showDateInput: true,
locale: locale,
showMonthInput: showMonthInput,
defaultValue: value,
rootPrefixCls: prefixCls,
onSelect: this.onMonthSelect,
onYearPanelShow: function onYearPanelShow() {
return _this2.showYearPanel('month');
},
disabledDate: disabledMonth,
cellRender: props.monthCellRender,
contentRender: props.monthCellContentRender,
renderFooter: renderFooter,
onChange: onChange,
onClear: onClear,
value: value
});
}
if (mode === 'year') {
panel = _react2["default"].createElement(_YearPanel2["default"], {
locale: locale,
defaultValue: value,
rootPrefixCls: prefixCls,
onSelect: this.onYearSelect,
onDecadePanelShow: this.showDecadePanel,
renderFooter: renderFooter
});
}
if (mode === 'decade') {
panel = _react2["default"].createElement(_DecadePanel2["default"], {
locale: locale,
defaultValue: value,
rootPrefixCls: prefixCls,
onSelect: this.onDecadeSelect,
renderFooter: renderFooter
});
}
return _react2["default"].createElement(
'div',
{ className: prefixCls + '-header' },
_react2["default"].createElement(
'div',
{ style: { position: 'relative' }, className: prefixCls + '-header-btns' },
showIf(enablePrev && !showTimePicker, _react2["default"].createElement('a', {
className: prefixCls + '-prev-year-btn',
role: 'button',
onClick: this.previousYear,
title: locale.previousYear
})),
showIf(enablePrev && !showTimePicker, _react2["default"].createElement('a', {
className: prefixCls + '-prev-month-btn',
role: 'button',
onClick: this.previousMonth,
title: locale.previousMonth
})),
this.monthYearElement(showTimePicker),
showIf(enableNext && !showTimePicker, _react2["default"].createElement('a', {
className: prefixCls + '-next-month-btn',
onClick: this.nextMonth,
title: locale.nextMonth
})),
showIf(enableNext && !showTimePicker, _react2["default"].createElement('a', {
className: prefixCls + '-next-year-btn',
onClick: this.nextYear,
title: locale.nextYear
}))
),
panel
);
};
return CalendarHeader;
}(_react2["default"].Component);
CalendarHeader.propTypes = {
prefixCls: _propTypes2["default"].string,
value: _propTypes2["default"].object,
onValueChange: _propTypes2["default"].func,
showTimePicker: _propTypes2["default"].bool,
onPanelChange: _propTypes2["default"].func,
locale: _propTypes2["default"].object,
enablePrev: _propTypes2["default"].any,
enableNext: _propTypes2["default"].any,
disabledMonth: _propTypes2["default"].func,
renderFooter: _propTypes2["default"].func,
onMonthSelect: _propTypes2["default"].func
};
CalendarHeader.defaultProps = {
enableNext: 1,
enablePrev: 1,
onPanelChange: function onPanelChange() {},
onValueChange: function onValueChange() {}
};
var _initialiseProps = function _initialiseProps() {
var _this3 = this;
this.onMonthSelect = function (value) {
_this3.props.onPanelChange(value, 'date');
if (_this3.props.onMonthSelect) {
_this3.props.onMonthSelect(value);
} else {
_this3.props.onValueChange(value);
}
};
this.onYearSelect = function (value) {
var referer = _this3.state.yearPanelReferer;
_this3.setState({ yearPanelReferer: null });
_this3.props.onPanelChange(value, referer);
_this3.props.onValueChange(value);
};
this.onDecadeSelect = function (value) {
_this3.props.onPanelChange(value, 'year');
_this3.props.onValueChange(value);
};
this.monthYearElement = function (showTimePicker) {
var props = _this3.props;
var prefixCls = props.prefixCls;
var locale = props.locale;
var value = props.value;
var localeData = value.localeData && value.localeData();
var monthBeforeYear = locale.monthBeforeYear;
var selectClassName = prefixCls + '-' + (monthBeforeYear ? 'my-select' : 'ym-select');
var timeClassName = showTimePicker ? ' ' + prefixCls + '-time-status' : '';
var year = _react2["default"].createElement(
'a',
{
className: prefixCls + '-year-select' + timeClassName,
role: 'button',
onClick: showTimePicker ? null : function () {
return _this3.showYearPanel('date');
},
title: showTimePicker ? null : locale.yearSelect
},
value.format(locale.yearFormat)
);
var month = _react2["default"].createElement(
'a',
{
className: prefixCls + '-month-select' + timeClassName,
role: 'button',
onClick: showTimePicker ? null : _this3.showMonthPanel,
title: showTimePicker ? null : locale.monthSelect
},
locale.monthFormat ? value.format(locale.monthFormat) : localeData.monthsShort(value)
);
var day = void 0;
if (showTimePicker) {
day = _react2["default"].createElement(
'a',
{
className: prefixCls + '-day-select' + timeClassName,
role: 'button'
},
value.format(locale.dayFormat)
);
}
var my = [];
if (monthBeforeYear) {
my = [month, day, year];
} else {
my = [year, month, day];
}
return _react2["default"].createElement(
'span',
{ className: selectClassName },
(0, _mapSelf2["default"])(my)
);
};
this.showMonthPanel = function () {
// null means that users' interaction doesn't change value
_this3.props.onPanelChange(null, 'month');
};
this.showYearPanel = function (referer) {
_this3.setState({ yearPanelReferer: referer });
_this3.props.onPanelChange(null, 'year');
};
this.showDecadePanel = function () {
_this3.props.onPanelChange(null, 'decade');
};
};
exports["default"] = CalendarHeader;
module.exports = exports['default'];