blob: 2fd6d00252fbeae3c05d350765dae2249a33ce7f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { FormControl, IconButton, NativeSelect, Stack } from "@mui/material";
import { getYear, getMonth } from "date-fns";
import ArrowBackIosIcon from "@mui/icons-material/ArrowBackIos";
import ArrowForwardIosIcon from "@mui/icons-material/ArrowForwardIos";
const years = Array.from(
{ length: 100 },
(_, i) => new Date().getFullYear() - 50 + i
);
const months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
type CustomHeaderProps = {
date: Date;
changeYear: (year: number) => void;
changeMonth: (month: number) => void;
decreaseMonth: () => void;
increaseMonth: () => void;
prevMonthButtonDisabled: boolean;
nextMonthButtonDisabled: boolean;
};
const CustomHeader = ({
date,
changeYear,
changeMonth,
decreaseMonth,
increaseMonth,
prevMonthButtonDisabled,
nextMonthButtonDisabled
}: CustomHeaderProps) => {
return (
<Stack
direction="row"
spacing={1}
alignItems="center"
justifyContent="center"
sx={{ margin: 1 }}
>
<IconButton
size="small"
onClick={decreaseMonth}
disabled={prevMonthButtonDisabled}
>
<ArrowBackIosIcon fontSize="inherit" />
</IconButton>
<Stack minWidth={"60px"}>
<FormControl fullWidth>
<NativeSelect
value={getYear(date)}
onChange={({ target: { value } }) => changeYear(parseInt(value))}
>
{" "}
{years.map((year) => (
<option className="text-center" key={year} value={year}>
{year}
</option>
))}
</NativeSelect>
</FormControl>
</Stack>
<FormControl fullWidth>
<NativeSelect
value={months[getMonth(date)]}
onChange={({ target: { value } }) =>
changeMonth(months.indexOf(value))
}
>
{months.map((month) => (
<option className="text-center" key={month} value={month}>
{month}
</option>
))}
</NativeSelect>
</FormControl>
<IconButton
size="small"
onClick={increaseMonth}
disabled={nextMonthButtonDisabled}
>
<ArrowForwardIosIcon fontSize="inherit" />
</IconButton>
</Stack>
);
};
export default CustomHeader;