diff --git a/src/components/profile/ProfileSettings/index.tsx b/src/components/profile/ProfileSettings/index.tsx index bc77b17e..59ef138f 100644 --- a/src/components/profile/ProfileSettings/index.tsx +++ b/src/components/profile/ProfileSettings/index.tsx @@ -12,7 +12,7 @@ import { ERROR_LITERAL } from '~/constants/errors'; import { ProfileAccounts } from '~/containers/profile/ProfileAccounts'; import { usePatchUser } from '~/hooks/auth/usePatchUser'; import { useUser } from '~/hooks/auth/useUser'; -import { useProfileForm } from '~/hooks/profile/useProfileForm'; +import { useSettingsForm } from '~/utils/providers/SettingsProvider'; import { has } from '~/utils/ramda'; import styles from './styles.module.scss'; @@ -23,7 +23,7 @@ const ProfileSettings: FC = () => { const { user } = useUser(); const { save } = usePatchUser(); - const { handleSubmit, values, errors, handleChange } = useProfileForm( + const { handleSubmit, values, errors, handleChange } = useSettingsForm( { ...user, password: '', newPassword: '' }, save ); diff --git a/src/hooks/profile/useProfileForm.ts b/src/utils/providers/SettingsProvider.tsx similarity index 71% rename from src/hooks/profile/useProfileForm.ts rename to src/utils/providers/SettingsProvider.tsx index e472779e..69693520 100644 --- a/src/hooks/profile/useProfileForm.ts +++ b/src/utils/providers/SettingsProvider.tsx @@ -1,10 +1,12 @@ -import { useCallback, useRef } from 'react'; +import { FC, PropsWithChildren, useCallback, useRef } from 'react'; -import { FormikConfig, useFormik } from 'formik'; +import { FormikConfig, useFormik, FormikProvider, useFormikContext } from 'formik'; import { Asserts, object, string } from 'yup'; import { ERRORS } from '~/constants/errors'; import { getRandomPhrase } from '~/constants/phrases'; +import { usePatchUser } from '~/hooks/auth/usePatchUser'; +import { useUser } from '~/hooks/auth/useUser'; import { IUser } from '~/types/auth'; import { getValidationErrors } from '~/utils/errors/getValidationErrors'; import { showErrorToast } from '~/utils/errors/showToast'; @@ -25,7 +27,7 @@ const validationSchema = object({ export type ProfileFormData = Asserts; -export const useProfileForm = ( +export const useSettingsForm = ( values: ProfileFormData, submitter: (data: ProfileFormData) => Promise ) => { @@ -62,3 +64,17 @@ export const useProfileForm = ( validationSchema, }); }; + +export const SettingsProvider: FC> = ({ children }) => { + const { user } = useUser(); + const { save } = usePatchUser(); + + const formik = useSettingsForm( + { ...user, password: '', newPassword: '' }, + save + ); + + return {children} +} + +export const useSettings = () => useFormikContext();