import React from 'react'; import { StaticWrapperProps } from './StaticWrapper'; import { BasePickerProps } from '../typings/BasePicker'; import { DateInputProps } from '../_shared/PureDateInput'; import { ResponsiveWrapperProps } from './ResponsiveWrapper'; import { OmitInnerWrapperProps, SomeWrapper, WrapperProps, DateInputPropsLike } from './Wrapper'; interface MakePickerOptions { PureDateInputComponent?: React.FC; KeyboardDateInputComponent?: React.FC; } interface WithWrapperProps { children: React.ReactNode; DateInputProps: TInputProps; wrapperProps: Omit; } /* Creates a component that rendering modal/popover/nothing and spreading props down to text field */ export function makeWrapperComponent< TInputProps extends DateInputPropsLike, TWrapper extends SomeWrapper = any >( Wrapper: TWrapper, { KeyboardDateInputComponent, PureDateInputComponent }: MakePickerOptions ) { function WrapperComponent( props: Partial> & WithWrapperProps & Partial & StaticWrapperProps> ) { const { disableCloseOnSelect, cancelText, children, clearable, clearText, DateInputProps, DialogProps, displayStaticWrapperAs, inputFormat, okText, onAccept, onChange, onClose, onOpen, open, PopperProps, showTabs, todayText, value, wider, wrapperProps, ...restPropsForTextField } = props; const WrapperComponent = Wrapper as SomeWrapper; return ( {children} ); } return WrapperComponent; }