"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Loader2 } from "lucide-react"; import { useEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { PasswordInput } from "@/components/password-input"; import { ResponsiveDialog } from "@/components/responsive-dialog"; import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { Button } from "@/components/ui/button"; import { Field, FieldDescription, FieldError, FieldGroup, FieldLabel } from "@/components/ui/field"; import { Textarea } from "@/components/ui/textarea"; import { tr } from "@/i18n/tr"; import type { ActionResult } from "@/lib/action-result"; import { banUserSchema, setPasswordSchema, type BanUserInput, type SetPasswordInput, } from "@/shared/schemas/user"; import type { AdminUser } from "../types"; const t = tr.adminUsers; type DialogProps = { user: AdminUser | undefined; open: boolean; onOpenChange: (open: boolean) => void; onConfirm: (user: AdminUser, values: T) => Promise; }; export function SetPasswordDialog({ user, open, onOpenChange, onConfirm, }: DialogProps<{ password: string }>) { const form = useForm({ resolver: zodResolver(setPasswordSchema), defaultValues: { password: "" }, }); useEffect(() => { if (open) form.reset({ password: "" }); }, [open, form]); async function onSubmit(values: SetPasswordInput) { if (!user) return; const result = await onConfirm(user, values); if (result.ok) onOpenChange(false); else form.setError("root", { message: result.error }); } return ( } >
( {t.password.newPassword} {t.form.passwordHint} {fieldState.invalid ? : null} )} /> {form.formState.errors.root ? ( {form.formState.errors.root.message} ) : null}
); } export function BanUserDialog({ user, open, onOpenChange, onConfirm, }: DialogProps<{ reason?: string }>) { const form = useForm({ resolver: zodResolver(banUserSchema), defaultValues: { reason: "" }, }); useEffect(() => { if (open) form.reset({ reason: "" }); }, [open, form]); async function onSubmit(values: { reason?: string }) { if (!user) return; const result = await onConfirm(user, values); if (result.ok) onOpenChange(false); else form.setError("root", { message: result.error }); } return ( } >
( {t.ban.reason}