dareway-rui
Version:
349 lines (292 loc) • 15.2 kB
JavaScript
'use strict';
var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault');
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require('@babel/runtime/helpers/classCallCheck'));
var _createClass2 = _interopRequireDefault(require('@babel/runtime/helpers/createClass'));
var _possibleConstructorReturn2 = _interopRequireDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));
var _getPrototypeOf2 = _interopRequireDefault(require('@babel/runtime/helpers/getPrototypeOf'));
var _inherits2 = _interopRequireDefault(require('@babel/runtime/helpers/inherits'));
var _defineProperty2 = _interopRequireDefault(require('@babel/runtime/helpers/defineProperty'));
var _react = _interopRequireDefault(require('react'));
var _propTypes = _interopRequireDefault(require('prop-types'));
var _classnames = _interopRequireDefault(require('classnames'));
var _DateConstants = _interopRequireDefault(require('./DateConstants'));
var _util = require('../util/');
function isSameDay(one, two) {
return one && two && one.isSame(two, 'day');
}
function beforeCurrentMonthYear(current, today) {
if (current.year() < today.year()) {
return 1;
}
return current.year() === today.year() && current.month() < today.month();
}
function afterCurrentMonthYear(current, today) {
if (current.year() > today.year()) {
return 1;
}
return current.year() === today.year() && current.month() > today.month();
}
function getIdFromDate(date) {
return 'rc-calendar-'
.concat(date.year(), '-')
.concat(date.month(), '-')
.concat(date.date());
}
var DateTBody =
/*#__PURE__*/
(function(_React$Component) {
(0, _inherits2.default)(DateTBody, _React$Component);
function DateTBody() {
(0, _classCallCheck2.default)(this, DateTBody);
return (0, _possibleConstructorReturn2.default)(
this,
(0, _getPrototypeOf2.default)(DateTBody).apply(this, arguments)
);
}
(0, _createClass2.default)(DateTBody, [
{
key: 'render',
value: function render() {
var props = this.props;
var contentRender = props.contentRender,
prefixCls = props.prefixCls,
selectedValue = props.selectedValue,
value = props.value,
showWeekNumber = props.showWeekNumber,
dateRender = props.dateRender,
disabledDate = props.disabledDate,
hoverValue = props.hoverValue;
var iIndex;
var jIndex;
var current;
var dateTable = [];
var today = (0, _util.getTodayTime)(value);
var cellClass = ''.concat(prefixCls, '-cell');
var weekNumberCellClass = ''.concat(prefixCls, '-week-number-cell');
var dateClass = ''.concat(prefixCls, '-date');
var todayClass = ''.concat(prefixCls, '-today');
var selectedClass = ''.concat(prefixCls, '-selected-day');
var selectedDateClass = ''.concat(prefixCls, '-selected-date'); // do not move with mouse operation
var selectedStartDateClass = ''.concat(prefixCls, '-selected-start-date');
var selectedEndDateClass = ''.concat(prefixCls, '-selected-end-date');
var inRangeClass = ''.concat(prefixCls, '-in-range-cell');
var lastMonthDayClass = ''.concat(prefixCls, '-last-month-cell');
var nextMonthDayClass = ''.concat(prefixCls, '-next-month-btn-day');
var disabledClass = ''.concat(prefixCls, '-disabled-cell');
var firstDisableClass = ''.concat(prefixCls, '-disabled-cell-first-of-row');
var lastDisableClass = ''.concat(prefixCls, '-disabled-cell-last-of-row');
var lastDayOfMonthClass = ''.concat(prefixCls, '-last-day-of-month');
var month1 = value.clone();
month1.date(1);
var day = month1.day();
var lastMonthDiffDay = (day + 7 - value.localeData().firstDayOfWeek()) % 7; // calculate last month
var lastMonth1 = month1.clone();
lastMonth1.add(0 - lastMonthDiffDay, 'days');
var passed = 0;
for (iIndex = 0; iIndex < _DateConstants.default.DATE_ROW_COUNT; iIndex++) {
for (jIndex = 0; jIndex < _DateConstants.default.DATE_COL_COUNT; jIndex++) {
current = lastMonth1;
if (passed) {
current = current.clone();
current.add(passed, 'days');
}
dateTable.push(current);
passed++;
}
}
var tableHtml = [];
passed = 0;
for (iIndex = 0; iIndex < _DateConstants.default.DATE_ROW_COUNT; iIndex++) {
var _cx;
var isCurrentWeek = void 0;
var weekNumberCell = void 0;
var isActiveWeek = false;
var dateCells = [];
if (showWeekNumber) {
weekNumberCell = _react.default.createElement(
'td',
{
key: dateTable[passed].week(),
role: 'gridcell',
className: weekNumberCellClass
},
dateTable[passed].week()
);
}
for (jIndex = 0; jIndex < _DateConstants.default.DATE_COL_COUNT; jIndex++) {
var next = null;
var last = null;
current = dateTable[passed];
if (jIndex < _DateConstants.default.DATE_COL_COUNT - 1) {
next = dateTable[passed + 1];
}
if (jIndex > 0) {
last = dateTable[passed - 1];
}
var cls = cellClass;
var disabled = false;
var selected = false;
if (isSameDay(current, today)) {
cls += ' '.concat(todayClass);
isCurrentWeek = true;
}
var isBeforeCurrentMonthYear = beforeCurrentMonthYear(current, value);
var isAfterCurrentMonthYear = afterCurrentMonthYear(current, value);
if (selectedValue && Array.isArray(selectedValue)) {
var rangeValue = hoverValue.length ? hoverValue : selectedValue;
if (!isBeforeCurrentMonthYear && !isAfterCurrentMonthYear) {
var startValue = rangeValue[0];
var endValue = rangeValue[1];
if (startValue) {
if (isSameDay(current, startValue)) {
selected = true;
isActiveWeek = true;
cls += ' '.concat(selectedStartDateClass);
}
}
if (startValue && endValue) {
if (isSameDay(current, endValue)) {
selected = true;
isActiveWeek = true;
cls += ' '.concat(selectedEndDateClass);
} else if (
current.isAfter(startValue, 'day') &&
current.isBefore(endValue, 'day')
) {
cls += ' '.concat(inRangeClass);
}
}
}
} else if (isSameDay(current, value)) {
// keyboard change value, highlight works
selected = true;
isActiveWeek = true;
}
if (isSameDay(current, selectedValue)) {
cls += ' '.concat(selectedDateClass);
}
if (isBeforeCurrentMonthYear) {
cls += ' '.concat(lastMonthDayClass);
}
if (isAfterCurrentMonthYear) {
cls += ' '.concat(nextMonthDayClass);
}
if (
current
.clone()
.endOf('month')
.date() === current.date()
) {
cls += ' '.concat(lastDayOfMonthClass);
}
if (disabledDate) {
if (disabledDate(current, value)) {
disabled = true;
if (!last || !disabledDate(last, value)) {
cls += ' '.concat(firstDisableClass);
}
if (!next || !disabledDate(next, value)) {
cls += ' '.concat(lastDisableClass);
}
}
}
if (selected) {
cls += ' '.concat(selectedClass);
}
if (disabled) {
cls += ' '.concat(disabledClass);
}
var dateHtml = void 0;
if (dateRender) {
dateHtml = dateRender(current, value);
} else {
var content = contentRender ? contentRender(current, value) : current.date();
dateHtml = _react.default.createElement(
'div',
{
key: getIdFromDate(current),
className: dateClass,
'aria-selected': selected,
'aria-disabled': disabled
},
content
);
}
dateCells.push(
_react.default.createElement(
'td',
{
key: passed,
onClick: disabled ? undefined : props.onSelect.bind(null, current),
onMouseEnter: disabled
? undefined
: (props.onDayHover && props.onDayHover.bind(null, current)) || undefined,
role: 'gridcell',
title: (0, _util.getTitleString)(current),
className: cls
},
dateHtml
)
);
passed++;
}
tableHtml.push(
_react.default.createElement(
'tr',
{
key: iIndex,
role: 'row',
className: (0, _classnames.default)(
((_cx = {}),
(0, _defineProperty2.default)(
_cx,
''.concat(prefixCls, '-current-week'),
isCurrentWeek
),
(0, _defineProperty2.default)(
_cx,
''.concat(prefixCls, '-active-week'),
isActiveWeek
),
_cx)
)
},
weekNumberCell,
dateCells
)
);
}
return _react.default.createElement(
'tbody',
{
className: ''.concat(prefixCls, '-tbody')
},
tableHtml
);
}
}
]);
return DateTBody;
})(_react.default.Component);
exports.default = DateTBody;
(0, _defineProperty2.default)(DateTBody, 'propTypes', {
contentRender: _propTypes.default.func,
dateRender: _propTypes.default.func,
disabledDate: _propTypes.default.func,
prefixCls: _propTypes.default.string,
selectedValue: _propTypes.default.oneOfType([
_propTypes.default.object,
_propTypes.default.arrayOf(_propTypes.default.object)
]),
value: _propTypes.default.object,
hoverValue: _propTypes.default.any,
showWeekNumber: _propTypes.default.bool
});
(0, _defineProperty2.default)(DateTBody, 'defaultProps', {
hoverValue: []
});
//@ sourceMappingURL=DateTBody.js.map