diff --git a/react-app/src/navigation/AppRouter.tsx b/react-app/src/navigation/AppRouter.tsx index cc673761..62c01726 100644 --- a/react-app/src/navigation/AppRouter.tsx +++ b/react-app/src/navigation/AppRouter.tsx @@ -12,51 +12,55 @@ import AppScaffold from "../components/AppScaffold/AppScaffold"; import ProposalDetailRouter from "../components/ProposalDetailScreen/ProposalDetailRouter"; import ValidatorDetailScreen from "../components/ValidatorDetailScreen/ValidatorDetailScreen"; import ValidatorScreen from "../components/ValidatorScreen/ValidatorScreen"; +import Config from "../config/Config"; import AppRoutes from "./AppRoutes"; +import RouterAnalytics from "./RouterAnalytics"; const AppRouter: React.FC = () => { const wallet = useWallet(); return ( - - }> - } /> - } /> - } /> - } /> - } - /> - } - /> + + + }> + } /> + } /> + } /> + } /> + } + /> + } + /> + } + /> + } /> + } + /> + + } + path={AppRoutes.NotFound} + element={} /> - } /> } + path={AppRoutes.ErrorInvalidAddress} + element={} /> - - - } - /> - } - /> - } /> - + } /> + - {wallet.status === ConnectionStatus.Connecting && ( - - )} + {wallet.status === ConnectionStatus.Connecting && ( + + )} + ); }; diff --git a/react-app/src/navigation/RouterAnalytics.tsx b/react-app/src/navigation/RouterAnalytics.tsx new file mode 100644 index 00000000..56d9fc95 --- /dev/null +++ b/react-app/src/navigation/RouterAnalytics.tsx @@ -0,0 +1,35 @@ +import React, { useEffect, useState } from "react"; +import * as ReactGA from "react-ga"; +import { useLocation } from "react-router-dom"; +import { useEffectOnce } from "../hooks/useEffectOnce"; + +interface RouterAnalyticsProps { + id: string | null; + children: React.ReactNode; +} + +const RouterAnalytics: React.FC = (props) => { + const { id, children } = props; + const location = useLocation(); + const [isInitialized, setIsInitialized] = useState(false); + + useEffect(() => { + if (!isInitialized) return; + + ReactGA.pageview(location.pathname + location.search); + }, [location, isInitialized]); + + useEffectOnce( + () => { + if (id) { + ReactGA.initialize(id); + } + setIsInitialized(true); + }, + () => true + ); + + return <>{children}; +}; + +export default RouterAnalytics;