/* * SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. * * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ import React from "react"; import PropTypes from "prop-types"; import YearDropdownOptions from "./year_dropdown_options"; import onClickOutside from "react-onclickoutside"; import { getYear } from "./date_utils"; var WrappedYearDropdownOptions = onClickOutside(YearDropdownOptions); export default class YearDropdown extends React.Component { static propTypes = { adjustDateOnChange: PropTypes.bool, dropdownMode: PropTypes.oneOf(["scroll", "select"]).isRequired, maxDate: PropTypes.object, minDate: PropTypes.object, onChange: PropTypes.func.isRequired, scrollableYearDropdown: PropTypes.bool, year: PropTypes.number.isRequired, yearDropdownItemNumber: PropTypes.number, date: PropTypes.object, onSelect: PropTypes.func, setOpen: PropTypes.func, accessibleMode: PropTypes.bool, onDropdownToggle: PropTypes.func, buttonRef: PropTypes.func }; state = { dropdownVisible: false }; componentDidUpdate(prevProps, prevState) { if ( this.props.accessibleMode && // in accessibleMode prevState.dropdownVisible !== this.state.dropdownVisible && // dropdown visibility changed this.state.dropdownVisible === false // dropdown is no longer visible ) { this.readViewref.focus(); } } setReadViewRef = ref => { this.readViewref = ref; this.props.buttonRef(ref); }; onReadViewKeyDown = event => { const eventKey = event.key; switch (eventKey) { case " ": case "Enter": event.preventDefault(); event.stopPropagation(); this.toggleDropdown(); break; } }; onDropDownKeyDown = event => { const eventKey = event.key; switch (eventKey) { case " ": case "Enter": event.preventDefault(); event.stopPropagation(); this.toggleDropdown(); break; } }; renderSelectOptions = () => { const minYear = this.props.minDate ? getYear(this.props.minDate) : 1900; const maxYear = this.props.maxDate ? getYear(this.props.maxDate) : 2100; const options = []; for (let i = minYear; i <= maxYear; i++) { options.push( ); } return options; }; onSelectChange = e => { this.onChange(e.target.value); }; renderSelectMode = () => ( ); renderReadView = visible => (