From 884f37c34900559d8e3a881dd8fa2ab781eafbdb Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 15 Mar 2024 15:50:54 +0000 Subject: rename BirthdaySettings -> BirthDateSettings + remove legacy modal --- src/components/dialogs/BirthDateSettings.tsx | 122 +++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/components/dialogs/BirthDateSettings.tsx (limited to 'src/components/dialogs/BirthDateSettings.tsx') diff --git a/src/components/dialogs/BirthDateSettings.tsx b/src/components/dialogs/BirthDateSettings.tsx new file mode 100644 index 000000000..47d7faa0c --- /dev/null +++ b/src/components/dialogs/BirthDateSettings.tsx @@ -0,0 +1,122 @@ +import React from 'react' +import {useLingui} from '@lingui/react' +import {Trans, msg} from '@lingui/macro' + +import * as Dialog from '#/components/Dialog' +import {Text} from '../Typography' +import {DateInput} from '#/view/com/util/forms/DateInput' +import {logger} from '#/logger' +import { + usePreferencesSetBirthDateMutation, + UsePreferencesQueryResponse, +} from '#/state/queries/preferences' +import {Button, ButtonText} from '../Button' +import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {ErrorMessage} from '#/view/com/util/error/ErrorMessage' +import {cleanError} from '#/lib/strings/errors' +import {ActivityIndicator, View} from 'react-native' + +export function BirthDateSettingsDialog({ + control, + preferences, +}: { + control: Dialog.DialogControlProps + preferences: UsePreferencesQueryResponse | undefined +}) { + const {_} = useLingui() + const {isPending, isError, error, mutateAsync} = + usePreferencesSetBirthDateMutation() + + return ( + + + + {preferences && !isPending ? ( + + ) : ( + + )} + + + ) +} + +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 {gtMobile} = useBreakpoints() + + const hasChanged = date !== preferences.birthDate + + const onSave = React.useCallback(async () => { + try { + // skip if date is the same + if (hasChanged) { + await setBirthDate({birthDate: date}) + } + control.close() + } catch (e) { + logger.error(`setBirthDate failed`, {message: e}) + } + }, [date, setBirthDate, control, hasChanged]) + + return ( + + + + My Birthday + + + This information is not shared with other users. + + + + {isError ? ( + + ) : undefined} + + + + + + ) +} -- cgit 1.4.1 From 502df521c1187bbd71228ec03fdd9a9ce6f0ead0 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 15 Mar 2024 16:03:08 +0000 Subject: center date input --- src/components/dialogs/BirthDateSettings.tsx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src/components/dialogs/BirthDateSettings.tsx') diff --git a/src/components/dialogs/BirthDateSettings.tsx b/src/components/dialogs/BirthDateSettings.tsx index 47d7faa0c..3ae8fa6cd 100644 --- a/src/components/dialogs/BirthDateSettings.tsx +++ b/src/components/dialogs/BirthDateSettings.tsx @@ -89,18 +89,20 @@ function BirthdayInner({ This information is not shared with other users. - + + + {isError ? ( ) : undefined} -- cgit 1.4.1 From 58ac22c45b9177e60e73d00d8ce0e1734c3692da Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 15 Mar 2024 16:21:15 +0000 Subject: make alignment platform specific rather than size specific --- src/components/dialogs/BirthDateSettings.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/components/dialogs/BirthDateSettings.tsx') diff --git a/src/components/dialogs/BirthDateSettings.tsx b/src/components/dialogs/BirthDateSettings.tsx index 3ae8fa6cd..5fe7b7bcc 100644 --- a/src/components/dialogs/BirthDateSettings.tsx +++ b/src/components/dialogs/BirthDateSettings.tsx @@ -11,10 +11,11 @@ import { UsePreferencesQueryResponse, } from '#/state/queries/preferences' import {Button, ButtonText} from '../Button' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +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' export function BirthDateSettingsDialog({ control, @@ -63,7 +64,6 @@ function BirthdayInner({ const {_} = useLingui() const [date, setDate] = React.useState(preferences.birthDate || new Date()) const t = useTheme() - const {gtMobile} = useBreakpoints() const hasChanged = date !== preferences.birthDate @@ -80,7 +80,7 @@ function BirthdayInner({ }, [date, setBirthDate, control, hasChanged]) return ( - + My Birthday @@ -89,7 +89,7 @@ function BirthdayInner({ This information is not shared with other users. - + ) : undefined} - +