mars-v2-frontend/pages/_app.tsx
Gustavo Mauricio 28c53b1e59
Wallets integration (#3)
* keplr/metamask integration initial commit

* chains settings and type definitions. notifications prototype

* fix: dom nested buttons

* address copied toast

* react-toastify colors

* wallet store and initial queries setup. zustand and react query dependencies added

* _app code cleanup

* remove obsolete WalletContext

* unused import

* walletStore initial commit

* leftover component reference removed

* fix: react hydration mismatch wallet component

* metamask conditional click handler

* connect modal minor tweaks and wallet installation urls added
2022-09-14 12:28:18 +01:00

62 lines
1.6 KiB
TypeScript

import type { AppProps } from "next/app";
import Head from "next/head";
import { ToastContainer, Zoom } from "react-toastify";
import "react-toastify/dist/ReactToastify.min.css";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import detectEthereumProvider from "@metamask/detect-provider";
import "../styles/globals.css";
import Layout from "components/Layout";
import { useEffect } from "react";
import useWalletStore from "stores/useWalletStore";
async function isMetamaskInstalled(): Promise<boolean> {
const provider = await detectEthereumProvider();
return !!provider;
}
const queryClient = new QueryClient();
function MyApp({ Component, pageProps }: AppProps) {
const actions = useWalletStore((state) => state.actions);
// init store
useEffect(() => {
const verifyMetamask = async () => {
actions.setMetamaskInstalledStatus(await isMetamaskInstalled());
};
console.log("HERE");
verifyMetamask();
}, [actions]);
return (
<>
<Head>
<title>Mars V2</title>
{/* <meta name="description" content="Generated by create next app" /> */}
<link rel="icon" href="/favicon.svg" />
</Head>
<QueryClientProvider client={queryClient}>
<Layout>
<Component {...pageProps} />
</Layout>
<ToastContainer
autoClose={1500}
closeButton={false}
position="bottom-right"
hideProgressBar
icon={false}
newestOnTop
theme="colored"
transition={Zoom}
/>
</QueryClientProvider>
</>
);
}
export default MyApp;