import React from 'react'; import { ITestableProps, SizeType } from '../../../types'; export interface IDateInputLocale { name: string; months: string[]; weekDays: string[]; monthsShort: string[]; weekDaysShort: string[]; } export interface IDatePickerLocale { name: string; months: Array; weekDays: Array; digits: string[]; meridiems: Array; } export interface IBasePickerProps extends ITestableProps, Omit, 'onChange' | 'defaultValue' | 'children'> { name?: string; placeholder?: string; readOnly?: boolean; ariaLabel?: string; disabled?: boolean; isError?: boolean; required?: boolean; inline?: boolean; locale?: IDatePickerLocale; onPickerOpen?: () => void; onPickerClose?: () => void; children?: (strDate: string, openCalendar: Function, handleValueChange: React.ChangeEventHandler) => React.ReactNode | React.ReactNode[]; size?: SizeType; dark?: boolean; } export type DatePickerType = 'date' | 'month' | 'range' | 'year' | 'multiple' | 'week'; export interface IDatePickerProps extends IBasePickerProps { value?: Date | undefined | null; defaultValue?: Date | undefined | null; onChange?: (date: Date | undefined) => void; type: 'date'; numberOfMonths?: number; displayFormat?: string; maskFormat?: string; hideWeekDays?: boolean; displayWeekNumbers?: boolean; minDate?: Date; maxDate?: Date; header?: boolean; } export interface IMonthPickerProps extends IBasePickerProps { value?: number | undefined | null; defaultValue?: number | undefined | null; onChange?: (month: number | undefined) => void; type: 'month'; } export interface IYearPickerProps extends IBasePickerProps { value?: number | undefined | null; defaultValue?: number | undefined | null; onChange?: (year: number | undefined) => void; type: 'year'; } export interface IRangeDatePickerProps extends IBasePickerProps { format?: string; value?: Date[] | undefined | null; defaultValue?: Date[]; onChange?: (value: Date[] | undefined) => void; type: 'range'; numberOfMonths?: number; displayFormat?: string; hideWeekDays?: boolean; displayWeekNumbers?: boolean; minDate?: Date; maxDate?: Date; } export interface IWeekDatePickerProps extends IBasePickerProps { format?: string; value?: Date[] | undefined | null; defaultValue?: Date[]; onChange?: (value: Date[] | undefined) => void; type: 'week'; numberOfMonths?: number; displayFormat?: string; hideWeekDays?: boolean; displayWeekNumbers?: boolean; minDate?: Date; maxDate?: Date; } export interface IMultiDatePickerProps extends IBasePickerProps { format?: string; value?: Date[] | undefined | null; defaultValue?: Date[] | undefined | null; onChange?: (value: Date[] | undefined) => void; type: 'multiple'; numberOfMonths?: number; displayFormat?: string; hideWeekDays?: boolean; displayWeekNumbers?: boolean; minDate?: Date; maxDate?: Date; } export type IDatePickerPropsType = IDatePickerProps | IMonthPickerProps | IRangeDatePickerProps | IYearPickerProps | IMultiDatePickerProps | IWeekDatePickerProps;