@mojito-inc/connect-wallet
Version:
Connecting wallet via metamask, wallet connect, email
78 lines (75 loc) • 3.5 kB
JavaScript
import { useWallet } from '@solana/wallet-adapter-react';
import { useState, useMemo, useEffect } from 'react';
import { useWalletType } from '../provider/WalletTypeProvider.js';
import { WalletProviderType } from '../constant/index.js';
/* eslint-disable react-hooks/rules-of-hooks */
const useSolanaWalletsMethod = (providerType) => {
const { walletType } = useWalletType();
const [provider, setProvider] = useState(null);
const isSolanaWallet = useMemo(() => walletType === 'solana', [walletType]);
if (isSolanaWallet) {
const { wallets: solanaWallets, publicKey: connectedSolanaAddress, connected: solanaWalletConnected, wallet: solanaWallet, connect: solanaWalletConnect, select: solanaWalletSelect, signMessage: solanaSignMessage, disconnect: disconnectSolanaWallet, } = useWallet();
useEffect(() => {
var _a;
if (providerType === WalletProviderType.BACKPACK && window !== undefined) {
const anyWindow = window;
const anyprovider = (_a = anyWindow === null || anyWindow === void 0 ? void 0 : anyWindow.backpack) === null || _a === void 0 ? void 0 : _a.solana;
setProvider(anyprovider);
}
}, [providerType]);
const getWalletAddress = () => {
var _a;
if (providerType === WalletProviderType.BACKPACK && provider && provider.isConnected && !solanaWalletConnected) {
return (_a = provider === null || provider === void 0 ? void 0 : provider.publicKey) === null || _a === void 0 ? void 0 : _a.toString();
}
return connectedSolanaAddress;
};
const getSolanaSignMessage = () => {
var _a;
if (providerType === WalletProviderType.BACKPACK && provider && provider.isConnected && !solanaWalletConnected) {
return (_a = provider === null || provider === void 0 ? void 0 : provider.signMessage) === null || _a === void 0 ? void 0 : _a.bind(provider);
}
return solanaSignMessage;
};
const solanaWalletData = useMemo(() => {
return {
solanaWallets,
solanaWalletSelect,
connectedSolanaAddress: getWalletAddress(),
disconnectSolanaWallet,
solanaSignMessage: getSolanaSignMessage(),
solanaWalletConnected,
solanaWallet,
solanaWalletConnect,
};
}, [
solanaWallets,
solanaWalletSelect,
solanaWalletConnected,
disconnectSolanaWallet,
getSolanaSignMessage,
getWalletAddress,
solanaWallet,
solanaWalletConnect,
]);
return solanaWalletData;
}
return {
thirdWebWallet: undefined,
connect: undefined,
activeAccount: undefined,
thirdWebDisconnect: undefined,
connectedThirdWebWallet: undefined,
thirdWebConnectedChain: undefined,
connectionStatus: undefined,
solanaWallets: undefined,
solanaWalletConnect: undefined,
connectedSolanaAddress: undefined,
disconnectSolanaWallet: undefined,
solanaSignMessage: undefined,
solanaWalletConnected: undefined,
solanaWallet: undefined,
solanaWalletSelect: undefined,
};
};
export { useSolanaWalletsMethod as default };