diff --git a/src/components/dialogs/BirthDateSettings.tsx b/src/components/dialogs/BirthDateSettings.tsx
index 62c95c78d6..b7d61f1ad5 100644
--- a/src/components/dialogs/BirthDateSettings.tsx
+++ b/src/components/dialogs/BirthDateSettings.tsx
@@ -1,48 +1,64 @@
import React from 'react'
import {useLingui} from '@lingui/react'
import {Trans, msg} from '@lingui/macro'
+import {View} from 'react-native'
import * as Dialog from '#/components/Dialog'
import {Text} from '../Typography'
-import {DateInput} from '#/view/com/util/forms/DateInput'
import {logger} from '#/logger'
import {
+ usePreferencesQuery,
usePreferencesSetBirthDateMutation,
UsePreferencesQueryResponse,
} from '#/state/queries/preferences'
-import {Button, ButtonText} from '../Button'
+import {Button, ButtonIcon, ButtonText} from '../Button'
import {atoms as a, useTheme} from '#/alf'
import {ErrorMessage} from '#/view/com/util/error/ErrorMessage'
import {cleanError} from '#/lib/strings/errors'
-import {ActivityIndicator, View} from 'react-native'
import {isIOS, isWeb} from '#/platform/detection'
+import {Loader} from '#/components/Loader'
+import {DateField, utils} from '#/components/forms/DateField'
export function BirthDateSettingsDialog({
control,
- preferences,
}: {
control: Dialog.DialogControlProps
- preferences: UsePreferencesQueryResponse | undefined
}) {
+ const t = useTheme()
const {_} = useLingui()
- const {isPending, isError, error, mutateAsync} =
- usePreferencesSetBirthDateMutation()
+ const {isLoading, error, data: preferences} = usePreferencesQuery()
return (
+
- {preferences && !isPending ? (
-
+
+ My Birthday
+
+
+ This information is not shared with other users.
+
+
+
+ {isLoading ? (
+
+ ) : error || !preferences ? (
+
) : (
-
+
)}
+
+
)
@@ -51,58 +67,48 @@ export function BirthDateSettingsDialog({
function BirthdayInner({
control,
preferences,
- isError,
- error,
- setBirthDate,
}: {
control: Dialog.DialogControlProps
preferences: UsePreferencesQueryResponse
- isError: boolean
- error: unknown
- setBirthDate: (args: {birthDate: Date}) => Promise
}) {
const {_} = useLingui()
- const [date, setDate] = React.useState(preferences.birthDate || new Date())
- const t = useTheme()
-
- const hasChanged = date !== preferences.birthDate
+ const [date, setDate] = React.useState(
+ utils.toSimpleDateString(preferences.birthDate || new Date()),
+ )
+ const {
+ isPending,
+ isError,
+ error,
+ mutateAsync: setBirthDate,
+ } = usePreferencesSetBirthDateMutation()
+ const hasChanged = React.useMemo(
+ () =>
+ date !== utils.toSimpleDateString(preferences.birthDate || new Date()),
+ [date, preferences.birthDate],
+ )
const onSave = React.useCallback(async () => {
try {
// skip if date is the same
if (hasChanged) {
- await setBirthDate({birthDate: date})
+ await setBirthDate({birthDate: new Date(date)})
}
control.close()
- } catch (e) {
- logger.error(`setBirthDate failed`, {message: e})
+ } catch (e: any) {
+ logger.error(`setBirthDate failed`, {message: e.message})
}
}, [date, setBirthDate, control, hasChanged])
return (
-
-
- My Birthday
-
-
- This information is not shared with other users.
-
-
-
+
{isError ? (
) : undefined}
@@ -110,13 +116,14 @@ function BirthdayInner({