1- import React , { useState } from 'react' ;
2- import { State , useStoreState } from 'easy-peasy' ;
1+ import React from 'react' ;
2+ import { Actions , State , useStoreActions , useStoreState } from 'easy-peasy' ;
33import { ApplicationState } from '@/state/types' ;
44import { Form , Formik , FormikActions } from 'formik' ;
55import Field from '@/components/elements/Field' ;
66import * as Yup from 'yup' ;
77import SpinnerOverlay from '@/components/elements/SpinnerOverlay' ;
8+ import updateAccountPassword from '@/api/account/updateAccountPassword' ;
9+ import { httpErrorToHuman } from '@/api/http' ;
810
911interface Values {
1012 current : string ;
@@ -22,13 +24,26 @@ const schema = Yup.object().shape({
2224
2325export default ( ) => {
2426 const user = useStoreState ( ( state : State < ApplicationState > ) => state . user . data ) ;
27+ const { clearFlashes, addFlash } = useStoreActions ( ( actions : Actions < ApplicationState > ) => actions . flashes ) ;
2528
2629 if ( ! user ) {
2730 return null ;
2831 }
2932
30- const submit = ( values : Values , { setSubmitting } : FormikActions < Values > ) => {
31- setTimeout ( ( ) => setSubmitting ( false ) , 1500 ) ;
33+ const submit = ( values : Values , { resetForm, setSubmitting } : FormikActions < Values > ) => {
34+ clearFlashes ( 'account:password' ) ;
35+ updateAccountPassword ( { ...values } )
36+ . then ( ( ) => {
37+ resetForm ( ) ;
38+ addFlash ( { key : 'account:password' , type : 'success' , message : 'Your password has been updated.' } ) ;
39+ } )
40+ . catch ( error => addFlash ( {
41+ key : 'account:password' ,
42+ type : 'error' ,
43+ title : 'Error' ,
44+ message : httpErrorToHuman ( error ) ,
45+ } ) )
46+ . then ( ( ) => setSubmitting ( false ) ) ;
3247 } ;
3348
3449 return (
0 commit comments