import React, { createContext, useContext, useEffect, useState } from 'react'; import { NetworksDataState } from '../types'; import { retrieveNetworksData, storeNetworkData } from '../utils/accounts'; import { DEFAULT_NETWORKS, EIP155 } from '../utils/constants'; const NetworksContext = createContext<{ currentIndex: number; setCurrentIndex: (index: number) => void; networksData: NetworksDataState[]; setNetworksData: React.Dispatch>; networkType: string; setNetworkType: (networkType: string) => void; selectedNetwork?: NetworksDataState; setSelectedNetwork: React.Dispatch< React.SetStateAction >; }>({ currentIndex: 0, setCurrentIndex: () => {}, networksData: [], setNetworksData: () => {}, networkType: '', setNetworkType: () => {}, selectedNetwork: {} as NetworksDataState, setSelectedNetwork: () => {}, }); const useNetworks = () => { const networksContext = useContext(NetworksContext); return networksContext; }; const NetworksProvider = ({ children }: { children: any }) => { const [networksData, setNetworksData] = useState([]); const [currentIndex, setCurrentIndex] = useState(0); const [networkType, setNetworkType] = useState(EIP155); const [selectedNetwork, setSelectedNetwork] = useState(); useEffect(() => { const fetchData = async () => { const retrievedNetworks = await retrieveNetworksData(); if (retrievedNetworks.length === 0) { for (const defaultNetwork of DEFAULT_NETWORKS) { await storeNetworkData(defaultNetwork); } } const retrievedNewNetworks = await retrieveNetworksData(); setNetworksData(retrievedNewNetworks); setSelectedNetwork(retrievedNewNetworks[0]); }; fetchData(); }, []); return ( {children} ); }; export { useNetworks, NetworksProvider };