@lifi/wallet-management
Version:
LI.FI Wallet Management solution.
52 lines • 2.68 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { ChainType } from '@lifi/sdk';
import { Avatar, ListItemAvatar } from '@mui/material';
import { useConfig } from 'wagmi';
import { connect, disconnect, getAccount } from 'wagmi/actions';
import { ListItemButton } from '../components/ListItemButton.js';
import { ListItemText } from '../components/ListItemText.js';
import { useLastConnectedAccount } from '../hooks/useAccount.js';
import { useWalletManagementEvents } from '../hooks/useWalletManagementEvents.js';
import { WalletManagementEvent } from '../types/events.js';
import { getConnectorIcon } from '../utils/getConnectorIcon.js';
import { isWalletInstalled } from '../utils/isWalletInstalled.js';
export const EVMListItemButton = ({ ecosystemSelection, connector, onNotInstalled, onConnected, onConnecting, onError, }) => {
const emitter = useWalletManagementEvents();
const config = useConfig();
const { setLastConnectedAccount } = useLastConnectedAccount();
const connectorName = connector.displayName || connector.name;
const connectorDisplayName = ecosystemSelection
? 'Ethereum'
: connectorName;
const handleEVMConnect = async () => {
try {
const identityCheckPassed = isWalletInstalled(connector.id);
if (!identityCheckPassed) {
onNotInstalled?.(connector);
return;
}
const connectedAccount = getAccount(config);
onConnecting?.();
const data = await connect(config, { connector });
if (connectedAccount.connector) {
await disconnect(config, { connector: connectedAccount.connector });
}
setLastConnectedAccount(connector);
emitter.emit(WalletManagementEvent.WalletConnected, {
address: data.accounts[0],
chainId: data.chainId,
chainType: ChainType.EVM,
connectorId: connector.id,
connectorName: connectorName,
});
onConnected?.();
}
catch (error) {
onError?.(error);
}
};
return (_jsxs(ListItemButton, { onClick: handleEVMConnect, children: [_jsx(ListItemAvatar, { children: _jsx(Avatar, { src: ecosystemSelection
? 'https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/chains/ethereum.svg'
: getConnectorIcon(connector), alt: connectorDisplayName, children: connectorDisplayName?.[0] }) }), _jsx(ListItemText, { primary: connectorDisplayName })] }, connector.id));
};
//# sourceMappingURL=EVMListItemButton.js.map