Show suspended since and new emails for suspend continue approve and rejection
All checks were successful
Build and Push / build (push) Successful in 1m26s
All checks were successful
Build and Push / build (push) Successful in 1m26s
This commit is contained in:
@@ -142,6 +142,53 @@ export default async function TenantDetailPage({
|
||||
<div className="text-xs text-text-secondary mt-1">
|
||||
{t("suspendedDescription")}
|
||||
</div>
|
||||
{/* Retention countdown. suspendedAt is stamped by the
|
||||
operator on first transition to suspended; missing
|
||||
values fall through silently rather than rendering
|
||||
garbage (operator hasn't reconciled yet, edge case).
|
||||
The 60-day window is the operator's
|
||||
retentionAfterSuspend constant; if you change one,
|
||||
change both. We don't expose the constant via API —
|
||||
the value rarely changes and duplicating it here
|
||||
beats fetching a single int over the network. */}
|
||||
{tenant.status?.suspendedAt && (() => {
|
||||
const suspendedAt = new Date(tenant.status.suspendedAt);
|
||||
const deletionAt = new Date(suspendedAt);
|
||||
deletionAt.setDate(deletionAt.getDate() + 60);
|
||||
const now = new Date();
|
||||
const msRemaining = deletionAt.getTime() - now.getTime();
|
||||
const daysRemaining = Math.max(
|
||||
0,
|
||||
Math.ceil(msRemaining / (1000 * 60 * 60 * 24))
|
||||
);
|
||||
// < 7 days: red/critical to draw attention. Otherwise
|
||||
// amber, matching the banner.
|
||||
const urgent = daysRemaining < 7;
|
||||
return (
|
||||
<div
|
||||
className={`text-xs mt-2 ${
|
||||
urgent ? "text-red-400" : "text-text-muted"
|
||||
}`}
|
||||
>
|
||||
{t("suspendedSince", {
|
||||
date: formatDateTime(
|
||||
tenant.status.suspendedAt,
|
||||
f
|
||||
),
|
||||
})}
|
||||
{" · "}
|
||||
{daysRemaining > 0
|
||||
? t("suspendedDeletionIn", {
|
||||
days: daysRemaining,
|
||||
date: formatDateTime(
|
||||
deletionAt.toISOString(),
|
||||
f
|
||||
),
|
||||
})
|
||||
: t("suspendedDeletionImminent")}
|
||||
</div>
|
||||
);
|
||||
})()}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user