42 lines
1019 B
JavaScript
42 lines
1019 B
JavaScript
import PropTypes from 'prop-types';
|
|
import { createContext, useMemo, useState } from 'react';
|
|
|
|
export const CalendarWidgetContext = createContext({});
|
|
|
|
export const CalendarWidgetProvider = (props) => {
|
|
const {
|
|
children,
|
|
maxDate = new Date(2030, 0, 1),
|
|
minDate = new Date(1990, 0, 1),
|
|
locale = 'ru',
|
|
...restProps
|
|
} = props;
|
|
|
|
const [targetDate, setTargetDate] = useState(new Date());
|
|
|
|
const contextValue = useMemo(() => ({
|
|
targetYear: targetDate.getFullYear(),
|
|
targetMonthIndex: targetDate.getMonth(),
|
|
targetDate,
|
|
setTargetDate,
|
|
minDate,
|
|
maxDate,
|
|
locale,
|
|
...restProps,
|
|
}), [maxDate, minDate, targetDate, locale, restProps]);
|
|
|
|
return (
|
|
<CalendarWidgetContext.Provider value={contextValue}>
|
|
{children}
|
|
</CalendarWidgetContext.Provider>
|
|
);
|
|
};
|
|
|
|
CalendarWidgetProvider.propTypes = {
|
|
children: PropTypes.node.isRequired,
|
|
|
|
maxDate: PropTypes.instanceOf(Date),
|
|
minDate: PropTypes.instanceOf(Date),
|
|
locale: PropTypes.oneOf(['ru', 'en']),
|
|
};
|