wix-style-react
Version:
141 lines (127 loc) • 5.45 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import ChevronLeftLarge from 'wix-ui-icons-common/ChevronLeftLarge';
import ChevronRightLarge from 'wix-ui-icons-common/ChevronRightLarge';
import YearDropdown from './YearDropdown';
import MonthDropdown from './MonthDropdown';
import { st, classes } from './DatePickerHead.st.css';
import Text from '../../Text';
import IconButton from '../../IconButton';
var getMonthName = function getMonthName(months, month) {
return months[month] || months[0];
}; // Reverse display order of month/year in certain languages
export var REVERSE_MONTH_YEAR_LANGUAGES = ['ja', 'zh', 'ko'];
var getShouldReverseOrder = function getShouldReverseOrder(locale) {
return REVERSE_MONTH_YEAR_LANGUAGES.includes(locale);
};
var DatePickerHead = function DatePickerHead(_ref) {
var className = _ref.className,
date = _ref.date,
locale = _ref.locale,
localeUtils = _ref.localeUtils,
onChange = _ref.onChange,
onLeftArrowClick = _ref.onLeftArrowClick,
onRightArrowClick = _ref.onRightArrowClick,
showMonthDropdown = _ref.showMonthDropdown,
showYearDropdown = _ref.showYearDropdown,
leftArrowAriaLabel = _ref.leftArrowAriaLabel,
leftArrowAriaLabelledBy = _ref.leftArrowAriaLabelledBy,
rightArrowAriaLabel = _ref.rightArrowAriaLabel,
rightArrowAriaLabelledBy = _ref.rightArrowAriaLabelledBy,
monthDropdownAriaLabel = _ref.monthDropdownAriaLabel,
monthDropdownAriaLabelledBy = _ref.monthDropdownAriaLabelledBy,
yearDropdownAriaLabel = _ref.yearDropdownAriaLabel,
yearDropdownAriaLabelledBy = _ref.yearDropdownAriaLabelledBy;
var renderMonth = function renderMonth() {
return showMonthDropdown ? /*#__PURE__*/React.createElement(MonthDropdown, {
className: classes.monthDropdown,
date: date,
onChange: onChange,
months: localeUtils.getMonths(),
ariaLabel: monthDropdownAriaLabel,
ariaLabelledBy: monthDropdownAriaLabelledBy
}) : /*#__PURE__*/React.createElement(Text, {
className: classes.caption,
weight: "normal",
dataHook: 'datepicker-month-caption'
}, getMonthName(localeUtils.getMonths(), date.getMonth()));
};
var renderYear = function renderYear() {
return showYearDropdown ? /*#__PURE__*/React.createElement(YearDropdown, {
className: classes.yearDropdown,
date: date,
onChange: onChange,
ariaLabel: yearDropdownAriaLabel,
ariaLabelledBy: yearDropdownAriaLabelledBy
}) : /*#__PURE__*/React.createElement(Text, {
className: classes.caption,
weight: "normal",
dataHook: 'datepicker-year-caption'
}, date.getFullYear());
};
var renderYearAndMonth = function renderYearAndMonth() {
var shouldReverseOrder = getShouldReverseOrder(locale);
if (shouldReverseOrder) {
return /*#__PURE__*/React.createElement(React.Fragment, null, renderYear(), renderMonth());
}
return /*#__PURE__*/React.createElement(React.Fragment, null, renderMonth(), renderYear());
};
var KEYS = {
arrowUp: 'ArrowUp',
arrowDown: 'ArrowDown',
arrowLeft: 'ArrowLeft',
arrowRight: 'ArrowRight'
};
/* prevent the handleKeyDown method of the ReactDayPicker component to be executed when the focus is on one of the header elements */
var _handleKeyDown = function _handleKeyDown(event) {
// stop arrow up, arrow down, arrow left and arrow right ReactDayPicker handlers from changing the year and month
if (event && event.key && (event.key === KEYS.arrowUp || event.key === KEYS.arrowDown || event.key === KEYS.arrowLeft || event.key === KEYS.arrowRight)) {
event.stopPropagation();
}
};
return /*#__PURE__*/React.createElement("div", {
"data-hook": "datepicker-head",
className: st(classes.root, className),
onKeyDown: _handleKeyDown
}, /*#__PURE__*/React.createElement(IconButton, {
className: classes.arrowLeft,
dataHook: "datepicker-left-arrow",
skin: "light",
ariaLabel: leftArrowAriaLabel,
ariaLabelledBy: leftArrowAriaLabelledBy,
onClick: onLeftArrowClick
}, /*#__PURE__*/React.createElement(ChevronLeftLarge, {
className: classes.arrowIcon
})), /*#__PURE__*/React.createElement(IconButton, {
className: classes.arrowRight,
dataHook: "datepicker-right-arrow",
skin: "light",
ariaLabel: rightArrowAriaLabel,
ariaLabelledBy: rightArrowAriaLabelledBy,
onClick: onRightArrowClick
}, /*#__PURE__*/React.createElement(ChevronRightLarge, {
className: classes.arrowIcon
})), /*#__PURE__*/React.createElement("div", {
className: classes.yearAndMonthWrapper,
role: "alert"
}, renderYearAndMonth()));
};
DatePickerHead.propTypes = {
date: PropTypes.object.isRequired,
locale: PropTypes.string.isRequired,
localeUtils: PropTypes.object.isRequired,
onChange: PropTypes.func.isRequired,
onLeftArrowClick: PropTypes.func.isRequired,
onRightArrowClick: PropTypes.func.isRequired,
showMonthDropdown: PropTypes.bool,
showYearDropdown: PropTypes.bool,
leftArrowAriaLabel: PropTypes.string,
leftArrowAriaLabelledBy: PropTypes.string,
rightArrowAriaLabel: PropTypes.string,
rightArrowAriaLabelledBy: PropTypes.string,
monthDropdownAriaLabel: PropTypes.string,
monthDropdownAriaLabelledBy: PropTypes.string,
yearDropdownAriaLabel: PropTypes.string,
yearDropdownAriaLabelledBy: PropTypes.string
};
export default DatePickerHead;