Skip to content

Commit b99da3e

Browse files
committed
feat: tx flow for settings
1 parent 5a448ae commit b99da3e

19 files changed

Lines changed: 216 additions & 703 deletions

File tree

features/report/components/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

features/report/components/oracle-report-button.tsx

Lines changed: 0 additions & 75 deletions
This file was deleted.

features/settings/main/consts.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ export const adminsForRender: MainSettingsOverview[] = [
100100
dataType: 'address',
101101
actionText: 'Add new address',
102102
vaultKey: 'nodeOperatorManagers',
103+
103104
canEditRole: 'nodeOperatorManager',
104105
},
105106
];
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
export {
2-
MainSettingsProvider,
3-
useMainSettingsData,
4-
} from './main-settings-provider';
1+
export { MainSettingsProvider } from './main-settings-provider';
Lines changed: 13 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,18 @@
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';
132
import { useForm, FormProvider } from 'react-hook-form';
14-
import { useFormControllerRetry } from 'shared/hook-form/form-controller/use-form-controller-retry-delegate';
153

164
import {
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';
2710
import {
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';
3716
import { validateFormWithZod } from 'utils/validate-form-value';
3817
import {
3918
editMainSettingsSchema,
@@ -42,43 +21,9 @@ import {
4221
import { useVaultInfo } from 'modules/vaults';
4322
import { 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-
6024
export 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

Comments
 (0)