From 23e62b18de9537b50c8b1df2b4744adc030501d0 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 3 Feb 2025 12:27:58 -0800 Subject: Date input improvements (#7639) * add max date, use modern field for birthday input * rm legacy date input * handle simplifying to simpleDateString internally * update jsdoc --- src/components/forms/DateField/index.android.tsx | 4 ++++ src/components/forms/DateField/index.shared.tsx | 2 +- src/components/forms/DateField/index.tsx | 24 +++++++++++++++++------- src/components/forms/DateField/index.web.tsx | 7 +++++-- src/components/forms/DateField/types.ts | 3 ++- 5 files changed, 29 insertions(+), 11 deletions(-) (limited to 'src/components/forms') diff --git a/src/components/forms/DateField/index.android.tsx b/src/components/forms/DateField/index.android.tsx index 58f4d4f89..a6b6993dc 100644 --- a/src/components/forms/DateField/index.android.tsx +++ b/src/components/forms/DateField/index.android.tsx @@ -17,6 +17,7 @@ export function DateField({ isInvalid, testID, accessibilityHint, + maximumDate, }: DateFieldProps) { const t = useTheme() const [open, setOpen] = React.useState(false) @@ -67,6 +68,9 @@ export function DateField({ aria-label={label} accessibilityLabel={label} accessibilityHint={accessibilityHint} + maximumDate={ + maximumDate ? new Date(toSimpleDateString(maximumDate)) : undefined + } /> )} diff --git a/src/components/forms/DateField/index.shared.tsx b/src/components/forms/DateField/index.shared.tsx index 7438f5622..7b03ba901 100644 --- a/src/components/forms/DateField/index.shared.tsx +++ b/src/components/forms/DateField/index.shared.tsx @@ -19,7 +19,7 @@ export function DateFieldButton({ accessibilityHint, }: { label: string - value: string + value: string | Date onPress: () => void isInvalid?: boolean accessibilityHint?: string diff --git a/src/components/forms/DateField/index.tsx b/src/components/forms/DateField/index.tsx index 1c78d2abb..eca4d5cbd 100644 --- a/src/components/forms/DateField/index.tsx +++ b/src/components/forms/DateField/index.tsx @@ -16,10 +16,11 @@ export * as utils from '#/components/forms/DateField/utils' export const LabelText = TextField.LabelText /** - * Date-only input. Accepts a date in the format YYYY-MM-DD, and reports date - * changes in the same format. + * 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. * - * For dates of unknown format, convert with the + * 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({ @@ -29,6 +30,7 @@ export function DateField({ label, isInvalid, accessibilityHint, + maximumDate, }: DateFieldProps) { const {_} = useLingui() const t = useTheme() @@ -56,21 +58,29 @@ export function DateField({ isInvalid={isInvalid} accessibilityHint={accessibilityHint} /> - + - + - + ) diff --git a/src/components/forms/DateField/index.web.tsx b/src/components/forms/DateField/index.web.tsx index b764620e3..057ea1673 100644 --- a/src/components/forms/DateField/index.web.tsx +++ b/src/components/forms/DateField/index.web.tsx @@ -1,6 +1,6 @@ import React from 'react' import {StyleSheet, TextInput, TextInputProps} from 'react-native' -// @ts-ignore +// @ts-expect-error untyped import {unstable_createElement} from 'react-native-web' import {DateFieldProps} from '#/components/forms/DateField/types' @@ -39,6 +39,7 @@ export function DateField({ isInvalid, testID, accessibilityHint, + maximumDate, }: DateFieldProps) { const handleOnChange = React.useCallback( (e: any) => { @@ -56,12 +57,14 @@ export function DateField({ {}} testID={testID} accessibilityHint={accessibilityHint} + // @ts-expect-error not typed as even though it is one + max={maximumDate ? toSimpleDateString(maximumDate) : undefined} /> ) diff --git a/src/components/forms/DateField/types.ts b/src/components/forms/DateField/types.ts index 5400cf903..1784b884f 100644 --- a/src/components/forms/DateField/types.ts +++ b/src/components/forms/DateField/types.ts @@ -1,8 +1,9 @@ export type DateFieldProps = { - value: string + value: string | Date onChangeDate: (date: string) => void label: string isInvalid?: boolean testID?: string accessibilityHint?: string + maximumDate?: string | Date } -- cgit 1.4.1