Restore handleGetOrCreateAccount function
This commit is contained in:
Vendored
+4
-1
@@ -37,8 +37,11 @@ declare global {
|
||||
// Handles incoming transfer requests from Android
|
||||
receiveTransferRequestFromAndroid?: (to: string, amount: string, namespace: String, chainId: string, memo: string) => void;
|
||||
|
||||
// Handles account creation requests from Android
|
||||
receiveGetOrCreateAccountFromAndroid?: (chainId: string) => void;
|
||||
|
||||
// Handles account import requests from Android
|
||||
receiveImportAccountFromAndroid?: (mnemonic: string, chainId: string) => void;
|
||||
receiveImportAccountFromAndroid?: (chainId: string, mnemonic: string) => void;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,16 +6,37 @@ import { useAccounts } from '../context/AccountsContext';
|
||||
import { useNetworks } from '../context/NetworksContext';
|
||||
|
||||
import { StackParamsList } from '../types';
|
||||
import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData } from '../utils/accounts';
|
||||
import useGetOrCreateAccounts from './useGetOrCreateAccounts';
|
||||
import { retrieveAccountsForNetwork, createWallet, retrieveNetworksData, isWalletCreated } from '../utils/accounts';
|
||||
|
||||
export const useWebViewHandler = () => {
|
||||
// Navigation and context hooks
|
||||
const navigation = useNavigation<NativeStackNavigationProp<StackParamsList>>();
|
||||
const { getOrCreateAccountsForChain } = useGetOrCreateAccounts();
|
||||
const { selectedNetwork, setNetworksData, setSelectedNetwork } = useNetworks();
|
||||
const { accounts, currentIndex, setAccounts } = useAccounts();
|
||||
|
||||
// Initialize accounts
|
||||
const handleGetOrCreateAccount = useCallback(async (chainId: string) => {
|
||||
try {
|
||||
|
||||
const accountsData = await getOrCreateAccountsForChain(chainId);
|
||||
|
||||
if (!accountsData || accountsData.length === 0) {
|
||||
window.Android?.onAccountError?.('Failed to create/retrieve account');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
window.Android?.onAccountCreated?.(JSON.stringify(accountsData[0]));
|
||||
} catch (error) {
|
||||
console.error('Account operation error:', error);
|
||||
window.Android?.onAccountError?.(`Operation failed: ${error}`);
|
||||
}
|
||||
}, [getOrCreateAccountsForChain]);
|
||||
|
||||
// Import account using mnemonic
|
||||
const handleImportAccount = useCallback(async (mnemonic: string, chainId: string) => {
|
||||
const handleImportAccount = useCallback(async (chainId: string, mnemonic: string) => {
|
||||
try {
|
||||
// Get available networks data
|
||||
const networksData = await retrieveNetworksData();
|
||||
@@ -24,10 +45,15 @@ export const useWebViewHandler = () => {
|
||||
window.Android?.onAccountError?.('No networks configured');
|
||||
return;
|
||||
}
|
||||
|
||||
// Create wallet using the provided mnemonic
|
||||
await createWallet(networksData, mnemonic);
|
||||
|
||||
console.log('Available networks:', networksData);
|
||||
// Create wallet using the provided mnemonic if it doesn't exist
|
||||
const walletExists = await isWalletCreated();
|
||||
console.log('Wallet exists:', walletExists);
|
||||
if (!walletExists) {
|
||||
console.log('Creating wallet with mnemonic:', mnemonic);
|
||||
await createWallet(networksData, mnemonic);
|
||||
}
|
||||
console.log('Wallet created or already exists');
|
||||
// Find the requested network
|
||||
const requestedNetwork = networksData.find(network => network.chainId === chainId);
|
||||
if (!requestedNetwork) {
|
||||
@@ -174,12 +200,15 @@ export const useWebViewHandler = () => {
|
||||
|
||||
window.receiveTransferRequestFromAndroid = navigateToTransfer;
|
||||
|
||||
window.receiveGetOrCreateAccountFromAndroid = handleGetOrCreateAccount;
|
||||
|
||||
window.receiveImportAccountFromAndroid = handleImportAccount;
|
||||
|
||||
return () => {
|
||||
window.receiveSignRequestFromAndroid = undefined;
|
||||
window.receiveTransferRequestFromAndroid = undefined;
|
||||
window.receiveGetOrCreateAccountFromAndroid = undefined;
|
||||
window.receiveImportAccountFromAndroid = undefined;
|
||||
};
|
||||
}, [navigateToSignRequest, navigateToTransfer, handleImportAccount]); // Only the function reference as dependency
|
||||
}, [navigateToSignRequest, navigateToTransfer, handleGetOrCreateAccount, handleImportAccount]); // Only the function reference as dependency
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user