import { useState, type FormEvent } from "react"; import { KeyRound, ShieldCheck } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { login, setPermanentPassword, type StoredUser } from "@/lib/auth-service"; export default function LoginDialog({ onSignedIn }: { onSignedIn: (user: StoredUser) => void }) { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [remember, setRemember] = useState(true); const [error, setError] = useState(null); /** Пользователь вошёл по временному паролю — требуется постоянный. */ const [pending, setPending] = useState(null); const [next, setNext] = useState(""); const [confirm, setConfirm] = useState(""); const submitLogin = (e: FormEvent) => { e.preventDefault(); const result = login(username, password, remember); if (!result.ok) { setError(result.error); return; } setError(null); if (result.mustChangePassword) { setPending(result.user); return; } onSignedIn(result.user); }; const submitNewPassword = (e: FormEvent) => { e.preventDefault(); if (!pending) return; if (next !== confirm) { setError("Пароли не совпадают."); return; } const result = setPermanentPassword(pending.id, next); if (!result.ok) { setError(result.error ?? "Не удалось сохранить пароль."); return; } onSignedIn({ ...pending, temporary: false, status: "active" }); }; if (pending) { return ( Новый пароль Вы вошли по временному паролю. Задайте постоянный пароль, чтобы продолжить работу.
{ setNext(e.target.value); setError(null); }} className="h-12" />
{ setConfirm(e.target.value); setError(null); }} className="h-12" />
{error &&

{error}

}
); } return ( RealKnot Studio Войдите в аккаунт, чтобы открыть студию и свои проекты.
{ setUsername(e.target.value); setError(null); }} className="h-12" />
{ setPassword(e.target.value); setError(null); }} className="h-12" />
{error &&

{error}

}

Аккаунт создаёт администратор в «Панели админа».

); }