From a09d7911e02fe5b3a63783ced223ff68936aad8f Mon Sep 17 00:00:00 2001 From: Tawnee Date: Wed, 19 Jan 2022 14:35:47 -0700 Subject: [PATCH] refactor getnewestchallengetype into a hook --- .../contracts/diamondABI/localAddresses.json | 2 +- .../web/hooks/useGetNewestChallengeType.js | 33 +++++++++++++++++ packages/web/pages/mint.js | 37 ++++++------------- packages/web/utils/index.js | 30 +++++++++++++++ 4 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 packages/web/hooks/useGetNewestChallengeType.js create mode 100644 packages/web/utils/index.js diff --git a/packages/contracts/diamondABI/localAddresses.json b/packages/contracts/diamondABI/localAddresses.json index bb29c8e..23d1141 100644 --- a/packages/contracts/diamondABI/localAddresses.json +++ b/packages/contracts/diamondABI/localAddresses.json @@ -1 +1 @@ -{"diamondAddress":"0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf","dathleteFacetAddress":"0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8","challengesFacetAddress":"0x851356ae760d987E095750cCeb3bC6014560891C","challengeTransferFacet":"0xf5059a5D33d5853360D16C683c16e67980206f36","daoFacetAddress":"0x95401dc811bb5740090279Ba06cfA8fcF6113778","shopFacetAddress":"0x998abeb3E57409262aE5b751f60747921B33613E","prtcleAddress":"0xB5d592f85ab2D955c25720EbE6FF8D4d1E1Be300"} \ No newline at end of file +{"diamondAddress":"0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf","dathleteFacetAddress":"0xf5059a5D33d5853360D16C683c16e67980206f36","challengesFacetAddress":"0x95401dc811bb5740090279Ba06cfA8fcF6113778","challengeTransferFacet":"0x998abeb3E57409262aE5b751f60747921B33613E","daoFacetAddress":"0x70e0bA845a1A0F2DA3359C97E0285013525FFC49","shopFacetAddress":"0x4826533B4897376654Bb4d4AD88B7faFD0C98528","prtcleAddress":"0xB5d592f85ab2D955c25720EbE6FF8D4d1E1Be300"} \ No newline at end of file diff --git a/packages/web/hooks/useGetNewestChallengeType.js b/packages/web/hooks/useGetNewestChallengeType.js new file mode 100644 index 0000000..e7895bb --- /dev/null +++ b/packages/web/hooks/useGetNewestChallengeType.js @@ -0,0 +1,33 @@ +import { isAddress } from 'ethers/lib/utils'; +import { useCallback, useEffect, useState } from 'react'; +import { getNewestChallengeType } from '/utils'; + +export const useGetNewestChallengeType = (web3Provider) => { + const [activeChallenge, setActiveChallenge] = useState(); + + const updateNewestChallengeType = useCallback(() => { + let stale = false; + + getNewestChallengeType(web3Provider) + .then((challengeType) => { + if (!stale) { + setActiveChallenge(challengeType); + } + }) + .catch((e) => { + console.log('e: ', e); + if (!stale) { + setActiveChallenge(null); + } + }); + + return () => { + stale = true; + setActiveChallenge(); + }; + }, [web3Provider]); + + useEffect(() => updateNewestChallengeType(), [updateNewestChallengeType]); + + return activeChallenge; +}; diff --git a/packages/web/pages/mint.js b/packages/web/pages/mint.js index be3d567..15bacf9 100644 --- a/packages/web/pages/mint.js +++ b/packages/web/pages/mint.js @@ -3,6 +3,7 @@ import { useEffect, useState, useCallback } from 'react'; import constants from '../../contracts/diamondABI/localAddresses.json'; import styled from 'styled-components'; import usePoller from '/hooks/usePoller'; +import { useGetNewestChallengeType } from '../hooks/useGetNewestChallengeType'; import diamondABI from '../../contracts/diamondABI/diamond.json'; import dynamic from 'next/dynamic'; @@ -21,13 +22,12 @@ const progressLabels = ['Challenge Type', 'Upload', 'Confirm']; const Mint = (props) => { const { web3Provider, address } = props; const { diamondAddress } = constants; + const activeChallenge = useGetNewestChallengeType(web3Provider); + console.log('activeChallenge: ', activeChallenge); const [videoUrl, setVideoUrl] = useState(''); const [diamondContract, setDiamondContract] = useState(); - const [activeChallenge, setActiveChallenge] = useState({}); const [index, setIndex] = useState(0); - - useEffect(() => { if (!address || !web3Provider) return; @@ -39,22 +39,12 @@ const Mint = (props) => { setDiamondContract(contract); }, [address, web3Provider]); - const getNewestChallengeType = async () => { - if (!diamondContract) return; - try { - const challengeType = await diamondContract.getNewestChallengeType(); - setActiveChallenge(challengeType); - } catch (e) { - console.log(e); - } - }; - const addChallengeTypes = useCallback( async (types) => { const finalizedTypes = types.map((type, index) => { return { id: activeChallenge.id + index + 1, - + canBeTransferred: false, ...type, }; @@ -66,12 +56,7 @@ const Mint = (props) => { [diamondContract] ); - usePoller( - () => { - getNewestChallengeType(); - }, - props.pollTime ? props.pollTime : 1999 - ); + usePoller(() => {}, props.pollTime ? props.pollTime : 1999); return (
@@ -94,11 +79,13 @@ const Mint = (props) => { {!!videoUrl && } */} -
-

{activeChallenge.name}

-

{activeChallenge.id}

- {/* */} -
+ {activeChallenge && ( +
+

{activeChallenge.name}

+

{activeChallenge.id}

+ {/* */} +
+ )}
); }; diff --git a/packages/web/utils/index.js b/packages/web/utils/index.js new file mode 100644 index 0000000..11c2bea --- /dev/null +++ b/packages/web/utils/index.js @@ -0,0 +1,30 @@ +import { ethers } from 'ethers'; +import challengeAbi from '../../contracts/diamondABI/diamond.json'; +import localAddresses from '../../contracts/diamondABI/localAddresses.json'; + +export const isAddress = (address) => { + try { + ethers.utils.getAddress(address); + return true; + } catch (e) { + return false; + } +}; + +export const getContract = (address, abi, web3Provider) => { + if (!isAddress(address) || address === ethers.constants.AddressZero) { + throw Error('Invalid address'); + } + return new ethers.Contract(address, abi, web3Provider.getSigner()); +}; + +export const getNewestChallengeType = (web3Provider) => { + console.log('web3Provider: ', web3Provider); + const contract = getContract( + localAddresses.diamondAddress, + challengeAbi, + web3Provider + ).getNewestChallengeType(); + console.log('contract: ', contract); + return contract; +};