UI / src / components / ConnectWalletModal / index.tsx
index.tsx
Raw
import Flex from '@ui/Flex/Flex';
import React from 'react';
import metamask from '@assets/wallets/metamask.svg';
import phantom from '@assets/wallets/phantom.svg';
import trust from '@assets/wallets/trust.svg';
import walletConnect from '@assets/wallets/walletconnect.svg';
import xdefi from '@assets/wallets/xdefi.svg';
import coinbase from '@assets/wallets/coinbase wallet.svg';
import Image from 'next/image';
import { useConnect } from 'wagmi';
import ModalHeader from '../ModalHeader';

type TWalletList = {
  name: string;
  icon: any;
  onClick?: () => void;
};

interface IWalletConnectModal {
  onDismiss: () => void;
}

export default function ConnectWalletModal({ onDismiss }: IWalletConnectModal) {
  const { connect, connectors, error, isLoading, pendingConnector } =
    useConnect({
      onSuccess() {
        onDismiss();
      },
    });

  const walletList: TWalletList[] = [
    {
      name: 'Metamask',
      icon: metamask,
    },
    {
      name: 'Phantom',
      icon: phantom,
    },
    {
      name: 'Trust Wallet',
      icon: trust,
    },
    {
      name: 'Wallet Connect',
      icon: walletConnect,
    },
    {
      name: 'Xdefi',
      icon: xdefi,
    },
    {
      name: 'Coinbase',
      icon: coinbase,
    },
  ];

  return (
    <Flex
      direction="column"
      customStyle="max-w-lg bg-gray-800 rounded-2xl p-5 space-y-2"
    >
      <ModalHeader title="Connect Your Wallet" onClick={onDismiss} />
      <Flex justifyContent="between" wrap={true}>
        {connectors.map((connector) => (
          <Flex
            key={connector.id}
            direction="column"
            width="basis32"
            justifyContent="evenly"
            alignItems="center"
            customStyle={`text-gray-50 text-sm rounded-2xl bg-gray-999 cursor-pointer h-32 my-4 ${
              isLoading && connector.id === pendingConnector?.id
                ? 'animate-pulse'
                : ''
            }`}
            onClick={() => connect({ connector })}
          >
            <div className="relative h-12 w-12">
              <Image
                className=""
                src={`/assets/wallets/${connector.name.toLowerCase()}.svg`}
                alt={connector.name}
                fill
              />
            </div>
            <span>{connector.name}</span>
          </Flex>
        ))}
      </Flex>
    </Flex>
  );
}