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}
))}
);
}
});