From 3fc0faf7bf67d48b8a155b020043f1047bfe5661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gangloff?= Date: Wed, 1 Jan 2025 22:40:38 +0100 Subject: [PATCH] feat: add status column in tracking table --- .../tracking/watchlist/TrackedDomainTable.tsx | 63 ++++++++++++++++--- src/Entity/Domain.php | 5 +- translations/translations.pot | 59 +++++++++-------- 3 files changed, 90 insertions(+), 37 deletions(-) diff --git a/assets/components/tracking/watchlist/TrackedDomainTable.tsx b/assets/components/tracking/watchlist/TrackedDomainTable.tsx index 6ca39ca..e0ea5ad 100644 --- a/assets/components/tracking/watchlist/TrackedDomainTable.tsx +++ b/assets/components/tracking/watchlist/TrackedDomainTable.tsx @@ -10,7 +10,11 @@ import {eppStatusCodeToColor} from '../../../utils/functions/eppStatusCodeToColo import {Link} from 'react-router-dom' import { BankOutlined, + CheckOutlined, + DeleteOutlined, ExceptionOutlined, + ExclamationCircleOutlined, + FieldTimeOutlined, KeyOutlined, MonitorOutlined, SafetyCertificateOutlined @@ -40,6 +44,7 @@ export function TrackedDomainTable() { ldhName: ReactElement expirationDate: string status: ReactElement[] + state: ReactElement updatedAt: string rawDomain: Domain } @@ -57,6 +62,7 @@ export function TrackedDomainTable() { const notices: ReactElement[] = [] setDataTable(data['hydra:member'].map((d: Domain) => { const expirationDate = d.events.find(e => e.action === 'expiration' && !e.deleted)?.date + const expiresInDays = d.expiresInDays ? -d.expiresInDays : undefined if (d.status.includes('redemption period')) { if (!notices.includes(REDEMPTION_NOTICE)) notices.push(REDEMPTION_NOTICE) @@ -97,11 +103,45 @@ export function TrackedDomainTable() { icon={} /> + , + state: { - d.expiresInDays && + d.status.includes('auto renew period') ? + + } + /> + : + d.status.includes('redemption period') ? + + } + /> + : + !d.status.includes('redemption period') && d.status.includes('pending delete') ? + + } + /> + : + } + /> + + } + { + d.expiresInDays && - {t`J ${d.expiresInDays}`} + {t`J ${expiresInDays}`} } @@ -124,13 +164,20 @@ export function TrackedDomainTable() { { title: t`Domain`, dataIndex: 'ldhName', - width: '25%', + width: '20%', align: 'left' }, + { + title: t`Status`, + dataIndex: 'state', + width: '10%', + align: 'center' + }, { title: t`Options`, dataIndex: 'options', - width: '15%', + width: '10%', + align: 'center', }, { title: t`Expiration date`, @@ -142,7 +189,8 @@ export function TrackedDomainTable() { if (expirationDate1 === undefined || expirationDate2 === undefined) return 0 return new Date(expirationDate1).getTime() - new Date(expirationDate2).getTime() }, - width: '15%' + width: '15%', + align: 'center' }, { @@ -150,10 +198,11 @@ export function TrackedDomainTable() { dataIndex: 'updatedAt', responsive: ['md'], sorter: (a: RecordType, b: RecordType) => new Date(a.rawDomain.updatedAt).getTime() - new Date(b.rawDomain.updatedAt).getTime(), - width: '15%' + width: '15%', + align: 'center' }, { - title: t`Status`, + title: t`EPP Status Codes`, dataIndex: 'status', responsive: ['md'], showSorterTooltip: {target: 'full-header'}, diff --git a/src/Entity/Domain.php b/src/Entity/Domain.php index 599da9f..7234326 100644 --- a/src/Entity/Domain.php +++ b/src/Entity/Domain.php @@ -122,7 +122,7 @@ class Domain private ?bool $delegationSigned = null; #[Groups(['domain:item', 'domain:list'])] - private ?int $expiresInDays = null; + protected ?int $expiresInDays = null; private const IMPORTANT_EVENTS = [EventAction::Deletion->value, EventAction::Expiration->value]; private const IMPORTANT_STATUS = [ @@ -138,8 +138,6 @@ class Domain 'server hold', ]; - private const DAY = 24 * 60 * 60; - public function __construct() { $this->events = new ArrayCollection(); @@ -463,6 +461,7 @@ class Domain private static function daysBetween(\DateTimeImmutable $start, \DateTimeImmutable $end): int { $interval = $start->diff($end); + return $interval->invert ? -$interval->days : $interval->days; } diff --git a/translations/translations.pot b/translations/translations.pot index 8e95bfd..b1c0ea3 100644 --- a/translations/translations.pot +++ b/translations/translations.pot @@ -86,18 +86,22 @@ msgid "Registration" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:24 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:132 msgid "Active" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:29 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:110 msgid "Auto-Renew Grace Period" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:35 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:118 msgid "Redemption Grace Period" msgstr "" #: assets/components/search/DomainLifecycleSteps.tsx:40 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:126 msgid "Pending Delete" msgstr "" @@ -109,7 +113,7 @@ msgid "" msgstr "" #: assets/components/search/DomainResult.tsx:64 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:82 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:88 msgid "Registry Lock" msgstr "" @@ -120,7 +124,7 @@ msgid "" msgstr "" #: assets/components/search/DomainResult.tsx:75 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:88 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:94 msgid "Registrar Lock" msgstr "" @@ -131,11 +135,12 @@ msgid "" msgstr "" #: assets/components/search/DomainResult.tsx:84 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:94 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:100 msgid "DNSSEC" msgstr "" #: assets/components/search/DomainResult.tsx:90 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:205 msgid "EPP Status Codes" msgstr "" @@ -161,7 +166,7 @@ msgid "Search" msgstr "" #: assets/components/Sider.tsx:41 -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:125 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:165 msgid "Domain" msgstr "" @@ -413,58 +418,58 @@ msgstr "" msgid ".${ tld.tld } Registry" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:24 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:28 msgid "" "At least one domain name is in redemption period and will potentially be " "deleted soon" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:32 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:36 msgid "" "At least one domain name is pending deletion and will soon become available " "for registration again" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:101 -msgid "Estimated number of days until release" +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:141 +msgid "Estimated number of days until WHOIS removal" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:104 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:144 #, javascript-format -msgid "J ${ d.expiresInDays }" +msgid "J ${ expiresInDays }" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:131 -msgid "Options" -msgstr "" - -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:136 -msgid "Expiration date" -msgstr "" - -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:149 -msgid "Updated at" -msgstr "" - -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:156 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:171 msgid "Status" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:176 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:177 +msgid "Options" +msgstr "" + +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:183 +msgid "Expiration date" +msgstr "" + +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:197 +msgid "Updated at" +msgstr "" + +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:225 msgid "No tracked domain names were found, please create your first Watchlist" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:185 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:234 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:190 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:239 msgid "At least one domain name you are tracking requires special attention" msgstr "" -#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:196 +#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:245 msgid "The domain names below are subject to special monitoring" msgstr ""