Restore handleGetOrCreateAccount function

This commit is contained in:
2025-08-02 13:39:52 +05:30
parent 6089085a0a
commit 92a63208e8
2 changed files with 40 additions and 8 deletions
+4 -1
View File
@@ -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;
}
}
+36 -7
View File
@@ -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
};