import React, { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog.tsx"; import { Button } from "@/components/ui/button.tsx"; import { Label } from "@/components/ui/label.tsx"; import { Input } from "@/components/ui/input.tsx"; import { PasswordInput } from "@/components/ui/password-input.tsx"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert.tsx"; import { useTranslation } from "react-i18next"; import { UserPlus, AlertCircle } from "lucide-react"; import { toast } from "sonner"; import { registerUser } from "@/ui/main-axios.ts"; interface CreateUserDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSuccess: () => void; } export function CreateUserDialog({ open, onOpenChange, onSuccess, }: CreateUserDialogProps) { const { t } = useTranslation(); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!open) { setUsername(""); setPassword(""); setError(null); } }, [open]); const handleCreateUser = async (e?: React.FormEvent) => { if (e) { e.preventDefault(); } if (!username.trim()) { setError(t("admin.enterUsername")); return; } if (!password.trim()) { setError(t("admin.enterPassword")); return; } if (password.length < 6) { setError("Password must be at least 6 characters"); return; } setLoading(true); setError(null); try { await registerUser(username.trim(), password); toast.success( t("admin.userCreatedSuccessfully", { username: username.trim() }), ); setUsername(""); setPassword(""); onSuccess(); onOpenChange(false); } catch (err: unknown) { const error = err as { response?: { data?: { error?: string } } }; const errorMessage = error?.response?.data?.error || t("admin.failedToCreateUser"); setError(errorMessage); toast.error(errorMessage); } finally { setLoading(false); } }; return ( { if (!loading) { onOpenChange(newOpen); } }} > {t("admin.createUser")} {t("admin.createUserDescription")}
{ setUsername(e.target.value); setError(null); }} placeholder={t("admin.enterUsername")} disabled={loading} autoFocus />
{ setPassword(e.target.value); setError(null); }} placeholder={t("admin.enterPassword")} disabled={loading} onKeyDown={(e) => { if (e.key === "Enter") { handleCreateUser(); } }} />

{t("admin.passwordMinLength")}

{error && ( {t("common.error")} {error} )}
); }