import {useCallback, useImperativeHandle} from 'react' import {Keyboard, View} from 'react-native' import DatePicker from 'react-native-date-picker' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {DateFieldProps} from '#/components/forms/DateField/types' import {toSimpleDateString} from '#/components/forms/DateField/utils' import * as TextField from '#/components/forms/TextField' import {DateFieldButton} from './index.shared' export * as utils from '#/components/forms/DateField/utils' export const LabelText = TextField.LabelText /** * Date-only input. Accepts a string in the format YYYY-MM-DD, or a Date object. * Date objects are converted to strings in the format YYYY-MM-DD. * Returns a string in the format YYYY-MM-DD. * * To generate a string in the format YYYY-MM-DD from a Date object, use the * `utils.toSimpleDateString(Date)` export of this file. */ export function DateField({ value, inputRef, onChangeDate, testID, label, isInvalid, accessibilityHint, maximumDate, }: DateFieldProps) { const {_} = useLingui() const t = useTheme() const control = Dialog.useDialogControl() const onChangeInternal = useCallback( (date: Date | undefined) => { if (date) { const formatted = toSimpleDateString(date) onChangeDate(formatted) } }, [onChangeDate], ) useImperativeHandle( inputRef, () => ({ focus: () => { Keyboard.dismiss() control.open() }, blur: () => { control.close() }, }), [control], ) return ( <> { Keyboard.dismiss() control.open() }} isInvalid={isInvalid} accessibilityHint={accessibilityHint} /> ) }