react-calendar
Version:
Ultimate calendar for your React app.
172 lines (171 loc) • 8.8 kB
TypeScript
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { isMaxDate, isMinDate, isView } from './shared/propTypes';
import type { Action, CalendarType, ClassName, Detail, LooseValue, NavigationLabelFunc, OnArgs, OnChangeFunc, OnClickWeekNumberFunc, TileClassNameFunc, TileContentFunc, TileDisabledFunc, Value, View } from './shared/types';
import type { formatDay as defaultFormatDay, formatLongDate as defaultFormatLongDate, formatMonth as defaultFormatMonth, formatMonthYear as defaultFormatMonthYear, formatShortWeekday as defaultFormatShortWeekday, formatWeekday as defaultFormatWeekday, formatYear as defaultFormatYear } from './shared/dateFormatter';
type CalendarProps = {
activeStartDate?: Date;
allowPartialRange?: boolean;
calendarType?: CalendarType;
className?: ClassName;
defaultActiveStartDate?: Date;
defaultValue?: LooseValue;
defaultView?: View;
formatDay?: typeof defaultFormatDay;
formatLongDate?: typeof defaultFormatLongDate;
formatMonth?: typeof defaultFormatMonth;
formatMonthYear?: typeof defaultFormatMonthYear;
formatShortWeekday?: typeof defaultFormatShortWeekday;
formatWeekday?: typeof defaultFormatWeekday;
formatYear?: typeof defaultFormatYear;
goToRangeStartOnSelect?: boolean;
inputRef?: React.Ref<HTMLDivElement>;
locale?: string;
maxDate?: Date;
maxDetail?: Detail;
minDate?: Date;
minDetail?: Detail;
navigationAriaLabel?: string;
navigationAriaLive?: 'off' | 'polite' | 'assertive';
navigationLabel?: NavigationLabelFunc;
next2AriaLabel?: string;
next2Label?: React.ReactNode;
nextAriaLabel?: string;
nextLabel?: React.ReactNode;
onActiveStartDateChange?: ({ action, activeStartDate, value, view }: OnArgs) => void;
onChange?: (value: Value, event: React.MouseEvent<HTMLButtonElement>) => void;
onClickDay?: OnChangeFunc;
onClickDecade?: OnChangeFunc;
onClickMonth?: OnChangeFunc;
onClickWeekNumber?: OnClickWeekNumberFunc;
onClickYear?: OnChangeFunc;
onDrillDown?: ({ action, activeStartDate, value, view }: OnArgs) => void;
onDrillUp?: ({ action, activeStartDate, value, view }: OnArgs) => void;
onViewChange?: ({ action, activeStartDate, value, view }: OnArgs) => void;
prev2AriaLabel?: string;
prev2Label?: React.ReactNode;
prevAriaLabel?: string;
prevLabel?: React.ReactNode;
returnValue?: 'start' | 'end' | 'range';
selectRange?: boolean;
showDoubleView?: boolean;
showFixedNumberOfWeeks?: boolean;
showNavigation?: boolean;
showNeighboringMonth?: boolean;
showWeekNumbers?: boolean;
tileClassName?: TileClassNameFunc | ClassName;
tileContent?: TileContentFunc | React.ReactNode;
tileDisabled?: TileDisabledFunc;
value?: LooseValue;
view?: View;
};
type CalendarState = {
action?: Action;
activeStartDate?: Date | null;
hover?: Date | null;
value?: Value;
view?: View;
};
export default class Calendar extends Component<CalendarProps, CalendarState> {
static defaultProps: {
goToRangeStartOnSelect: boolean;
maxDate: Date;
maxDetail: string;
minDate: Date;
minDetail: string;
returnValue: string;
showNavigation: boolean;
showNeighboringMonth: boolean;
};
static propTypes: {
activeStartDate: PropTypes.Requireable<Date>;
allowPartialRange: PropTypes.Requireable<boolean>;
calendarType: PropTypes.Requireable<"Arabic" | "Hebrew" | "ISO 8601" | "US">;
className: PropTypes.Requireable<NonNullable<string | (string | null | undefined)[] | null | undefined>>;
defaultActiveStartDate: PropTypes.Requireable<Date>;
defaultValue: PropTypes.Requireable<NonNullable<NonNullable<string | Date | null | undefined> | (NonNullable<string | Date | null | undefined> | null | undefined)[] | null | undefined>>;
defaultView: typeof isView;
formatDay: PropTypes.Requireable<(...args: any[]) => any>;
formatLongDate: PropTypes.Requireable<(...args: any[]) => any>;
formatMonth: PropTypes.Requireable<(...args: any[]) => any>;
formatMonthYear: PropTypes.Requireable<(...args: any[]) => any>;
formatShortWeekday: PropTypes.Requireable<(...args: any[]) => any>;
formatWeekday: PropTypes.Requireable<(...args: any[]) => any>;
formatYear: PropTypes.Requireable<(...args: any[]) => any>;
goToRangeStartOnSelect: PropTypes.Requireable<boolean>;
inputRef: PropTypes.Requireable<NonNullable<((...args: any[]) => any) | PropTypes.InferProps<{
current: PropTypes.Requireable<any>;
}> | null | undefined>>;
locale: PropTypes.Requireable<string>;
maxDate: typeof isMaxDate;
maxDetail: PropTypes.Requireable<"month" | "year" | "century" | "decade">;
minDate: typeof isMinDate;
minDetail: PropTypes.Requireable<"month" | "year" | "century" | "decade">;
navigationAriaLabel: PropTypes.Requireable<string>;
navigationAriaLive: PropTypes.Requireable<string>;
navigationLabel: PropTypes.Requireable<(...args: any[]) => any>;
next2AriaLabel: PropTypes.Requireable<string>;
next2Label: PropTypes.Requireable<PropTypes.ReactNodeLike>;
nextAriaLabel: PropTypes.Requireable<string>;
nextLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
onActiveStartDateChange: PropTypes.Requireable<(...args: any[]) => any>;
onChange: PropTypes.Requireable<(...args: any[]) => any>;
onClickDay: PropTypes.Requireable<(...args: any[]) => any>;
onClickDecade: PropTypes.Requireable<(...args: any[]) => any>;
onClickMonth: PropTypes.Requireable<(...args: any[]) => any>;
onClickWeekNumber: PropTypes.Requireable<(...args: any[]) => any>;
onClickYear: PropTypes.Requireable<(...args: any[]) => any>;
onDrillDown: PropTypes.Requireable<(...args: any[]) => any>;
onDrillUp: PropTypes.Requireable<(...args: any[]) => any>;
onViewChange: PropTypes.Requireable<(...args: any[]) => any>;
prev2AriaLabel: PropTypes.Requireable<string>;
prev2Label: PropTypes.Requireable<PropTypes.ReactNodeLike>;
prevAriaLabel: PropTypes.Requireable<string>;
prevLabel: PropTypes.Requireable<PropTypes.ReactNodeLike>;
returnValue: PropTypes.Requireable<string>;
selectRange: PropTypes.Requireable<boolean>;
showDoubleView: PropTypes.Requireable<boolean>;
showFixedNumberOfWeeks: PropTypes.Requireable<boolean>;
showNavigation: PropTypes.Requireable<boolean>;
showNeighboringMonth: PropTypes.Requireable<boolean>;
showWeekNumbers: PropTypes.Requireable<boolean>;
tileClassName: PropTypes.Requireable<NonNullable<((...args: any[]) => any) | NonNullable<string | (string | null | undefined)[] | null | undefined> | null | undefined>>;
tileContent: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
tileDisabled: PropTypes.Requireable<(...args: any[]) => any>;
value: PropTypes.Requireable<NonNullable<NonNullable<string | Date | null | undefined> | (NonNullable<string | Date | null | undefined> | null | undefined)[] | null | undefined>>;
view: typeof isView;
};
state: Readonly<CalendarState>;
get activeStartDate(): Date;
get value(): Value;
get valueType(): "day" | "month" | "year" | "decade";
get view(): View;
get views(): ("month" | "year" | "century" | "decade")[];
get hover(): Date | null | undefined;
get drillDownAvailable(): boolean;
get drillUpAvailable(): boolean;
/**
* Gets current value in a desired format.
*/
getProcessedValue(value: Date): Date | [Date | null, Date | null] | null;
setStateAndCallCallbacks: (nextState: {
action: Action;
activeStartDate: Date | null;
value?: Value;
view?: View;
}, event?: React.MouseEvent<HTMLButtonElement> | undefined, callback?: (({ action, activeStartDate, value, view }: OnArgs) => void) | undefined) => void;
/**
* Called when the user uses navigation buttons.
*/
setActiveStartDate: (nextActiveStartDate: Date, action: Action) => void;
drillDown: (nextActiveStartDate: Date, event: React.MouseEvent<HTMLButtonElement>) => void;
drillUp: () => void;
onChange: (value: Date, event: React.MouseEvent<HTMLButtonElement>) => void;
onClickTile: (value: Date, event: React.MouseEvent<HTMLButtonElement>) => void;
onMouseOver: (value: Date) => void;
onMouseLeave: () => void;
renderContent(next?: boolean): JSX.Element;
renderNavigation(): JSX.Element | null;
render(): JSX.Element;
}
export {};