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:
Pacien Boisson
2020-05-08 21:54:00 +02:00
committed by GitHub
parent e2b3691259
commit 7747ff69d0
43 changed files with 2828 additions and 619 deletions

View File

@@ -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 }}>