import { CheckCircleIcon } from "@heroicons/react/24/solid"; import { ERRORS } from "@hey/data/errors"; import { ManagedAccountsVisibility, useAccountsAvailableQuery, useSwitchAccountMutation } from "@hey/indexer"; import { useCallback, useState } from "react"; import { useAccount } from "wagmi"; import Loader from "@/components/Shared/Loader"; import { ErrorMessage, Spinner, WarningMessage } from "@/components/Shared/UI"; import cn from "@/helpers/cn"; import errorToast from "@/helpers/errorToast"; import reloadAllTabs from "@/helpers/reloadAllTabs"; import { useAccountStore } from "@/store/persisted/useAccountStore"; import { signIn } from "@/store/persisted/useAuthStore"; import SmallSingleAccount from "./SmallSingleAccount"; const SwitchAccounts = () => { const { currentAccount } = useAccountStore(); const [isSubmitting, setIsSubmitting] = useState(false); const [loggingInAccountId, setLoggingInAccountId] = useState( null ); const { address } = useAccount(); const onError = useCallback((error?: unknown) => { setIsSubmitting(false); setLoggingInAccountId(null); errorToast(error); }, []); const { data, error, loading } = useAccountsAvailableQuery({ skip: !address, variables: { accountsAvailableRequest: { hiddenFilter: ManagedAccountsVisibility.NoneHidden, managedBy: address }, lastLoggedInAccountRequest: { address: address } } }); const [switchAccount] = useSwitchAccountMutation(); if (!address) { return ( ); } if (loading) { return ; } const accountsAvailable = data?.accountsAvailable.items || []; const handleSwitchAccount = async (account: string) => { try { setLoggingInAccountId(account); setIsSubmitting(true); const auth = await switchAccount({ variables: { request: { account } } }); if (auth.data?.switchAccount.__typename === "AuthenticationTokens") { const accessToken = auth.data?.switchAccount.accessToken; const refreshToken = auth.data?.switchAccount.refreshToken; // Preserve theme and other local UI state by not signing out completely. signIn({ accessToken, refreshToken }); reloadAllTabs(); return; } return onError({ message: ERRORS.SomethingWentWrong }); } catch { onError(); } }; return (
{accountsAvailable.map((accountAvailable, index) => ( ))}
); }; export default SwitchAccounts;