'use client'; import { useEffect } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; import { Loader2 } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; function buildCleanupSchema(t: (key: string) => string) { return z.object({ keepCount: z.number().int().min(3, t('keepMin')), }); } type CleanupFormValues = z.infer>; interface CleanupDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onConfirm: (keepCount: number) => void; loading: boolean; } export function CleanupDialog({ open, onOpenChange, onConfirm, loading, }: CleanupDialogProps) { const t = useTranslations('configVersions'); const tc = useTranslations('common'); const form = useForm({ resolver: zodResolver(buildCleanupSchema(t)), defaultValues: { keepCount: 10 }, }); useEffect(() => { if (open) { form.reset({ keepCount: 10 }); } }, [form, open]); const handleConfirm = form.handleSubmit((values) => { onConfirm(values.keepCount); }); return ( {t('cleanupTitle')} {t('cleanupDesc')}

{t('keepHint')}

{form.formState.errors.keepCount ? (

{form.formState.errors.keepCount.message}

) : null}
{tc('cancel')}
); }