Skip to content

Commit b08cb5b

Browse files
authored
Merge pull request #75 from lidofinance/feature/post-testnet
Tesnet v1.2
2 parents 50fbffd + af446e9 commit b08cb5b

File tree

146 files changed

+1871
-1444
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

146 files changed

+1871
-1444
lines changed

features/adjustment/mint/form/submit-button/submit-button.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { useVaultInfo, type VAULT_OWNER_ROLES } from 'modules/vaults';
22
import { MultiplePermissionedSubmitButton } from 'modules/vaults/components';
33
import { useMemo } from 'react';
4-
import { useFormContext, useWatch } from 'react-hook-form';
4+
import { useFormState, useWatch } from 'react-hook-form';
55

66
const NON_INCREASE_LOCK_ROLES = ['minter'] as VAULT_OWNER_ROLES[];
77
const INCREASE_LOCK_ROLES = ['minter', 'locker'] as VAULT_OWNER_ROLES[];
88

99
export const SubmitButton = () => {
10-
const {
11-
formState: { isSubmitting, isValid },
12-
} = useFormContext();
10+
const { isSubmitting, isValid, disabled } = useFormState();
1311

1412
const { activeVault } = useVaultInfo();
1513

@@ -35,13 +33,13 @@ export const SubmitButton = () => {
3533
return NON_INCREASE_LOCK_ROLES;
3634
}, [activeVault, amount, token]);
3735

38-
const disabled = isSubmitting && !isValid;
36+
const isDisabled = isSubmitting && !isValid && disabled;
3937

