/*
* 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(