Skip to content

Commit f366936

Browse files
authored
Merge pull request #30 from aave/chore/refactors-preview-hooks
chore: refactors vault preview hooks to be callback based
2 parents b70b533 + 8eb037d commit f366936

File tree

1 file changed

+88
-142
lines changed

1 file changed

+88
-142
lines changed

packages/react/src/vaults.ts

Lines changed: 88 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1+
import type { UnexpectedError } from '@aave/client';
2+
import {
3+
vaultPreviewDeposit,
4+
vaultPreviewMint,
5+
vaultPreviewRedeem,
6+
vaultPreviewWithdraw,
7+
} from '@aave/client/actions';
18
import {
29
type PaginatedVaultsResult,
10+
SupplyRequest,
311
type TokenAmount,
412
UserVaultsQuery,
513
type UserVaultsRequest,
@@ -17,13 +25,15 @@ import {
1725
VaultsQuery,
1826
type VaultsRequest,
1927
} from '@aave/graphql';
28+
import { useAaveClient } from './context';
2029
import type {
2130
ReadResult,
2231
Suspendable,
2332
SuspendableResult,
2433
SuspenseResult,
34+
UseAsyncTask,
2535
} from './helpers';
26-
import { useSuspendableQuery } from './helpers';
36+
import { useAsyncTask, useSuspendableQuery } from './helpers';
2737

2838
export type UseVaultArgs = VaultRequest;
2939

@@ -185,202 +195,138 @@ export function useUserVaults({
185195
});
186196
}
187197

