import {Badge, Layout, Menu, theme} from "antd"; import { ApiOutlined, BankOutlined, CloudServerOutlined, CompassOutlined, FileProtectOutlined, FileSearchOutlined, HomeOutlined, InfoCircleOutlined, LineChartOutlined, LoginOutlined, LogoutOutlined, QuestionCircleOutlined, SearchOutlined, TeamOutlined, UserOutlined } from "@ant-design/icons"; import {Link, Navigate, Route, Routes, useLocation, useNavigate} from "react-router-dom"; import TextPage from "./pages/TextPage"; import DomainSearchPage from "./pages/search/DomainSearchPage"; import EntitySearchPage from "./pages/search/EntitySearchPage"; import NameserverSearchPage from "./pages/search/NameserverSearchPage"; import TldPage from "./pages/info/TldPage"; import StatisticsPage from "./pages/info/StatisticsPage"; import WatchlistPage from "./pages/tracking/WatchlistPage"; import UserPage from "./pages/watchdog/UserPage"; import React, {useCallback, useEffect, useMemo, useState} from "react"; import {getUser} from "./utils/api"; import LoginPage, {AuthenticatedContext} from "./pages/LoginPage"; import ConnectorsPage from "./pages/tracking/ConnectorsPage"; import NotFoundPage from "./pages/NotFoundPage"; import {ItemType, MenuItemType} from "antd/lib/menu/interface"; import {t} from 'ttag' export default function App() { const { token: {colorBgContainer, borderRadiusLG}, } = theme.useToken() const navigate = useNavigate() const location = useLocation() const [isAuthenticated, setIsAuthenticated] = useState(false) const authenticated = useCallback((authenticated: boolean) => { setIsAuthenticated(authenticated) }, []); const contextValue = useMemo(() => ({ authenticated, setIsAuthenticated }), [authenticated, setIsAuthenticated]); useEffect(() => { getUser().then(() => { setIsAuthenticated(true) if (location.pathname === '/login') navigate('/search/domain') }).catch(() => { setIsAuthenticated(false) navigate('/home') }) }, []); const menuItems: ItemType[] = [ { key: 'home', label: t`Home`, icon: , onClick: () => navigate('/home') }, { key: 'search', label: t`Search`, icon: , children: [ { key: 'domain-finder', icon: , label: t`Domain`, title: t`Domain Finder`, disabled: !isAuthenticated, onClick: () => navigate('/search/domain') }, { key: 'entity-finder', icon: , label: t`Entity`, title: t`Entity Finder`, disabled: !isAuthenticated, onClick: () => navigate('/search/entity') }, { key: 'ns-finder', icon: , label: t`Nameserver`, title: t`Nameserver Finder`, disabled: !isAuthenticated, onClick: () => navigate('/search/nameserver') } ] }, { key: 'info', label: t`Information`, icon: , children: [ { key: 'tld-list', icon: , label: t`TLD`, title: t`TLD list`, disabled: !isAuthenticated, onClick: () => navigate('/info/tld') }, { key: 'stats', icon: , label: t`Statistics`, disabled: !isAuthenticated, onClick: () => navigate('/info/stats') } ] }, { key: 'tracking', label: t`Tracking`, icon: , children: [ { key: 'watchlist', icon: , label: t`My Watchlists`, disabled: !isAuthenticated, onClick: () => navigate('/tracking/watchlist') }, { key: 'connectors', icon: , label: t`My connectors`, disabled: !isAuthenticated, onClick: () => navigate('/tracking/connectors') } ] }, { key: 'watchdog', label: t`My Watchdog`, icon: , children: [ { key: 'account', icon: , label: t`My Account`, disabled: !isAuthenticated, onClick: () => navigate('/user') }, { key: 'tos', icon: , label: t`TOS`, onClick: () => navigate('/tos') }, { key: 'privacy', icon: , label: t`Privacy Policy`, onClick: () => navigate('/privacy') } ] }, { key: '5', icon: , label: t`FAQ`, onClick: () => navigate('/faq') }, ] return , label: t`Log out`, danger: true, onClick: () => window.location.replace("/logout") } : { key: '8', icon: , label: t`Log in`, onClick: () => navigate('/login') }]} />
}/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/>
Domain Watchdog ©{new Date().getFullYear()} Created by Maël Gangloff
}