laconic-wallet/src/context/NetworksContext.tsx
IshaVenikar 94bd8b6480 Persist network data (#84)
* Store new network data

* Store default networks in keystore (#86)

* Add default nws in keystore

* Fix duplicate networks

* Display correct currency symbols for eth and cosmos tx

* Fix currency display

* Use wei for eth
2024-04-25 17:08:27 +05:30

72 lines
2.1 KiB
TypeScript

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