import React, {type ReactNode} from 'react'; import type {StyleProp, TextStyle, ViewStyle} from 'react-native'; import DatePickerValueProvider from './DatePickerValueProvider'; import DatePickerDates from './DatePickerDate'; import DatePickerMonth from './DatePickerMonth'; import DatePickerYear from './DatePickerYear'; import DatePickerContainer, {type DateNodeType} from './DatePickerContainer'; import type {OnlyDateFormat} from './date'; import DatePickerLocaleProvider from './DatePickerLocaleProvider'; import DatePickerCommonPropsProvider from './DatePickerCommonPropsProvider'; type DatePickerProps = { date: OnlyDateFormat; onDateChanged: (event: {date: OnlyDateFormat}) => void; minDate?: OnlyDateFormat; maxDate?: OnlyDateFormat; locale?: string; renderDate?: () => ReactNode; renderMonth?: () => ReactNode; renderYear?: () => ReactNode; children?: (props: { dateNodes: { node: ReactNode; type: DateNodeType; }[]; }) => ReactNode; // region common props for all child wheel pickers itemHeight?: number; visibleItemCount?: number; readOnly?: boolean; enableScrollByTapOnItem?: boolean; scrollEventThrottle?: number; pickerStyle?: StyleProp; itemTextStyle?: StyleProp; overlayItemStyle?: StyleProp; contentContainerStyle?: StyleProp; // endregion }; const DatePickerComponent = ({ date, onDateChanged, minDate, maxDate, locale, renderDate, renderMonth, renderYear, children = ({dateNodes}) => <>{dateNodes.map((dateNode) => dateNode.node)}, // region common props for all child wheel pickers itemHeight, visibleItemCount, readOnly, enableScrollByTapOnItem, scrollEventThrottle, pickerStyle, itemTextStyle, overlayItemStyle, contentContainerStyle, }: // endregion DatePickerProps) => { return ( {children} ); }; DatePickerComponent.displayName = 'DatePicker'; export const DatePicker = Object.assign(DatePickerComponent, { Date: DatePickerDates, Month: DatePickerMonth, Year: DatePickerYear, });