"use client"; import { Icon } from "@iconify/react"; import { AnimatePresence, motion, useReducedMotion } from "framer-motion"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { iconStorefrontFill } from "../../_core/icons"; import { fetchUsers, login } from "../_services/auth.service"; import type { AuthUser } from "../../_core/types/auth-user"; import { PasswordForm } from "./password-form"; import { UserPicker } from "./user-picker"; export function UserLoginScreen() { const router = useRouter(); const reduceMotion = useReducedMotion(); const [users, setUsers] = useState(null); const [loadError, setLoadError] = useState(null); const [selected, setSelected] = useState(null); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); useEffect(() => { fetchUsers() .then(setUsers) .catch(() => setLoadError("No se pudo cargar la lista de usuarios.")); }, []); function selectUser(user: AuthUser) { setSelected(user); setError(null); } function backToPicker() { setSelected(null); setError(null); } async function handleSubmit(password: string) { if (!selected) return; setSubmitting(true); setError(null); try { const user = await login(selected.id, password); sessionStorage.setItem("pdv:user", JSON.stringify(user)); router.push(user.role === "admin" ? "/admin" : "/pos"); } catch { setError("Contraseña incorrecta. Intenta de nuevo."); } finally { setSubmitting(false); } } const step = selected ? "password" : "picker"; const slide = reduceMotion ? 0 : 16; return (
{step === "password" ? "Ingresa tu contraseña" : "¿Quién va a usar el PDV?"}
{step === "picker" ? ( ) : ( )}
); }