UNPKG

rsuite

Version:

A suite of react components

157 lines (130 loc) 5.64 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _Windowing = require("../Windowing"); var _utils = require("../utils"); var _MonthDropdownItem = _interopRequireDefault(require("./MonthDropdownItem")); var _CalendarContext = require("./CalendarContext"); var monthMap = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref) { var _props$as = props.as, Component = _props$as === void 0 ? 'div' : _props$as, className = props.className, _props$classPrefix = props.classPrefix, classPrefix = _props$classPrefix === void 0 ? 'calendar-month-dropdown' : _props$classPrefix, limitStartYear = props.limitStartYear, _props$limitEndYear = props.limitEndYear, limitEndYear = _props$limitEndYear === void 0 ? 5 : _props$limitEndYear, show = props.show, _props$height = props.height, defaultHeight = _props$height === void 0 ? 221 : _props$height, _props$width = props.width, defaultWidth = _props$width === void 0 ? 256 : _props$width, disabledMonth = props.disabledMonth, rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "limitStartYear", "limitEndYear", "show", "height", "width", "disabledMonth"]); var _useCalendarContext = (0, _CalendarContext.useCalendarContext)(), _useCalendarContext$d = _useCalendarContext.date, date = _useCalendarContext$d === void 0 ? new Date() : _useCalendarContext$d; var _useClassNames = (0, _utils.useClassNames)(classPrefix), prefix = _useClassNames.prefix, merge = _useClassNames.merge, withClassPrefix = _useClassNames.withClassPrefix; var thisYear = _utils.DateUtils.getYear(new Date()); var startYear = limitStartYear ? thisYear - limitStartYear : 1900; var rowCount = (0, _react.useMemo)(function () { var endYear = thisYear + limitEndYear; return endYear - startYear; }, [limitEndYear, startYear, thisYear]); var isMonthDisabled = (0, _react.useCallback)(function (year, month) { if (disabledMonth) { var days = _utils.DateUtils.getDaysInMonth(new Date(year, month)); // If all dates in a month are disabled, disable the current month for (var i = 1; i <= days; i++) { if (!disabledMonth(new Date(year, month, i))) { return false; } } return true; } return false; }, [disabledMonth]); var rowRenderer = function rowRenderer(_ref) { var index = _ref.index, style = _ref.style; var selectedMonth = _utils.DateUtils.getMonth(date); var selectedYear = _utils.DateUtils.getYear(date); var year = startYear + index; var isSelectedYear = year === selectedYear; var titleClassName = prefix('year', { 'year-active': isSelectedYear }); var rowClassName = merge(prefix('row'), { 'first-row': index === 0, 'last-row': index === rowCount - 1 }); return /*#__PURE__*/_react.default.createElement("div", { className: rowClassName, role: "row", style: style }, /*#__PURE__*/_react.default.createElement("div", { className: titleClassName, role: "rowheader" }, year), /*#__PURE__*/_react.default.createElement("div", { className: prefix('list'), role: "gridcell" }, monthMap.map(function (item, month) { return /*#__PURE__*/_react.default.createElement(_MonthDropdownItem.default, { disabled: isMonthDisabled(year, month), active: isSelectedYear && month === selectedMonth, key: month + "_" + item, month: month + 1, year: year }); }))); }; var classes = merge(className, withClassPrefix(), { show: show }); var itemSize = 75; var initialItemIndex = _utils.DateUtils.getYear(date) - startYear; var initialScrollOffset = itemSize * initialItemIndex; return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({ role: "menu" }, rest, { ref: ref, className: classes }), /*#__PURE__*/_react.default.createElement("div", { className: prefix('content') }, /*#__PURE__*/_react.default.createElement("div", { className: prefix('scroll') }, show && /*#__PURE__*/_react.default.createElement(_Windowing.AutoSizer, { defaultHeight: defaultHeight, defaultWidth: defaultWidth }, function (_ref2) { var height = _ref2.height, width = _ref2.width; return /*#__PURE__*/_react.default.createElement(_Windowing.FixedSizeList, { className: prefix('row-wrapper'), width: width || defaultWidth, height: height || defaultHeight, itemSize: itemSize, itemCount: rowCount, initialScrollOffset: initialScrollOffset }, rowRenderer); })))); }); MonthDropdown.displayName = 'MonthDropdown'; MonthDropdown.propTypes = { limitEndYear: _propTypes.default.number, className: _propTypes.default.string, classPrefix: _propTypes.default.string, show: _propTypes.default.bool, disabledMonth: _propTypes.default.func }; var _default = MonthDropdown; exports.default = _default;