1+ import type { UnexpectedError } from '@aave/client' ;
2+ import {
3+ vaultPreviewDeposit ,
4+ vaultPreviewMint ,
5+ vaultPreviewRedeem ,
6+ vaultPreviewWithdraw ,
7+ } from '@aave/client/actions' ;
18import {
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' ;
2029import 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
2838export 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