UNPKG

calcite-react

Version:
260 lines (207 loc) 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _moment = _interopRequireDefault(require("moment")); require("react-dates/lib/css/_datepicker.css"); var _DatePickerStyled = require("./DatePicker-styled"); require("react-dates/initialize"); var _reactDates = require("react-dates"); var _reactMomentProptypes = _interopRequireDefault(require("react-moment-proptypes")); var _Menu = require("../Menu"); var _CalendarIcon = _interopRequireDefault(require("calcite-ui-icons-react/CalendarIcon")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var DateRangePicker = function DateRangePicker(_ref) { var field = _ref.field, form = _ref.form, onFocusChange = _ref.onFocusChange, onDatesChange = _ref.onDatesChange, disabled = _ref.disabled, name = _ref.name, value = _ref.value, children = _ref.children, monthYearSelectionMode = _ref.monthYearSelectionMode, yearSelectDates = _ref.yearSelectDates, hideKeyboardShortcutsPanel = _ref.hideKeyboardShortcutsPanel, hideInputIcon = _ref.hideInputIcon, other = _objectWithoutProperties(_ref, ["field", "form", "onFocusChange", "onDatesChange", "disabled", "name", "value", "children", "monthYearSelectionMode", "yearSelectDates", "hideKeyboardShortcutsPanel", "hideInputIcon"]); var touched, isSubmitting, setFieldValue, setTouched; if (field) { value = field.value; name = field.name; touched = form.touched; isSubmitting = form.isSubmitting; setFieldValue = form.setFieldValue; setTouched = form.setTouched; } var _onDatesChange = function _onDatesChange(dates) { if (setFieldValue) { var startDate = dates.startDate, endDate = dates.endDate; setFieldValue(name, { startDate: startDate, endDate: endDate }); } if (onDatesChange) { onDatesChange(dates); } }; var _onFocusChange = function _onFocusChange(focusedInput) { if (setTouched && !focusedInput) { setTouched(_objectSpread({}, touched, _defineProperty({}, name, true))); } if (onFocusChange) { onFocusChange(focusedInput); } }; var getHeaderEl = function getHeaderEl(_ref2) { var month = _ref2.month, onMonthSelect = _ref2.onMonthSelect, onYearSelect = _ref2.onYearSelect; var weekdays = _moment.default.weekdaysMin(); return _react.default.createElement(_DatePickerStyled.StyledMonthElContainer, null, _react.default.createElement(_DatePickerStyled.StyledMonthYearSelectContainer, null, getMonthEl({ month: month, onMonthSelect: onMonthSelect }), getYearEl({ month: month, onYearSelect: onYearSelect })), _react.default.createElement(_DatePickerStyled.StyledWeekDayList, null, weekdays.map(function (day) { return _react.default.createElement(_DatePickerStyled.StyledWeekDay, { key: day }, day); }))); }; var getMonthEl = function getMonthEl(_ref3) { var month = _ref3.month, onMonthSelect = _ref3.onMonthSelect; if (monthYearSelectionMode === 'NONE') { return _react.default.createElement(_DatePickerStyled.StyledMonthYearHeader, null, month.format('MMMM')); } return _react.default.createElement(_DatePickerStyled.StyledMonthSelect, { selectedValue: month.month(), renderValue: function renderValue(selectedItem) { return getMonthRenderValue(selectedItem, month); }, onChange: function onChange(value) { onMonthSelect(month, value); } }, _moment.default.months().map(function (label, value) { return _react.default.createElement(_Menu.MenuItem, { value: value, key: value }, label); })); }; var getMonthRenderValue = function getMonthRenderValue(selectedItem, month) { if (monthYearSelectionMode === 'MONTH') { return "".concat(selectedItem && selectedItem.props.children, " ").concat(month.year()); } return selectedItem && selectedItem.props.children; }; var getYearEl = function getYearEl(_ref4) { var month = _ref4.month, onYearSelect = _ref4.onYearSelect; if (monthYearSelectionMode === 'MONTH_YEAR') { return _react.default.createElement(_DatePickerStyled.StyledYearSelect, { selectedValue: month.year(), onChange: function onChange(value) { onYearSelect(month, value); } }, getYears(month.year())); } if (monthYearSelectionMode === 'NONE') { return _react.default.createElement(_DatePickerStyled.StyledMonthYearHeader, null, month.year()); } }; var getYears = function getYears(year) { var yearAdded = false; var yearsArr = []; for (var currentYear = yearSelectDates.endYear; yearSelectDates.startYear <= currentYear; currentYear--) { if (currentYear === year) { yearAdded = true; } yearsArr.push(_react.default.createElement(_Menu.MenuItem, { value: currentYear, key: currentYear }, currentYear)); } if (!yearAdded) { yearsArr.unshift(_react.default.createElement(_Menu.MenuItem, { value: year, key: year }, year)); yearsArr.sort(function (a, b) { if (a.props.value < b.props.value) return 1; if (a.props.value > b.props.value) return -1; return 0; }); } return yearsArr; }; return _react.default.createElement(_DatePickerStyled.StyledDatePickerContainer, { dateRange: true, hideDoWHeader: monthYearSelectionMode !== 'NONE' }, _react.default.createElement(_reactDates.DateRangePicker, _extends({ startDate: value && value.startDate, endDate: value && value.endDate, onDatesChange: _onDatesChange, onFocusChange: _onFocusChange, disabled: isSubmitting || disabled, renderMonthElement: getHeaderEl, hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel, customInputIcon: hideInputIcon ? undefined : _react.default.createElement(_CalendarIcon.default, { size: "16" }) }, other))); }; DateRangePicker.propTypes = { /** The currently selected moment date object for the start date. */ startDate: _reactMomentProptypes.default.momentObj, /** Id provided to the start date text field. */ startDateId: _propTypes.default.string.isRequired, /** The currently selected moment date object for the end date. */ endDate: _reactMomentProptypes.default.momentObj, /** Id provided to the end date text field. */ endDateId: _propTypes.default.string.isRequired, /** Callback function when the start or end date is changed. */ onDatesChange: _propTypes.default.func.isRequired, /** The name of the currently focused text field. */ focusedInput: _propTypes.default.oneOf(['startDate', 'endDate']), /** Callback function when the focused input is changed. */ onFocusChange: _propTypes.default.func.isRequired, /** Placeholder text for the start date text field. */ startDatePlaceholderText: _propTypes.default.string, /** Placeholder text for the end date text field. */ endDatePlaceholderText: _propTypes.default.string, /** Determine if year and/or month dropdowns should be shown in the calendar popup */ monthYearSelectionMode: _propTypes.default.oneOf(['NONE', 'MONTH', 'MONTH_YEAR']), /** The years that will be used to populate the year dropdown menu */ yearSelectDates: _propTypes.default.shape({ startYear: _propTypes.default.number, endYear: _propTypes.default.number }), /** Toggle visibility of the calendar icon in the input */ hideInputIcon: _propTypes.default.bool }; DateRangePicker.defaultProps = { startDatePlaceholderText: 'Start Date', endDatePlaceholderText: 'End Date', monthYearSelectionMode: 'NONE', yearSelectDates: { startYear: new _moment.default().subtract(50, 'year').year(), endYear: new _moment.default().year() }, hideKeyboardShortcutsPanel: true }; DateRangePicker.displayName = 'DateRangePicker'; var _default = DateRangePicker; exports.default = _default;