'use client' import { useState, useActionState, useTransition } from 'react' import { useFormStatus } from 'react-dom' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { DemoTooltip } from '@/components/shared/demo-tooltip' import { createApiTokenAction, revokeApiTokenAction } from '@/actions/api-tokens' interface Token { id: string label: string | null created_at: string revoked_at: string | null } interface TokenManagerProps { tokens: Token[] isDemo: boolean } function CreateSubmitButton({ isDemo }: { isDemo: boolean }) { const { pending } = useFormStatus() return ( ) } export function TokenManager({ tokens, isDemo }: TokenManagerProps) { const [newToken, setNewToken] = useState(null) const [copied, setCopied] = useState(false) const [, startRevoke] = useTransition() const [state, formAction] = useActionState( async (_prev: unknown, fd: FormData) => { const result = await createApiTokenAction(_prev, fd) if (result.success && result.token) { setNewToken(result.token) } return result }, undefined ) function handleCopy() { if (!newToken) return navigator.clipboard.writeText(newToken) setCopied(true) setTimeout(() => setCopied(false), 2000) } function handleRevoke(id: string) { startRevoke(async () => { await revokeApiTokenAction(id) }) } const activeTokens = tokens.filter(t => !t.revoked_at) const revokedTokens = tokens.filter(t => t.revoked_at) return (
{/* New token revealed */} {newToken && (

Token aangemaakt — kopieer het nu. Je ziet het daarna niet meer.

{newToken}
)} {/* Create form */}

Nieuw token aanmaken

{typeof state?.error === 'string' && (

{state.error}

)}

Maximaal 10 actieve tokens. Je hebt er nu {activeTokens.length}.

{/* Active tokens */}

Actieve tokens ({activeTokens.length})

{activeTokens.length === 0 ? (

Geen actieve tokens.

) : (
{activeTokens.map(token => (

{token.label ?? Geen label}

Aangemaakt {new Date(token.created_at).toLocaleDateString('nl-NL')}

))}
)}
{/* Revoked tokens */} {revokedTokens.length > 0 && (

Ingetrokken tokens

{revokedTokens.map(token => (

{token.label ?? 'Geen label'}

Ingetrokken {new Date(token.revoked_at!).toLocaleDateString('nl-NL')}

))}
)}
) }