From 9f9ca054e392dc2384ecd3758bf8fbe58dcdbc01 Mon Sep 17 00:00:00 2001 From: jadapema Date: Wed, 8 Jan 2025 07:41:26 -0600 Subject: [PATCH 1/5] fix: coming soon stripe --- .../finance-deposit-from-stripe.tsx | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/sections/finance/components/finance-deposit-from-stripe.tsx b/src/sections/finance/components/finance-deposit-from-stripe.tsx index 7374ea85..66552ab4 100644 --- a/src/sections/finance/components/finance-deposit-from-stripe.tsx +++ b/src/sections/finance/components/finance-deposit-from-stripe.tsx @@ -17,24 +17,25 @@ const FinanceDepositFromStripe = () => { p: 2, }} > - + - - This feature is coming soon. - - - We’re working hard to bring this section to life. Check back soon! - + + + This feature is coming soon. + + + We’re working hard to bring this section to life. Check back soon! + + - ); }; From 360e859d17a52ba974fe81c62f430718151bcc26 Mon Sep 17 00:00:00 2001 From: jadapema Date: Wed, 8 Jan 2025 10:58:33 -0600 Subject: [PATCH 2/5] fix: deposit and withdraw modals --- src/sections/finance/components/box-row.tsx | 1 + .../finance/components/finance-contacts.tsx | 3 +- .../finance-deposit-from-metamask.tsx | 2 +- .../components/finance-deposit-modal.tsx | 10 +- .../finance/components/finance-deposit.tsx | 86 ++++++++------- .../components/finance-quick-transfer.tsx | 10 +- .../finance-withdraw-from-metamask.tsx | 2 +- .../components/finance-withdraw-modal.tsx | 10 +- .../finance/components/finance-withdraw.tsx | 104 +++++++++++++----- src/sections/user/profile-cover.tsx | 8 +- src/sections/user/profile-header.tsx | 86 +++++++-------- 11 files changed, 198 insertions(+), 124 deletions(-) diff --git a/src/sections/finance/components/box-row.tsx b/src/sections/finance/components/box-row.tsx index f86244c0..785ac2f1 100644 --- a/src/sections/finance/components/box-row.tsx +++ b/src/sections/finance/components/box-row.tsx @@ -9,6 +9,7 @@ export const BoxRow: FC = ({ children }) => ( display: 'flex', alignItems: 'center', justifyContent: 'space-between', + my: 0.5 }} > {children} diff --git a/src/sections/finance/components/finance-contacts.tsx b/src/sections/finance/components/finance-contacts.tsx index 9d1920ed..a0781d69 100644 --- a/src/sections/finance/components/finance-contacts.tsx +++ b/src/sections/finance/components/finance-contacts.tsx @@ -102,10 +102,11 @@ export default function FinanceContactsCarousel({ title={title} subheader={subheader} action={} + sx={{ px: 0 }} /> {/* Main carousel container */} - + {slidesData.map((chunk, index) => ( = ({ onClo if (connecting) { return ( - + ); diff --git a/src/sections/finance/components/finance-deposit-modal.tsx b/src/sections/finance/components/finance-deposit-modal.tsx index eba8e934..b2cddff2 100644 --- a/src/sections/finance/components/finance-deposit-modal.tsx +++ b/src/sections/finance/components/finance-deposit-modal.tsx @@ -40,7 +40,7 @@ const TABS = [ // ---------------------------------------------------------------------- export const FinanceDepositModal: FC = ({ open, onClose }) => { - const [currentTab, setCurrentTab] = useState('metamask'); + const [currentTab, setCurrentTab] = useState('smartAccount'); const handleChangeTab = (_event: any, newValue: any) => { setCurrentTab(newValue); @@ -48,17 +48,21 @@ export const FinanceDepositModal: FC = ({ open, onClos return ( - Deposit + Deposit {TABS.map((tab) => ( diff --git a/src/sections/finance/components/finance-deposit.tsx b/src/sections/finance/components/finance-deposit.tsx index 8575dce2..3502d211 100644 --- a/src/sections/finance/components/finance-deposit.tsx +++ b/src/sections/finance/components/finance-deposit.tsx @@ -1,29 +1,29 @@ -// React and libraries imports +// REACT IMPORTS import { FC, useCallback, useEffect, useState } from 'react'; + +// VIEM IMPORTS import { Address } from 'viem'; -// @mui components +// MUI IMPORTS import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import Divider from '@mui/material/Divider'; -// Project components +// LOCAL IMPORTS import NeonPaper from '@src/sections/publication/NeonPaperContainer'; import FinanceDialogsActions from '@src/sections/finance/components/finance-dialogs-actions'; import TextMaxLine from '@src/components/text-max-line'; -import { InputAmount } from '@src/components/input-amount'; import { formatBalanceNumber } from '@src/utils/format-number'; -import { useResponsive } from '@src/hooks/use-responsive'; import { useGetMmcContractBalance } from '@src/hooks/use-get-mmc-contract-balance'; import BoxRow from '@src/sections/finance/components/box-row.tsx'; import { UseDepositHook } from '@src/hooks/use-deposit'; import { truncateAddress } from '@src/utils/wallet'; -// Notifications +// NOTIFICATIONS IMPORTS import { notifyError, notifySuccess, notifyWarning } from '@notifications/internal-notifications'; import { WARNING } from '@notifications/warnings'; import { SUCCESS } from '@notifications/success'; import { ERRORS } from '@notifications/errors.ts'; +import TextField from '@mui/material/TextField'; interface FinanceDepositProps { /** @@ -58,13 +58,14 @@ interface FinanceDepositProps { * - `onClose` */ const FinanceDeposit: FC = ({ address, recipient, depositHook, onClose }) => { - const [amount, setAmount] = useState(0); + const [amount, setAmount] = useState(); const [localLoading, setLocalLoading] = useState(false); - + const [amountError, setAmountError] = useState(false); + const [helperText, setHelperText] = useState(""); const { deposit, loading: depositLoading, error } = depositHook; - - // Retrieve the balance using the "address" (the connected one) const { balance } = useGetMmcContractBalance(address); + const isBusy = localLoading || depositLoading; + const RainbowEffect = isBusy ? NeonPaper : Box; useEffect(() => { if (error) { @@ -74,6 +75,8 @@ const FinanceDeposit: FC = ({ address, recipient, depositHo // Validation and deposit const handleConfirmDeposit = useCallback(async () => { + if (!amount) return; + if (!address) { // If there's no connected address, we can't deposit notifyWarning(WARNING.NO_WALLET_CONNECTED); @@ -96,64 +99,73 @@ const FinanceDeposit: FC = ({ address, recipient, depositHo } }, [address, recipient, amount, balance, deposit, onClose]); - // NeonPaper effect if currently loading - const isBusy = localLoading || depositLoading; - const RainbowEffect = isBusy ? NeonPaper : Box; - const mdUp = useResponsive('up', 'md'); + const handleAmountChange = (event: React.ChangeEvent) => { + const value = Number(event.target.value); + + setAmount(value ?? undefined); + + // Set appropriate error message + const errorMessage = + value <= 0 + ? "No amount entered" + : value > (balance ?? 0) + ? "Amount cannot be greater than balance" + : ""; + + setAmountError(!!errorMessage); // Set error state + setHelperText(errorMessage); // Update helper text with the error message + }; + - // If there's no address, we could show a fallback, - // but here we'll show the same UI (balance: 0, etc.) - // or a warning when confirming. It's up to you. return ( <> - Connected Wallet + Connected Wallet {address ? truncateAddress(address) : 'No wallet connected'} - - - Balance + Balance {formatBalanceNumber(balance ?? 0)} MMC - - - - Amount to deposit - setAmount(Number(e.target.value))} - /> - + = ({ onC if (connecting) { return ( - + ); diff --git a/src/sections/finance/components/finance-withdraw-modal.tsx b/src/sections/finance/components/finance-withdraw-modal.tsx index 3df774b9..14b69e11 100644 --- a/src/sections/finance/components/finance-withdraw-modal.tsx +++ b/src/sections/finance/components/finance-withdraw-modal.tsx @@ -39,7 +39,7 @@ interface FinanceWithdrawModalProps extends DialogProps { // ---------------------------------------------------------------------- export const FinanceWithdrawModal: FC = ({ open, onClose }) => { - const [currentTab, setCurrentTab] = useState('metamask'); + const [currentTab, setCurrentTab] = useState('smartAccount'); const handleChangeTab = (_event: any, newValue: any) => { setCurrentTab(newValue); @@ -47,17 +47,21 @@ export const FinanceWithdrawModal: FC = ({ open, onCl return ( - Withdraw + Withdraw {TABS.map((tab) => ( diff --git a/src/sections/finance/components/finance-withdraw.tsx b/src/sections/finance/components/finance-withdraw.tsx index 3333385e..ebcc1334 100644 --- a/src/sections/finance/components/finance-withdraw.tsx +++ b/src/sections/finance/components/finance-withdraw.tsx @@ -1,29 +1,31 @@ import { FC, useCallback, useEffect, useState } from 'react'; + +// VIEM IMPORTS import { Address } from 'viem'; -// @mui +// MUI IMPORTS import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import Divider from '@mui/material/Divider'; import TextField from '@mui/material/TextField'; -// Project components +// LOCAL IMPORTS import NeonPaper from '@src/sections/publication/NeonPaperContainer'; import FinanceDialogsActions from '@src/sections/finance/components/finance-dialogs-actions'; import TextMaxLine from '@src/components/text-max-line'; -import { InputAmount } from '@src/components/input-amount'; import { formatBalanceNumber } from '@src/utils/format-number'; -import { useResponsive } from '@src/hooks/use-responsive'; import BoxRow from '@src/sections/finance/components/box-row'; import { isValidAddress } from '@src/sections/finance/components/finance-quick-transfer'; import { UseWithdrawHook } from '@src/hooks/use-withdraw.ts'; +import { truncateAddress } from '@src/utils/wallet.ts'; -// Notifications +// NOTIFICATIONS IMPORTS import { notifyError, notifySuccess, notifyWarning } from '@notifications/internal-notifications'; import { ERRORS } from '@notifications/errors'; import { WARNING } from '@notifications/warnings'; import { SUCCESS } from '@notifications/success'; +// ---------------------------------------------------------------------- + interface FinanceWithdrawProps { address?: Address; // The connected wallet address withdrawHook: UseWithdrawHook; // Generic withdraw hook @@ -31,15 +33,16 @@ interface FinanceWithdrawProps { onClose: () => void; // Callback to close the modal/dialog } +// ---------------------------------------------------------------------- + const FinanceWithdraw: FC = ({ address, withdrawHook, balance, onClose }) => { - const [amount, setAmount] = useState(0); + const [amount, setAmount] = useState(); const [destinationAddress, setDestinationAddress] = useState(''); const [addressError, setAddressError] = useState(false); + const [amountError, setAmountError] = useState(false); + const [amountHelperText, setAmountHelperText] = useState(''); // Dynamic helper text for amount const [localLoading, setLocalLoading] = useState(false); - const { withdraw, loading: withdrawLoading, error } = withdrawHook; - - const mdUp = useResponsive('up', 'md'); const RainbowEffect = localLoading || withdrawLoading ? NeonPaper : Box; useEffect(() => { @@ -49,6 +52,8 @@ const FinanceWithdraw: FC = ({ address, withdrawHook, bala }, [error]); const handleConfirmWithdraw = useCallback(async () => { + if (!amount) return; + if (!destinationAddress || addressError) { notifyWarning(WARNING.INVALID_WALLET_ADDRESS); return; @@ -69,6 +74,22 @@ const FinanceWithdraw: FC = ({ address, withdrawHook, bala } }, [amount, destinationAddress, balance, withdraw, addressError, onClose]); + const handleAmountChange = (event: React.ChangeEvent) => { + const value = Number(event.target.value); + setAmount(value); + + // Update error state and helper text dynamically + const errorMessage = + value <= 0 + ? "Amount must be greater than zero" + : value > (balance ?? 0) + ? "Amount cannot be greater than balance" + : ""; + + setAmountError(!!errorMessage); + setAmountHelperText(errorMessage); + }; + const handleInputChange = (event: React.ChangeEvent) => { const value = event.target.value; setDestinationAddress(value); @@ -78,48 +99,71 @@ const FinanceWithdraw: FC = ({ address, withdrawHook, bala return ( <> - Connected Wallet + Wallet - {address ? address : 'No wallet connected'} + {address ? truncateAddress(address) : 'No wallet connected'} - - - Balance + Balance {formatBalanceNumber(balance ?? 0)} MMC - + - - Amount to withdraw - setAmount(Number(e.target.value))} - /> - + + + + to + + = ({ address, withdrawHook, bala rainbowComponent={RainbowEffect} loading={localLoading} actionLoading={withdrawLoading} - amount={amount} + amount={amount ?? 0} balance={balance ?? 0} label={'Confirm'} onConfirmAction={handleConfirmWithdraw} diff --git a/src/sections/user/profile-cover.tsx b/src/sections/user/profile-cover.tsx index 25440ef6..efa7d869 100644 --- a/src/sections/user/profile-cover.tsx +++ b/src/sections/user/profile-cover.tsx @@ -4,14 +4,19 @@ import { alpha } from '@mui/material/styles'; import { bgGradient } from '@src/theme/css'; import { Profile } from '@lens-protocol/api-bindings'; import Image from '../../components/image'; +import { SxProps } from '@mui/system'; +import { Theme } from '@mui/material'; // ---------------------------------------------------------------------- interface ProfileCoverProps { profile?: Profile; + sx?: SxProps; } -export default function ProfileCover({ profile }: ProfileCoverProps) { +// ---------------------------------------------------------------------- + +export default function ProfileCover({ profile, sx }: ProfileCoverProps) { const coverImage = profile?.metadata?.coverPicture?.optimized?.uri; return ( ); diff --git a/src/sections/user/profile-header.tsx b/src/sections/user/profile-header.tsx index 12c6648d..af6e1b9b 100644 --- a/src/sections/user/profile-header.tsx +++ b/src/sections/user/profile-header.tsx @@ -234,7 +234,7 @@ const ProfileHeader = ({ return ( <> - + {sessionData?.authenticated ? ( + + + Share Watchit on your social + - + {profile?.metadata?.bio ?? ''} @@ -497,43 +534,6 @@ const ProfileHeader = ({ {profile?.id !== sessionData?.profile?.id && ( )} - - - - Share Watchit on your social - {sessionData?.profile && profile?.id === sessionData?.profile?.id && ( <> From d556ad92c4bdfadebf038f42f2da9cf2338d02b5 Mon Sep 17 00:00:00 2001 From: jadapema Date: Wed, 8 Jan 2025 11:48:43 -0600 Subject: [PATCH 3/5] refactor: finance metamask --- src/hooks/use-metamask.ts | 32 +++++++ .../finance-deposit-from-metamask.tsx | 83 +++---------------- .../finance-deposit-from-stripe.tsx | 4 +- .../components/finance-deposit-modal.tsx | 2 +- .../components/finance-metamask-button.tsx | 21 +++++ .../components/finance-metamask-loader.tsx | 16 ++++ .../finance-withdraw-from-metamask.tsx | 80 +++--------------- .../components/finance-withdraw-modal.tsx | 2 +- 8 files changed, 98 insertions(+), 142 deletions(-) create mode 100644 src/hooks/use-metamask.ts create mode 100644 src/sections/finance/components/finance-metamask-button.tsx create mode 100644 src/sections/finance/components/finance-metamask-loader.tsx diff --git a/src/hooks/use-metamask.ts b/src/hooks/use-metamask.ts new file mode 100644 index 00000000..ffffbceb --- /dev/null +++ b/src/hooks/use-metamask.ts @@ -0,0 +1,32 @@ +import { useEffect, useState } from 'react'; +import { Address } from 'viem'; +import { connectToMetaMask } from '@src/utils/metamask'; +import { notifyError } from '@notifications/internal-notifications.ts'; +import { ERRORS } from '@notifications/errors.ts'; + +export const useMetaMask = () => { + const [address, setAddress] = useState
(); + const [connecting, setConnecting] = useState(false); + + useEffect(() => { + const walletConnected = localStorage.getItem('walletConnected'); + if (walletConnected === 'true') { + connect(); + } + }, []); + + const connect = async () => { + setConnecting(true); + try { + const walletAddress = await connectToMetaMask(); + setAddress(walletAddress); + localStorage.setItem('walletConnected', 'true'); + } catch (err) { + notifyError(ERRORS.METAMASK_CONNECTING_ERROR); + } finally { + setConnecting(false); + } + }; + + return { address, connecting, connect }; +}; diff --git a/src/sections/finance/components/finance-deposit-from-metamask.tsx b/src/sections/finance/components/finance-deposit-from-metamask.tsx index df30de10..85b12c58 100644 --- a/src/sections/finance/components/finance-deposit-from-metamask.tsx +++ b/src/sections/finance/components/finance-deposit-from-metamask.tsx @@ -1,20 +1,15 @@ -// React and libraries imports -import { FC, useEffect, useState } from 'react'; -import { useSelector } from 'react-redux'; -import { Address } from 'viem'; +// REACT IMPORTS +import { FC } from 'react'; -// @MUI Imports -import Button from '@mui/material/Button'; +// REDUX IMPORTS +import { useSelector } from 'react-redux'; -// Project Imports -import Iconify from '@src/components/iconify'; -import { connectToMetaMask } from '@src/utils/metamask'; +// LOCAL IMPORTS +import { useMetaMask } from '@src/hooks/use-metamask'; import { useDepositMetamask } from '@src/hooks/use-deposit-metamask'; -import { LoadingScreen } from '@src/components/loading-screen'; -import FinanceDeposit from './finance-deposit'; -import { ERRORS } from '@notifications/errors.ts'; -import { notifyError } from '@notifications/internal-notifications.ts'; -import { Box } from '@mui/system'; +import FinanceDeposit from '@src/sections/finance/components/finance-deposit'; +import FinanceMetamaskLoader from '@src/sections/finance/components/finance-metamask-loader.tsx'; +import FinanceMetamaskButton from '@src/sections/finance/components/finance-metamask-button.tsx'; interface FinanceDepositFromMetamaskProps { onClose: () => void; @@ -22,65 +17,13 @@ interface FinanceDepositFromMetamaskProps { const FinanceDepositFromMetamask: FC = ({ onClose }) => { const sessionData = useSelector((state: any) => state.auth.session); - - const [address, setAddress] = useState
(); - const [connecting, setConnecting] = useState(false); - - // Specific hook for Metamask const depositHook = useDepositMetamask(); + const { address, connecting, connect } = useMetaMask(); - // Try reconnecting if the user connected MetaMask before - useEffect(() => { - const walletConnected = localStorage.getItem('walletConnected'); - if (walletConnected === 'true') { - handleConnectMetaMask(); - } - }, []); - - const handleConnectMetaMask = async () => { - setConnecting(true); - try { - const walletAddress = await connectToMetaMask(); - setAddress(walletAddress); - localStorage.setItem('walletConnected', 'true'); - } catch (err) { - notifyError(ERRORS.METAMASK_CONNECTING_ERROR); - } finally { - setConnecting(false); - } - }; - - if (connecting) { - return ( - - - - ); - } - - // If the wallet is NOT connected, show a button - if (!address) { - return ( - - ); - } + if (connecting) return ; + if (!address) return ; - // If the wallet IS connected, render the deposit component - return ( - - ); + return ; }; export default FinanceDepositFromMetamask; diff --git a/src/sections/finance/components/finance-deposit-from-stripe.tsx b/src/sections/finance/components/finance-deposit-from-stripe.tsx index 82cff79f..2e1c60f7 100644 --- a/src/sections/finance/components/finance-deposit-from-stripe.tsx +++ b/src/sections/finance/components/finance-deposit-from-stripe.tsx @@ -1,7 +1,7 @@ -// @mui +// MUI IMPORTS import Box from '@mui/material/Box'; -// Project components +// LOCAL IMPORTS import TextMaxLine from '@src/components/text-max-line'; import { ComingSoonIllustration } from '@src/assets/illustrations'; diff --git a/src/sections/finance/components/finance-deposit-modal.tsx b/src/sections/finance/components/finance-deposit-modal.tsx index b2cddff2..7bc12788 100644 --- a/src/sections/finance/components/finance-deposit-modal.tsx +++ b/src/sections/finance/components/finance-deposit-modal.tsx @@ -62,7 +62,7 @@ export const FinanceDepositModal: FC = ({ open, onClos zIndex: 9, borderBottom: '1px solid rgba(255, 255, 255, 0.08)', [`& .${tabsClasses.flexContainer}`]: { justifyContent: 'center', px: 1 }, - [`& .${tabsClasses.scroller}`]: { display: 'flex' }, + [`& .${tabsClasses.scroller}`]: { display: 'flex', justifyContent: 'center' }, }} > {TABS.map((tab) => ( diff --git a/src/sections/finance/components/finance-metamask-button.tsx b/src/sections/finance/components/finance-metamask-button.tsx new file mode 100644 index 00000000..d5e5c223 --- /dev/null +++ b/src/sections/finance/components/finance-metamask-button.tsx @@ -0,0 +1,21 @@ +// REACT IMPORTS +import { FC } from 'react'; + +// MUI IMPORTS +import Button from '@mui/material/Button'; + +// LOCAL IMPORTS +import Iconify from '@src/components/iconify'; + +const FinanceMetamaskButton: FC<{ connect: () => void }> = ({ connect }) => { + return ; +}; + +export default FinanceMetamaskButton; diff --git a/src/sections/finance/components/finance-metamask-loader.tsx b/src/sections/finance/components/finance-metamask-loader.tsx new file mode 100644 index 00000000..720a1f5c --- /dev/null +++ b/src/sections/finance/components/finance-metamask-loader.tsx @@ -0,0 +1,16 @@ +// REACT IMPORTS +import { FC } from 'react'; + +// MUI IMPORTS +import { Box } from '@mui/system'; + +// LOCAL IMPORTS +import { LoadingScreen } from '@src/components/loading-screen'; + +const FinanceMetamaskLoader: FC = () => { + return + + ; +}; + +export default FinanceMetamaskLoader; diff --git a/src/sections/finance/components/finance-withdraw-from-metamask.tsx b/src/sections/finance/components/finance-withdraw-from-metamask.tsx index 82a73032..d57777f0 100644 --- a/src/sections/finance/components/finance-withdraw-from-metamask.tsx +++ b/src/sections/finance/components/finance-withdraw-from-metamask.tsx @@ -1,83 +1,27 @@ -// React and libraries imports -import { FC, useEffect, useState } from 'react'; -import { Address } from 'viem'; +// REACT IMPORTS +import { FC } from 'react'; -// @MUI Imports -import Button from '@mui/material/Button'; - -// Import Components -import Iconify from '@src/components/iconify'; -import FinanceWithdraw from './finance-withdraw.tsx'; +// LOCAL IMPORTS +import { useMetaMask } from '@src/hooks/use-metamask'; import { useWithdrawMetamask } from '@src/hooks/use-withdraw-metamask'; import { useGetVaultBalance } from '@src/hooks/use-get-vault-balance'; -import { connectToMetaMask } from '@src/utils/metamask'; -import { LoadingScreen } from '@src/components/loading-screen'; - -// Notifications -import { notifyError } from '@src/utils/notifications/internal-notifications'; -import { ERRORS } from '@src/utils/notifications/errors'; -import { Box } from '@mui/system'; +import FinanceWithdraw from '@src/sections/finance/components/finance-withdraw'; +import FinanceMetamaskLoader from '@src/sections/finance/components/finance-metamask-loader.tsx'; +import FinanceMetamaskButton from '@src/sections/finance/components/finance-metamask-button.tsx'; interface FinanceWithdrawFromMetamaskProps { onClose: () => void; } const FinanceWithdrawFromMetamask: FC = ({ onClose }) => { - const [address, setAddress] = useState
(); - const [connecting, setConnecting] = useState(false); - const { balance } = useGetVaultBalance(address); const withdrawHook = useWithdrawMetamask(); + const { address, connecting, connect } = useMetaMask(); + const { balance } = useGetVaultBalance(address); - // Auto-reconnect if MetaMask was previously connected - useEffect(() => { - const walletConnected = localStorage.getItem('walletConnected'); - if (walletConnected === 'true') { - handleConnectMetaMask(); - } - }, []); - - const handleConnectMetaMask = async () => { - setConnecting(true); - try { - const walletAddress = await connectToMetaMask(); - setAddress(walletAddress); - localStorage.setItem('walletConnected', 'true'); - } catch (err) { - notifyError(ERRORS.METAMASK_CONNECTING_ERROR); - } finally { - setConnecting(false); - } - }; - - if (connecting) { - return ( - - - - ); - } - - if (!address) { - return ( - - ); - } + if (connecting) return ; + if (!address) return ; - return ( - - ); + return ; }; export default FinanceWithdrawFromMetamask; diff --git a/src/sections/finance/components/finance-withdraw-modal.tsx b/src/sections/finance/components/finance-withdraw-modal.tsx index 14b69e11..c32ebee0 100644 --- a/src/sections/finance/components/finance-withdraw-modal.tsx +++ b/src/sections/finance/components/finance-withdraw-modal.tsx @@ -61,7 +61,7 @@ export const FinanceWithdrawModal: FC = ({ open, onCl zIndex: 9, borderBottom: '1px solid rgba(255, 255, 255, 0.08)', [`& .${tabsClasses.flexContainer}`]: { justifyContent: 'center', px: 1 }, - [`& .${tabsClasses.scroller}`]: { display: 'flex' }, + [`& .${tabsClasses.scroller}`]: { display: 'flex', justifyContent: 'center' }, }} > {TABS.map((tab) => ( From b81c3525c531c8c6939b01fd02cfee801355ae6d Mon Sep 17 00:00:00 2001 From: jadapema Date: Wed, 8 Jan 2025 11:56:08 -0600 Subject: [PATCH 4/5] refactor: finance modal --- .../components/finance-deposit-modal.tsx | 101 ++++++------------ .../finance/components/finance-modal.tsx | 65 +++++++++++ .../components/finance-withdraw-modal.tsx | 100 ++++++----------- 3 files changed, 130 insertions(+), 136 deletions(-) create mode 100644 src/sections/finance/components/finance-modal.tsx diff --git a/src/sections/finance/components/finance-deposit-modal.tsx b/src/sections/finance/components/finance-deposit-modal.tsx index 7bc12788..db0003e1 100644 --- a/src/sections/finance/components/finance-deposit-modal.tsx +++ b/src/sections/finance/components/finance-deposit-modal.tsx @@ -1,84 +1,49 @@ // REACT IMPORTS -import { FC, useState } from 'react'; - -// MUI IMPORTS -import Tab from '@mui/material/Tab'; -import DialogTitle from '@mui/material/DialogTitle'; -import Tabs, { tabsClasses } from '@mui/material/Tabs'; -import Dialog, { DialogProps } from '@mui/material/Dialog'; +import { FC } from 'react'; // LOCAL IMPORTS import Iconify from '@src/components/iconify'; -import FinanceDepositFromStripe from '@src/sections/finance/components/finance-deposit-from-stripe.tsx'; -import FinanceDepositFromMetamask from '@src/sections/finance/components/finance-deposit-from-metamask.tsx'; -import FinanceDepositFromSmartAccount from '@src/sections/finance/components/finance-deposit-from-smart-account.tsx'; - -// ---------------------------------------------------------------------- +import FinanceModal from '@src/sections/finance/components/finance-modal'; +import FinanceDepositFromStripe from '@src/sections/finance/components/finance-deposit-from-stripe'; +import FinanceDepositFromMetamask from '@src/sections/finance/components/finance-deposit-from-metamask'; +import FinanceDepositFromSmartAccount from '@src/sections/finance/components/finance-deposit-from-smart-account'; -interface FinanceDepositModalProps extends DialogProps { +interface FinanceDepositModalProps { + open: boolean; onClose: VoidFunction; } -// ---------------------------------------------------------------------- - -const TABS = [ +const depositTabs = [ { value: 'fiat', label: 'Stripe', disabled: false, icon: }, - { - value: 'metamask', - label: 'Metamask', - disabled: false, - icon: , - }, - { - value: 'smartAccount', - label: 'Smart Account', - disabled: false, - icon: , - }, + { value: 'metamask', label: 'Metamask', disabled: false, icon: }, + { value: 'smartAccount', label: 'Smart Account', disabled: false, icon: }, ]; -// ---------------------------------------------------------------------- - -export const FinanceDepositModal: FC = ({ open, onClose }) => { - const [currentTab, setCurrentTab] = useState('smartAccount'); - - const handleChangeTab = (_event: any, newValue: any) => { - setCurrentTab(newValue); +const FinanceDepositModal: FC = ({ open, onClose }) => { + const renderContent = (currentTab: string) => { + switch (currentTab) { + case 'fiat': + return ; + case 'metamask': + return ; + case 'smartAccount': + return ; + default: + return null; + } }; return ( - - Deposit - - - {TABS.map((tab) => ( - - ))} - - - {currentTab === 'fiat' && } - {currentTab === 'metamask' && } - {currentTab === 'smartAccount' && } - + ); }; + +export default FinanceDepositModal; diff --git a/src/sections/finance/components/finance-modal.tsx b/src/sections/finance/components/finance-modal.tsx new file mode 100644 index 00000000..c9d6e1a0 --- /dev/null +++ b/src/sections/finance/components/finance-modal.tsx @@ -0,0 +1,65 @@ +import { FC, useState, ReactNode } from 'react'; + +// MUI IMPORTS +import Tab from '@mui/material/Tab'; +import DialogTitle from '@mui/material/DialogTitle'; +import Tabs, { tabsClasses } from '@mui/material/Tabs'; +import Dialog, { DialogProps } from '@mui/material/Dialog'; + +interface TabConfig { + value: string; + label: string; + disabled?: boolean; + icon: any; +} + +interface FinanceModalProps extends DialogProps { + onClose: VoidFunction; + title: string; + tabs: TabConfig[]; + renderContent: (currentTab: string) => ReactNode; +} + +const FinanceModal: FC = ({ open, onClose, title, tabs, renderContent, ...dialogProps }) => { + const [currentTab, setCurrentTab] = useState('smartAccount'); + + const handleChangeTab = (_event: React.SyntheticEvent, newValue: string) => { + setCurrentTab(newValue); + }; + + return ( + + {title} + + + {tabs.map((tab) => ( + + ))} + + + {renderContent(currentTab)} + + ); +}; + +export default FinanceModal; diff --git a/src/sections/finance/components/finance-withdraw-modal.tsx b/src/sections/finance/components/finance-withdraw-modal.tsx index c32ebee0..67830e43 100644 --- a/src/sections/finance/components/finance-withdraw-modal.tsx +++ b/src/sections/finance/components/finance-withdraw-modal.tsx @@ -1,82 +1,46 @@ -// REACT IMPORTS -import { FC, useState } from 'react'; +// src/sections/finance/components/FinanceWithdrawModal.tsx -// MUI IMPORTS - -import DialogTitle from '@mui/material/DialogTitle'; - -import Dialog, { DialogProps } from '@mui/material/Dialog'; +import { FC } from 'react'; // LOCAL IMPORTS - -import FinanceWithdrawFromSmartAccount from '@src/sections/finance/components/finance-withdraw-from-smart-account'; import Iconify from '@src/components/iconify'; -import Tabs, { tabsClasses } from '@mui/material/Tabs'; -import Tab from '@mui/material/Tab'; -import FinanceWithdrawFromMetamask from '@src/sections/finance/components/finance-withdraw-from-metamask.tsx'; - -const TABS = [ - { - value: 'metamask', - label: 'Metamask', - disabled: false, - icon: , - }, - { - value: 'smartAccount', - label: 'Smart Account', - disabled: false, - icon: , - }, -]; - -// ---------------------------------------------------------------------- +import FinanceModal from '@src/sections/finance/components/finance-modal'; +import FinanceWithdrawFromMetamask from '@src/sections/finance/components/finance-withdraw-from-metamask'; +import FinanceWithdrawFromSmartAccount from '@src/sections/finance/components/finance-withdraw-from-smart-account'; -interface FinanceWithdrawModalProps extends DialogProps { +interface FinanceWithdrawModalProps { + open: boolean; onClose: VoidFunction; } -// ---------------------------------------------------------------------- - -export const FinanceWithdrawModal: FC = ({ open, onClose }) => { - const [currentTab, setCurrentTab] = useState('smartAccount'); +const withdrawTabs = [ + { value: 'metamask', label: 'Metamask', disabled: false, icon: }, + { value: 'smartAccount', label: 'Smart Account', disabled: false, icon: }, +]; - const handleChangeTab = (_event: any, newValue: any) => { - setCurrentTab(newValue); +const FinanceWithdrawModal: FC = ({ open, onClose }) => { + const renderContent = (currentTab: string) => { + switch (currentTab) { + case 'metamask': + return ; + case 'smartAccount': + return ; + default: + return null; + } }; return ( - - Withdraw - - - {TABS.map((tab) => ( - - ))} - - - {currentTab === 'metamask' && } - {currentTab === 'smartAccount' && } - + ); }; + +export default FinanceWithdrawModal; From 2886c3838ecd1bf703fddbd5e09be92d2e2d9ba7 Mon Sep 17 00:00:00 2001 From: jadapema Date: Wed, 8 Jan 2025 11:58:03 -0600 Subject: [PATCH 5/5] refactor: finance modal --- src/sections/finance/components/finance-deposit-modal.tsx | 2 +- src/sections/finance/components/finance-withdraw-modal.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sections/finance/components/finance-deposit-modal.tsx b/src/sections/finance/components/finance-deposit-modal.tsx index db0003e1..3406176c 100644 --- a/src/sections/finance/components/finance-deposit-modal.tsx +++ b/src/sections/finance/components/finance-deposit-modal.tsx @@ -19,7 +19,7 @@ const depositTabs = [ { value: 'smartAccount', label: 'Smart Account', disabled: false, icon: }, ]; -const FinanceDepositModal: FC = ({ open, onClose }) => { +export const FinanceDepositModal: FC = ({ open, onClose }) => { const renderContent = (currentTab: string) => { switch (currentTab) { case 'fiat': diff --git a/src/sections/finance/components/finance-withdraw-modal.tsx b/src/sections/finance/components/finance-withdraw-modal.tsx index 67830e43..14760879 100644 --- a/src/sections/finance/components/finance-withdraw-modal.tsx +++ b/src/sections/finance/components/finance-withdraw-modal.tsx @@ -18,7 +18,7 @@ const withdrawTabs = [ { value: 'smartAccount', label: 'Smart Account', disabled: false, icon: }, ]; -const FinanceWithdrawModal: FC = ({ open, onClose }) => { +export const FinanceWithdrawModal: FC = ({ open, onClose }) => { const renderContent = (currentTab: string) => { switch (currentTab) { case 'metamask':