From c0b5c6766ebdb4b3b514fa34756031a67dedda35 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 31 Oct 2025 13:46:17 +0100 Subject: [PATCH 01/20] fix: responsive login page --- assets/components/LoginForm.tsx | 13 ++++------ assets/pages/LoginPage.tsx | 42 ++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/assets/components/LoginForm.tsx b/assets/components/LoginForm.tsx index c0e1b4f..70efb4b 100644 --- a/assets/components/LoginForm.tsx +++ b/assets/components/LoginForm.tsx @@ -1,4 +1,4 @@ -import {Button, Form, Input, message, Space} from 'antd' +import {Button, Flex, Form, Input, message} from 'antd' import {t} from 'ttag' import React, {useContext, useEffect} from 'react' import {getUser, login} from '../utils/api' @@ -60,18 +60,15 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { - - + - - {ssoLogin && + {ssoLogin && - } - + } + ) diff --git a/assets/pages/LoginPage.tsx b/assets/pages/LoginPage.tsx index df50dd1..32b10e2 100644 --- a/assets/pages/LoginPage.tsx +++ b/assets/pages/LoginPage.tsx @@ -6,6 +6,7 @@ import {LoginForm} from '../components/LoginForm' import type { InstanceConfig} from '../utils/api' import {getConfiguration} from '../utils/api' import {RegisterForm} from '../components/RegisterForm' +import useBreakpoint from "../hooks/useBreakpoint"; export const AuthenticatedContext = createContext< { @@ -22,6 +23,7 @@ export const AuthenticatedContext = createContext< export default function LoginPage() { const [wantRegister, setWantRegister] = useState(false) const [configuration, setConfiguration] = useState() + const md = useBreakpoint('md') const toggleWantRegister = () => { setWantRegister(!wantRegister) @@ -31,24 +33,32 @@ export default function LoginPage() { getConfiguration().then(setConfiguration) }, []) + const grid = [ + + {wantRegister ? : } + { + configuration?.registerEnabled && + + } + , + + + + ]; + + if (md) { + grid.reverse(); + } + return ( - - {wantRegister ? : } - { - configuration?.registerEnabled && - - } - - - - + {grid} ) } From a6eec5cfee51b5b84e0547f9cfffbfef6d6508fa Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 31 Oct 2025 13:49:48 +0100 Subject: [PATCH 02/20] fix: flex footer links --- assets/App.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/App.tsx b/assets/App.tsx index 3a5fa32..81ce3cb 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -1,4 +1,4 @@ -import {Button, ConfigProvider, FloatButton, Layout, Space, theme, Tooltip, Typography} from 'antd' +import {Button, ConfigProvider, Flex, FloatButton, Layout, theme, Tooltip, Typography} from 'antd' import {Link, Navigate, Route, Routes, useLocation, useNavigate} from 'react-router-dom' import TextPage from './pages/TextPage' import DomainSearchPage from './pages/search/DomainSearchPage' @@ -116,7 +116,7 @@ export default function App(): React.ReactElement { - + @@ -129,7 +129,7 @@ export default function App(): React.ReactElement { >{t`Documentation`} - + {jt`${ProjectLink} is an open source project distributed under the ${LicenseLink} license.`} From 467a3281d09daadf4cfe865f54d1a817c7ed4958 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 31 Oct 2025 13:56:11 +0100 Subject: [PATCH 03/20] fix: login form loading --- assets/components/LoginForm.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/assets/components/LoginForm.tsx b/assets/components/LoginForm.tsx index 70efb4b..686b3ae 100644 --- a/assets/components/LoginForm.tsx +++ b/assets/components/LoginForm.tsx @@ -1,6 +1,6 @@ import {Button, Flex, Form, Input, message} from 'antd' import {t} from 'ttag' -import React, {useContext, useEffect} from 'react' +import React, {useContext, useEffect, useState} from 'react' import {getUser, login} from '../utils/api' import {AuthenticatedContext} from '../pages/LoginPage' import {useNavigate} from 'react-router-dom' @@ -16,6 +16,7 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { const navigate = useNavigate() const [messageApi, contextHolder] = message.useMessage() const {setIsAuthenticated} = useContext(AuthenticatedContext) + const [loading, setLoading] = useState(false); useEffect(() => { getUser().then(() => { @@ -25,12 +26,15 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { }, []) const onFinish = (data: FieldType) => { + setLoading(true); + login(data.username, data.password).then(() => { setIsAuthenticated(true) navigate('/home') }).catch((e) => { setIsAuthenticated(false) showErrorAPI(e, messageApi) + setLoading(true); }) } return ( @@ -43,6 +47,7 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { style={{maxWidth: 600}} onFinish={onFinish} autoComplete='off' + disabled={loading} > Date: Fri, 31 Oct 2025 14:01:48 +0100 Subject: [PATCH 04/20] fix: responsive main padding --- assets/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/App.tsx b/assets/App.tsx index 81ce3cb..60f21b7 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -83,7 +83,7 @@ export default function App(): React.ReactElement {
From 6af52a70964d29635aef34d99796fdd926e34e8b Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 22:47:37 +0100 Subject: [PATCH 05/20] fix: loading state --- assets/components/LoginForm.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/components/LoginForm.tsx b/assets/components/LoginForm.tsx index 686b3ae..966353f 100644 --- a/assets/components/LoginForm.tsx +++ b/assets/components/LoginForm.tsx @@ -16,7 +16,7 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { const navigate = useNavigate() const [messageApi, contextHolder] = message.useMessage() const {setIsAuthenticated} = useContext(AuthenticatedContext) - const [loading, setLoading] = useState(false); + const [loading, setLoading] = useState(false) useEffect(() => { getUser().then(() => { @@ -26,7 +26,7 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { }, []) const onFinish = (data: FieldType) => { - setLoading(true); + setLoading(true) login(data.username, data.password).then(() => { setIsAuthenticated(true) @@ -34,7 +34,7 @@ export function LoginForm({ssoLogin}: { ssoLogin?: boolean }) { }).catch((e) => { setIsAuthenticated(false) showErrorAPI(e, messageApi) - setLoading(true); + setLoading(false) }) } return ( From f38b84dc2915e1db531f17becadc3880ae29e95b Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 22:52:28 +0100 Subject: [PATCH 06/20] fix: interpolated elements missing keys --- assets/App.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/App.tsx b/assets/App.tsx index 60f21b7..8a40b58 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -22,8 +22,8 @@ import IcannRegistrarPage from "./pages/infrastructure/IcannRegistrarPage" const PROJECT_LINK = 'https://github.com/maelgangloff/domain-watchdog' const LICENSE_LINK = 'https://www.gnu.org/licenses/agpl-3.0.txt' -const ProjectLink = Domain Watchdog -const LicenseLink = AGPL-3.0-or-later +const ProjectLink = Domain Watchdog +const LicenseLink = AGPL-3.0-or-later export default function App(): React.ReactElement { const navigate = useNavigate() From 01e3a221899a9fd58fe19912adceb298ada30a0b Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 22:52:45 +0100 Subject: [PATCH 07/20] fix: login grid missing keys --- assets/pages/LoginPage.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/pages/LoginPage.tsx b/assets/pages/LoginPage.tsx index 32b10e2..41d223b 100644 --- a/assets/pages/LoginPage.tsx +++ b/assets/pages/LoginPage.tsx @@ -34,7 +34,7 @@ export default function LoginPage() { }, []) const grid = [ - + {wantRegister ? : } { configuration?.registerEnabled && @@ -47,13 +47,13 @@ export default function LoginPage() { } , - + - ]; + ] if (md) { - grid.reverse(); + grid.reverse() } return ( From ba53773f4316416aeefda0883b986bad9f019983 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 23:02:38 +0100 Subject: [PATCH 08/20] fix: TLD table sizes --- assets/pages/infrastructure/TldPage.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/pages/infrastructure/TldPage.tsx b/assets/pages/infrastructure/TldPage.tsx index 68e9f0c..bcf004a 100644 --- a/assets/pages/infrastructure/TldPage.tsx +++ b/assets/pages/infrastructure/TldPage.tsx @@ -11,6 +11,7 @@ import {getCountryCode} from '../../utils/functions/getCountryCode' import {tldToEmoji} from '../../utils/functions/tldToEmoji' import {BankOutlined, FlagOutlined, GlobalOutlined, TrademarkOutlined} from "@ant-design/icons" import {Link} from "react-router-dom" +import useBreakpoint from "../../hooks/useBreakpoint"; const {Text, Paragraph} = Typography @@ -30,6 +31,7 @@ function TldTable(filters: FiltersType) { Country?: string } + const sm = useBreakpoint('sm') const [dataTable, setDataTable] = useState([]) const [total, setTotal] = useState(0) @@ -110,14 +112,15 @@ function TldTable(filters: FiltersType) { fetchData({...filters, page, itemsPerPage}) } }} - - scroll={{y: '50vh'}} + scroll={sm ? {} : {y: '50vh'}} + size={sm ? 'small' : 'large'} /> ) } export default function TldPage() { const [activeTabKey, setActiveTabKey] = useState('gTLD') + const sm = useBreakpoint("sm") const contentList: Record = { sTLD: <> @@ -185,6 +188,7 @@ export default function TldPage() { activeTabKey={activeTabKey} key={activeTabKey} onTabChange={(k: string) => setActiveTabKey(k)} + size={sm ? 'small' : 'default'} > {contentList[activeTabKey]} From bcef7ef29d0ae5c6eec103f634ec515634eb7db7 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 23:11:20 +0100 Subject: [PATCH 09/20] fix: ICANN registrar table size --- assets/pages/infrastructure/IcannRegistrarPage.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assets/pages/infrastructure/IcannRegistrarPage.tsx b/assets/pages/infrastructure/IcannRegistrarPage.tsx index 3164be6..9b538c8 100644 --- a/assets/pages/infrastructure/IcannRegistrarPage.tsx +++ b/assets/pages/infrastructure/IcannRegistrarPage.tsx @@ -5,6 +5,7 @@ import {t} from 'ttag' import type {ColumnType} from 'antd/es/table' import {CheckCircleOutlined, SettingOutlined, CloseCircleOutlined} from "@ant-design/icons" import {getIcannAccreditations} from "../../utils/api/icann-accreditations" +import useBreakpoint from "../../hooks/useBreakpoint" const {Text, Paragraph} = Typography @@ -19,6 +20,7 @@ function RegistrarListTable(filters: FiltersType) { name: string } + const sm = useBreakpoint('sm') const [dataTable, setDataTable] = useState([]) const [total, setTotal] = useState(0) @@ -63,14 +65,15 @@ function RegistrarListTable(filters: FiltersType) { fetchData({...filters, page, itemsPerPage}) } }} - - scroll={{y: '50vh'}} + scroll={sm ? {} : {y: '50vh'}} + size={sm ? 'small' : 'large'} /> ) } export default function IcannRegistrarPage() { const [activeTabKey, setActiveTabKey] = useState('Accredited') + const sm = useBreakpoint('sm') const contentList: Record = { Accredited: <> @@ -125,6 +128,7 @@ export default function IcannRegistrarPage() { activeTabKey={activeTabKey} key={activeTabKey} onTabChange={(k: string) => setActiveTabKey(k)} + size={sm ? 'small' : 'default'} > {contentList[activeTabKey]} From 0e5c675f2cafe5dbb3e4551eb3588ba734242de1 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 23:13:45 +0100 Subject: [PATCH 10/20] style: lint --- assets/pages/LoginPage.tsx | 2 +- assets/pages/infrastructure/TldPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/pages/LoginPage.tsx b/assets/pages/LoginPage.tsx index 41d223b..8e709ca 100644 --- a/assets/pages/LoginPage.tsx +++ b/assets/pages/LoginPage.tsx @@ -6,7 +6,7 @@ import {LoginForm} from '../components/LoginForm' import type { InstanceConfig} from '../utils/api' import {getConfiguration} from '../utils/api' import {RegisterForm} from '../components/RegisterForm' -import useBreakpoint from "../hooks/useBreakpoint"; +import useBreakpoint from "../hooks/useBreakpoint" export const AuthenticatedContext = createContext< { diff --git a/assets/pages/infrastructure/TldPage.tsx b/assets/pages/infrastructure/TldPage.tsx index bcf004a..74ccf77 100644 --- a/assets/pages/infrastructure/TldPage.tsx +++ b/assets/pages/infrastructure/TldPage.tsx @@ -11,7 +11,7 @@ import {getCountryCode} from '../../utils/functions/getCountryCode' import {tldToEmoji} from '../../utils/functions/tldToEmoji' import {BankOutlined, FlagOutlined, GlobalOutlined, TrademarkOutlined} from "@ant-design/icons" import {Link} from "react-router-dom" -import useBreakpoint from "../../hooks/useBreakpoint"; +import useBreakpoint from "../../hooks/useBreakpoint" const {Text, Paragraph} = Typography From ec47a7a30f8901ed6fd84af4a84721fe70bab948 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 23:35:10 +0100 Subject: [PATCH 11/20] fix: tracked domain table size --- assets/components/tracking/watchlist/TrackedDomainTable.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/assets/components/tracking/watchlist/TrackedDomainTable.tsx b/assets/components/tracking/watchlist/TrackedDomainTable.tsx index 89c1adb..cecceac 100644 --- a/assets/components/tracking/watchlist/TrackedDomainTable.tsx +++ b/assets/components/tracking/watchlist/TrackedDomainTable.tsx @@ -22,6 +22,7 @@ import { } from '@ant-design/icons' import {DomainToTag} from '../../../utils/functions/DomainToTag' import {isDomainLocked} from "../../../utils/functions/isDomainLocked" +import useBreakpoint from "../../../hooks/useBreakpoint" export function TrackedDomainTable() { const REDEMPTION_NOTICE = ( @@ -53,6 +54,7 @@ export function TrackedDomainTable() { const [dataTable, setDataTable] = useState([]) const [total, setTotal] = useState() const [specialNotice, setSpecialNotice] = useState([]) + const sm = useBreakpoint('sm') const rdapStatusCodeDetailTranslated = rdapStatusCodeDetailTranslation() @@ -268,7 +270,8 @@ export function TrackedDomainTable() { fetchData({page, itemsPerPage}) } }} - scroll={{y: '50vh'}} + scroll={sm ? {} : {y: '50vh'}} + size={sm ? 'small' : 'large'} /> } From 44277931a87915bd918330f52cd87f25c9d254f9 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 23:39:08 +0100 Subject: [PATCH 12/20] fix: TLD statistics wrapping --- assets/pages/StatisticsPage.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/assets/pages/StatisticsPage.tsx b/assets/pages/StatisticsPage.tsx index 0cf1881..b9bfd92 100644 --- a/assets/pages/StatisticsPage.tsx +++ b/assets/pages/StatisticsPage.tsx @@ -1,7 +1,7 @@ import React, {useEffect, useState} from 'react' import type { Statistics} from '../utils/api' import {getStatistics} from '../utils/api' -import {Card, Col, Divider, Row, Statistic, Tooltip} from 'antd' +import {Card, Col, Divider, Flex, Row, Statistic, Tooltip} from 'antd' import {t} from 'ttag' import { AimOutlined, @@ -104,20 +104,19 @@ export default function StatisticsPage() { - + {stats?.domainCount .sort((a, b) => b.domain - a.domain) - .map(({domain, tld}) => - + .map(({domain, tld}) => + - - )} - + )} + ) } From b3121a3914a7afb718f7e14b423ba8b6513ce0f1 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Fri, 31 Oct 2025 23:57:12 +0100 Subject: [PATCH 13/20] fix: sider button in header --- assets/App.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/assets/App.tsx b/assets/App.tsx index 8a40b58..0e181a4 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -15,7 +15,7 @@ import NotFoundPage from './pages/NotFoundPage' import useBreakpoint from './hooks/useBreakpoint' import {Sider} from './components/Sider' import {jt, t} from 'ttag' -import {BugOutlined, InfoCircleOutlined, MergeOutlined} from '@ant-design/icons' +import {BugOutlined, InfoCircleOutlined, MergeOutlined, MenuOutlined} from '@ant-design/icons' import TrackedDomainPage from './pages/tracking/TrackedDomainPage' import IcannRegistrarPage from "./pages/infrastructure/IcannRegistrarPage" @@ -30,6 +30,7 @@ export default function App(): React.ReactElement { const location = useLocation() const sm = useBreakpoint('sm') + const [sidebarCollapsed, setSidebarCollapsed] = useState(false) const [isAuthenticated, setIsAuthenticated] = useState(false) const authenticated = useCallback((authenticated: boolean) => { @@ -75,12 +76,17 @@ export default function App(): React.ReactElement { > - {/* Ant will use a break-off tab to toggle the collapse of the sider when collapseWidth = 0 */} - + - + + {sm && + + } +
Date: Fri, 31 Oct 2025 23:58:36 +0100 Subject: [PATCH 14/20] fix: avoid impossible state on width changes --- assets/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/App.tsx b/assets/App.tsx index 0e181a4..5c682ca 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -76,7 +76,7 @@ export default function App(): React.ReactElement { > - + From 6267461ed9dec55410c1205197cca0821fbf3b5d Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sat, 1 Nov 2025 00:39:10 +0100 Subject: [PATCH 15/20] feat: menu in drawer on sm --- assets/App.tsx | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/assets/App.tsx b/assets/App.tsx index 5c682ca..f2f7239 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -1,4 +1,4 @@ -import {Button, ConfigProvider, Flex, FloatButton, Layout, theme, Tooltip, Typography} from 'antd' +import {Button, ConfigProvider, Drawer, Flex, FloatButton, Layout, theme, Tooltip, Typography} from 'antd' import {Link, Navigate, Route, Routes, useLocation, useNavigate} from 'react-router-dom' import TextPage from './pages/TextPage' import DomainSearchPage from './pages/search/DomainSearchPage' @@ -7,7 +7,7 @@ import TldPage from './pages/infrastructure/TldPage' import StatisticsPage from './pages/StatisticsPage' import WatchlistPage from './pages/tracking/WatchlistPage' import UserPage from './pages/UserPage' -import React, {useCallback, useEffect, useMemo, useState} from 'react' +import React, {PropsWithChildren, useCallback, useEffect, useMemo, useState} from 'react' import {getUser} from './utils/api' import LoginPage, {AuthenticatedContext} from './pages/LoginPage' import ConnectorPage from './pages/tracking/ConnectorPage' @@ -25,6 +25,40 @@ const LICENSE_LINK = 'https://www.gnu.org/licenses/agpl-3.0.txt' const ProjectLink = Domain Watchdog const LicenseLink = AGPL-3.0-or-later +function SiderWrapper(props: PropsWithChildren<{sidebarCollapsed: boolean, setSidebarCollapsed: (collapsed: boolean) => void}>): React.ReactElement { + const {sidebarCollapsed, setSidebarCollapsed, children} = props + const sm = useBreakpoint('sm') + const location = useLocation() + + useEffect(() => { + if (sm) { + setSidebarCollapsed(false) + } + }, [location]) + + if (sm) { + return setSidebarCollapsed(false)} + closeIcon={null} + styles={{body: {padding: 0, height: '100%', background: '#001529'}}} + width='200px'> + {children} + + } else { + return + {children} + + } +} + export default function App(): React.ReactElement { const navigate = useNavigate() const location = useLocation() @@ -76,9 +110,9 @@ export default function App(): React.ReactElement { > - + - + {sm && From f2a6f9108c184342fa61f25070adb5f13baf654f Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sat, 1 Nov 2025 00:43:43 +0100 Subject: [PATCH 16/20] fix: black body on dark theme --- assets/index.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/index.css b/assets/index.css index cf93289..d6983d7 100644 --- a/assets/index.css +++ b/assets/index.css @@ -10,4 +10,8 @@ body { margin: 0; font-family: "Noto Color Emoji", sans-serif; + + @media (prefers-color-scheme: dark) { + background: #000000; + } } From e96358b9caaef816a92c7c108bc440378c1da95e Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sat, 1 Nov 2025 01:00:04 +0100 Subject: [PATCH 17/20] fix: various missing component array keys --- .../components/tracking/connector/ConnectorsList.tsx | 12 ++++++------ .../tracking/watchlist/TrackedDomainTable.tsx | 3 +++ assets/utils/functions/StatusToTag.tsx | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/assets/components/tracking/connector/ConnectorsList.tsx b/assets/components/tracking/connector/ConnectorsList.tsx index 0df8af5..a874d4c 100644 --- a/assets/components/tracking/connector/ConnectorsList.tsx +++ b/assets/components/tracking/connector/ConnectorsList.tsx @@ -22,16 +22,16 @@ export function ConnectorsList({connectors, onDelete}: { connectors: ConnectorEl <> {connectors.map(connector => { - const createdAt = + const createdAt = {new Date(connector.createdAt).toLocaleString()} const {watchlistCount} = connector const connectorName = Object.keys(ConnectorProvider).find(p => ConnectorProvider[p as keyof typeof ConnectorProvider] === connector.provider) - return <> - {contextHolder} - + return {t`Connector ${connectorName}`}{connector.id} } size='small' @@ -45,6 +45,7 @@ export function ConnectorsList({connectors, onDelete}: { connectors: ConnectorEl > } > + {contextHolder} {jt`Creation date: ${createdAt}`} {t`Used in: ${watchlistCount} Watchlist`} }/> - } )} diff --git a/assets/components/tracking/watchlist/TrackedDomainTable.tsx b/assets/components/tracking/watchlist/TrackedDomainTable.tsx index cecceac..ef14923 100644 --- a/assets/components/tracking/watchlist/TrackedDomainTable.tsx +++ b/assets/components/tracking/watchlist/TrackedDomainTable.tsx @@ -28,6 +28,7 @@ export function TrackedDomainTable() { const REDEMPTION_NOTICE = ( redemption period @@ -36,6 +37,7 @@ export function TrackedDomainTable() { const PENDING_DELETE_NOTICE = ( pending delete @@ -222,6 +224,7 @@ export function TrackedDomainTable() { text: {s} , diff --git a/assets/utils/functions/StatusToTag.tsx b/assets/utils/functions/StatusToTag.tsx index bf46bb2..7ae1164 100644 --- a/assets/utils/functions/StatusToTag.tsx +++ b/assets/utils/functions/StatusToTag.tsx @@ -10,6 +10,7 @@ export function statusToTag(s: string) { {s} From 9ae7ab7f7a08368768ceda16207f22b034682032 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sat, 1 Nov 2025 01:00:31 +0100 Subject: [PATCH 18/20] chore: type import --- assets/App.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/App.tsx b/assets/App.tsx index f2f7239..529d87f 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -7,7 +7,8 @@ import TldPage from './pages/infrastructure/TldPage' import StatisticsPage from './pages/StatisticsPage' import WatchlistPage from './pages/tracking/WatchlistPage' import UserPage from './pages/UserPage' -import React, {PropsWithChildren, useCallback, useEffect, useMemo, useState} from 'react' +import type {PropsWithChildren} from 'react' +import React, { useCallback, useEffect, useMemo, useState} from 'react' import {getUser} from './utils/api' import LoginPage, {AuthenticatedContext} from './pages/LoginPage' import ConnectorPage from './pages/tracking/ConnectorPage' From 43901616fdab1e5007d670c4e5554c1036a39dc5 Mon Sep 17 00:00:00 2001 From: vinceh121 Date: Sat, 1 Nov 2025 17:47:41 +0100 Subject: [PATCH 19/20] fix: center footer links --- assets/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/App.tsx b/assets/App.tsx index 529d87f..75559a9 100644 --- a/assets/App.tsx +++ b/assets/App.tsx @@ -157,7 +157,7 @@ export default function App(): React.ReactElement {
- + From e7240ed491396c2c72eb4925d46489984bafff12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gangloff?= Date: Sat, 1 Nov 2025 17:54:43 +0100 Subject: [PATCH 20/20] chore: ttag extract --- translations/translations.pot | 140 +++++++++++++++++----------------- 1 file changed, 68 insertions(+), 72 deletions(-) diff --git a/translations/translations.pot b/translations/translations.pot index 12af7de..fba7bae 100644 --- a/translations/translations.pot +++ b/translations/translations.pot @@ -3,44 +3,44 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: assets/App.tsx:120 +#: assets/App.tsx:161 msgid "TOS" msgstr "" -#: assets/App.tsx:121 +#: assets/App.tsx:162 msgid "Privacy Policy" msgstr "" -#: assets/App.tsx:122 +#: assets/App.tsx:163 msgid "FAQ" msgstr "" -#: assets/App.tsx:129 +#: assets/App.tsx:170 msgid "Documentation" msgstr "" -#: assets/App.tsx:134 +#: assets/App.tsx:175 #, javascript-format msgid "" "${ ProjectLink } is an open source project distributed under the ${ " "LicenseLink } license." msgstr "" -#: assets/App.tsx:147 +#: assets/App.tsx:188 msgid "Official git repository" msgstr "" -#: assets/App.tsx:150 +#: assets/App.tsx:191 msgid "Submit an issue" msgstr "" -#: assets/components/LoginForm.tsx:48 +#: assets/components/LoginForm.tsx:53 #: assets/components/RegisterForm.tsx:37 msgid "Email address" msgstr "" -#: assets/components/LoginForm.tsx:50 -#: assets/components/LoginForm.tsx:58 +#: assets/components/LoginForm.tsx:55 +#: assets/components/LoginForm.tsx:63 #: assets/components/RegisterForm.tsx:39 #: assets/components/RegisterForm.tsx:47 #: assets/components/search/DomainSearchBar.tsx:28 @@ -72,22 +72,22 @@ msgstr "" msgid "Required" msgstr "" -#: assets/components/LoginForm.tsx:56 +#: assets/components/LoginForm.tsx:61 #: assets/components/RegisterForm.tsx:45 #: assets/utils/providers/forms/EppConnectorForm.tsx:138 msgid "Password" msgstr "" -#: assets/components/LoginForm.tsx:66 +#: assets/components/LoginForm.tsx:70 msgid "Submit" msgstr "" -#: assets/components/LoginForm.tsx:71 +#: assets/components/LoginForm.tsx:74 msgid "Log in with SSO" msgstr "" #: assets/components/RegisterForm.tsx:54 -#: assets/pages/LoginPage.tsx:35 +#: assets/pages/LoginPage.tsx:60 msgid "Register" msgstr "" @@ -97,22 +97,22 @@ msgid "Registration" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:24 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:133 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:137 msgid "Active" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:29 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:111 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:115 msgid "Auto-Renew Grace Period" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:35 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:119 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:123 msgid "Redemption Grace Period" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:40 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:127 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:131 msgid "Pending Delete" msgstr "" @@ -124,7 +124,7 @@ msgid "" msgstr "" #: assets/components/search/DomainResult.tsx:64 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:89 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:93 msgid "Registry Lock" msgstr "" @@ -135,7 +135,7 @@ msgid "" msgstr "" #: assets/components/search/DomainResult.tsx:75 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:95 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:99 msgid "Registrar Lock" msgstr "" @@ -146,12 +146,12 @@ msgid "" msgstr "" #: assets/components/search/DomainResult.tsx:84 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:101 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:105 msgid "DNSSEC" msgstr "" #: assets/components/search/DomainResult.tsx:90 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:215 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:219 msgid "EPP Status Codes" msgstr "" @@ -177,7 +177,7 @@ msgid "Search" msgstr "" #: assets/components/Sider.tsx:43 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:175 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:179 msgid "Domain" msgstr "" @@ -192,7 +192,7 @@ msgstr "" #: assets/components/Sider.tsx:70 #: assets/pages/StatisticsPage.tsx:114 -#: assets/pages/infrastructure/TldPage.tsx:79 +#: assets/pages/infrastructure/TldPage.tsx:81 msgid "TLD" msgstr "" @@ -250,13 +250,13 @@ msgid "Log out" msgstr "" #: assets/components/Sider.tsx:154 -#: assets/pages/LoginPage.tsx:35 -#: assets/pages/LoginPage.tsx:45 +#: assets/pages/LoginPage.tsx:46 +#: assets/pages/LoginPage.tsx:60 msgid "Log in" msgstr "" #: assets/components/tracking/connector/ConnectorForm.tsx:36 -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:49 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:51 #: assets/utils/functions/rdapTranslation.ts:12 msgid "Registrar" msgstr "" @@ -328,17 +328,17 @@ msgstr "" msgid "No" msgstr "" -#: assets/components/tracking/connector/ConnectorsList.tsx:48 +#: assets/components/tracking/connector/ConnectorsList.tsx:49 #, javascript-format msgid "Creation date: ${ createdAt }" msgstr "" -#: assets/components/tracking/connector/ConnectorsList.tsx:49 +#: assets/components/tracking/connector/ConnectorsList.tsx:50 #, javascript-format msgid "Used in: ${ watchlistCount } Watchlist" msgstr "" -#: assets/components/tracking/connector/ConnectorsList.tsx:52 +#: assets/components/tracking/connector/ConnectorsList.tsx:53 msgid "" "You can stop using a connector at any time. To delete a connector, you must " "remove it from each linked Watchlist.\n" @@ -348,7 +348,7 @@ msgid "" "withdrawal and were of the minimum age to consent to these conditions." msgstr "" -#: assets/components/tracking/connector/ConnectorsList.tsx:56 +#: assets/components/tracking/connector/ConnectorsList.tsx:57 msgid "The Provider’s conditions are accessible by following this hyperlink." msgstr "" @@ -404,66 +404,66 @@ msgstr "" msgid "Enable the Watchlist" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:29 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:30 msgid "" "At least one domain name is in redemption period and will potentially be " "deleted soon" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:37 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:39 msgid "" "At least one domain name is pending deletion and will soon become available " "for registration again" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:143 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:147 msgid "Estimated number of days until WHOIS removal" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:146 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:150 #, javascript-format msgid "J ${ expiresInDays }" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:152 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:156 msgid "Deletion is imminent" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:181 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:185 msgid "Status" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:187 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:191 msgid "Options" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:193 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:197 msgid "Expiration date" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:207 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:211 msgid "Updated at" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:235 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:240 msgid "No tracked domain names were found, please create your first Watchlist" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:238 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:243 msgid "Create now" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:244 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:249 msgid "" "Please note that this table does not include domain names marked as expired " "or those with an unknown expiration date" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:249 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:254 msgid "At least one domain name you are tracking requires special attention" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:255 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:260 msgid "The domain names below are subject to special monitoring" msgstr "" @@ -475,10 +475,6 @@ msgstr "" msgid "Update a Watchlist" msgstr "" -#: assets/components/tracking/watchlist/UpdateWatchlistButton.tsx:56 -msgid "Cancel" -msgstr "" - #: assets/components/tracking/watchlist/WatchlistCard.tsx:54 msgid "This Watchlist is not linked to a Connector." msgstr "" @@ -568,31 +564,31 @@ msgstr "" msgid "Reset" msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:43 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:45 msgid "ID" msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:77 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:80 msgid "" "An accredited number means that ICANN's contract with the registrar is " "ongoing." msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:82 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:85 msgid "A reserved number can be used by TLD registries for specific operations." msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:87 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:90 msgid "" "A terminated number means that ICANN's contract with the registrar has been " "terminated." msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:96 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:99 msgid "This page lists ICANN-accredited registrars." msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:99 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:102 msgid "" "The list is officially published and maintained by the Internet Assigned " "Numbers Authority (IANA), the organization responsible for managing the " @@ -600,63 +596,63 @@ msgid "" "name extensions)." msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:111 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:114 #: assets/utils/functions/rdapTranslation.ts:125 msgid "Accredited" msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:116 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:119 #: assets/utils/functions/rdapTranslation.ts:126 msgid "Reserved" msgstr "" -#: assets/pages/infrastructure/IcannRegistrarPage.tsx:121 +#: assets/pages/infrastructure/IcannRegistrarPage.tsx:124 #: assets/utils/functions/rdapTranslation.ts:124 msgid "Terminated" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:86 +#: assets/pages/infrastructure/TldPage.tsx:88 msgid "Flag" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:89 +#: assets/pages/infrastructure/TldPage.tsx:91 msgid "Country" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:96 +#: assets/pages/infrastructure/TldPage.tsx:98 msgid "Registry Operator" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:124 +#: assets/pages/infrastructure/TldPage.tsx:127 msgid "" "Top-level domains sponsored by specific organizations that set rules for " "registration and use, often related to particular interest groups or " "industries." msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:129 +#: assets/pages/infrastructure/TldPage.tsx:132 msgid "" "Generic top-level domains open to everyone, not restricted by specific " "criteria, representing various themes or industries." msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:134 +#: assets/pages/infrastructure/TldPage.tsx:137 msgid "" "Generic top-level domains associated with specific brands, allowing " "companies to use their own brand names as domains." msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:139 +#: assets/pages/infrastructure/TldPage.tsx:142 msgid "" "Top-level domains based on country codes, identifying websites according to " "their country of origin." msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:148 +#: assets/pages/infrastructure/TldPage.tsx:151 msgid "This page presents all active TLDs in the root zone database." msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:151 +#: assets/pages/infrastructure/TldPage.tsx:154 msgid "" "IANA provides the list of currently active TLDs, regardless of their type, " "and ICANN provides the list of gTLDs.\n" @@ -668,23 +664,23 @@ msgid "" "At the same time, the list of root RDAP servers is updated." msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:166 +#: assets/pages/infrastructure/TldPage.tsx:169 msgid "Generic Top-Level-Domains" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:171 +#: assets/pages/infrastructure/TldPage.tsx:174 msgid "Country-Code Top-Level-Domains" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:176 +#: assets/pages/infrastructure/TldPage.tsx:179 msgid "Brand Generic Top-Level-Domains" msgstr "" -#: assets/pages/infrastructure/TldPage.tsx:181 +#: assets/pages/infrastructure/TldPage.tsx:184 msgid "Sponsored Top-Level-Domains" msgstr "" -#: assets/pages/LoginPage.tsx:45 +#: assets/pages/LoginPage.tsx:46 msgid "Create an account" msgstr ""