feat(widgets): voeg relativeTime toe in lib/utils, expiringWarning-badge in CaddyWidget

- relativeTime(date: Date) helper toegevoegd aan lib/utils.ts
- AuditWidget gebruikt nu gedeelde relativeTime in plaats van inline functie
- CaddyWidget toont rode badge als soonest cert-expiry <30 dagen
- app/page.tsx berekent expiringWarning voor CaddyInitial

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scrum4Me Agent 2026-05-13 22:10:51 +02:00
parent faa1463cd7
commit 08d4b48190
4 changed files with 27 additions and 17 deletions

View file

@ -3,6 +3,7 @@
import { useCallback, useEffect, useState } from 'react'
import Link from 'next/link'
import { apiFetch } from '@/lib/csrf'
import { relativeTime } from '@/lib/utils'
type LatestRun = { id: string; flow_key: string; status: string; started_at: string }
export type AuditInitial =
@ -17,16 +18,6 @@ const STATUS_STYLES: Record<string, string> = {
cancelled: 'bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400',
}
function relativeTime(isoString: string): string {
const diff = Date.now() - new Date(isoString).getTime()
const minutes = Math.floor(diff / 60_000)
if (minutes < 1) return 'zojuist'
if (minutes < 60) return `${minutes}m geleden`
const hours = Math.floor(minutes / 60)
if (hours < 24) return `${hours}u geleden`
return `${Math.floor(hours / 24)}d geleden`
}
async function fetchLatestRun(): Promise<LatestRun | null> {
const res = await apiFetch('/api/audit/latest')
if (!res.ok) throw new Error(`${res.status}`)
@ -66,7 +57,7 @@ export default function AuditWidget({ initial }: { initial: AuditInitial }) {
>
{data.status}
</span>
<span className="text-xs text-muted-foreground">{relativeTime(data.started_at)}</span>
<span className="text-xs text-muted-foreground">{relativeTime(new Date(data.started_at))}</span>
</div>
<p className="font-mono text-xs text-muted-foreground truncate">{data.flow_key}</p>
</div>