import { useState } from "react"; import { observer } from "mobx-react-lite"; import { ImageView } from "../payment/TokenCard"; import { OmniWallet } from "../../OmniWallet"; import { OmniConnector, OmniConnectorOption } from "../../OmniConnector"; import { PopupButton, PopupOption, PopupOptionInfo } from "../styles"; import { WCPopup } from "./WCPopup"; import Popup from "../Popup"; interface WalletPickerProps { initialConnector: OmniConnector | null; onSelect?: (wallet: OmniWallet) => void; onClose: () => void; } export const WalletPicker = observer(({ initialConnector, onSelect, onClose }: WalletPickerProps) => { const [connector] = useState(initialConnector ?? null); const [qrcode, setQrcode] = useState<{ uri: string; deeplink?: string; icon?: string } | null>(null); const [wallet, setWallet] = useState(null); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); if (qrcode) { return ( ); } if (wallet != null) { return (

{wallet.name}

{error}

window.open(wallet.download, "_blank")}> {loading ? "Connecting..." : "Get wallet"}
); } if (connector != null) { return ( Select wallet

} onClose={onClose}> {connector.options.map((wallet) => ( { try { setLoading(true); setError(null); setWallet(wallet); const instance = await connector.connect(wallet.id); if (typeof instance === "object" && "qrcode" in instance) { setQrcode({ uri: instance.qrcode, deeplink: instance.deeplink, icon: connector.icon }); const wallet = await instance.task; onSelect?.(wallet); onClose(); return; } onSelect?.(instance); onClose(); } catch (e) { console.error(e); setError(e instanceof Error ? e.message : "Unknown error"); } finally { setLoading(false); } }} >

{wallet.name}

))}
); } });