UNPKG

rsuite

Version:

A suite of react components

540 lines (423 loc) 18.9 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 _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _pick2 = _interopRequireDefault(require("lodash/pick")); var _isUndefined2 = _interopRequireDefault(require("lodash/isUndefined")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _reactLifecyclesCompat = require("react-lifecycles-compat"); var _set_seconds = _interopRequireDefault(require("date-fns/set_seconds")); var _set_minutes = _interopRequireDefault(require("date-fns/set_minutes")); var _set_hours = _interopRequireDefault(require("date-fns/set_hours")); var _get_seconds = _interopRequireDefault(require("date-fns/get_seconds")); var _is_same_day = _interopRequireDefault(require("date-fns/is_same_day")); var _get_hours = _interopRequireDefault(require("date-fns/get_hours")); var _get_minutes = _interopRequireDefault(require("date-fns/get_minutes")); var _IntlContext = _interopRequireDefault(require("../IntlProvider/IntlContext")); var _FormattedDate = _interopRequireDefault(require("../IntlProvider/FormattedDate")); var _Calendar = _interopRequireDefault(require("../Calendar/Calendar")); var _Toolbar = _interopRequireDefault(require("./Toolbar")); var _timeUtils = require("../utils/timeUtils"); var _formatUtils = require("../utils/formatUtils"); var _composeFunctions = _interopRequireDefault(require("../utils/composeFunctions")); var _utils = require("../utils"); var _Picker = require("../Picker"); var _propTypes2 = require("../Picker/propTypes"); var DatePicker = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(DatePicker, _React$Component); function DatePicker(props) { var _this; _this = _React$Component.call(this, props) || this; _this.menuContainerRef = void 0; _this.triggerRef = void 0; _this.calendar = null; _this.onMoveForword = function (nextPageDate) { var _this$props$onNextMon, _this$props, _this$props$onChangeC, _this$props2; _this.setState({ pageDate: nextPageDate }); (_this$props$onNextMon = (_this$props = _this.props).onNextMonth) === null || _this$props$onNextMon === void 0 ? void 0 : _this$props$onNextMon.call(_this$props, nextPageDate); (_this$props$onChangeC = (_this$props2 = _this.props).onChangeCalendarDate) === null || _this$props$onChangeC === void 0 ? void 0 : _this$props$onChangeC.call(_this$props2, nextPageDate); }; _this.onMoveBackward = function (nextPageDate) { var _this$props$onPrevMon, _this$props3, _this$props$onChangeC2, _this$props4; _this.setState({ pageDate: nextPageDate }); (_this$props$onPrevMon = (_this$props3 = _this.props).onPrevMonth) === null || _this$props$onPrevMon === void 0 ? void 0 : _this$props$onPrevMon.call(_this$props3, nextPageDate); (_this$props$onChangeC2 = (_this$props4 = _this.props).onChangeCalendarDate) === null || _this$props$onChangeC2 === void 0 ? void 0 : _this$props$onChangeC2.call(_this$props4, nextPageDate); }; _this.getValue = function () { return _this.props.value || _this.state.value; }; _this.handleChangePageDate = function (nextPageDate) { _this.setState({ pageDate: nextPageDate, calendarState: undefined }); _this.handleAllSelect(nextPageDate); }; _this.handleChangePageTime = function (nextPageTime) { _this.setState({ pageDate: nextPageTime }); _this.handleAllSelect(nextPageTime); }; _this.handleToggleMeridian = function () { var pageDate = _this.state.pageDate; var hours = (0, _get_hours.default)(pageDate); var nextHours = hours >= 12 ? hours - 12 : hours + 12; var nextDate = (0, _set_hours.default)(pageDate, nextHours); _this.setState({ pageDate: nextDate }); }; _this.handleShortcutPageDate = function (value, closeOverlay, event) { _this.updateValue(event, value, closeOverlay); _this.handleAllSelect(value, event); }; _this.handleOK = function (event) { var _this$props$onOk, _this$props5; _this.updateValue(event); (_this$props$onOk = (_this$props5 = _this.props).onOk) === null || _this$props$onOk === void 0 ? void 0 : _this$props$onOk.call(_this$props5, _this.state.pageDate, event); }; _this.handleCloseDropdown = function () { var _this$triggerRef$curr, _this$triggerRef$curr2; (_this$triggerRef$curr = _this.triggerRef.current) === null || _this$triggerRef$curr === void 0 ? void 0 : (_this$triggerRef$curr2 = _this$triggerRef$curr.hide) === null || _this$triggerRef$curr2 === void 0 ? void 0 : _this$triggerRef$curr2.call(_this$triggerRef$curr); }; _this.handleOpenDropdown = function () { var _this$triggerRef$curr3, _this$triggerRef$curr4; (_this$triggerRef$curr3 = _this.triggerRef.current) === null || _this$triggerRef$curr3 === void 0 ? void 0 : (_this$triggerRef$curr4 = _this$triggerRef$curr3.show) === null || _this$triggerRef$curr4 === void 0 ? void 0 : _this$triggerRef$curr4.call(_this$triggerRef$curr3); }; _this.open = function () { var _this$handleOpenDropd, _this2; (_this$handleOpenDropd = (_this2 = _this).handleOpenDropdown) === null || _this$handleOpenDropd === void 0 ? void 0 : _this$handleOpenDropd.call(_this2); }; _this.close = function () { var _this$handleCloseDrop, _this3; (_this$handleCloseDrop = (_this3 = _this).handleCloseDropdown) === null || _this$handleCloseDrop === void 0 ? void 0 : _this$handleCloseDrop.call(_this3); }; _this.toggleMonthDropdown = function () { var _this$props$onToggleM, _this$props6; var calendarState = _this.state.calendarState; var toggle; if (calendarState === 'DROP_MONTH') { _this.hideDropdown(); toggle = false; } else { _this.showMonthDropdown(); toggle = true; } (_this$props$onToggleM = (_this$props6 = _this.props).onToggleMonthDropdown) === null || _this$props$onToggleM === void 0 ? void 0 : _this$props$onToggleM.call(_this$props6, toggle); }; _this.toggleTimeDropdown = function () { var _this$props$onToggleT, _this$props7; var calendarState = _this.state.calendarState; var toggle; if (calendarState === 'DROP_TIME') { _this.hideDropdown(); toggle = false; } else { _this.showTimeDropdown(); toggle = true; } (_this$props$onToggleT = (_this$props7 = _this.props).onToggleTimeDropdown) === null || _this$props$onToggleT === void 0 ? void 0 : _this$props$onToggleT.call(_this$props7, toggle); }; _this.handleClean = function (event) { _this.setState({ pageDate: new Date() }); _this.updateValue(event, null); }; _this.handleAllSelect = function (nextValue, event) { var _this$props$onSelect, _this$props8, _this$props$onChangeC3, _this$props9; (_this$props$onSelect = (_this$props8 = _this.props).onSelect) === null || _this$props$onSelect === void 0 ? void 0 : _this$props$onSelect.call(_this$props8, nextValue, event); (_this$props$onChangeC3 = (_this$props9 = _this.props).onChangeCalendarDate) === null || _this$props$onChangeC3 === void 0 ? void 0 : _this$props$onChangeC3.call(_this$props9, nextValue, event); }; _this.handleSelect = function (nextValue, event) { var oneTap = _this.props.oneTap; var pageDate = _this.state.pageDate; _this.setState({ pageDate: (0, _composeFunctions.default)(function (d) { return (0, _set_hours.default)(d, (0, _get_hours.default)(pageDate)); }, function (d) { return (0, _set_minutes.default)(d, (0, _get_minutes.default)(pageDate)); }, function (d) { return (0, _set_seconds.default)(d, (0, _get_seconds.default)(pageDate)); })(nextValue) }); _this.handleAllSelect(nextValue); if (oneTap) { _this.updateValue(event, nextValue); } }; _this.handleEntered = function () { var _this$props$onOpen, _this$props10; (_this$props$onOpen = (_this$props10 = _this.props).onOpen) === null || _this$props$onOpen === void 0 ? void 0 : _this$props$onOpen.call(_this$props10); _this.setState({ active: true }); }; _this.handleExit = function () { var _this$props$onClose, _this$props11; (_this$props$onClose = (_this$props11 = _this.props).onClose) === null || _this$props$onClose === void 0 ? void 0 : _this$props$onClose.call(_this$props11); _this.setState({ calendarState: undefined, active: false }); }; _this.disabledToolbarHandle = function (date) { var disabledDate = _this.props.disabledDate; var allowDate = disabledDate ? disabledDate(date) : false; var allowTime = (0, _timeUtils.disabledTime)(_this.props, date); return allowDate || allowTime; }; _this.addPrefix = function (name) { return (0, _utils.prefix)(_this.props.classPrefix)(name); }; var defaultValue = props.defaultValue, _value = props.value, calendarDefaultDate = props.calendarDefaultDate; var activeValue = _value || defaultValue; _this.state = { value: activeValue, pageDate: activeValue || calendarDefaultDate || new Date() // display calendar date }; _this.triggerRef = React.createRef(); // for test _this.menuContainerRef = React.createRef(); return _this; } DatePicker.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) { if (typeof nextProps.value !== 'undefined') { var value = nextProps.value; if (value && !(0, _is_same_day.default)(value, prevState.value)) { return { value: value, pageDate: value }; } return { value: value }; } return null; }; var _proto = DatePicker.prototype; _proto.getDateString = function getDateString() { var _this$props12 = this.props, placeholder = _this$props12.placeholder, formatType = _this$props12.format, renderValue = _this$props12.renderValue; var value = this.getValue(); if (value) { return renderValue ? renderValue(value, formatType) : React.createElement(_FormattedDate.default, { date: value, formatStr: formatType }); } return placeholder || formatType; }; _proto.updateValue = function updateValue(event, nextPageDate, closeOverlay) { if (closeOverlay === void 0) { closeOverlay = true; } var pageDate = this.state.pageDate; var value = this.getValue(); var nextValue = !(0, _isUndefined2.default)(nextPageDate) ? nextPageDate : pageDate; this.setState({ pageDate: nextValue || new Date(), value: nextValue }); if (nextValue !== value || !(0, _is_same_day.default)(nextValue, value)) { var _this$props$onChange, _this$props13; (_this$props$onChange = (_this$props13 = this.props).onChange) === null || _this$props$onChange === void 0 ? void 0 : _this$props$onChange.call(_this$props13, nextValue, event); } // `closeOverlay` default value is `true` if (closeOverlay !== false) { this.handleCloseDropdown(); } }; _proto.resetPageDate = function resetPageDate() { var calendarDefaultDate = this.props.calendarDefaultDate; var value = this.getValue(); this.setState({ pageDate: value || calendarDefaultDate || new Date() }); }; _proto.showMonthDropdown = function showMonthDropdown() { this.setState({ calendarState: 'DROP_MONTH' }); }; _proto.hideDropdown = function hideDropdown() { this.setState({ calendarState: undefined }); }; _proto.showTimeDropdown = function showTimeDropdown() { this.setState({ calendarState: 'DROP_TIME' }); }; _proto.renderCalendar = function renderCalendar() { var _this$props14 = this.props, format = _this$props14.format, isoWeek = _this$props14.isoWeek, limitEndYear = _this$props14.limitEndYear, disabledDate = _this$props14.disabledDate, showWeekNumbers = _this$props14.showWeekNumbers, showMeridian = _this$props14.showMeridian; var _this$state = this.state, calendarState = _this$state.calendarState, pageDate = _this$state.pageDate; var calendarProps = (0, _pick2.default)(this.props, _timeUtils.calendarOnlyProps); return React.createElement(_Calendar.default, (0, _extends2.default)({}, calendarProps, { showWeekNumbers: showWeekNumbers, showMeridian: showMeridian, disabledDate: disabledDate, limitEndYear: limitEndYear, format: format, isoWeek: isoWeek, calendarState: calendarState, pageDate: pageDate, onMoveForword: this.onMoveForword, onMoveBackward: this.onMoveBackward, onSelect: this.handleSelect, onToggleMonthDropdown: this.toggleMonthDropdown, onToggleTimeDropdown: this.toggleTimeDropdown, onChangePageDate: this.handleChangePageDate, onChangePageTime: this.handleChangePageTime, onToggleMeridian: this.handleToggleMeridian })); }; _proto.renderDropdownMenu = function renderDropdownMenu(calendar) { var _this$props15 = this.props, ranges = _this$props15.ranges, menuClassName = _this$props15.menuClassName, oneTap = _this$props15.oneTap; var pageDate = this.state.pageDate; var classes = (0, _classnames.default)(this.addPrefix('date-menu'), menuClassName); return React.createElement(_Picker.MenuWrapper, { className: classes }, React.createElement("div", { ref: this.menuContainerRef }, calendar, React.createElement(_Toolbar.default, { ranges: ranges, pageDate: pageDate, disabledHandle: this.disabledToolbarHandle, onShortcut: this.handleShortcutPageDate, onOk: this.handleOK, hideOkButton: oneTap }))); }; _proto.render = function render() { var _getToggleWrapperClas; var _this$props16 = this.props, inline = _this$props16.inline, className = _this$props16.className, disabled = _this$props16.disabled, cleanable = _this$props16.cleanable, classPrefix = _this$props16.classPrefix, format = _this$props16.format, locale = _this$props16.locale, toggleComponentClass = _this$props16.toggleComponentClass, style = _this$props16.style, onEntered = _this$props16.onEntered, onExited = _this$props16.onExited, onClean = _this$props16.onClean, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props16, ["inline", "className", "disabled", "cleanable", "classPrefix", "format", "locale", "toggleComponentClass", "style", "onEntered", "onExited", "onClean"]); var value = this.getValue(); var unhandled = (0, _utils.getUnhandledProps)(DatePicker, rest); var hasValue = !!value; var calendar = this.renderCalendar(); if (inline) { return React.createElement(_IntlContext.default.Provider, { value: locale }, React.createElement("div", { className: (0, _classnames.default)(classPrefix, this.addPrefix('date-inline'), className) }, calendar)); } var classes = (0, _Picker.getToggleWrapperClassName)('date', this.addPrefix, this.props, hasValue, (_getToggleWrapperClas = {}, _getToggleWrapperClas[this.addPrefix('date-only-time')] = (0, _formatUtils.shouldOnlyTime)(format), _getToggleWrapperClas)); return React.createElement(_IntlContext.default.Provider, { value: locale }, React.createElement("div", { className: classes, style: style }, React.createElement(_Picker.PickerToggleTrigger, { pickerProps: this.props, ref: this.triggerRef, onEntered: (0, _utils.createChainedFunction)(this.handleEntered, onEntered), onExited: (0, _utils.createChainedFunction)(this.handleExit, onExited), speaker: this.renderDropdownMenu(calendar) }, React.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, unhandled, { componentClass: toggleComponentClass, onClean: (0, _utils.createChainedFunction)(this.handleClean, onClean), cleanable: cleanable && !disabled, hasValue: hasValue, active: this.state.active, "aria-disabled": disabled }), this.getDateString())))); }; return DatePicker; }(React.Component); DatePicker.propTypes = (0, _extends2.default)({}, _propTypes2.pickerPropTypes, { ranges: _propTypes.default.array, defaultValue: _propTypes.default.instanceOf(Date), value: _propTypes.default.instanceOf(Date), calendarDefaultDate: _propTypes.default.instanceOf(Date), format: _propTypes.default.string, inline: _propTypes.default.bool, isoWeek: _propTypes.default.bool, limitEndYear: _propTypes.default.number, oneTap: _propTypes.default.bool, showWeekNumbers: _propTypes.default.bool, showMeridian: _propTypes.default.bool, disabledDate: _propTypes.default.func, disabledHours: _propTypes.default.func, disabledMinutes: _propTypes.default.func, disabledSeconds: _propTypes.default.func, hideHours: _propTypes.default.func, hideMinutes: _propTypes.default.func, hideSeconds: _propTypes.default.func, onChange: _propTypes.default.func, onChangeCalendarDate: _propTypes.default.func, onToggleMonthDropdown: _propTypes.default.func, onToggleTimeDropdown: _propTypes.default.func, onSelect: _propTypes.default.func, onPrevMonth: _propTypes.default.func, onNextMonth: _propTypes.default.func, onOk: _propTypes.default.func }); DatePicker.defaultProps = (0, _extends2.default)({}, _propTypes2.pickerDefaultProps, { limitEndYear: 1000, format: 'YYYY-MM-DD', placeholder: '', locale: { sunday: 'Su', monday: 'Mo', tuesday: 'Tu', wednesday: 'We', thursday: 'Th', friday: 'Fr', saturday: 'Sa', ok: 'OK', today: 'Today', yesterday: 'Yesterday', hours: 'Hours', minutes: 'Minutes', seconds: 'Seconds' } }); (0, _reactLifecyclesCompat.polyfill)(DatePicker); var _default = (0, _utils.defaultProps)({ classPrefix: 'picker' })(DatePicker); exports.default = _default; module.exports = exports.default;