semantic-ui-calendar-react
Version:
date/time picker built from semantic-ui elements
123 lines (122 loc) • 5.25 kB
TypeScript
import { Moment } from 'moment';
import * as React from 'react';
import { RangeIndexes } from '../views/BaseCalendarView';
interface HandleChangeParams {
value?: string;
itemPosition?: number;
}
export interface BasePickerOnChangeData {
[key: string]: any;
value: {
/** Year. */
year?: number;
/** Month (0 - 11). */
month?: number;
/** Date (1 - 31). */
date?: number;
/** Hour (0 - 23). */
hour?: number;
/** Minute (0 - 59). */
minute?: number;
/** Selected start date. */
start?: Moment;
/** Selected end date. */
end?: Moment;
};
}
export interface BasePickerProps {
/** Called after day is selected. */
onChange: (e: React.SyntheticEvent, data: BasePickerOnChangeData) => void;
/** Currently selected date. */
value: Moment;
/** A value for initializing day picker's state. */
initializeWith: Moment;
/** Forse popup to close. */
closePopup: () => void;
/** Whether to display picker without a popup or inside a popup. */
inline: boolean;
/** WHether picker in focus. */
isPickerInFocus: () => boolean;
/** Whether popup-trigger in focus. */
isTriggerInFocus: () => boolean;
/** Used to pass underlying picker's html element to parent component. */
onCalendarViewMount: (e: HTMLElement) => void;
/** Called on calendar's header click. */
onHeaderClick: () => void;
}
export interface OptionalHeaderProps {
/** Whether to display calendar's header. */
hasHeader: boolean;
}
export interface DisableValuesProps {
/** Array of disabled dates. */
disable?: Moment[];
}
export interface EnableValuesProps {
/** Array of enabled dates. */
enable?: Moment[];
}
export interface MinMaxValueProps {
/** Minimal date that could be selected. */
minDate?: Moment;
/** Maximal date that could be selected. */
maxDate?: Moment;
}
export interface TimePickerProps {
timeFormat: TimeFormat;
}
export declare type TimeFormat = 'ampm' | 'AMPM' | '24';
export interface BasePickerState extends Readonly<any> {
/** Position of a cell that is currently hovered on. */
hoveredCellPosition: number | undefined;
/** Inner picker's currently selected date. */
date: Moment;
}
/** Do not expose this class. Instead use RangeSelectionPicker and SingleSelectionPicker. */
declare abstract class BasePicker<P extends BasePickerProps> extends React.Component<P, BasePickerState> {
protected PAGE_WIDTH: number;
constructor(props: P);
componentDidMount(): void;
componentWillUnmount(): void;
protected onHoveredCellPositionChange: (e: React.SyntheticEvent<Element, Event>, { itemPosition }: {
itemPosition: number;
}) => void;
protected canCalendarCatchKeyboardEvents: () => boolean;
protected handleKeyPress: (event: KeyboardEvent) => void;
protected handleEnterKeyPress: (event: KeyboardEvent) => void;
protected handleBlur: () => void;
protected handleArrowKeyPress: (event: KeyboardEvent) => void;
/** Return a position of a value (date, year, month ...) with wich a calendar was initialized. */
protected abstract getInitialDatePosition(): number;
/** Creates values with wich calendar filled. */
protected abstract buildCalendarValues(): string[];
/** Handles currently selected value change. */
protected abstract handleChange(e: React.SyntheticEvent, data: HandleChangeParams): void;
/** Return positions of all values on calendar that can be selected. */
protected abstract getSelectableCellPositions(): number[];
/** Check if calendar has selectable values on previous page (i.e. prev year, month, day). */
protected abstract isPrevPageAvailable(): boolean;
/** Check if calendar has selectable values on next page (i.e. next year, month, day). */
protected abstract isNextPageAvailable(): boolean;
/** Change currently displayed page (i.e. year, month, day) to previous one. */
protected abstract switchToPrevPage(e?: React.SyntheticEvent, data?: any, cb?: () => void): void;
/** Change currently displayed page (i.e. year, month, day) to next one. */
protected abstract switchToNextPage(e?: React.SyntheticEvent, data?: any, cb?: () => void): void;
/** Return position numbers of cells that should be displayed as disabled */
protected abstract getDisabledPositions(): number[];
}
export interface ProvideHeadingValue {
/** Return currently selected value to display in calendar header. */
getCurrentDate(): string;
}
export declare abstract class RangeSelectionPicker<P extends BasePickerProps> extends BasePicker<P> {
componentDidMount(): void;
protected abstract getActiveCellsPositions(): RangeIndexes | undefined;
/** Return value to display in range header. */
protected abstract getSelectedRange(): string;
}
export declare abstract class SingleSelectionPicker<P extends BasePickerProps> extends BasePicker<P> {
componentDidMount(): void;
protected abstract getActiveCellPosition(): number | undefined;
}
export {};