import React from 'react' import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {cleanError} from '#/lib/strings/errors' import {getAge, getDateAgo} from '#/lib/strings/time' import {logger} from '#/logger' import {isIOS, isWeb} from '#/platform/detection' import { usePreferencesQuery, type UsePreferencesQueryResponse, usePreferencesSetBirthDateMutation, } from '#/state/queries/preferences' import {ErrorMessage} from '#/view/com/util/error/ErrorMessage' import {atoms as a, useTheme, web} from '#/alf' import {Admonition} from '#/components/Admonition' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {DateField} from '#/components/forms/DateField' import {InlineLinkText} from '#/components/Link' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' export function BirthDateSettingsDialog({ control, }: { control: Dialog.DialogControlProps }) { const t = useTheme() const {_} = useLingui() const {isLoading, error, data: preferences} = usePreferencesQuery() return ( My Birthday This information is private and not shared with other users. {isLoading ? ( ) : error || !preferences ? ( ) : ( )} ) } function BirthdayInner({ control, preferences, }: { control: Dialog.DialogControlProps preferences: UsePreferencesQueryResponse }) { const {_} = useLingui() const [date, setDate] = React.useState( preferences.birthDate || getDateAgo(18), ) const { isPending, isError, error, mutateAsync: setBirthDate, } = usePreferencesSetBirthDateMutation() const hasChanged = date !== preferences.birthDate const age = getAge(new Date(date)) const isUnder13 = age < 13 const isUnder18 = age >= 13 && age < 18 const onSave = React.useCallback(async () => { try { // skip if date is the same if (hasChanged) { await setBirthDate({birthDate: date}) } control.close() } catch (e: any) { logger.error(`setBirthDate failed`, {message: e.message}) } }, [date, setBirthDate, control, hasChanged]) return ( setDate(new Date(newDate))} label={_(msg`Birthday`)} accessibilityHint={_(msg`Enter your birth date`)} /> {isUnder18 && hasChanged && ( The birthdate you've entered means you are under 18 years old. Certain content and features may be unavailable to you. )} {isUnder13 && ( You must be at least 13 years old to use Bluesky. Read our{' '} Terms of Service {' '} for more information. )} {isError ? ( ) : undefined} ) }