1- import {
2- FC ,
3- PropsWithChildren ,
4- useState ,
5- useMemo ,
6- useCallback ,
7- createContext ,
8- useContext ,
9- useRef ,
10- useEffect ,
11- } from 'react' ;
12- import invariant from 'tiny-invariant' ;
1+ import { FC , PropsWithChildren , useMemo , useCallback , useEffect } from 'react' ;
132import { useForm , FormProvider } from 'react-hook-form' ;
14- import { useFormControllerRetry } from 'shared/hook-form/form-controller/use-form-controller-retry-delegate' ;
153
164import {
175 FormController ,
186 FormControllerContext ,
197 FormControllerContextValueType ,
208} from 'shared/hook-form/form-controller' ;
21- import { SubmitModal } from 'shared/components' ;
229
23- import {
24- SubmitPayload ,
25- SubmitStepEnum ,
26- } from 'shared/components/submit-modal/types' ;
2710import {
2811 EditMainSettingsSchema ,
29- MainSettingsContextValue ,
3012 ManagersKeys ,
3113 RoleFieldSchema ,
3214} from 'features/settings/main/types' ;
33- import {
34- useEditMainSettings ,
35- useSimulateEditMainSettings ,
36- } from 'features/settings/main/hooks' ;
15+ import { useEditMainSettings } from 'features/settings/main/hooks' ;
3716import { validateFormWithZod } from 'utils/validate-form-value' ;
3817import {
3918 editMainSettingsSchema ,
@@ -42,43 +21,9 @@ import {
4221import { useVaultInfo } from 'modules/vaults' ;
4322import { Address } from 'viem' ;
4423
45- const MainSettingsContext = createContext < MainSettingsContextValue | null > (
46- null ,
47- ) ;
48- MainSettingsContext . displayName = 'MainSettingsContext' ;
49-
50- export const useMainSettingsData = ( ) => {
51- const value = useContext ( MainSettingsContext ) ;
52- invariant (
53- value ,
54- 'useMainSettingsData was used outside the MainSettingsContext provider' ,
55- ) ;
56-
57- return value ;
58- } ;
59-
6024export const MainSettingsProvider : FC < PropsWithChildren > = ( { children } ) => {
61- const [ submitStep , setSubmitStep ] = useState < SubmitPayload > ( ( ) => ( {
62- step : SubmitStepEnum . edit ,
63- } ) ) ;
64- const abortControllerRef = useRef ( new AbortController ( ) ) ;
6525 const { activeVault, refetch, isRefetching } = useVaultInfo ( ) ;
66- const { callEditMainSettings } = useEditMainSettings ( ) ;
67- const { simulateEditMainSettings } = useSimulateEditMainSettings ( ) ;
68-
69- const handleCancelSubmit = useCallback ( ( ) => {
70- abortControllerRef . current . abort ( ) ;
71- setSubmitStep ( { step : SubmitStepEnum . edit } ) ;
72- } , [ ] ) ;
73-
74- const createVaultData = {
75- submitStep,
76- handleCancelSubmit,
77- } ;
78-
79- const setModalState = useCallback ( ( submitStep : SubmitPayload ) => {
80- setSubmitStep ( submitStep ) ;
81- } , [ ] ) ;
26+ const { editMainSettings, retryEvent } = useEditMainSettings ( ) ;
8227
8328 const formObject = useForm < EditMainSettingsSchema > ( {
8429 defaultValues : {
@@ -111,64 +56,33 @@ export const MainSettingsProvider: FC<PropsWithChildren> = ({ children }) => {
11156
11257 const onSubmit = useCallback (
11358 async ( data : EditMainSettingsSchema ) : Promise < boolean > => {
114- abortControllerRef . current = new AbortController ( ) ;
115- setModalState ( { step : SubmitStepEnum . initiate } ) ;
116- try {
117- setModalState ( { step : SubmitStepEnum . simulating } ) ;
118- await simulateEditMainSettings ( data ) ;
119- } catch ( err ) {
120- setModalState ( { step : SubmitStepEnum . error } ) ;
121- return false ;
122- }
59+ const { success } = await editMainSettings ( data ) ;
12360
124- try {
125- await callEditMainSettings ( data , setModalState , abortControllerRef ) ;
126- setModalState ( { step : SubmitStepEnum . success } ) ;
127- setTimeout ( refetch , 1000 ) ;
128- return true ;
129- } catch ( err ) {
130- if (
131- err instanceof Error &&
132- err . message . includes ( 'User rejected the request' )
133- ) {
134- setModalState ( { step : SubmitStepEnum . reject } ) ;
135- } else {
136- setModalState ( { step : SubmitStepEnum . error } ) ;
137- }
61+ // refetch even when error because some transactions may be successful
62+ // or reverted due to state change
63+ await refetch ( { cancelRefetch : true , throwOnError : true } ) ;
13864
139- setTimeout ( refetch , 1000 ) ;
140- return true ;
141- }
65+ return success ;
14266 } ,
143- // eslint-disable-next-line react-hooks/exhaustive-deps
144- [ callEditMainSettings , refetch ] ,
67+ [ editMainSettings , refetch ] ,
14568 ) ;
14669
14770 const { reset } = formObject ;
148- const { retryEvent, retryFire } = useFormControllerRetry ( ) ;
14971 const formControllerValue : FormControllerContextValueType < EditMainSettingsSchema > =
15072 useMemo (
15173 ( ) => ( {
15274 onSubmit,
15375 retryEvent,
154- retryFire,
15576 onReset : reset ,
15677 } ) ,
157- [ retryFire , retryEvent , onSubmit , reset ] ,
78+ [ retryEvent , onSubmit , reset ] ,
15879 ) ;
15980
16081 return (
16182 < FormProvider { ...formObject } >
162- < MainSettingsContext . Provider value = { createVaultData } >
163- < FormControllerContext . Provider value = { formControllerValue } >
164- < FormController > { children } </ FormController >
165- < SubmitModal
166- submitStep = { submitStep }
167- setModalState = { setModalState }
168- onClose = { handleCancelSubmit }
169- />
170- </ FormControllerContext . Provider >
171- </ MainSettingsContext . Provider >
83+ < FormControllerContext . Provider value = { formControllerValue } >
84+ < FormController > { children } </ FormController >
85+ </ FormControllerContext . Provider >
17286 </ FormProvider >
17387 ) ;
17488} ;
0 commit comments