diff --git a/src/App.tsx b/src/App.tsx index 827b397..a66b50f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -42,6 +42,7 @@ import { checkSufficientFunds, getPathKey, sendMessage } from "./utils/misc"; import useAccountsData from "./hooks/useAccountsData"; import { useWebViewHandler } from "./hooks/useWebViewHandler"; import SignMessageEmbed from "./screens/SignMessageEmbed"; +import { AddAccountEmbed } from "./screens/AddAccountEmbed"; const Stack = createStackNavigator(); @@ -391,6 +392,13 @@ const App = (): React.JSX.Element => { header: () => <>, }} /> + <>, + }} + /> { + const { networksData } = useNetworks(); + const { accounts, setAccounts, setCurrentIndex } = + useAccounts(); + const { getAccountsData } = useAccountsData(); + + const addAccountHandler = async (network: NetworksDataState) => { + const newAccount = await addAccount(network); + if (newAccount) { + setAccounts([...accounts, newAccount]); + setCurrentIndex(newAccount.index); + } + }; + + useEffect(() => { + const handleAddAccount = async (event: MessageEvent) => { + if (event.data.type !== 'ADD_ACCOUNT') return; + + if (event.origin !== process.env.REACT_APP_DEPLOY_APP_URL) { + console.log('Unauthorized app.'); + return; + } + + const network = networksData.find(network => network.chainId === event.data.chainId); + + await addAccountHandler(network!); + + const accountsData = await getAccountsData(event.data.chainId); + + console.log({accountsData}) + + sendMessage(event.source as Window, 'ADD_ACCOUNT_RESPONSE', { message: event.data.message, accountsData }, event.origin); + }; + + window.addEventListener('message', handleAddAccount); + + return () => { + window.removeEventListener('message', handleAddAccount); + }; + }, [networksData, getAccountsData]); + + // Custom hook for adding listener to get accounts data + useGetOrCreateAccounts(); + + console.log('wallet') + return ( + <> + + ) +}; diff --git a/src/types.ts b/src/types.ts index 84ce968..1c06b2d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -41,6 +41,7 @@ export type StackParamsList = { "wallet-embed": undefined; "auto-sign-in": undefined; "sign-message-embed": undefined; + "add-account-embed": undefined; }; export type Account = {