import React from 'react'; import { Actions, State, useStoreActions, useStoreState } from 'easy-peasy'; import { Form, Formik, FormikActions } from 'formik'; import Field from '@/components/elements/Field'; import * as Yup from 'yup'; import SpinnerOverlay from '@/components/elements/SpinnerOverlay'; import updateAccountPassword from '@/api/account/updateAccountPassword'; import { httpErrorToHuman } from '@/api/http'; import { ApplicationStore } from '@/state'; interface Values { current: string; password: string; confirmPassword: string; } const schema = Yup.object().shape({ current: Yup.string().min(1).required('You must provide your current password.'), password: Yup.string().min(8).required(), confirmPassword: Yup.string().test('password', 'Password confirmation does not match the password you entered.', function (value) { return value === this.parent.password; }), }); export default () => { const user = useStoreState((state: State) => state.user.data); const { clearFlashes, addFlash } = useStoreActions((actions: Actions) => actions.flashes); if (!user) { return null; } const submit = (values: Values, { resetForm, setSubmitting }: FormikActions) => { clearFlashes('account:password'); updateAccountPassword({ ...values }) .then(() => { resetForm(); addFlash({ key: 'account:password', type: 'success', message: 'Your password has been updated.' }); }) .catch(error => addFlash({ key: 'account:password', type: 'error', title: 'Error', message: httpErrorToHuman(error), })) .then(() => setSubmitting(false)); }; return ( { ({ isSubmitting, isValid }) => (
) }
); };