188-
export type UseVaultPreviewDepositArgs = VaultPreviewDepositRequest;
189-
190198
/**
191199
* Determines the amount of shares that would be received for a deposit.
192200
*
193-
* This signature supports React Suspense:
201+
* ```ts
202+
* const [preview, previewing] = useVaultDepositPreview();
194203
*
195-
* ```tsx
196-
* const { data } = useVaultPreviewDeposit({
197-
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
198-
* chainId: chainId(1),
199-
* amount: bigDecimal('1000'),
200-
* suspense: true,
201-
* });
202-
* ```
203-
*/
204-
export function useVaultPreviewDeposit(
205-
args: UseVaultPreviewDepositArgs & Suspendable,
206-
): SuspenseResult<TokenAmount>;
207-
208-
/**
209-
* Simulate a deposit into a vault at the current block with current on-chain conditions.
204+
* const loading = previewing.loading;
205+
* const error = previewing.error;
210206
*
211-
* ```tsx
212-
* const { data, loading } = useVaultPreviewDeposit({
207+
* // …
208+
*
209+
* const result = await preview({
213210
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
214211
* chainId: chainId(1),
215212
* amount: bigDecimal('1000'),
216213
* });
214+
*
215+
* if (result.isErr()) {
216+
* console.error(result.error);
217+
* } else {
218+
* console.log(result.value);
219+
* }
217220
* ```
218221
*/
219-
export function useVaultPreviewDeposit(
220-
args: UseVaultPreviewDepositArgs,
221-
): ReadResult<TokenAmount>;
222+
export function useVaultDepositPreview(): UseAsyncTask<
223+
VaultPreviewDepositRequest,
224+
TokenAmount,
225+
UnexpectedError
226+
> {
227+
const client = useAaveClient();
222228

223-
export function useVaultPreviewDeposit({
224-
suspense = false,
225-
...request
226-
}: UseVaultPreviewDepositArgs & {
227-
suspense?: boolean;
228-
}): SuspendableResult<TokenAmount> {
229-
return useSuspendableQuery({
230-
document: VaultPreviewDepositQuery,
231-
variables: {
232-
request,
233-
},
234-
suspense,
235-
});
229+
return useAsyncTask((request: VaultPreviewDepositRequest) =>
230+
vaultPreviewDeposit(client, request),
231+
);
236232
}
237233

238-
export type UseVaultPreviewMintArgs = VaultPreviewMintRequest;
239-
240234
/**
241235
* Determines the amount of assets that would be required to mint a specific amount of vault shares.
242236
*
243237
* This signature supports React Suspense:
244238
*
245239
* ```tsx
246-
* const { data } = useVaultPreviewMint({
240+
* const { data } = useVaultMintPreview({
247241
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
248242
* chainId: chainId(1),
249243
* amount: bigDecimal('500'),
250244
* suspense: true,
251245
* });
252246
* ```
253247
*/
254-
export function useVaultPreviewMint(
255-
args: UseVaultPreviewMintArgs & Suspendable,
256-
): SuspenseResult<TokenAmount>;
257-
258-
/**
259-
* Simulate minting exact vault shares at the current block with current on-chain conditions.
260-
*
261-
* ```tsx
262-
* const { data, loading } = useVaultPreviewMint({
263-
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
264-
* chainId: chainId(1),
265-
* amount: bigDecimal('500'),
266-
* });
267-
* ```
268-
*/
269-
export function useVaultPreviewMint(
270-
args: UseVaultPreviewMintArgs,
271-
): ReadResult<TokenAmount>;
248+
export function useVaultMintPreview(): UseAsyncTask<
249+
VaultPreviewMintRequest,
250+
TokenAmount,
251+
UnexpectedError
252+
> {
253+
const client = useAaveClient();
272254

273-
export function useVaultPreviewMint({
274-
suspense = false,
275-
...request
276-
}: UseVaultPreviewMintArgs & {
277-
suspense?: boolean;
278-
}): SuspendableResult<TokenAmount> {
279-
return useSuspendableQuery({
280-
document: VaultPreviewMintQuery,
281-
variables: {
282-
request,
283-
},
284-
suspense,
285-
});
255+
return useAsyncTask((request: VaultPreviewMintRequest) =>
256+
vaultPreviewMint(client, request),
257+
);
286258
}
287259

288-
export type UseVaultPreviewWithdrawArgs = VaultPreviewWithdrawRequest;
289-
290260
/**
291261
* Determines the amount of shares that would be burned for a withdrawal.
292262
*
293-
* This signature supports React Suspense:
263+
* ```ts
264+
* const [preview, previewing] = useVaultWithdrawPreview();
294265
*
295-
* ```tsx
296-
* const { data } = useVaultPreviewWithdraw({
297-
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
298-
* chainId: chainId(1),
299-
* amount: bigDecimal('750'),
300-
* suspense: true,
301-
* });
302-
* ```
303-
*/
304-
export function useVaultPreviewWithdraw(
305-
args: UseVaultPreviewWithdrawArgs & Suspendable,
306-
): SuspenseResult<TokenAmount>;
307-
308-
/**
309-
* Simulate withdrawing assets from a vault at the current block with current on-chain conditions.
266+
* const loading = previewing.loading;
267+
* const error = previewing.error;
310268
*
311-
* ```tsx
312-
* const { data, loading } = useVaultPreviewWithdraw({
269+
* // …
270+
*
271+
* const result = await preview({
313272
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
314273
* chainId: chainId(1),
315274
* amount: bigDecimal('750'),
316275
* });
276+
*
277+
* if (result.isErr()) {
278+
* console.error(result.error);
279+
* } else {
280+
* console.log(result.value);
281+
* }
317282
* ```
318283
*/
319-
export function useVaultPreviewWithdraw(
320-
args: UseVaultPreviewWithdrawArgs,
321-
): ReadResult<TokenAmount>;
284+
export function useVaultWithdrawPreview(): UseAsyncTask<
285+
VaultPreviewWithdrawRequest,
286+
TokenAmount,
287+
UnexpectedError
288+
> {
289+
const client = useAaveClient();
322290

323-
export function useVaultPreviewWithdraw({
324-
suspense = false,
325-
...request
326-
}: UseVaultPreviewWithdrawArgs & {
327-
suspense?: boolean;
328-
}): SuspendableResult<TokenAmount> {
329-
return useSuspendableQuery({
330-
document: VaultPreviewWithdrawQuery,
331-
variables: {
332-
request,
333-
},
334-
suspense,
335-
});
291+
return useAsyncTask((request: VaultPreviewWithdrawRequest) =>
292+
vaultPreviewWithdraw(client, request),
293+
);
336294
}
337295

338-
export type UseVaultPreviewRedeemArgs = VaultPreviewRedeemRequest;
339-
340296
/**
341297
* Determines the amount of assets that would be received for redeeming a specific amount of vault shares.
342298
*
343299
* This signature supports React Suspense:
344300
*
345-
* ```tsx
346-
* const { data } = useVaultPreviewRedeem({
347-
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
348-
* chainId: chainId(1),
349-
* amount: bigDecimal('200'),
350-
* suspense: true,
351-
* });
352-
* ```
353-
*/
354-
export function useVaultPreviewRedeem(
355-
args: UseVaultPreviewRedeemArgs & Suspendable,
356-
): SuspenseResult<TokenAmount>;
357-
358-
/**
359-
* Simulate redeeming vault shares at the current block with current on-chain conditions.
301+
* ```ts
302+
* const [preview, previewing] = useVaultRedeemPreview();
360303
*
361-
* ```tsx
362-
* const { data, loading } = useVaultPreviewRedeem({
304+
* const loading = previewing.loading;
305+
* const error = previewing.error;
306+
*
307+
* // …
308+
*
309+
* const result = await preview({
363310
* vault: evmAddress('0x1234567890abcdef1234567890abcdef12345678'),
364311
* chainId: chainId(1),
365312
* amount: bigDecimal('200'),
366313
* });
314+
*
315+
* if (result.isErr()) {
316+
* console.error(result.error);
317+
* } else {
318+
* console.log(result.value);
319+
* }
367320
* ```
368321
*/
369-
export function useVaultPreviewRedeem(
370-
args: UseVaultPreviewRedeemArgs,
371-
): ReadResult<TokenAmount>;
322+
export function useVaultRedeemPreview(): UseAsyncTask<
323+
VaultPreviewRedeemRequest,
324+
TokenAmount,
325+
UnexpectedError
326+
> {
327+
const client = useAaveClient();
372328

373-
export function useVaultPreviewRedeem({
374-
suspense = false,
375-
...request
376-
}: UseVaultPreviewRedeemArgs & {
377-
suspense?: boolean;
378-
}): SuspendableResult<TokenAmount> {
379-
return useSuspendableQuery({
380-
document: VaultPreviewRedeemQuery,
381-
variables: {
382-
request,
383-
},
384-
suspense,
385-
});
329+
return useAsyncTask((request: VaultPreviewRedeemRequest) =>
330+
vaultPreviewRedeem(client, request),
331+
);
386332
}

0 commit comments

Comments
 (0)