diff --git a/src/components/Account/AccountInfo.tsx b/src/components/Account/AccountInfo.tsx index 4f4d347..a59b52c 100644 --- a/src/components/Account/AccountInfo.tsx +++ b/src/components/Account/AccountInfo.tsx @@ -3,19 +3,25 @@ import validateUsernameRequest from '@/requests/validateUsernameRequest'; import { BaseCreateUserSchema } from '@/services/User/schema/CreateUserValidationSchemas'; import { Switch } from '@headlessui/react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { FC, useContext, useState } from 'react'; +import { Dispatch, FC, useContext } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import UserContext from '@/contexts/UserContext'; import sendEditUserRequest from '@/requests/User/sendEditUserRequest'; import createErrorToast from '@/util/createErrorToast'; import { toast } from 'react-hot-toast'; +import { AccountPageAction, AccountPageState } from '@/reducers/accountPageReducer'; import FormError from '../ui/forms/FormError'; import FormInfo from '../ui/forms/FormInfo'; import FormLabel from '../ui/forms/FormLabel'; import FormTextInput from '../ui/forms/FormTextInput'; -const AccountInfo: FC = () => { +interface AccountInfoProps { + pageState: AccountPageState; + dispatch: Dispatch; +} + +const AccountInfo: FC = ({ pageState, dispatch }) => { const { user, mutate } = useContext(UserContext); const EditUserSchema = BaseCreateUserSchema.pick({ @@ -47,18 +53,16 @@ const AccountInfo: FC = () => { ), }); - const [editToggled, setEditToggled] = useState(false); - const onSubmit = async (data: z.infer) => { const loadingToast = toast.loading('Submitting edits...'); try { await sendEditUserRequest({ user: user!, data }); toast.remove(loadingToast); toast.success('Edits submitted successfully.'); - setEditToggled(false); + dispatch({ type: 'CLOSE_ALL' }); await mutate!(); } catch (error) { - setEditToggled(false); + dispatch({ type: 'CLOSE_ALL' }); toast.remove(loadingToast); createErrorToast(error); await mutate!(); @@ -82,9 +86,9 @@ const AccountInfo: FC = () => { { - setEditToggled((val) => !val); + dispatch({ type: 'TOGGLE_ACCOUNT_INFO_VISIBILITY' }); await mutate!(); reset({ username: user!.username, @@ -96,7 +100,7 @@ const AccountInfo: FC = () => { /> - {editToggled && ( + {pageState.accountInfoOpen && (
{ { { { { diff --git a/src/components/Account/DeleteAccount.tsx b/src/components/Account/DeleteAccount.tsx index 8faf0d9..73af80c 100644 --- a/src/components/Account/DeleteAccount.tsx +++ b/src/components/Account/DeleteAccount.tsx @@ -1,10 +1,16 @@ +import { AccountPageState, AccountPageAction } from '@/reducers/accountPageReducer'; import { Switch } from '@headlessui/react'; import { useRouter } from 'next/router'; -import { FunctionComponent, useRef, useState } from 'react'; - -const DeleteAccount: FunctionComponent = () => { - const [deleteToggled, setDeleteToggled] = useState(false); +import { Dispatch, FunctionComponent, useRef } from 'react'; +interface DeleteAccountProps { + pageState: AccountPageState; + dispatch: Dispatch; +} +const DeleteAccount: FunctionComponent = ({ + dispatch, + pageState, +}) => { const deleteRef = useRef(null); const router = useRouter(); @@ -20,14 +26,14 @@ const DeleteAccount: FunctionComponent = () => { { - setDeleteToggled((val) => !val); + dispatch({ type: 'TOGGLE_DELETE_ACCOUNT_VISIBILITY' }); }} /> - {deleteToggled && ( + {pageState.deleteAccountOpen && ( <>
- {editToggled && ( + {pageState.securityOpen && ( New Password @@ -52,7 +66,7 @@ const Security: FunctionComponent = () => { { {