UNPKG

chowa

Version:

UI component library based on React

85 lines (84 loc) 4.39 kB
/** * @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;