/
useDaoMember.tsx
88 lines (80 loc) · 1.89 KB
/
useDaoMember.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import {
GRAPH_API_KEYS,
Keychain,
ValidNetwork,
} from '@daohaus/keychain-utils';
import { findMember } from '@daohaus/moloch-v3-data';
import { useQuery } from 'react-query';
import { useCurrentDao } from '../contexts';
import { DaoQueryKeys, daoScopedQueryId } from '../utils';
const fetchMember = async ({
daoId,
daoChain,
memberAddress,
graphApiKeys,
}: {
daoId?: string;
daoChain?: ValidNetwork;
memberAddress?: string;
graphApiKeys?: Keychain;
}) => {
if (!daoChain || !daoId || !memberAddress) return;
try {
const res = await findMember({
dao: daoId,
memberAddress,
networkId: daoChain,
graphApiKeys,
});
return res?.data?.member;
} catch (error) {
console.error(error);
throw new Error('Error fetching proposal');
}
};
export const useDaoMember = (props?: {
daoChain: ValidNetwork;
daoId: string;
memberAddress?: string | undefined | null;
graphApiKeys?: Keychain;
}) => {
const {
daoChain: daoChainOverride,
daoId: daoIdOverride,
memberAddress: memberAddressOverride,
graphApiKeys = GRAPH_API_KEYS,
} = props || {};
const {
memberAddress: memberAddressFromRouter,
daoChain: networkFromRouter,
daoId: daoIdFromRouter,
} = useCurrentDao();
const daoId = daoIdOverride || daoIdFromRouter;
const daoChain = daoChainOverride || networkFromRouter;
const memberAddress = memberAddressOverride || memberAddressFromRouter;
const { data, error, ...rest } = useQuery(
[
daoScopedQueryId({
daoId,
daoChain,
domain: DaoQueryKeys.SingleMember,
}),
{
daoChain,
daoId,
memberAddress,
},
],
() =>
fetchMember({
daoId,
daoChain,
memberAddress,
graphApiKeys,
}),
{
enabled: !!daoId && !!daoChain && !!memberAddress,
}
);
return { member: data, error, ...rest };
};