UNPKG

@material-ui/lab

Version:

Material-UI Lab - Incubator for Material-UI React components.

177 lines (157 loc) 6.47 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.styles = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _Typography = _interopRequireDefault(require("@material-ui/core/Typography")); var _styles = require("@material-ui/core/styles"); var _PickersDay = _interopRequireDefault(require("../PickersDay/PickersDay")); var _useUtils = require("../internal/pickers/hooks/useUtils"); var _dimensions = require("../internal/pickers/constants/dimensions"); var _useKeyDown = require("../internal/pickers/hooks/useKeyDown"); var _PickersSlideTransition = _interopRequireDefault(require("./PickersSlideTransition")); const weeksContainerHeight = (_dimensions.DAY_SIZE + _dimensions.DAY_MARGIN * 4) * 6; const styles = theme => (0, _styles.createStyles)({ root: { minHeight: weeksContainerHeight }, loadingContainer: { display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: weeksContainerHeight }, weekContainer: { overflow: 'hidden' }, week: { margin: `${_dimensions.DAY_MARGIN}px 0`, display: 'flex', justifyContent: 'center' }, iconButton: { zIndex: 1, backgroundColor: theme.palette.background.paper }, previousMonthButton: { marginRight: 12 }, daysHeader: { display: 'flex', justifyContent: 'center', alignItems: 'center' }, weekDayLabel: { width: 36, height: 40, margin: '0 2px', textAlign: 'center', display: 'flex', justifyContent: 'center', alignItems: 'center', color: theme.palette.text.secondary } }); exports.styles = styles; var _ref = /*#__PURE__*/React.createElement("span", null, "..."); /** * @ignore - do not document. */ function PickersCalendar(props) { const { allowKeyboardControl, allowSameDateSelection, onFocusedDayChange: changeFocusedDay, classes, className, currentMonth, date, disableHighlightToday, focusedDay, isDateDisabled, isMonthSwitchingAnimating, loading, onChange, onMonthSwitchingAnimationEnd, reduceAnimations, renderDay, renderLoading = () => _ref, showDaysOutsideCurrentMonth, slideDirection, TransitionProps } = props; const now = (0, _useUtils.useNow)(); const utils = (0, _useUtils.useUtils)(); const theme = (0, _styles.useTheme)(); const handleDaySelect = React.useCallback((day, isFinish = 'finish') => { // TODO possibly buggy line figure out and add tests const finalDate = Array.isArray(date) ? day : utils.mergeDateAndTime(day, date || now); onChange(finalDate, isFinish); }, [date, now, onChange, utils]); const initialDate = Array.isArray(date) ? date[0] : date; const nowFocusedDay = focusedDay || initialDate || now; (0, _useKeyDown.useGlobalKeyDown)(Boolean(allowKeyboardControl), { [_useKeyDown.keycode.ArrowUp]: () => changeFocusedDay(utils.addDays(nowFocusedDay, -7)), [_useKeyDown.keycode.ArrowDown]: () => changeFocusedDay(utils.addDays(nowFocusedDay, 7)), [_useKeyDown.keycode.ArrowLeft]: () => changeFocusedDay(utils.addDays(nowFocusedDay, theme.direction === 'ltr' ? -1 : 1)), [_useKeyDown.keycode.ArrowRight]: () => changeFocusedDay(utils.addDays(nowFocusedDay, theme.direction === 'ltr' ? 1 : -1)), [_useKeyDown.keycode.Home]: () => changeFocusedDay(utils.startOfWeek(nowFocusedDay)), [_useKeyDown.keycode.End]: () => changeFocusedDay(utils.endOfWeek(nowFocusedDay)), [_useKeyDown.keycode.PageUp]: () => changeFocusedDay(utils.getNextMonth(nowFocusedDay)), [_useKeyDown.keycode.PageDown]: () => changeFocusedDay(utils.getPreviousMonth(nowFocusedDay)) }); const currentMonthNumber = utils.getMonth(currentMonth); const selectedDates = (Array.isArray(date) ? date : [date]).filter(Boolean).map(selectedDateItem => selectedDateItem && utils.startOfDay(selectedDateItem)); return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { className: classes.daysHeader }, utils.getWeekdays().map((day, i) => /*#__PURE__*/React.createElement(_Typography.default, { "aria-hidden": true, key: day + i.toString(), variant: "caption", className: classes.weekDayLabel }, day.charAt(0).toUpperCase()))), loading ? /*#__PURE__*/React.createElement("div", { className: classes.loadingContainer }, renderLoading()) : /*#__PURE__*/React.createElement(_PickersSlideTransition.default, (0, _extends2.default)({ transKey: currentMonthNumber, onExited: onMonthSwitchingAnimationEnd, reduceAnimations: reduceAnimations, slideDirection: slideDirection, className: (0, _clsx.default)(classes.root, className) }, TransitionProps), /*#__PURE__*/React.createElement("div", { role: "grid", className: classes.weekContainer }, utils.getWeekArray(currentMonth).map(week => /*#__PURE__*/React.createElement("div", { role: "row", key: `week-${week[0]}`, className: classes.week }, week.map(day => { const dayProps = { key: day === null || day === void 0 ? void 0 : day.toString(), day, role: 'cell', isAnimating: isMonthSwitchingAnimating, disabled: isDateDisabled(day), allowKeyboardControl, allowSameDateSelection, focused: allowKeyboardControl && Boolean(focusedDay) && utils.isSameDay(day, nowFocusedDay), today: utils.isSameDay(day, now), outsideCurrentMonth: utils.getMonth(day) !== currentMonthNumber, selected: selectedDates.some(selectedDate => selectedDate && utils.isSameDay(selectedDate, day)), disableHighlightToday, showDaysOutsideCurrentMonth, focusable: allowKeyboardControl && Boolean(nowFocusedDay) && utils.toJsDate(nowFocusedDay).getDate() === utils.toJsDate(day).getDate(), onDayFocus: changeFocusedDay, onDaySelect: handleDaySelect }; return renderDay ? renderDay(day, selectedDates, dayProps) : /*#__PURE__*/React.createElement(_PickersDay.default, dayProps); })))))); } var _default = (0, _styles.withStyles)(styles, { name: 'MuiPickersCalendar' })(PickersCalendar); exports.default = _default;