/* * 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 Day from "./day"; import WeekNumber from "./week_number"; import * as utils from "./date_utils"; export default class Week extends React.Component { static get defaultProps() { return { shouldCloseOnSelect: true }; } static propTypes = { disabledKeyboardNavigation: PropTypes.bool, day: PropTypes.object.isRequired, dayClassName: PropTypes.func, endDate: PropTypes.object, excludeDates: PropTypes.array, filterDate: PropTypes.func, formatWeekNumber: PropTypes.func, highlightDates: PropTypes.instanceOf(Map), includeDates: PropTypes.array, inline: PropTypes.bool, maxDate: PropTypes.object, minDate: PropTypes.object, month: PropTypes.number, onDayClick: PropTypes.func, onDayMouseEnter: PropTypes.func, onWeekSelect: PropTypes.func, preSelection: PropTypes.object, selected: PropTypes.object, selectingDate: PropTypes.object, selectsEnd: PropTypes.bool, selectsStart: PropTypes.bool, showWeekNumber: PropTypes.bool, startDate: PropTypes.object, setOpen: PropTypes.func, shouldCloseOnSelect: PropTypes.bool, utcOffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), renderDayContents: PropTypes.func, accessibleMode: PropTypes.bool }; handleDayClick = (day, event) => { if (this.props.onDayClick) { this.props.onDayClick(day, event); } }; handleDayMouseEnter = day => { if (this.props.onDayMouseEnter) { this.props.onDayMouseEnter(day); } }; handleWeekClick = (day, weekNumber, event) => { if (typeof this.props.onWeekSelect === "function") { this.props.onWeekSelect(day, weekNumber, event); } if (this.props.shouldCloseOnSelect) { this.props.setOpen(false); } }; formatWeekNumber = startOfWeek => { if (this.props.formatWeekNumber) { return this.props.formatWeekNumber(startOfWeek); } return utils.getWeek(startOfWeek); }; renderDays = () => { const startOfWeek = utils.getStartOfWeek(utils.cloneDate(this.props.day)); const days = []; const weekNumber = this.formatWeekNumber(startOfWeek); if (this.props.showWeekNumber) { const onClickAction = this.props.onWeekSelect ? this.handleWeekClick.bind(this, startOfWeek, weekNumber) : undefined; days.push( ); } return days.concat( [0, 1, 2, 3, 4, 5, 6].map(offset => { const day = utils.addDays(utils.cloneDate(startOfWeek), offset); return ( ); }) ); }; render() { return
{this.renderDays()}
; } }