mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-02-13 07:25:03 -05:00
Architecture update (#7)
* Fix errors with profile_rank ENUM * Upgrade to Hasura 1.2.1 * Rename Profile to Account * Common JS package * rm app-react/lib/did * Better login management
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, {createContext, useCallback, useState} from 'react';
|
||||
import React, {createContext, useCallback, useEffect, useState} from 'react';
|
||||
import WalletConnectProvider from '@walletconnect/web3-provider';
|
||||
import Web3Modal from 'web3modal';
|
||||
import Web3 from 'web3';
|
||||
@@ -7,8 +7,8 @@ import { AsyncSendable, Web3Provider } from 'ethers/providers';
|
||||
import {useApolloClient} from '@apollo/react-hooks';
|
||||
|
||||
import config from '../config';
|
||||
import {createToken} from '../lib/did';
|
||||
import {loginLoading, login} from '../apollo/auth';
|
||||
import { did } from '@the-game/utils';
|
||||
import {loginLoading, login, getTokenFromStore} from '../apollo/auth';
|
||||
|
||||
type Web3ContextType = {
|
||||
ethersProvider: Web3Provider | null,
|
||||
@@ -42,29 +42,44 @@ const Web3ContextProvider: React.FC = props => {
|
||||
|
||||
const [ethersProvider, setEthersProvider] = useState<Web3Provider | null>(null);
|
||||
|
||||
const connectDID = useCallback(async (ethersProvider: Web3Provider) => {
|
||||
|
||||
let token = getTokenFromStore();
|
||||
|
||||
if(!token) {
|
||||
token = await did.createToken(ethersProvider);
|
||||
}
|
||||
|
||||
const signer = ethersProvider.getSigner();
|
||||
const address = await signer.getAddress();
|
||||
await login(apolloClient, token, address);
|
||||
|
||||
}, [apolloClient]);
|
||||
|
||||
const connectWeb3 = useCallback(async () => {
|
||||
|
||||
loginLoading(apolloClient);
|
||||
|
||||
try {
|
||||
|
||||
loginLoading(apolloClient);
|
||||
|
||||
const provider = await web3Modal.connect();
|
||||
|
||||
const web3Provider = new Web3(provider);
|
||||
const ethersProvider = new ethers.providers.Web3Provider(web3Provider.currentProvider as AsyncSendable);
|
||||
const signer = ethersProvider.getSigner();
|
||||
const address = await signer.getAddress();
|
||||
await connectDID(ethersProvider);
|
||||
|
||||
const token = await createToken(ethersProvider);
|
||||
console.log(token);
|
||||
|
||||
await login(apolloClient, token, address);
|
||||
setEthersProvider(ethersProvider);
|
||||
|
||||
} catch(error) {
|
||||
console.error('impossible to connect', error);
|
||||
} catch(e) {
|
||||
loginLoading(apolloClient, false);
|
||||
throw e;
|
||||
}
|
||||
}, [apolloClient]);
|
||||
}, [apolloClient, connectDID]);
|
||||
|
||||
useEffect(() => {
|
||||
if(web3Modal.cachedProvider) {
|
||||
connectWeb3().catch(console.error);
|
||||
}
|
||||
}, [connectWeb3]);
|
||||
|
||||
return (
|
||||
<Web3Context.Provider value={{ ethersProvider, connectWeb3 }}>
|
||||
|
||||
Reference in New Issue
Block a user