chowa
Version:
UI component library based on React
85 lines (84 loc) • 4.39 kB
JavaScript
/**
* @license chowa v1.1.3
*
* Copyright (c) Chowa Techonlogies Co.,Ltd.(http://www.chowa.cn).
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const React = require("react");
const classnames_1 = require("classnames");
const moment = require("moment");
const i18n_1 = require("../../i18n");
const utils_1 = require("../../utils");
const tool_1 = require("../tool");
const MinDay = (props) => {
const { values, weeksable, display, disabledDate, rangeDate, onSelect, onBeforeSelect } = props;
const nodes = [];
const dates = [];
const base = display.clone().date(1);
const current = moment();
const monthDisabledDate = {
before: base,
after: base.clone().endOf('month')
};
const beginDay = base.clone().startOf('month').day() === 0 ? 6 : base.clone().startOf('month').day() - 1;
const endDay = base.clone().endOf('month').day() === 0 ? 0 : 7 - base.clone().endOf('month').day();
if (beginDay > 0) {
for (let i = beginDay; i > 0; i--) {
dates.push(base.clone().startOf('month').subtract(i, 'day'));
}
}
for (let i = 1; i <= base.daysInMonth(); i++) {
dates.push(base.clone().date(i));
}
if (endDay > 0) {
for (let i = 1; i <= endDay; i++) {
dates.push(base.clone().endOf('month').add(i, 'day'));
}
}
for (let week = 0; week < dates.length / 7; week++) {
const weekNodes = [];
const weekFirstDate = dates[week * 7 + 5];
const wrapperClass = classnames_1.default({
[utils_1.preClass('min-calendar-weeks-dates')]: true,
[utils_1.preClass('min-calendar-weeks-wrapper')]: weeksable,
[utils_1.preClass('min-calendar-weeks-selected')]: weeksable && tool_1.hasActiveMoment(weekFirstDate, values, 'week')
});
if (weeksable) {
weekNodes.push((React.createElement("li", { key: week * 7 + 'week', className: classnames_1.default({
[utils_1.preClass('min-calendar-weeks')]: true
}) }, weekFirstDate.week())));
}
for (let index = 0; index < 7; index++) {
const date = dates[week * 7 + index];
const disabled = tool_1.isDisabledDate(date, disabledDate) || tool_1.isDisabledDate(date, monthDisabledDate);
const onMouseEnterHandler = (disabled || weeksable || !utils_1.isExist(onBeforeSelect))
? null
: onBeforeSelect.bind(this, date);
const onClickHandler = (disabled || weeksable || !utils_1.isExist(onSelect))
? null
: onSelect.bind(this, date);
const dayClass = classnames_1.default({
[utils_1.preClass('min-calendar-day')]: true,
[utils_1.preClass('min-calendar-current')]: current.isSame(date, 'day'),
[utils_1.preClass('min-calendar-selected')]: !weeksable && tool_1.hasActiveMoment(date, values),
[utils_1.preClass('min-calendar-inrange')]: tool_1.isRangeDate(date, rangeDate),
[utils_1.preClass('min-calendar-disabled')]: disabled
});
weekNodes.push((React.createElement("li", { key: week * 7 + index, className: dayClass, onMouseEnter: onMouseEnterHandler, onClick: onClickHandler }, date.date())));
}
nodes.push((React.createElement("ul", { key: week, className: wrapperClass, onClick: weeksable && utils_1.isExist(onSelect) ? onSelect.bind(this, weekFirstDate) : null }, weekNodes)));
}
const componentClass = classnames_1.default({
[utils_1.preClass('min-calendar-day-wrapper')]: true,
[utils_1.preClass('min-calendar-day-with-weeks')]: weeksable
});
return (React.createElement("div", { className: componentClass },
React.createElement("ul", { className: utils_1.preClass('min-calendar-week-container') },
React.createElement(i18n_1.I18nReceiver, { module: 'Calendar' }, (i18n) => i18n.weeks.map((val, key) => (React.createElement("li", { key: key, className: utils_1.preClass('min-calendar-week') }, val))))),
React.createElement("div", { className: utils_1.preClass('min-calendar-day-container') }, nodes)));
};
exports.default = MinDay;