UNPKG

react-flex-picker

Version:

Helps to build your own calendar by using prepared components and api to control them

928 lines (872 loc) 43.8 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react"), require("moment"), require("classnames"), require("react-dom")); else if(typeof define === 'function' && define.amd) define(["React", "moment", "classnames", "ReactDOM"], factory); else { var a = typeof exports === 'object' ? factory(require("react"), require("moment"), require("classnames"), require("react-dom")) : factory(root["React"], root["moment"], root["classnames"], root["ReactDOM"]); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__7__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 6); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__0__; /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__1__; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var ReactDOM = __webpack_require__(7); var moment = __webpack_require__(1); // import {initRange, pipe, reverseDates, setMonthBounds, setWeekBounds, validateRange} from '../utils/provider'; var PickerContext = React.createContext(null); var PickerProvider = /** @class */ (function (_super) { __extends(PickerProvider, _super); function PickerProvider(props) { var _this = _super.call(this, props) || this; _this.handlePrevUnit = _this.handlePrevUnit.bind(_this); _this.handleNextUnit = _this.handleNextUnit.bind(_this); _this.handleClick = _this.handleClick.bind(_this); _this.handleHover = _this.handleHover.bind(_this); _this.setRef = _this.setRef.bind(_this); _this.units = new Map(); _this.state = { focus: 'startDate', pickerType: props.pickerType, setRef: _this.setRef, handlePrevUnit: _this.handlePrevUnit, handleNextUnit: _this.handleNextUnit, handleTitleClick: _this.props.onTitleClick, handleClick: _this.handleClick, handleHover: _this.handleHover, currentMonth: props.initialStartDate || moment(), startDate: props.initialStartDate, endDate: props.initialEndDate, unitWidth: null, height: null, translateX: 0, isAnimating: false, unitWrapper: React.createRef(), pickerProps: _this.props, }; return _this; } PickerProvider.getDerivedStateFromProps = function (props, state) { if (state.pickerType !== props.pickerType) { return { pickerType: props.pickerType, unitWidth: null }; } if (state.pickerProps.initialStartDate !== props.initialStartDate) { return { startDate: props.initialStartDate, endDate: state.pickerProps.initialEndDate !== props.initialEndDate ? props.initialEndDate : state.endDate, currentMonth: props.initialStartDate, pickerProps: props, unitWidth: null, }; } if (state.pickerProps.initialEndDate !== props.initialEndDate) { return { endDate: props.initialEndDate, pickerProps: props, unitWidth: null, }; } return null; }; PickerProvider.prototype.componentDidMount = function () { this.setUnitSize(); }; PickerProvider.prototype.componentDidUpdate = function (prevProps) { if (prevProps.pickerType !== this.props.pickerType || prevProps.initialStartDate !== this.props.initialStartDate) { this.setUnitSize(); } }; PickerProvider.prototype.getUnit = function () { return this.state.pickerType === 'day' ? 'month' : 'year'; }; PickerProvider.prototype.getPickerHeight = function (currentMonth) { if (currentMonth === void 0) { currentMonth = this.state.currentMonth; } var visibleHeight = 0; for (var i = 0; i < this.props.unitCount; i = i + 1) { var key = moment(currentMonth).add(i, this.getUnit()).format('YYYY-MM'); visibleHeight = Math.max(visibleHeight, this.units.get(key).offsetHeight); } return visibleHeight; }; PickerProvider.prototype.setUnitSize = function () { var unitWidth = this.state.unitWrapper.current.offsetWidth / (this.props.unitCount + 2); if (this.props.onChangeWidth) { this.props.onChangeWidth(unitWidth * this.props.unitCount); } this.setState({ unitWidth: unitWidth, height: this.getPickerHeight(), translateX: -unitWidth, }); }; PickerProvider.prototype.setRef = function (key) { var _this = this; return function (e) { return _this.units.set(key, ReactDOM.findDOMNode(e)); }; }; PickerProvider.prototype.handleUnit = function (add) { var _this = this; if (this.state.isAnimating) { return; } // Shift to the next month/year and get new height of new visible part of picker this.setState({ translateX: this.state.translateX + (this.state.unitWidth * (add < 0 ? 1 : -1)), isAnimating: true, height: this.getPickerHeight(moment(this.state.currentMonth).add(add, this.getUnit())), }); // After animation set new current month setTimeout(function () { _this.setState({ translateX: -_this.state.unitWidth, isAnimating: false, currentMonth: moment(_this.state.currentMonth).add(add, _this.getUnit()), }); }, 200); }; PickerProvider.prototype.handlePrevUnit = function () { this.handleUnit(-1); }; PickerProvider.prototype.handleNextUnit = function () { this.handleUnit(1); }; PickerProvider.prototype.handleClick = function (day) { var _a = this.props, locale = _a.locale, isWeeksSelection = _a.isWeeksSelection, maxDate = _a.maxDate, minDate = _a.minDate, isSingle = _a.isSingle, maxDaysCount = _a.maxDaysCount; var _b = this.state, focus = _b.focus, pickerType = _b.pickerType; var newStartDate = moment(day); var newEndDate = moment(day); var currentFocus = focus; if (isSingle) { currentFocus = 'startDate'; } // Если выбираются недели, то начальной датой диапазона будет первый день недели, по которой был сделан клик if (isWeeksSelection && currentFocus === 'startDate') { newStartDate = moment(day).locale(locale).startOf('week'); } var startDate = currentFocus === 'startDate' ? newStartDate : this.state.startDate; var maxEndDate = moment(startDate).add(maxDaysCount - 1, 'day'); // Если выбираются недели, то конечной датой диапазона будет последний день недели, по которой был сделан клик if (isWeeksSelection && currentFocus === 'endDate') { newEndDate = moment(day).locale(locale).endOf('week'); if (moment(newEndDate).locale(locale).isSame(moment(maxEndDate).locale(locale), 'week')) { newEndDate = moment.min(newEndDate, maxEndDate); } } var endDate = currentFocus === 'endDate' ? newEndDate : this.state.endDate; var nextFocus = currentFocus === 'startDate' ? 'endDate' : 'startDate'; // если снова выбираем начальную дату, то сбрасываем конечную if (currentFocus === 'startDate') { endDate = null; } var maxStartDate = moment(startDate).add(-maxDaysCount + 1, 'day'); // если при выборе недель начальная дата меньше, чем выбранная, то конечная дата становится началом выбранном недели // такое возможно, когда выделение происходит не слева направо, справа налево. if (isWeeksSelection && currentFocus === 'endDate' && startDate.isAfter(day)) { endDate = moment(day).locale(locale).startOf('week'); } // если получилось так, что конечная дата меньше начальной (выделение справа налево), то меняем эти даты местами if (currentFocus === 'endDate') { if (endDate.isBefore(startDate, 'day')) { endDate = startDate.clone(); startDate = moment(day); if (isWeeksSelection) { startDate = moment(day).locale(locale).startOf('week'); if (moment(startDate).locale(locale).isSame(moment(maxStartDate).locale(locale), 'week')) { startDate = moment.max(startDate, maxStartDate); } } if (pickerType === 'month') { startDate = moment(startDate).startOf('month'); endDate = moment(endDate).endOf('month'); endDate = endDate && maxDate ? moment.min(maxDate, endDate) : endDate; var maxStartDate_1 = moment(endDate).add(-maxDaysCount + 1, 'day'); if (maxDaysCount) { startDate = moment.max(startDate, maxStartDate_1); } } nextFocus = 'startDate'; } else { if (pickerType === 'month') { startDate = moment(startDate).startOf('month'); endDate = endDate ? moment(endDate).endOf('month') : endDate; var maxEndDate_1 = moment(startDate).add(maxDaysCount - 1, 'day'); if (maxDaysCount && endDate && endDate.isSame(maxEndDate_1, 'month')) { endDate = moment.min(endDate, maxEndDate_1); } } } } // нужно убедиться, что новые выбранные даты не выходят за рамки разрешенного диапазона endDate = endDate && maxDate ? moment.min(maxDate, endDate) : endDate; startDate = startDate && minDate ? moment.max(minDate, startDate) : startDate; if (this.props.onDatesChange) { this.props.onDatesChange(startDate, endDate); } this.setState({ startDate: startDate, endDate: endDate, focus: nextFocus }); }; PickerProvider.prototype.handleHover = function (hoveredDate) { var _a = this.props, locale = _a.locale, isWeeksSelection = _a.isWeeksSelection, minDate = _a.minDate, maxDate = _a.maxDate, isSingle = _a.isSingle; var _b = this.state, startDate = _b.startDate, endDate = _b.endDate, pickerType = _b.pickerType; if (isSingle) { return; } if (isWeeksSelection && hoveredDate && pickerType === 'day') { // Highlight the whole week if startDate is picked var startHoveredDate = moment(hoveredDate).locale(locale).startOf('week'); startHoveredDate = minDate ? moment.max(startHoveredDate, minDate) : startHoveredDate; var endHoveredDate = moment(hoveredDate).locale(locale).endOf('week'); endHoveredDate = maxDate ? moment.min(endHoveredDate, maxDate) : endHoveredDate; var newStartDate = startDate ? startDate.clone() : null; // if cursor is being moved set proper date if (startDate && !endDate) { if (hoveredDate.isBefore(startDate)) { newStartDate = moment(startDate).locale(locale).endOf('week'); newStartDate = maxDate ? moment.min(newStartDate, maxDate) : newStartDate; } if (hoveredDate.isAfter(startDate)) { newStartDate = moment(startDate).locale(locale).startOf('week'); newStartDate = minDate ? moment.max(newStartDate, minDate) : newStartDate; } } this.setState({ hoveredDate: [startHoveredDate, endHoveredDate], startDate: newStartDate }); return; } this.setState({ hoveredDate: hoveredDate }); }; PickerProvider.prototype.render = function () { return (React.createElement(PickerContext.Provider, { value: this.state }, this.props.children)); }; PickerProvider.defaultProps = { pickerType: 'day', unitCount: 1, locale: 'en', isSingle: false, }; return PickerProvider; }(React.Component)); exports.PickerProvider = PickerProvider; exports.PickerConsumer = PickerContext.Consumer; /***/ }), /* 3 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__3__; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var cn = __webpack_require__(3); var defaultStyles = __webpack_require__(14); var Day = /** @class */ (function (_super) { __extends(Day, _super); function Day() { return _super !== null && _super.apply(this, arguments) || this; } Day.prototype.renderDay = function () { var text = this.props.text; if (!text) { return React.createElement("span", null, "\u00A0"); } return text; }; Day.prototype.render = function () { var _a = this.props, isDisabled = _a.isDisabled, isDayOff = _a.isDayOff, isSelected = _a.isSelected, isFirstSelected = _a.isFirstSelected, isLastSelected = _a.isLastSelected, isClickable = _a.isClickable, isHovered = _a.isHovered, onClick = _a.onClick, onHover = _a.onHover; var styles = __assign({}, defaultStyles, this.props.styles); return (React.createElement("span", { className: cn(styles.day, isDisabled && styles.dayDisabled, isDayOff && styles.dayOff, isSelected && styles.daySelected, isFirstSelected && styles.dayFirstSelected, isLastSelected && styles.dayLastSelected, isClickable && styles.dayClickable, isHovered && styles.dayHovered), onClick: onClick, onMouseOver: onHover }, this.renderDay())); }; return Day; }(React.PureComponent)); exports.Day = Day; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var cn = __webpack_require__(3); var defaultStyles = __webpack_require__(21); var PickerProvider_1 = __webpack_require__(2); function Wrapper(props) { var styles = __assign({}, defaultStyles, props.styles); return (React.createElement(PickerProvider_1.PickerConsumer, null, function (_a) { var unitWrapper = _a.unitWrapper, unitWidth = _a.unitWidth, translateX = _a.translateX, currentMonth = _a.currentMonth, isAnimating = _a.isAnimating, height = _a.height, pickerProps = _a.pickerProps, handleHover = _a.handleHover; return (React.createElement("div", { ref: unitWrapper, className: cn(styles.wrapper), style: { width: unitWidth * pickerProps.unitCount || 'auto' }, onMouseLeave: function () { return handleHover(null); } }, React.createElement("div", { className: isAnimating ? styles.transition : null, style: { height: height, width: 'auto', transform: "translateX(" + (unitWidth ? translateX : 0) + "px)", } }, props.children))); })); } exports.Wrapper = Wrapper; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var PickerProvider_1 = __webpack_require__(2); exports.PickerConsumer = PickerProvider_1.PickerConsumer; exports.PickerProvider = PickerProvider_1.PickerProvider; var DayPickerController_1 = __webpack_require__(8); exports.DayPickerController = DayPickerController_1.DayPickerController; var MonthPickerController_1 = __webpack_require__(11); exports.MonthPickerController = MonthPickerController_1.MonthPickerController; /***/ }), /* 7 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__7__; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var moment = __webpack_require__(1); var Month_1 = __webpack_require__(9); var Wrapper_1 = __webpack_require__(5); var PickerProvider_1 = __webpack_require__(2); function DayPickerController() { return (React.createElement(PickerProvider_1.PickerConsumer, null, function (_a) { var setRef = _a.setRef, currentMonth = _a.currentMonth, startDate = _a.startDate, endDate = _a.endDate, hoveredDate = _a.hoveredDate, handleClick = _a.handleClick, handleHover = _a.handleHover, pickerProps = _a.pickerProps, handleTitleClick = _a.handleTitleClick; var prevInvisibleMonth = moment(currentMonth).add(-1, 'month'); var nextInvisibleMonth = moment(currentMonth).add(pickerProps.unitCount, 'month'); var monthList = [ prevInvisibleMonth, currentMonth ].concat(Array.from({ length: pickerProps.unitCount - 1 }, function (v, k) { return moment(currentMonth).add(1 + k, 'month'); }), [ nextInvisibleMonth, ]); return (React.createElement(Wrapper_1.Wrapper, { styles: pickerProps.styles }, monthList.map(function (month) { var key = "" + month.format('YYYY-MM'); return (React.createElement(Month_1.Month, { key: key, ref: setRef(key), month: Number(month.format('MM')), year: Number(month.format('YYYY')), locale: pickerProps.locale, showOutsideDays: pickerProps.showOutsideDays, startDate: startDate, endDate: endDate, minDate: pickerProps.minDate, maxDate: pickerProps.maxDate, hoveredDate: hoveredDate, onTitleClick: handleTitleClick, onClick: handleClick, onHover: handleHover, minDaysCount: pickerProps.minDaysCount, maxDaysCount: pickerProps.maxDaysCount, styles: pickerProps.styles })); }))); })); } exports.DayPickerController = DayPickerController; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var moment = __webpack_require__(1); var cn = __webpack_require__(3); var Day_1 = __webpack_require__(4); var day_1 = __webpack_require__(10); var defaultStyles = __webpack_require__(19); var Month = /** @class */ (function (_super) { __extends(Month, _super); function Month(props) { return _super.call(this, props) || this; } Month.prototype.handleClick = function (date) { var _this = this; return function (e) { _this.props.onClick(date); }; }; Month.prototype.handleHover = function (date) { var _this = this; return function (e) { _this.props.onHover(date); }; }; Month.prototype.handleTitleClick = function (date) { var _this = this; return function () { if (_this.props.onTitleClick) { _this.props.onTitleClick(date); } }; }; Month.prototype.render = function () { var _this = this; var _a = this.props, month = _a.month, year = _a.year, locale = _a.locale, showOutsideDays = _a.showOutsideDays, startDate = _a.startDate, endDate = _a.endDate, hoveredDate = _a.hoveredDate, onTitleClick = _a.onTitleClick; var styles = __assign({}, defaultStyles, this.props.styles); var yearMonth = year + "-" + month; var localeData = moment.localeData(locale); var prevMonth = moment(yearMonth, 'YYYY-MM').add(-1, 'month'); var currentMonth = moment(yearMonth, 'YYYY-MM'); var nextMonth = moment(yearMonth, 'YYYY-MM').add(1, 'month'); var daysInPrevMonth = prevMonth.daysInMonth(); var daysInMonth = currentMonth.daysInMonth(); var weekDays = Array.from(localeData.weekdaysShort()); var firstDayOfWeek = localeData.firstDayOfWeek(); var firstDayOfMonth = Number(currentMonth.startOf('month').format('E')); if (firstDayOfWeek === 1) { var sunday = weekDays.shift(); weekDays.push(sunday); // index of week's day from weekDays that is first day of current month firstDayOfMonth = firstDayOfMonth - 1 < 0 ? 6 : firstDayOfMonth - 1; } // if month doesn't start from monday then add days from previous month to complete week var daysOfPrevMonth = Array.from({ length: firstDayOfMonth }, function (v, k) { return !showOutsideDays ? null : daysInPrevMonth - k; }).reverse(); var days = Array.from({ length: daysInMonth }, function (v, k) { return k + 1; }); days.unshift.apply(days, daysOfPrevMonth); // Month may cross five or six weeks (35 or 42 days) so add days from next month to complete 5-th or 6-th week just for beauty performance var daysOfNextMonth = Array.from({ length: (days.length > 35 ? 42 : 35) - daysInMonth - firstDayOfMonth }, function (v, k) { return !showOutsideDays ? null : k + 1; }); days.push.apply(days, daysOfNextMonth); return (React.createElement("div", { className: cn(styles.month) }, React.createElement("div", { className: cn(styles.headerMonthWrapper) }, React.createElement("div", { className: cn(styles.headerMonth, onTitleClick && styles.headerClickable), onClick: this.handleTitleClick(currentMonth) }, localeData.months(currentMonth), ", ", currentMonth.format('YYYY')), React.createElement("div", { className: cn(styles.headerWeekDays) }, weekDays.map(function (monthName, index) { return (React.createElement("span", { key: index }, monthName)); }))), React.createElement("div", { className: 'days' }, React.createElement("div", { className: styles.daysWeek }, days.map(function (day, index) { var currentDay = moment(currentMonth).date(day); if (index < firstDayOfMonth) { currentDay = !showOutsideDays ? moment.invalid() : moment(prevMonth).date(day); } if (index > (daysInMonth - 1) + firstDayOfMonth) { currentDay = !showOutsideDays ? moment.invalid() : moment(nextMonth).date(day); } var isDayOff = day_1.isWeekEnd(currentDay); var isSelected = day_1.isDaySelected(currentDay, startDate, endDate); var isFirstSelected = day_1.isSameDay(currentDay, startDate); var isLastSelected = day_1.isSameDay(currentDay, endDate); var isDisabled = day_1.isDayDisabled(currentDay, _this.props); var isClickable = !isDisabled; var isHovered = day_1.isDayHovered(currentDay, startDate, endDate, hoveredDate); return (React.createElement(Day_1.Day, { key: index, text: day, isDisabled: isDisabled, isDayOff: isDayOff, isSelected: isSelected, isFirstSelected: isFirstSelected, isLastSelected: isLastSelected, isClickable: isClickable, isHovered: isHovered, onClick: isClickable ? _this.handleClick(currentDay) : null, onHover: _this.handleHover(currentDay.isValid() ? currentDay : null), styles: styles })); }))))); }; return Month; }(React.PureComponent)); exports.Month = Month; /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var moment = __webpack_require__(1); function isWeekEnd(day) { return day.isoWeekday() === 6 || day.isoWeekday() === 7; } exports.isWeekEnd = isWeekEnd; function isDaySelected(day, startDate, endDate) { /*index >= firstDayOfMonth && index <= (daysInMonth - 1) + firstDayOfMonth */ if (!startDate || !endDate || !day.isValid()) { return false; } return day.isBetween(startDate, endDate, 'day', '[]'); } exports.isDaySelected = isDaySelected; function isDayHovered(day, startDate, endDate, hoveredDate) { if (Array.isArray(hoveredDate)) { var startHoveredDate = hoveredDate[0], endHoveredDate = hoveredDate[1]; if (startDate && !endDate) { return (day.isBetween(startDate, endHoveredDate, 'day', '(]') || day.isBetween(startHoveredDate, startDate, 'day', '[)')); } return false; } return !endDate && startDate && hoveredDate && (day.isBetween(startDate, hoveredDate, 'day', '(]') || day.isBetween(hoveredDate, startDate, 'day', '[)')); } exports.isDayHovered = isDayHovered; function isDayDisabled(day, props) { if (!day.isValid()) { return true; } var startDate = props.startDate, endDate = props.endDate, minDate = props.minDate, maxDate = props.maxDate, minDaysCount = props.minDaysCount, maxDaysCount = props.maxDaysCount, month = props.month; var minPrevAvailableDay = moment(startDate).add(-minDaysCount + 1, 'day'); var minNextAvailableDay = moment(startDate).add(minDaysCount - 1, 'day'); var maxPrevAvailableDay = moment(startDate).add(-maxDaysCount + 1, 'day'); var maxNextAvailableDay = moment(startDate).add(maxDaysCount - 1, 'day'); // отключаем дни из смежных месяцев var isDisabled = Number(day.format('MM')) !== month; // отключаем даты вне валидного диапазона if (minDate && day.isBefore(minDate, 'day') || maxDate && day.isAfter(maxDate, 'day')) { isDisabled = true; } if (minDaysCount && startDate && !endDate && (day.isBetween(startDate, minNextAvailableDay, 'day', '[)') || day.isBetween(minPrevAvailableDay, startDate, 'day', '(]'))) { isDisabled = true; } if (maxDaysCount && startDate && !endDate && (day.isAfter(maxNextAvailableDay, 'day') || day.isBefore(maxPrevAvailableDay, 'day'))) { isDisabled = true; } return isDisabled; } exports.isDayDisabled = isDayDisabled; function isSameDay(day, b) { if (!b || !day.isValid()) { return false; } return day.isSame(b, 'day'); } exports.isSameDay = isSameDay; /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var moment = __webpack_require__(1); var Year_1 = __webpack_require__(12); var Wrapper_1 = __webpack_require__(5); var PickerProvider_1 = __webpack_require__(2); function MonthPickerController() { return (React.createElement(PickerProvider_1.PickerConsumer, null, function (_a) { var setRef = _a.setRef, currentMonth = _a.currentMonth, startDate = _a.startDate, endDate = _a.endDate, hoveredDate = _a.hoveredDate, handleClick = _a.handleClick, handleHover = _a.handleHover, pickerProps = _a.pickerProps, focus = _a.focus, handleTitleClick = _a.handleTitleClick; var prevInvisibleMonth = moment(currentMonth).add(-1, 'year'); var nextInvisibleMonth = moment(currentMonth).add(pickerProps.unitCount, 'year'); var monthList = [ prevInvisibleMonth, currentMonth ].concat(Array.from({ length: pickerProps.unitCount - 1 }, function (v, k) { return moment(currentMonth).add(1 + k, 'year'); }), [ nextInvisibleMonth, ]); return (React.createElement(Wrapper_1.Wrapper, { styles: pickerProps.styles }, monthList.map(function (month) { var key = "" + month.format('YYYY-MM'); return (React.createElement(Year_1.Year, { key: key, ref: setRef(key), year: Number(month.format('YYYY')), locale: pickerProps.locale, startDate: startDate, endDate: endDate, minDate: pickerProps.minDate, maxDate: pickerProps.maxDate, hoveredDate: hoveredDate, onTitleClick: handleTitleClick, onClick: handleClick, onHover: handleHover, focus: focus, styles: pickerProps.styles, minDaysCount: pickerProps.minDaysCount, maxDaysCount: pickerProps.maxDaysCount })); }))); })); } exports.MonthPickerController = MonthPickerController; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var React = __webpack_require__(0); var moment = __webpack_require__(1); var cn = __webpack_require__(3); var Day_1 = __webpack_require__(4); var month_1 = __webpack_require__(13); var defaultStyles = __webpack_require__(23); var Year = /** @class */ (function (_super) { __extends(Year, _super); function Year(props) { return _super.call(this, props) || this; } Year.prototype.handleClick = function (date) { var _this = this; return function (e) { var selectedDate = moment(date).startOf('month'); if (_this.props.focus === 'endDate') { selectedDate = moment(date).endOf('month'); } _this.props.onClick(selectedDate); }; }; Year.prototype.handleHover = function (date) { var _this = this; return function (e) { _this.props.onHover(date); }; }; Year.prototype.handleTitleClick = function (date) { var _this = this; return function () { if (_this.props.onTitleClick) { _this.props.onTitleClick(date); } }; }; Year.prototype.render = function () { var _this = this; var _a = this.props, year = _a.year, locale = _a.locale, startDate = _a.startDate, endDate = _a.endDate, hoveredDate = _a.hoveredDate, onTitleClick = _a.onTitleClick; var styles = __assign({}, defaultStyles, this.props.styles); var localeData = moment.localeData(locale); var monthList = Array.from(localeData.monthsShort()); return (React.createElement("div", { className: styles.year }, React.createElement("div", { className: 'header' }, React.createElement("div", { className: cn(styles.headerYear, onTitleClick && styles.headerClickable), onClick: this.handleTitleClick(moment(year, 'YYYY')) }, year)), React.createElement("div", { className: 'days' }, React.createElement("div", { className: styles.daysWeek }, monthList.map(function (month, index) { var currentMonth = moment(year + "-" + (index + 1), 'YYYY-MM'); var isSelected = month_1.isMonthSelected(currentMonth, startDate, endDate); var isFirstSelected = month_1.isSameMonth(currentMonth, startDate); var isLastSelected = month_1.isSameMonth(currentMonth, endDate); var isDisabled = month_1.isMonthDisabled(currentMonth, _this.props); var isClickable = !isDisabled; var isHovered = month_1.isMonthHovered(currentMonth, startDate, endDate, hoveredDate); return (React.createElement(Day_1.Day, { key: index, text: month, isDisabled: isDisabled, isSelected: isSelected, isFirstSelected: isFirstSelected, isLastSelected: isLastSelected, isClickable: isClickable, isHovered: isHovered, onClick: isClickable ? _this.handleClick(currentMonth) : null, onHover: _this.handleHover(currentMonth), styles: styles })); }))))); }; return Year; }(React.PureComponent)); exports.Year = Year; /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var moment = __webpack_require__(1); function isMonthSelected(month, startDate, endDate) { if (!startDate || !endDate) { return false; } var firstMonthDay = moment(month).startOf('month'); var lastMonthDay = moment(month).endOf('month'); return firstMonthDay.isBetween(startDate, endDate, 'month', '[]') || lastMonthDay.isBetween(startDate, endDate, 'month', '[]'); } exports.isMonthSelected = isMonthSelected; function isMonthHovered(month, startDate, endDate, hoveredDate) { return !Array.isArray(hoveredDate) && !endDate && startDate && hoveredDate && (month.isBetween(startDate, hoveredDate, 'month', '(]') || month.isBetween(hoveredDate, startDate, 'month', '[)')); } exports.isMonthHovered = isMonthHovered; function isMonthDisabled(month, props) { var minDate = props.minDate, maxDate = props.maxDate, minDaysCount = props.minDaysCount, maxDaysCount = props.maxDaysCount, startDate = props.startDate, endDate = props.endDate; var firstMonthDay = moment(month).startOf('month'); var lastMonthDay = moment(month).endOf('month'); var isDisabled = false; var minPrevAvailableMonth = moment(startDate).endOf('month').add(-minDaysCount + 1, 'day'); var minNextAvailableMonth = moment(startDate).startOf('month').add(minDaysCount - 1, 'day'); var endMonthDate = moment(startDate).endOf('month'); endMonthDate = maxDate ? moment.min(endMonthDate, maxDate) : endMonthDate; var maxPrevAvailableMonth = moment(endMonthDate).add(-maxDaysCount + 1, 'day'); var maxNextAvailableMonth = moment(startDate).startOf('month').add(maxDaysCount - 1, 'day'); if (minDaysCount && startDate && !endDate && (month.isBetween(minPrevAvailableMonth, startDate, 'month', '()') || month.isBetween(startDate, minNextAvailableMonth, 'month', '()'))) { isDisabled = true; } if (maxDaysCount && startDate && !endDate && (month.isBefore(maxPrevAvailableMonth, 'month') || month.isAfter(maxNextAvailableMonth, 'month'))) { isDisabled = true; } // отключаем даты вне валидного диапазона if (minDate && lastMonthDay.isBefore(minDate, 'day') || maxDate && firstMonthDay.isAfter(maxDate, 'day')) { isDisabled = true; } return isDisabled; } exports.isMonthDisabled = isMonthDisabled; function isSameMonth(month, b) { if (!b || !month.isValid()) { return false; } return month.isSame(b, 'month'); } exports.isSameMonth = isSameMonth; /***/ }), /* 14 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin module.exports = {"day":"day-module___day--3-1tp","dayDisabled":"day-module___dayDisabled--2cMco","dayOff":"day-module___dayOff--3JvNx","daySelected":"day-module___daySelected--Srbbc","dayFirstSelected":"day-module___dayFirstSelected--_-5Zf","dayLastSelected":"day-module___dayLastSelected--3UpPZ","dayClickable":"day-module___dayClickable--JfOnh","dayHovered":"day-module___dayHovered--2aKsi"}; /***/ }), /* 15 */, /* 16 */, /* 17 */, /* 18 */, /* 19 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin module.exports = {"month":"month-module___month--3-G0C","headerMonth":"month-module___headerMonth--3dLLP","headerWeekDays":"month-module___headerWeekDays--35FAE","headerClickable":"month-module___headerClickable--18krZ"}; /***/ }), /* 20 */, /* 21 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin module.exports = {"wrapper":"wrapper-module___wrapper--2w65P","transition":"wrapper-module___transition--1ufHD"}; /***/ }), /* 22 */, /* 23 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin module.exports = {"year":"year-module___year--vO_pS","day":"year-module___day--1U4JJ","headerYear":"year-module___headerYear--4V7Ir","headerClickable":"year-module___headerClickable--25MCU"}; /***/ }) /******/ ]); });