@demark-pro/react-booking-calendar
Version:
A responsive customizable React Booking calendar with overbooking protection
70 lines (69 loc) • 2.55 kB
TypeScript
import { CalendarClassNamesBase, CalendarComponents } from "./components";
import { ComponentPropsWithoutRef } from "react";
export type CalendarDate = Date | number | string;
export type OverbookTypes = "PAST" | "BOOKED" | "BEFORE_START" | "AFTER_END" | "BOOKED_BETWEEN" | "DISABLED";
export type CalendarDay = {
date: Date;
monthStartDate: Date;
handleClick?: ClickDayHandler;
isMonthRow?: boolean;
};
export interface CalendarDayState {
isPast?: boolean;
isToday?: boolean;
isStartMonth?: boolean;
isEndMonth?: boolean;
isSameMonth?: boolean;
isSameYear?: boolean;
isSelected?: boolean;
isSelectedStart?: boolean;
isSelectedEnd?: boolean;
isReserved?: boolean;
isReservedStart?: boolean;
isReservedEnd?: boolean;
isAvailable?: boolean;
isDisabled?: boolean;
}
export type CalendarMonth = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
export interface CalendarReserved {
startDate: CalendarDate;
endDate: CalendarDate;
color?: string;
}
export type CalendarSelected = CalendarDate | null | undefined;
export type ClickDayHandler = (date: Date, state: CalendarDayState) => void;
export type CalendarChangeHandler = (e: CalendarSelected[]) => void;
export type OverbookHandler = (e: Date, overbookType: OverbookTypes) => void;
export type MonthChangeHandler = (month: CalendarMonth, year: number) => void;
export type YearChangeHandler = (year: number) => void;
export type CalendarDisabled = boolean | ((date: Date, state: CalendarDayState) => boolean);
export type CalendarProtection = boolean;
export type CalendarOptions = {
locale?: Intl.LocalesArgument;
weekStartsOn?: number;
useAttributes?: boolean;
};
export type CommonProps = {
selected: CalendarSelected[];
reserved: CalendarReserved[];
disabled?: CalendarDisabled;
protection?: CalendarProtection;
range?: boolean;
isStart?: boolean;
options?: CalendarOptions;
getClassNames: (name: keyof CalendarClassNamesBase, classes?: string) => string;
};
export type CalendarClassNames = Partial<CalendarClassNamesBase>;
export type CalendarPropsBase = {
selected?: CalendarSelected[];
reserved?: Array<CalendarReserved>;
components?: CalendarComponents;
classNames?: CalendarClassNames;
disabled?: CalendarDisabled;
isStart?: boolean;
options?: CalendarOptions;
range?: boolean;
protection?: boolean;
onOverbook?: OverbookHandler;
onChange?: CalendarChangeHandler;
} & Omit<ComponentPropsWithoutRef<"div">, "onChange">;