UNPKG

react-calendar

Version:

Ultimate calendar for your React app.

172 lines (171 loc) 8.8 kB
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 {};