UNPKG

@material-ui/lab

Version:

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

171 lines (161 loc) 6.11 kB
import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; import Fade from '@material-ui/core/Fade'; import { createStyles, withStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import IconButton from '@material-ui/core/IconButton'; import { useUtils } from '../internal/pickers/hooks/useUtils'; import FadeTransitionGroup from './PickersFadeTransitionGroup'; // tslint:disable-next-line no-relative-import-in-test import ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown'; import ArrowSwitcher from '../internal/pickers/PickersArrowSwitcher'; import { usePreviousMonthDisabled, useNextMonthDisabled } from '../internal/pickers/hooks/date-helpers-hooks'; export var styles = function styles(theme) { return createStyles({ root: { display: 'flex', alignItems: 'center', marginTop: 16, marginBottom: 8, paddingLeft: 24, paddingRight: 12, // prevent jumping in safari maxHeight: 30, minHeight: 30 }, yearSelectionSwitcher: { marginRight: 'auto' }, previousMonthButton: { marginRight: 24 }, switchViewDropdown: { willChange: 'transform', transition: theme.transitions.create('transform'), transform: 'rotate(0deg)' }, switchViewDropdownDown: { transform: 'rotate(180deg)' }, monthTitleContainer: { display: 'flex', maxHeight: 30, overflow: 'hidden', cursor: 'pointer', marginRight: 'auto' }, monthText: { marginRight: 4 } }); }; function getSwitchingViewAriaText(view) { return view === 'year' ? 'year view is open, switch to calendar view' : 'calendar view is open, switch to year view'; } /** * @ignore - do not document. */ function PickersCalendarHeader(props) { var onViewChange = props.onViewChange, classes = props.classes, month = props.currentMonth, disableFuture = props.disableFuture, disablePast = props.disablePast, _props$getViewSwitchi = props.getViewSwitchingButtonText, getViewSwitchingButtonText = _props$getViewSwitchi === void 0 ? getSwitchingViewAriaText : _props$getViewSwitchi, leftArrowButtonProps = props.leftArrowButtonProps, _props$leftArrowButto = props.leftArrowButtonText, leftArrowButtonText = _props$leftArrowButto === void 0 ? 'previous month' : _props$leftArrowButto, leftArrowIcon = props.leftArrowIcon, maxDate = props.maxDate, minDate = props.minDate, onMonthChange = props.onMonthChange, reduceAnimations = props.reduceAnimations, rightArrowButtonProps = props.rightArrowButtonProps, _props$rightArrowButt = props.rightArrowButtonText, rightArrowButtonText = _props$rightArrowButt === void 0 ? 'next month' : _props$rightArrowButt, rightArrowIcon = props.rightArrowIcon, currentView = props.openView, views = props.views; var utils = useUtils(); var selectNextMonth = function selectNextMonth() { return onMonthChange(utils.getNextMonth(month), 'left'); }; var selectPreviousMonth = function selectPreviousMonth() { return onMonthChange(utils.getPreviousMonth(month), 'right'); }; var isNextMonthDisabled = useNextMonthDisabled(month, { disableFuture: disableFuture, maxDate: maxDate }); var isPreviousMonthDisabled = usePreviousMonthDisabled(month, { disablePast: disablePast, minDate: minDate }); var toggleView = function toggleView() { if (views.length === 1 || !onViewChange) { return; } if (views.length === 2) { onViewChange(views.find(function (view) { return view !== currentView; }) || views[0]); } else { // switching only between first 2 var nextIndexToOpen = views.indexOf(currentView) !== 0 ? 0 : 1; onViewChange(views[nextIndexToOpen]); } }; return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { className: classes.root }, /*#__PURE__*/React.createElement("div", { role: "presentation", className: classes.monthTitleContainer, onClick: toggleView }, /*#__PURE__*/React.createElement(FadeTransitionGroup, { reduceAnimations: reduceAnimations, transKey: utils.format(month, 'month') }, /*#__PURE__*/React.createElement(Typography, { "aria-live": "polite", align: "center", variant: "subtitle1", className: classes.monthText }, utils.format(month, 'month'))), /*#__PURE__*/React.createElement(FadeTransitionGroup, { reduceAnimations: reduceAnimations, transKey: utils.format(month, 'year') }, /*#__PURE__*/React.createElement(Typography, { "aria-live": "polite", align: "center", variant: "subtitle1" }, utils.format(month, 'year'))), views.length > 1 && /*#__PURE__*/React.createElement(IconButton, { size: "small", onClick: toggleView, className: classes.yearSelectionSwitcher, "aria-label": getViewSwitchingButtonText(currentView) }, /*#__PURE__*/React.createElement(ArrowDropDownIcon, { className: clsx(classes.switchViewDropdown, currentView === 'year' && classes.switchViewDropdownDown) }))), /*#__PURE__*/React.createElement(Fade, { in: currentView === 'date' }, /*#__PURE__*/React.createElement(ArrowSwitcher, { leftArrowButtonProps: leftArrowButtonProps, rightArrowButtonProps: rightArrowButtonProps, leftArrowButtonText: leftArrowButtonText, rightArrowButtonText: rightArrowButtonText, leftArrowIcon: leftArrowIcon, rightArrowIcon: rightArrowIcon, onLeftClick: selectPreviousMonth, onRightClick: selectNextMonth, isLeftDisabled: isPreviousMonthDisabled, isRightDisabled: isNextMonthDisabled })))); } process.env.NODE_ENV !== "production" ? PickersCalendarHeader.propTypes = { leftArrowButtonText: PropTypes.string, leftArrowIcon: PropTypes.node, rightArrowButtonText: PropTypes.string, rightArrowIcon: PropTypes.node } : void 0; export default withStyles(styles, { name: 'MuiPickersCalendarHeader' })(PickersCalendarHeader);