2023-02-06 14:14:03 +00:00
|
|
|
import React, { useState } from "react";
|
2019-09-10 11:28:56 +00:00
|
|
|
import PropTypes from "prop-types";
|
2023-02-02 09:30:50 +00:00
|
|
|
import moment from "moment";
|
2019-08-23 12:23:22 +00:00
|
|
|
|
2023-02-02 09:30:50 +00:00
|
|
|
import { Days, Months, Years } from "./sub-components";
|
2023-02-08 11:41:55 +00:00
|
|
|
import { ColorTheme, ThemeType } from "@docspace/common/components/ColorTheme";
|
2019-08-28 12:53:38 +00:00
|
|
|
|
2023-02-08 14:46:42 +00:00
|
|
|
const Calendar = ({
|
|
|
|
locale,
|
|
|
|
selectedDate,
|
|
|
|
onChange,
|
|
|
|
minDate,
|
|
|
|
maxDate,
|
|
|
|
id,
|
|
|
|
className,
|
|
|
|
}) => {
|
|
|
|
moment.locale(locale);
|
|
|
|
const setSelectedDate = onChange;
|
2023-02-04 12:22:48 +00:00
|
|
|
const [observedDate, setObservedDate] = useState(moment());
|
|
|
|
const [selectedScene, setSelectedScene] = useState(0);
|
2023-02-08 14:46:42 +00:00
|
|
|
minDate = moment(minDate);
|
|
|
|
maxDate = moment(maxDate);
|
2019-08-23 12:23:22 +00:00
|
|
|
|
2023-01-30 14:27:58 +00:00
|
|
|
return (
|
2023-02-08 14:46:42 +00:00
|
|
|
<ColorTheme themeId={ThemeType.Calendar} id={id} className={className}>
|
2023-02-04 12:22:48 +00:00
|
|
|
{selectedScene === 0 ? (
|
|
|
|
<Days
|
|
|
|
observedDate={observedDate}
|
|
|
|
setObservedDate={setObservedDate}
|
|
|
|
setSelectedScene={setSelectedScene}
|
|
|
|
selectedDate={selectedDate}
|
|
|
|
setSelectedDate={setSelectedDate}
|
2023-02-06 14:14:03 +00:00
|
|
|
minDate={minDate}
|
|
|
|
maxDate={maxDate}
|
2023-02-04 12:22:48 +00:00
|
|
|
/>
|
|
|
|
) : selectedScene === 1 ? (
|
|
|
|
<Months
|
|
|
|
observedDate={observedDate}
|
|
|
|
setObservedDate={setObservedDate}
|
|
|
|
setSelectedScene={setSelectedScene}
|
|
|
|
selectedDate={selectedDate}
|
2023-02-06 14:14:03 +00:00
|
|
|
minDate={minDate}
|
|
|
|
maxDate={maxDate}
|
2023-02-04 12:22:48 +00:00
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
<Years
|
|
|
|
observedDate={observedDate}
|
|
|
|
setObservedDate={setObservedDate}
|
|
|
|
setSelectedScene={setSelectedScene}
|
|
|
|
selectedDate={selectedDate}
|
2023-02-06 14:14:03 +00:00
|
|
|
minDate={minDate}
|
|
|
|
maxDate={maxDate}
|
2023-02-04 12:22:48 +00:00
|
|
|
/>
|
|
|
|
)}
|
2023-02-08 11:41:55 +00:00
|
|
|
</ColorTheme>
|
2023-01-30 14:27:58 +00:00
|
|
|
);
|
2019-09-10 11:28:56 +00:00
|
|
|
};
|
|
|
|
|
2023-02-08 14:46:42 +00:00
|
|
|
Calendar.PropTypes = {
|
|
|
|
/** Class name */
|
|
|
|
className: PropTypes.string,
|
|
|
|
/** Used as HTML `id` property */
|
|
|
|
id: PropTypes.string,
|
|
|
|
/** Specifies the locale of calendar */
|
|
|
|
locale: PropTypes.string,
|
|
|
|
/** Value of selected date */
|
|
|
|
selectedDate: PropTypes.object,
|
|
|
|
/** Allow you to handle changing events of component */
|
|
|
|
onChange: PropTypes.func,
|
|
|
|
/** Specifies the minimum selectable date */
|
|
|
|
minDate: PropTypes.object,
|
|
|
|
/** Specifies the maximum selectable date */
|
|
|
|
maxDate: PropTypes.object,
|
|
|
|
};
|
|
|
|
|
|
|
|
Calendar.defaultProps = {
|
|
|
|
locale: "en",
|
|
|
|
minDate: new Date("1970/01/01"),
|
|
|
|
maxDate: new Date("2040/01/01"),
|
|
|
|
id: "",
|
|
|
|
className: "",
|
|
|
|
};
|
|
|
|
|
2019-09-10 11:28:56 +00:00
|
|
|
export default Calendar;
|