import { DateInputProps } from '../_shared/PureDateInput'; import { StaticWrapper, StaticWrapperProps } from './StaticWrapper'; import { MobileWrapper, MobileWrapperProps } from './MobileWrapper'; import { DesktopWrapper, DesktopWrapperProps } from './DesktopWrapper'; import { ResponsiveWrapper, ResponsiveWrapperProps } from './ResponsiveWrapper'; import { DesktopTooltipWrapper, DesktopTooltipWrapperProps } from './DesktopTooltipWrapper'; export type DateInputPropsLike = Omit< DateInputProps, 'renderInput' | 'validationError' > & { renderInput: (...args: any) => JSX.Element; validationError?: any; }; export interface WrapperProps> { open: boolean; onAccept: () => void; onDismiss: () => void; onClear: () => void; onSetToday: () => void; DateInputProps: TInputProps; KeyboardDateInputComponent?: React.ComponentType; PureDateInputComponent?: React.ComponentType; } export type OmitInnerWrapperProps> = Omit>; export type SomeWrapper = | typeof ResponsiveWrapper | typeof StaticWrapper | typeof MobileWrapper | typeof DesktopWrapper | typeof DesktopTooltipWrapper; export type ExtendWrapper = TWrapper extends typeof StaticWrapper ? StaticWrapperProps : TWrapper extends typeof ResponsiveWrapper ? OmitInnerWrapperProps : TWrapper extends typeof MobileWrapper ? OmitInnerWrapperProps : TWrapper extends typeof DesktopWrapper ? OmitInnerWrapperProps : TWrapper extends typeof DesktopWrapper ? OmitInnerWrapperProps : TWrapper extends typeof DesktopTooltipWrapper ? OmitInnerWrapperProps : never; export function getWrapperVariant(wrapper: SomeWrapper) { if (wrapper === DesktopWrapper) { return 'desktop'; } if (wrapper === StaticWrapper) { return 'static'; } if (wrapper === MobileWrapper) { return 'mobile'; } return null; } export type WrapperVariant = ReturnType; export { StaticWrapper, MobileWrapper, DesktopWrapper };