import React from 'react' import {View, TextStyle, Pressable} from 'react-native' import DateTimePicker, { BaseProps as DateTimePickerProps, } from '@react-native-community/datetimepicker' import {Logo} from '#/view/icons/Logo' import {useTheme, atoms, tokens} from '#/alf' import {Text} from '#/components/Typography' import {useInteractionState} from '#/components/hooks/useInteractionState' import {InputDateProps} from '#/components/forms/InputDate/types' import { localizeDate, toSimpleDateString, } from '#/components/forms/InputDate/utils' export * as utils from '#/components/forms/InputDate/utils' export function InputDate({ value: initialValue, onChange, testID, label, hasError, accessibilityLabel, accessibilityHint, ...props }: InputDateProps) { const labelId = React.useId() const t = useTheme() const [open, setOpen] = React.useState(false) const [value, setValue] = React.useState(initialValue) const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState() const {inputStyles, iconStyles} = React.useMemo(() => { const input: TextStyle[] = [ { paddingLeft: 40, }, ] const icon: TextStyle[] = [] if (hasError) { input.push({ borderColor: tokens.color.red_200, }) icon.push({ color: tokens.color.red_400, }) } if (focused) { input.push({ borderColor: t.atoms.border_contrast.borderColor, }) if (hasError) { input.push({ borderColor: tokens.color.red_500, }) } } return {inputStyles: input, iconStyles: icon} }, [t, focused, hasError]) const onChangeInternal = React.useCallback< Required['onChange'] >( (_event, date) => { setOpen(false) if (date) { const formatted = toSimpleDateString(date) onChange(formatted) setValue(formatted) } }, [onChange, setOpen, setValue], ) return ( {label && ( {label} )} setOpen(true)} onFocus={onFocus} onBlur={onBlur} style={[ { paddingTop: atoms.pt_md.paddingTop + 2, }, atoms.w_full, atoms.px_lg, atoms.pb_md, atoms.rounded_sm, t.atoms.bg_contrast_100, ...inputStyles, ]}> {localizeDate(value)} {open && ( )} ) }