import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import type { PromotionSubmission } from '../lib/api'; interface ResubmitDialogProps { readonly submission: PromotionSubmission; readonly onSubmit: (input: { privateLinkId: string; proposedAlias: string; note?: string }) => Promise; readonly onClose: () => void; } export default function ResubmitDialog({ submission, onSubmit, onClose }: ResubmitDialogProps) { const { t } = useTranslation(); const [proposedAlias, setProposedAlias] = useState(submission.proposedAlias); const [note, setNote] = useState(submission.note ?? ''); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); async function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (submitting) { return; } setError(null); setSubmitting(true); try { await onSubmit({ privateLinkId: submission.privateLinkId, proposedAlias: proposedAlias.trim(), note: note.trim() ? note.trim() : undefined, }); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to resubmit promotion'); } finally { setSubmitting(false); } } return (

{t('resubmitDialog.title')}

Resubmitting #{submission.privateLinkAlias ?? submission.privateLinkId} {submission.privateLinkTargetUrl ? <> → {submission.privateLinkTargetUrl} : null}

{submission.rejectionReason ? (
{t('resubmitDialog.requestedChanges')}

{submission.rejectionReason}

) : null}
setProposedAlias(e.target.value)} required maxLength={100} autoComplete="off" placeholder={t('resubmitDialog.aliasPlaceholder')} disabled={submitting} />
{t('resubmitDialog.aliasHint')} {proposedAlias.trim() ? #{proposedAlias.trim()} : null}