Skip to content

Commit 7e1817f

Browse files
authored
Merge pull request #48 from macalinao/igm/ata-stuff
Supply addresses in useAccount and derivatives
2 parents a0fb9ba + 67558f1 commit 7e1817f

File tree

6 files changed

+40
-13
lines changed

6 files changed

+40
-13
lines changed

.changeset/tidy-apples-stare.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@macalinao/grill": patch
3+
---
4+
5+
Add addresses to useAccount

packages/grill/src/hooks/create-decoded-account-hook.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import { useAccount } from "./use-account.js";
77
*/
88
export type UseDecodedAccountHook<TData extends object> = (args: {
99
address: Address | null | undefined;
10-
}) => UseQueryResult<Account<TData> | null>;
10+
}) => UseQueryResult<Account<TData> | null> & {
11+
address: Address | null | undefined;
12+
};
1113

1214
/**
1315
* Generic helper to create a hook for fetching and decoding accounts
@@ -21,7 +23,9 @@ export function createDecodedAccountHook<TData extends object>(
2123
address,
2224
}: {
2325
address: Address | null | undefined;
24-
}): UseQueryResult<Account<TData> | null> {
26+
}): UseQueryResult<Account<TData> | null> & {
27+
address: Address | null | undefined;
28+
} {
2529
return useAccount({
2630
address,
2731
decoder,

packages/grill/src/hooks/use-account.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,21 @@ export function useAccount<
4545
}: UseAccountInput<
4646
TConfig,
4747
TDecodedData
48-
>): UseQueryResult<Account<TDecodedData> | null> {
48+
>): UseQueryResult<Account<TDecodedData> | null> & {
49+
address: Address | null | undefined;
50+
} {
4951
const { accountLoader } = useGrillContext();
5052
// TODO(igm): improve the types here and somehow ensure the decoder is the same
5153
// for each query of an account
52-
return useQuery({
53-
networkMode: "offlineFirst",
54-
...options,
55-
// eslint-disable-next-line @tanstack/query/exhaustive-deps
56-
queryKey: address ? createAccountQueryKey(address) : [null],
57-
queryFn: () => fetchAndDecodeAccount(address, accountLoader, decoder),
58-
enabled: !!address,
59-
}) as UseQueryResult<Account<TDecodedData> | null>;
54+
return {
55+
...(useQuery({
56+
networkMode: "offlineFirst",
57+
...options,
58+
// eslint-disable-next-line @tanstack/query/exhaustive-deps
59+
queryKey: address ? createAccountQueryKey(address) : [null],
60+
queryFn: () => fetchAndDecodeAccount(address, accountLoader, decoder),
61+
enabled: !!address,
62+
}) as UseQueryResult<Account<TDecodedData> | null>),
63+
address,
64+
};
6065
}

packages/grill/src/hooks/use-accounts.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ export type UseAccountsResult<TDecodedData extends object> =
3535
| {
3636
isLoading: true;
3737
data: (Account<TDecodedData> | null | undefined)[];
38+
addresses: (Address | null | undefined)[];
3839
}
3940
| {
4041
isLoading: false;
4142
data: (Account<TDecodedData> | null)[];
43+
addresses: (Address | null | undefined)[];
4244
};
4345

4446
/**
@@ -87,13 +89,15 @@ export function useAccounts<
8789
return {
8890
isLoading: true,
8991
data: results.map((result) => result.data),
92+
addresses,
9093
};
9194
}
9295
return {
9396
isLoading: false,
9497
data: results
9598
.map((result) => result.data)
9699
.filter((r) => r !== undefined),
100+
addresses,
97101
};
98102
},
99103
});

packages/grill/src/hooks/use-associated-token-account.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ export interface UseAssociatedTokenAccountResult {
5757
*/
5858
export function useAssociatedTokenAccount(
5959
options: UseAssociatedTokenAccountOptions,
60-
): UseQueryResult<Account<Token> | null> {
60+
): UseQueryResult<Account<Token> | null> & {
61+
address: Address | null | undefined;
62+
} {
6163
const { mint, owner, tokenProgram = TOKEN_PROGRAM_ADDRESS } = options;
6264

6365
// Compute the ATA address
@@ -72,7 +74,12 @@ export function useAssociatedTokenAccount(
7274
);
7375

7476
// Fetch the token account data
75-
return useTokenAccount({
77+
const accountResult = useTokenAccount({
7678
address: ataAddress,
7779
});
80+
81+
return {
82+
...accountResult,
83+
address: ataAddress,
84+
};
7885
}

packages/grill/src/hooks/use-token-metadata-account.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export function useTokenMetadataAccount({
2525
mint: Address | null | undefined;
2626
}): UseQueryResult<Account<Metadata> | null> & {
2727
pda: Address | null | undefined;
28+
address: Address | null | undefined;
2829
} {
2930
const pda = useMetadataPda(mint ? { mint } : null);
3031

@@ -36,5 +37,6 @@ export function useTokenMetadataAccount({
3637
return {
3738
...accountResult,
3839
pda,
40+
address: pda,
3941
};
4042
}

0 commit comments

Comments
 (0)