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 WatchlistsPage from "./pages/tracking/WatchlistsPage"; import UserPage from "./pages/watchdog/UserPage"; import React, {useCallback, useEffect, useMemo, useState} from "react"; import {getUser} from "./utils/api"; import FAQPage from "./pages/FAQPage"; import LoginPage, {AuthenticatedContext} from "./pages/LoginPage"; import ConnectorsPage from "./pages/tracking/ConnectorsPage"; import NotFoundPage from "./pages/NotFoundPage"; import tos from "./content/tos.md"; import privacy from "./content/privacy.md"; import home from './content/home.md' import {ItemType, MenuItemType} from "antd/lib/menu/interface"; 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: 'Home', icon: , onClick: () => navigate('/home') }, { key: 'search', label: 'Search', icon: , children: [ { key: 'domain-finder', icon: , label: 'Domain', title: 'Domain Finder', disabled: !isAuthenticated, onClick: () => navigate('/search/domain') }, { key: 'entity-finder', icon: , label: 'Entity', title: 'Entity Finder', disabled: !isAuthenticated, onClick: () => navigate('/search/entity') }, { key: 'ns-finder', icon: , label: 'Nameserver', title: 'Nameserver Finder', disabled: !isAuthenticated, onClick: () => navigate('/search/nameserver') } ] }, { key: 'info', label: 'Information', icon: , children: [ { key: 'tld-list', icon: , label: 'TLD', title: 'TLD list', disabled: !isAuthenticated, onClick: () => navigate('/info/tld') }, { key: 'stats', icon: , label: 'Statistics', disabled: !isAuthenticated, onClick: () => navigate('/info/stats') } ] }, { key: 'tracking', label: 'Tracking', icon: , children: [ { key: 'watchlist', icon: , label: 'My Watchlists', disabled: !isAuthenticated, onClick: () => navigate('/tracking/watchlist') }, { key: 'connectors', icon: , label: 'My connectors', disabled: !isAuthenticated, onClick: () => navigate('/tracking/connectors') } ] }, { key: 'watchdog', label: 'My Watchdog', icon: , children: [ { key: 'account', icon: , label: 'My Account', disabled: !isAuthenticated, onClick: () => navigate('/user') }, { key: 'tos', icon: , label: 'TOS', onClick: () => navigate('/tos') }, { key: 'privacy', icon: , label: 'Privacy Policy', onClick: () => navigate('/privacy') } ] }, { key: '5', icon: , label: 'FAQ', onClick: () => navigate('/faq') }, ] return , label: 'Log out', danger: true, onClick: () => window.location.replace("/logout") } : { key: '8', icon: , label: 'Log in', onClick: () => navigate('/login') }]} />
}/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/>
Domain Watchdog ©{new Date().getFullYear()} Created by Maël Gangloff
}