From 101b5f44514f39e0092d71b32c3805ec6099ca0d Mon Sep 17 00:00:00 2001 From: ECWireless Date: Mon, 3 Jun 2024 08:48:35 -0600 Subject: [PATCH 1/7] Get rid of setBurnerWithCleanup and useDelegation --- packages/client/src/Routes.tsx | 2 +- .../src/components/ConnectWalletModal.tsx | 13 +---- .../src/components/DelegationButton.tsx | 57 ++++++++----------- packages/client/src/contexts/MUDContext.tsx | 48 +++++++++++----- packages/client/src/hooks/useDelegation.ts | 46 --------------- .../CharacterCreation.tsx | 0 packages/client/src/pages/Welcome.tsx | 18 +++++- pnpm-lock.yaml | 25 ++++++++ 8 files changed, 101 insertions(+), 108 deletions(-) delete mode 100644 packages/client/src/hooks/useDelegation.ts rename packages/client/src/{components => pages}/CharacterCreation.tsx (100%) diff --git a/packages/client/src/Routes.tsx b/packages/client/src/Routes.tsx index 5563b5ac9..efa801569 100644 --- a/packages/client/src/Routes.tsx +++ b/packages/client/src/Routes.tsx @@ -1,6 +1,6 @@ import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; -import { CharacterCreation } from './components/CharacterCreation'; +import { CharacterCreation } from './pages/CharacterCreation'; import { Welcome } from './pages/Welcome'; import { World } from './pages/World'; diff --git a/packages/client/src/components/ConnectWalletModal.tsx b/packages/client/src/components/ConnectWalletModal.tsx index 93a15ddba..c8b76c518 100644 --- a/packages/client/src/components/ConnectWalletModal.tsx +++ b/packages/client/src/components/ConnectWalletModal.tsx @@ -25,7 +25,7 @@ export const ConnectWalletModal = ({ }): JSX.Element => { const { data: externalWalletClient } = useWalletClient(); const { isConnected, address } = useAccount(); - const { delegatorAddress, setBurnerWithCleanup } = useMUD(); + const { delegatorAddress } = useMUD(); const bodyContent = useMemo(() => { if (externalWalletClient && delegatorAddress) { @@ -35,7 +35,6 @@ export const ConnectWalletModal = ({ ); @@ -68,7 +67,6 @@ export const ConnectWalletModal = ({ ); @@ -80,14 +78,7 @@ export const ConnectWalletModal = ({ ); - }, [ - address, - externalWalletClient, - delegatorAddress, - isConnected, - onClose, - setBurnerWithCleanup, - ]); + }, [address, externalWalletClient, delegatorAddress, isConnected, onClose]); return ( diff --git a/packages/client/src/components/DelegationButton.tsx b/packages/client/src/components/DelegationButton.tsx index e16a263dd..d4e686e00 100644 --- a/packages/client/src/components/DelegationButton.tsx +++ b/packages/client/src/components/DelegationButton.tsx @@ -1,27 +1,25 @@ import { Button } from '@chakra-ui/react'; -import { useCallback, useEffect, useState } from 'react'; -import type { Account, Chain, Hex, Transport, WalletClient } from 'viem'; +import { useCallback, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import type { Account, Chain, Transport, WalletClient } from 'viem'; import { useAccount, useSwitchChain } from 'wagmi'; import { useMUD } from '../contexts/MUDContext'; -import { useDelegation } from '../hooks/useDelegation'; import { useToast } from '../hooks/useToast'; -import { type Burner, createBurner } from '../lib/mud/createBurner'; +import { setupDelegation } from '../lib/mud/delegation'; import { getChainNameFromId, isSupportedChain } from '../lib/web3'; -export type SetBurnerProps = { setBurner: (burner: Burner) => () => void }; - export const DelegationButton = ({ externalWalletClient, onClose, - setBurner, -}: SetBurnerProps & { +}: { externalWalletClient: WalletClient; onClose?: () => void; }): JSX.Element => { + const navigate = useNavigate(); const { chains, switchChain } = useSwitchChain(); const { chainId } = useAccount(); - const { status, setupDelegation } = useDelegation(externalWalletClient); + const { burnerAddress, network } = useMUD(); const { renderError, renderSuccess } = useToast(); const [isDelegating, setIsDelegating] = useState(false); @@ -32,20 +30,34 @@ export const DelegationButton = ({ throw new Error('Delegation setup function not available'); } + if (!network) { + throw new Error('Network not available'); + } + setIsDelegating(true); - await setupDelegation(); + await setupDelegation(network, externalWalletClient, burnerAddress); renderSuccess('Delegation successful'); if (onClose) { onClose(); } + + navigate('/character-creation'); } catch (error) { renderError(error, 'Failed to delegate'); } finally { setIsDelegating(false); } - }, [onClose, renderError, renderSuccess, setupDelegation]); + }, [ + burnerAddress, + externalWalletClient, + navigate, + network, + onClose, + renderError, + renderSuccess, + ]); if (!isSupportedChain(chainId)) { return ( @@ -55,15 +67,6 @@ export const DelegationButton = ({ ); } - if (status === 'delegated') { - return ( - - ); - } - return ( + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17f304166..741728157 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ importers: '@tanstack/react-query': specifier: ^5.37.1 version: 5.37.1(react@18.3.1) + '@types/react-router-dom': + specifier: ^5.3.3 + version: 5.3.3 contracts: specifier: workspace:* version: link:../contracts @@ -92,6 +95,9 @@ importers: react-dom: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^6.23.1 + version: 6.23.1(react-dom@18.3.1)(react@18.3.1) rxjs: specifier: 7.5.5 version: 7.5.5 @@ -6244,6 +6250,10 @@ packages: resolution: {integrity: sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw==} dev: false + /@types/history@4.7.11: + resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} + dev: false + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: false @@ -6305,6 +6315,21 @@ packages: '@types/react': 18.2.22 dev: true + /@types/react-router-dom@5.3.3: + resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} + dependencies: + '@types/history': 4.7.11 + '@types/react': 18.2.22 + '@types/react-router': 5.1.20 + dev: false + + /@types/react-router@5.1.20: + resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} + dependencies: + '@types/history': 4.7.11 + '@types/react': 18.2.22 + dev: false + /@types/react@18.2.22: resolution: {integrity: sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==} dependencies: From 44e625980d2c75b3635ce4df47fa12708069407d Mon Sep 17 00:00:00 2001 From: ECWireless Date: Mon, 3 Jun 2024 09:13:05 -0600 Subject: [PATCH 2/7] Remove Container from CharacterCreation --- .../client/src/pages/CharacterCreation.tsx | 141 +++++++++--------- 1 file changed, 72 insertions(+), 69 deletions(-) diff --git a/packages/client/src/pages/CharacterCreation.tsx b/packages/client/src/pages/CharacterCreation.tsx index aa5baf93f..b1dcb36f7 100644 --- a/packages/client/src/pages/CharacterCreation.tsx +++ b/packages/client/src/pages/CharacterCreation.tsx @@ -6,7 +6,6 @@ import { Card, CardBody, Center, - Container, Flex, Heading, Input, @@ -19,77 +18,81 @@ import { export const CharacterCreation = (): JSX.Element => { return ( - - - - - -
- -
- - - - - - -
-
- - -