import { animated, config as springConfig, useTransition, } from "@react-spring/web"; import { cva } from "class-variance-authority"; import React, { useCallback, useMemo, useRef, useState } from "react"; import { Avatar } from "./avatar"; import { Typography } from "@carrot-kpi/ui"; import { useAccount, useConnect } from "wagmi"; import { ChainSelect } from "../chain-select/chain-select"; import X from "../../icons/x"; import { useClickAway } from "react-use"; import Power from "../../icons/power"; import { Actions } from "./actions"; import { shortenAddress } from "../../utils/address"; import Settings from "../../icons/settings"; import Arrow from "../../icons/arrow"; import { useTranslation } from "react-i18next"; import Link from "../../icons/link"; import { Preferences } from "./preferences"; import { READONLY_CONNNECTOR_ID } from "../../connectors"; import { WalletConnectors } from "./wallet-connectors"; const overlayStyles = cva([ "fixed", "h-full", "w-full", "top-0", "left-0", "z-10", "bg-black", "bg-opacity-50", ]); const rootStyles = cva([ "flex", "fixed", "h-screen", "w-[600px]", "overflow-hidden", "right-0", "top-0", "z-10", ]); const containerStyles = cva([ "z-10", "bg-white", "dark:bg-black", "sticky", "rounded-tl-xl", "w-[600px]", "h-full", "px-11", "py-7", ]); interface AccountSettingsDrawerProps { open: boolean; onClose: () => void; } export const AccountSettingsDrawer = ({ open, onClose, }: AccountSettingsDrawerProps) => { const { t } = useTranslation(); const { address, chain } = useAccount(); const { connectors, connect } = useConnect(); const [settingsOpen, setSettingsOpen] = useState(false); const drawerRef = useRef(null); const readonlyConnector = useMemo(() => { return connectors.find( (connector) => connector.id === READONLY_CONNNECTOR_ID, ); }, [connectors]); const blockExplorerHref = useMemo(() => { if (!address || !chain || !chain.blockExplorers) return ""; return `${chain.blockExplorers.default.url}/address/${address}`; }, [address, chain]); const transitions = useTransition(open, { config: { ...springConfig.default, duration: 150, }, from: { transform: "translateX(100%)", opacity: 0 }, enter: { transform: "translateX(0%)", opacity: 1 }, leave: { transform: "translateX(100%)", opacity: 0 }, }); useClickAway(drawerRef, () => { onClose(); }); const handleDisconnectClick = useCallback(() => { if (!!readonlyConnector) connect({ connector: readonlyConnector, chainId: chain?.id }); onClose(); }, [connect, onClose, readonlyConnector, chain?.id]); const handleSettingsOpenClick = useCallback(() => { setSettingsOpen(true); }, []); const handleSettingsCloseClick = useCallback(() => { setSettingsOpen(false); }, []); return transitions( (style, item) => item && ( <>
{settingsOpen ? (
{t("settings.title")}
) : (
{address ? (
{shortenAddress( address, )}
) : (
{t( "connect.wallet.title", )}
)}
{address && ( )}
{address && ( )}
{address ? ( ) : ( )}
)}
), ); };