mirror of
https://github.com/luxfhe/example-smart-wallet.git
synced 2026-10-30 18:13:16 +00:00
106 lines
3.1 KiB
TypeScript
106 lines
3.1 KiB
TypeScript
import { useAccount, useLogout, useSigner, useUser } from "@account-kit/react";
|
|
import { ArrowRightStartOnRectangleIcon } from "@heroicons/react/24/outline";
|
|
import { useQuery } from "@tanstack/react-query";
|
|
import { DeploymentStatusIndicator } from "../DeploymentStatusIndicator";
|
|
import { UserAddressRow } from "./UserAddressRow";
|
|
|
|
type UserConnectionDetailsProps = {
|
|
deploymentStatus: boolean;
|
|
onClose: () => void;
|
|
};
|
|
export function UserConnectionDetails({ deploymentStatus, onClose }: UserConnectionDetailsProps) {
|
|
const user = useUser();
|
|
const signer = useSigner();
|
|
const { logout } = useLogout();
|
|
const scaAccount = useAccount({ type: "LightAccount" });
|
|
|
|
const isEOAUser = user?.type === "eoa";
|
|
|
|
const getSignerAddress = async (): Promise<string | null> => {
|
|
const signerAddress = await signer?.getAddress();
|
|
return signerAddress ?? null;
|
|
};
|
|
|
|
const { data: signerAddress = "" } = useQuery({
|
|
queryKey: ["signerAddress"],
|
|
queryFn: getSignerAddress,
|
|
});
|
|
|
|
if (!user) return null;
|
|
|
|
if (isEOAUser) {
|
|
return (
|
|
<>
|
|
{/* EOA Address */}
|
|
<li>
|
|
<UserAddressRow label="EOA Address" address={user?.address} />
|
|
</li>
|
|
|
|
{/* Logout */}
|
|
<li
|
|
onClick={() => {
|
|
logout();
|
|
onClose();
|
|
}}
|
|
>
|
|
<span className="font-semibold text-md md:text-xs text-btn-primary">
|
|
Logout
|
|
<ArrowRightStartOnRectangleIcon className="w-4 h-4" />
|
|
</span>
|
|
</li>
|
|
</>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{/* Smart Account */}
|
|
<li>
|
|
<UserAddressRow label="Smart account" address={scaAccount?.address ?? ""} />
|
|
</li>
|
|
|
|
{/* Status */}
|
|
<div className="flex flex-row justify-between items-center px-4 py-2">
|
|
<span className="text-md md:text-sm text-fg-secondary">Status</span>
|
|
<div className="flex flex-row items-center">
|
|
<DeploymentStatusIndicator isDeployed={!!deploymentStatus} className="w-[12px] h-[12px]" />
|
|
<span className="text-fg-primary block ml-1 text-md md:text-sm">
|
|
{deploymentStatus ? "Deployed" : "Not deployed"}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="mt-4" />
|
|
|
|
{/* Signer */}
|
|
<li>
|
|
{/* <a
|
|
target="_blank"
|
|
href="https://accountkit.alchemy.com/concepts/smart-account-signer"
|
|
className="flex justify-center items-center"
|
|
>
|
|
<span className="text-md md:text-sm text-fg-secondary mr-1">Signer</span>
|
|
<div className="flex flex-row justify-center items-center w-[14px] h-[14px] ml-1">
|
|
<ArrowTopRightOnSquareIcon className="w-4 h-4" />
|
|
</div>
|
|
</a> */}
|
|
|
|
<UserAddressRow label="Signer" address={signerAddress} />
|
|
</li>
|
|
|
|
{/* Logout */}
|
|
<li
|
|
onClick={() => {
|
|
logout();
|
|
onClose();
|
|
}}
|
|
>
|
|
<span className="font-semibold text-md md:text-xs text-btn-primary">
|
|
Logout
|
|
<ArrowRightStartOnRectangleIcon className="w-4 h-4" />
|
|
</span>
|
|
</li>
|
|
</>
|
|
);
|
|
}
|