From 92a63208e8c714a772a42ff8f525ad1019c61275 Mon Sep 17 00:00:00 2001 From: pranavjadhav007 Date: Sat, 2 Aug 2025 13:39:52 +0530 Subject: [PATCH] Restore handleGetOrCreateAccount function --- src/global.d.ts | 5 +++- src/hooks/useWebViewHandler.ts | 43 ++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index ab2343e..c691cf7 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -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; } } diff --git a/src/hooks/useWebViewHandler.ts b/src/hooks/useWebViewHandler.ts index 070f7ad..7c086b9 100644 --- a/src/hooks/useWebViewHandler.ts +++ b/src/hooks/useWebViewHandler.ts @@ -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>(); + 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 };