4038
return (
4139
<MultiplePermissionedSubmitButton
4240
dashboardRoles={roles}
4341
type="submit"
44-
disabled={disabled}
42+
disabled={isDisabled}
4543
>
4644
Mint
4745
</MultiplePermissionedSubmitButton>

features/adjustment/mint/hooks/use-mint.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,25 @@ import { type Address, encodeFunctionData } from 'viem';
66
import { useSendTransaction, withSuccess } from 'modules/web3';
77

88
import { dashboardAbi } from 'abi/dashboard-abi';
9-
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
9+
import { useVaultInfo, useVaultPermission, vaultTexts } from 'modules/vaults';
1010

1111
import { fallbackedAddress } from 'utils/fallbacked-address';
1212

1313
import { useReportStatus } from 'features/report';
1414
import { GoToVault } from 'modules/vaults/components/go-to-vault';
1515

1616
export const useMint = () => {
17-
const { activeVault } = useVaultInfo();
17+
const { activeVault, refetchVaultInfo } = useVaultInfo();
1818
const { isReportAvailable, prepareReportCall } = useReportStatus();
1919
const { sendTX, ...rest } = useSendTransaction();
2020

2121
return {
2222
mint: useCallback(
23-
async (recipient: Address, amount: bigint, token: string) => {
23+
async (recipient: Address, amount: bigint, token: 'stETH' | 'wstETH') => {
2424
invariant(activeVault?.owner, '[useMint] owner is undefined');
2525

26-
const loadingActionText = `Minting ${token} backed by vault`;
27-
const mainActionCompleteText = `Minted ${token} backed by vault`;
26+
const loadingActionText = vaultTexts.actions.mint.loading(token);
27+
const mainActionCompleteText = vaultTexts.actions.mint.completed(token);
2828

2929
const mintCall = {
3030
to: activeVault.owner,
@@ -53,9 +53,19 @@ export const useMint = () => {
5353
}),
5454
);
5555

56+
if (success) {
57+
await refetchVaultInfo();
58+
}
59+
5660
return success;
5761
},
58-
[activeVault?.owner, prepareReportCall, sendTX, isReportAvailable],
62+
[
63+
activeVault?.owner,
64+
refetchVaultInfo,
65+
prepareReportCall,
66+
sendTX,
67+
isReportAvailable,
68+
],
5969
),
6070
...rest,
6171
};

features/adjustment/mint/mint-form-context/mint-form-provider.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ import {
66
createContext,
77
useContext,
88
} from 'react';
9+
import type { Address } from 'viem';
910
import { FormProvider, useForm } from 'react-hook-form';
1011
import invariant from 'tiny-invariant';
1112

1213
import { useVaultInfo } from 'modules/vaults';
13-
import { useMint } from 'features/adjustment/mint/hooks';
14+
import { useDappStatus } from 'modules/web3';
1415

1516
import { FormController } from 'shared/hook-form/form-controller';
17+
import { useMint } from 'features/adjustment/mint/hooks';
1618
import { MintFormSchema } from 'features/adjustment/mint/types';
17-
import { Address } from 'viem';
1819

1920
type MintDataContextValue = {
2021
mintableStETH: bigint;
@@ -36,12 +37,14 @@ export const useMintFormData = () => {
3637
};
3738

3839
export const MintFormProvider: FC<{ children: ReactNode }> = ({ children }) => {
40+
const { isDappActive } = useDappStatus();
3941
const formObject = useForm<MintFormSchema>({
4042
defaultValues: {
4143
amount: undefined,
4244
token: 'stETH',
4345
recipient: '' as Address,
4446
},
47+
disabled: !isDappActive,
4548
mode: 'all',
4649
// TODO: validation
4750
reValidateMode: 'onChange',
@@ -68,6 +71,10 @@ export const MintFormProvider: FC<{ children: ReactNode }> = ({ children }) => {
6871
invariant(recipient, '[MintFormProvider] recipient is undefined');
6972
invariant(amount, '[MintFormProvider] amount is undefined');
7073
invariant(token, '[MintFormProvider] token is undefined');
74+
invariant(
75+
token === 'stETH' || token === 'wstETH',
76+
'[MintFormProvider] token is invalid',
77+
);
7178

7279
return await mint(recipient, amount, token);
7380
},

features/adjustment/repay/form/submit-button/submit-button.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import { PermissionedSubmitButton } from 'modules/vaults/components';
2-
import { useFormContext } from 'react-hook-form';
2+
import { useFormState } from 'react-hook-form';
33

44
export const SubmitButton = () => {
5-
const {
6-
formState: { isSubmitting, isValid },
7-
} = useFormContext();
8-
const disabled = isSubmitting || !isValid;
5+
const { isSubmitting, isValid, disabled } = useFormState();
6+
const isDisabled = isSubmitting || !isValid || disabled;
97

108
return (
119
<PermissionedSubmitButton
1210
dashboardRole="repayer"
1311
type="submit"
14-
disabled={disabled}
12+
disabled={isDisabled}
1513
>
1614
Repay
1715
</PermissionedSubmitButton>

features/adjustment/repay/hooks/use-burn.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useEstimateGas, useAccount } from 'wagmi';
44
import { encodeFunctionData } from 'viem';
55

66
import { dashboardAbi } from 'abi/dashboard-abi';
7-
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
7+
import { useVaultInfo, useVaultPermission, vaultTexts } from 'modules/vaults';
88

99
import {
1010
TransactionEntry,
@@ -15,19 +15,20 @@ import {
1515
import { GoToVault } from 'modules/vaults/components/go-to-vault';
1616

1717
export const useBurn = () => {
18-
const { activeVault } = useVaultInfo();
18+
const { activeVault, refetchVaultInfo } = useVaultInfo();
1919
const { stETH, wstETH } = useLidoSDK();
2020
const { sendTX, ...rest } = useSendTransaction();
2121

2222
return {
2323
burn: useCallback(
24-
async (amount: bigint, token: string) => {
24+
async (amount: bigint, token: 'stETH' | 'wstETH') => {
2525
invariant(activeVault?.owner, '[useMint] owner is undefined');
2626

27-
const loadingActionText = `Repaying ${token}`;
28-
const mainActionCompleteText = `Repaid ${token}`;
27+
const loadingActionText = vaultTexts.actions.repay.loading(token);
28+
const mainActionCompleteText =
29+
vaultTexts.actions.repay.completed(token);
2930

30-
const transactions = async () => {
31+
const prepareTransactions = async () => {
3132
const calls: TransactionEntry[] = [];
3233

3334
const isSteth = token === 'stETH';
@@ -43,7 +44,7 @@ export const useBurn = () => {
4344
amount,
4445
to: activeVault.owner,
4546
})),
46-
loadingActionText: `Approving ${token}`,
47+
loadingActionText: vaultTexts.actions.approve.loading(token),
4748
};
4849
calls.push(approveCall);
4950
}
@@ -61,17 +62,21 @@ export const useBurn = () => {
6162

6263
const { success } = await withSuccess(
6364
sendTX({
64-
transactions,
65+
transactions: prepareTransactions,
6566
forceAtomic: true,
6667
mainActionLoadingText: loadingActionText,
6768
mainActionCompleteText,
6869
renderSuccessContent: GoToVault,
6970
}),
7071
);
7172

73+
if (success) {
74+
await refetchVaultInfo();
75+
}
76+
7277
return success;
7378
},
74-
[activeVault?.owner, sendTX, stETH, wstETH],
79+
[activeVault?.owner, refetchVaultInfo, sendTX, stETH, wstETH],
7580
),
7681
...rest,
7782
};

features/adjustment/repay/repay-form-context/repay-form-provider.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ import {
88
import { FormProvider, useForm } from 'react-hook-form';
99
import invariant from 'tiny-invariant';
1010

11-
import { useBurn } from 'features/adjustment/repay/hooks';
1211
import { useDappStatus, useStethBalance, useWstethBalance } from 'modules/web3';
13-
1412
import { FormController } from 'shared/hook-form/form-controller';
1513

14+
import { useBurn } from 'features/adjustment/repay/hooks';
1615
import { RepayFormSchema } from 'features/adjustment/repay/types';
1716

1817
type RepayDataContextValue = {
@@ -40,12 +39,14 @@ export const useRepayFormData = () => {
4039
};
4140

4241
export const RepayFormProvider = ({ children }: { children: ReactNode }) => {
42+
const { isDappActive } = useDappStatus();
4343
const formObject = useForm<RepayFormSchema>({
4444
defaultValues: {
4545
amount: undefined,
4646
token: 'stETH',
4747
},
4848
mode: 'all',
49+
disabled: !isDappActive,
4950
// TODO: validation
5051
reValidateMode: 'onChange',
5152
});
@@ -93,7 +94,10 @@ export const RepayFormProvider = ({ children }: { children: ReactNode }) => {
9394
if (!amount || !token) return false;
9495

9596
invariant(amount, '[RepayFormProvider] amount is undefined');
96-
invariant(token, '[RepayFormProvider] token is undefined');
97+
invariant(
98+
token === 'stETH' || token === 'wstETH',
99+
'[RepayFormProvider] token is invalid',
100+
);
97101

98102
return await burn(amount, token);
99103
},

features/claim/claim-form/claim-form-context/claim-form-provider.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ import {
66
createContext,
77
useContext,
88
} from 'react';
9+
import invariant from 'tiny-invariant';
910
import { isAddress, ReadContractErrorType } from 'viem';
1011
import { useReadContract } from 'wagmi';
1112
import { FormProvider, useForm } from 'react-hook-form';
1213

13-
import { useClaim } from 'features/claim/claim-form/hooks';
14+
import { useDappStatus } from 'modules/web3';
1415
import { useVaultInfo } from 'modules/vaults';
15-
16+
import { dashboardAbi } from 'abi/dashboard-abi';
1617
import { FormController } from 'shared/hook-form/form-controller';
1718

18-
import { dashboardAbi } from 'abi/dashboard-abi';
19+
import { useClaim } from 'features/claim/claim-form/hooks';
1920
import { ClaimFormSchema } from 'features/claim/claim-form/types';
20-
import invariant from 'tiny-invariant';
2121

2222
type ClaimDataContextValue = {
2323
availableToClaim: bigint | undefined;
@@ -43,11 +43,12 @@ export const ClaimFormProvider: FC<{ children: ReactNode }> = ({
4343
children,
4444
}) => {
4545
const { activeVault } = useVaultInfo();
46-
46+
const { isDappActive } = useDappStatus();
4747
const formObject = useForm<ClaimFormSchema>({
4848
defaultValues: {
4949
recipient: '',
5050
},
51+
disabled: !isDappActive,
5152
mode: 'all',
5253
// TODO: validation
5354
reValidateMode: 'onChange',

features/claim/claim-form/form/submit-button/submit-button.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import { useFormContext } from 'react-hook-form';
1+
import { useFormState } from 'react-hook-form';
22
import { useClaimFormData } from 'features/claim/claim-form/claim-form-context';
33
import { formatBalance } from 'utils';
44
import { PermissionedSubmitButton } from 'modules/vaults/components';
55

66
export const SubmitButton = () => {
7-
const {
8-
formState: { isValid, isSubmitting },
9-
} = useFormContext();
7+
const { isValid, isSubmitting, disabled } = useFormState();
108
const { isLoadingClaimInfo, availableToClaim, isErrorClaimInfo } =
119
useClaimFormData();
1210

1311
const isLoading =
1412
(!isErrorClaimInfo && !availableToClaim) || isLoadingClaimInfo;
1513

14+
const isDisabled = isSubmitting || !isValid || disabled || isLoading;
15+
1616
return (
1717
<PermissionedSubmitButton
1818
dashboardRole="nodeOperatorFeeClaimer"
1919
type="submit"
20-
disabled={isSubmitting || !isValid || isLoading}
20+
disabled={isDisabled}
2121
>
2222
{isLoading && <>Wait for claim information</>}
2323
{!!availableToClaim && <>{formatBalance(availableToClaim).trimmed} ETH</>}

features/claim/claim-form/hooks/use-claim.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { useEstimateGas, useAccount } from 'wagmi';
33
import { Address, encodeFunctionData } from 'viem';
44

55
import { dashboardAbi } from 'abi/dashboard-abi';
6-
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
6+
import { useVaultInfo, useVaultPermission, vaultTexts } from 'modules/vaults';
77
import invariant from 'tiny-invariant';
88
import { fallbackedAddress } from 'utils/fallbacked-address';
99
import { useSendTransaction, withSuccess } from 'modules/web3';
1010
import { GoToVault } from 'modules/vaults/components/go-to-vault';
1111

1212
export const useClaim = () => {
13-
const { activeVault } = useVaultInfo();
13+
const { activeVault, refetchVaultInfo } = useVaultInfo();
1414
const owner = activeVault?.owner;
1515
const { sendTX, ...rest } = useSendTransaction();
1616

@@ -19,8 +19,8 @@ export const useClaim = () => {
1919
async (recipient: Address) => {
2020
invariant(owner, '[useClaim] owner is undefined');
2121

22-
const loadingActionText = `Claiming node operator fee`;
23-
const mainActionCompleteText = `Claimed node operator fee`;
22+
const loadingActionText = vaultTexts.actions.claim.loading;
23+
const mainActionCompleteText = vaultTexts.actions.claim.completed;
2424

2525
const claimCall = {
2626
to: owner,
@@ -41,9 +41,13 @@ export const useClaim = () => {
4141
}),
4242
);
4343

44+
if (success) {
45+
await refetchVaultInfo();
46+
}
47+
4448
return success;
4549
},
46-
[owner, sendTX],
50+
[owner, refetchVaultInfo, sendTX],
4751
),
4852
...rest,
4953
};

0 commit comments

Comments
 (0)