UNPKG

beyond-datetime

Version:
411 lines (358 loc) 12.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _consts = require('./utils/consts'); var _DateHelper = require('./utils/DateHelper'); var DateHelper = _interopRequireWildcard(_DateHelper); var _DayCell = require('./DayCell.js'); var _DayCell2 = _interopRequireDefault(_DayCell); var _Time = require('./Time'); var _Time2 = _interopRequireDefault(_Time); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var cloneDate = DateHelper.cloneDate; var Calendar = function (_Component) { (0, _inherits3['default'])(Calendar, _Component); function Calendar(props, context) { (0, _classCallCheck3['default'])(this, Calendar); var _this = (0, _possibleConstructorReturn3['default'])(this, (Calendar.__proto__ || (0, _getPrototypeOf2['default'])(Calendar)).call(this, props, context)); var defaultDate = props.defaultDate, defaultShownDate = props.defaultShownDate; var date = cloneDate(defaultDate); var shownDate = cloneDate(defaultShownDate, props.date, defaultDate) || new Date(); shownDate.setDate(1); _this.time = null; _this.state = { date: date, shownDate: shownDate }; return _this; } (0, _createClass3['default'])(Calendar, [{ key: 'getDate', value: function getDate() { var _props = this.props, range = _props.range, rangePosition = _props.rangePosition, date = _props.date; return cloneDate(range && range[rangePosition + 'Date'], date, this.state.date); } }, { key: 'getTime', value: function getTime() { return this.time ? this.time.getTime() : null; } }, { key: 'getShownDate', value: function getShownDate() { return cloneDate(this.props.shownDate, this.state.shownDate); } }, { key: 'handlerConfirm', value: function handlerConfirm() { var onConfirm = this.props.onConfirm; if (typeof onConfirm === 'function') { onConfirm(this.getDate()); } } }, { key: 'handlerChange', value: function handlerChange(type, date) { var onChange = this.props.onChange; var result = null; if (type === 'time') { date = this.getDate(); } date = DateHelper.syncTime(date, this.getTime()); if (typeof onChange === 'function') { result = onChange(cloneDate(date), type); } if (result !== false) { this.setState({ date: date }); } return false; } }, { key: 'handlerChangeShownDate', value: function handlerChangeShownDate(type, event) { var value = void 0, shownDate = void 0, result = void 0; var onShownChange = this.props.onShownChange; if (event && event.preventDefault) { event.preventDefault(); value = event.target.value; } else { value = event; } if (type === 'month') { if (typeof value === 'string') { shownDate = DateHelper.setMonth(this.state.shownDate, +value); } else { shownDate = DateHelper.addMonth(this.state.shownDate, value); } } else if (type === 'year') { if (typeof value === 'string') { shownDate = DateHelper.setYear(this.state.shownDate, +value); } else { shownDate = DateHelper.addYear(this.state.shownDate, value); } } else if (type === 'date') { shownDate = event; } shownDate.setDate(1); if (typeof onShownChange === 'function') { result = onShownChange(shownDate); } if (result !== false) { this.setState({ shownDate: shownDate }); } } }, { key: 'handlerToggelToday', value: function handlerToggelToday() { this.handlerChangeShownDate('date', new Date()); this.handlerChange('date', new Date()); } }, { key: 'handlerHoverCell', value: function handlerHoverCell(date) { var onHover = this.props.onHover; if (typeof onHover === 'function') { onHover(date); } } }, { key: 'renderMonthAndYear', value: function renderMonthAndYear() { var language = this.props.language; var shownDate = this.getShownDate(); var currentShownYear = shownDate.getFullYear(); var prefix = _consts.calendarPrefix + '-month-and-year'; var years = []; var months = language === 'cn' ? DateHelper.Months : DateHelper.GlobalMonths; var _DateHelper$getYearRa = DateHelper.getYearRange(), startYear = _DateHelper$getYearRa.startYear, endYear = _DateHelper$getYearRa.endYear; if (currentShownYear < startYear) { years.push(_react2['default'].createElement( 'option', { key: currentShownYear, value: currentShownYear }, currentShownYear )); } for (var i = startYear; i <= endYear; i++) { years.push(_react2['default'].createElement( 'option', { key: i, value: i }, i )); } if (currentShownYear > endYear) { years.push(_react2['default'].createElement( 'option', { key: currentShownYear, value: currentShownYear }, currentShownYear )); } var prevClassName = prefix + '-button ' + prefix + '-prev-button'; var nextClassName = prefix + '-button ' + prefix + '-next-button'; return _react2['default'].createElement( 'div', { className: prefix }, _react2['default'].createElement( 'div', { className: prefix + '-years' }, _react2['default'].createElement('button', { type: 'button', className: prevClassName, onClick: this.handlerChangeShownDate.bind(this, 'year', -1) }), _react2['default'].createElement( 'select', { value: currentShownYear, onChange: this.handlerChangeShownDate.bind(this, 'year') }, years ), _react2['default'].createElement('button', { type: 'button', className: nextClassName, onClick: this.handlerChangeShownDate.bind(this, 'year', 1) }) ), _react2['default'].createElement( 'div', { className: prefix + '-months' }, _react2['default'].createElement('button', { type: 'button', className: prevClassName, onClick: this.handlerChangeShownDate.bind(this, 'month', -1) }), _react2['default'].createElement( 'select', { onChange: this.handlerChangeShownDate.bind(this, 'month'), value: shownDate.getMonth() }, months.map(function (month, i) { return _react2['default'].createElement( 'option', { key: i + '', value: i }, month ); }) ), _react2['default'].createElement('button', { type: 'button', className: nextClassName, onClick: this.handlerChangeShownDate.bind(this, 'month', 1) }) ) ); } }, { key: 'renderWeekdays', value: function renderWeekdays() { var language = this.props.language; var weeks = language === 'cn' ? DateHelper.Weeks : DateHelper.GlobalWeeks; return _react2['default'].createElement( 'div', { className: _consts.calendarPrefix + '-weekdays' }, weeks.map(function (week, i) { return _react2['default'].createElement( 'span', { key: i + '' }, week ); }) ); } }, { key: 'renderDays', value: function renderDays() { var _this2 = this; var _props2 = this.props, range = _props2.range, minDate = _props2.minDate, maxDate = _props2.maxDate, invalidDates = _props2.invalidDates, hoverDate = _props2.hoverDate; var shownDate = this.getShownDate(); var date = this.getDate(); var days = DateHelper.getDatesInCalendarMonth(shownDate); var today = new Date(); var className = _consts.calendarPrefix + '-day'; var dayCells = days.map(function (_date, index) { var isSelected = !range && date && DateHelper.isSameDate(date, _date); //用于范围选择 var isPassive = !DateHelper.isSameYearAndMonth(shownDate, _date); var isStartEdge = range && DateHelper.isSameDate(_date, range.startDate); var isEndEdge = range && DateHelper.isSameDate(_date, range.endDate); var isEdge = isStartEdge || isEndEdge; var isToday = DateHelper.isSameDate(_date, today); var isInvalid = typeof invalidDates === 'function' ? invalidDates(cloneDate(_date)) : false; if (minDate || maxDate) { isInvalid = isInvalid && !DateHelper.isBetween(_date, minDate, maxDate); // isOusideMinMax(_date, minDate, maxDate) } var isInRange = void 0; //= range && DateHelper.isBetween(_date,range.startDate,range.endDate) // checkRange(_date, range) if (range) { var _range = hoverDate ? DateHelper.orderRange(hoverDate, range.startDate) : range; isInRange = DateHelper.isBetween(_date, _range.startDate, _range.endDate); } else { isInRange = false; } return _react2['default'].createElement(_DayCell2['default'], { onSelect: _this2.handlerChange.bind(_this2, 'date'), onHover: _this2.handlerHoverCell.bind(_this2), date: _date, isStartEdge: isStartEdge, isEndEdge: isEndEdge, isSelected: isSelected || isEdge, isInRange: isInRange, isToday: isToday, key: index, isPassive: isPassive, isInvalid: isInvalid, className: className }); }); return _react2['default'].createElement( 'div', null, dayCells ); } }, { key: 'renderTime', value: function renderTime() { var _this3 = this; var _props3 = this.props, time = _props3.time, second = _props3.second, range = _props3.range, rangePosition = _props3.rangePosition, timeFilter = _props3.timeFilter; if (time) { var date = this.getDate(); var disabled = !date && (!range || !range.startDate); if (typeof timeFilter === 'function') { var shownDate = this.getShownDate(); var _range2 = _range2 && _range2.startDate ? { startDate: cloneDate(_range2.startDate), endDate: cloneDate(_range2.endDate) } : null; timeFilter = timeFilter({ date: date, shownDate: shownDate, range: _range2, rangePosition: rangePosition }); } return _react2['default'].createElement(_Time2['default'], { ref: function ref(time) { return _this3.time = time; }, second: second, filter: timeFilter, disabled: disabled, date: this.getDate(), onChange: this.handlerChange.bind(this, 'time') }); } } }, { key: 'renderBtns', value: function renderBtns() { var _props4 = this.props, confirm = _props4.confirm, today = _props4.today, language = _props4.language; var texts = DateHelper.languages[language]; var btns = []; if (today) { btns.push(_react2['default'].createElement( 'button', { onClick: this.handlerToggelToday.bind(this), key: 'today', className: 'bdt-btn bdt-btn-today', type: 'button' }, texts.today )); } if (confirm) { btns.push(_react2['default'].createElement( 'button', { onClick: this.handlerConfirm.bind(this), key: 'confirm', className: 'bdt-btn', type: 'button' }, texts.ok )); } if (btns.length > 0) { return _react2['default'].createElement( 'div', { style: { padding: 4, textAlign: 'right' } }, btns ); } } }, { key: 'render', value: function render() { return _react2['default'].createElement( 'div', { className: _consts.calendarPrefix, style: this.props.style }, this.renderMonthAndYear(), this.renderWeekdays(), this.renderDays(), this.renderTime(), this.renderBtns() ); } }]); return Calendar; }(_react.Component); exports['default'] = Calendar; Calendar.defaultProps = { time: false, second: false, today: true, language: 'cn', __type: 'Calendar' };