Handle birth dates as UTC, handle locale formatting (#2363)

* Enforce UTC for birthdate picker

* Handle locales

* Remove log

* Add a second snap point to the date input in case text is zoomed

* Guard against bad dates

* Log message

---------

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
This commit is contained in:
Eric Bailey 2023-12-28 16:13:51 -06:00 committed by GitHub
parent 23c9c8977b
commit 705f9b61ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 3 deletions

View file

@ -13,6 +13,9 @@ import {Text} from '../text/Text'
import {TypographyVariant} from 'lib/ThemeContext'
import {useTheme} from 'lib/ThemeContext'
import {usePalette} from 'lib/hooks/usePalette'
import {getLocales} from 'expo-localization'
const LOCALE = getLocales()[0]
interface Props {
testID?: string
@ -25,6 +28,7 @@ interface Props {
accessibilityLabel: string
accessibilityHint: string
accessibilityLabelledBy?: string
handleAsUTC?: boolean
}
export function DateInput(props: Props) {
@ -32,6 +36,12 @@ export function DateInput(props: Props) {
const theme = useTheme()
const pal = usePalette('default')
const formatter = React.useMemo(() => {
return new Intl.DateTimeFormat(LOCALE.languageTag, {
timeZone: props.handleAsUTC ? 'UTC' : undefined,
})
}, [props.handleAsUTC])
const onChangeInternal = useCallback(
(event: DateTimePickerEvent, date: Date | undefined) => {
setShow(false)
@ -64,7 +74,7 @@ export function DateInput(props: Props) {
<Text
type={props.buttonLabelType}
style={[pal.text, props.buttonLabelStyle]}>
{props.value.toLocaleDateString()}
{formatter.format(props.value)}
</Text>
</View>
</Button>
@ -73,6 +83,7 @@ export function DateInput(props: Props) {
<DateTimePicker
testID={props.testID ? `${props.testID}-datepicker` : undefined}
mode="date"
timeZoneName={props.handleAsUTC ? 'Etc/UTC' : undefined}
display="spinner"
// @ts-ignore applies in iOS only -prf
themeVariant={theme.colorScheme}