/
use-identity.ts
71 lines (65 loc) · 2.11 KB
/
use-identity.ts
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
import { useAsyncFn } from 'react-use';
import { useQuery } from '@tanstack/react-query';
import { useMemo } from 'react';
import { useMasaClient } from '../masa-client/use-masa-client';
import { useSession } from './use-session';
import { QcContext } from '../masa-provider';
import { useNetwork } from '../wallet-client/network';
import { useWallet } from '../wallet-client/wallet/use-wallet';
import { isIdentityContractAvailible } from './utils';
import { useIdentityListen } from './use-identity-listen';
// import { useWallet } from '../wallet-client/wallet/use-wallet';
export const useIdentity = () => {
const { masaAddress, sdk: masa, masaNetwork } = useMasaClient();
const { isDisconnected } = useWallet();
const { sessionAddress, hasSession } = useSession();
const { activeNetwork } = useNetwork();
const [{ loading: isLoadingIdentity }, loadIdentity] =
useAsyncFn(async () => {
try {
if (!masa) return null;
if (!sessionAddress) return null;
if (!activeNetwork) return null;
if (isDisconnected) return null;
if (!hasSession) return null;
return await masa.identity.load(masaAddress);
} catch (error) {
console.error('ERROR loading identity', error);
return null;
}
}, [
masaAddress,
masa,
activeNetwork,
sessionAddress,
isDisconnected,
hasSession,
]);
const {
data: identity,
isFetching: isFetchingIdentity,
refetch: getIdentity,
} = useQuery({
context: QcContext,
enabled: !!hasSession && !!masaAddress && !!masaNetwork && !!sessionAddress,
queryKey: [
'identity',
{ masaAddress, sessionAddress, masaNetwork, persist: false },
],
queryFn: async () => loadIdentity(),
});
const hasIdentity = useMemo(() => !!identity, [identity]);
const isIdentityAvailibleInNetwork = useMemo(
() => isIdentityContractAvailible(masa),
[masa]
);
useIdentityListen({ identity, getIdentity, sessionAddress });
return {
identity,
hasIdentity,
isLoadingIdentity,
isFetchingIdentity,
isIdentityAvailibleInNetwork,
getIdentity,
};
};