"use client"; import { useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useAuth } from "@/lib/auth-context"; import { Logo } from "@/components/logo"; import { Button } from "@/components/ui/button"; import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, } from "@/components/ui/input-group"; import { FloatingPaths } from "@/components/floating-paths"; import { ArrowLeftIcon, AtSignIcon, EyeIcon, EyeOffIcon, KeyRoundIcon, } from "@/components/ui/phosphor-icons"; const BACKEND_URL = process.env.NEXT_PUBLIC_BACKEND_URL || "http://localhost:4000"; const ROLE_HOME: Record = { superadmin: "/dashboard", admin_poverty: "/dashboard/poverty", admin_lands_roads: "/dashboard/land", admin_gas_stations: "/dashboard/gas-station", }; const DEMO_CREDENTIALS = [ { label: "Super Admin", username: "superadmin", password: "Super@1234", routes: "All routes", }, { label: "Admin Poverty Map", username: "admin_poverty", password: "Poverty@1234", routes: "/dashboard/poverty only", }, { label: "Admin Lahan & Jalan", username: "admin_lands", password: "Lands@1234", routes: "/dashboard/land only", }, { label: "Admin SPBU", username: "admin_gas", password: "Gas@1234", routes: "/dashboard/gas-station only", }, ]; export function AuthPage() { const { login } = useAuth(); const router = useRouter(); const [identifier, setIdentifier] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); setIsLoading(true); try { const res = await fetch(`${BACKEND_URL}/auth/login`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: identifier.trim(), password, }), }); const data = await res.json(); if (!res.ok) { setError(data.error ?? "Login failed"); return; } login(data.token, data.user); const params = new URLSearchParams(window.location.search); const redirectTo = params.get("redirectTo"); router.replace( redirectTo ?? ROLE_HOME[data.user.role] ?? "/dashboard", ); } catch { setError("Cannot connect to server. Please try again."); } finally { setIsLoading(false); } } return (

“Aplikasi ini berguna dalam membantu mengelola data spasial dengan lebih efisien.”

~ Pangkywara
Kembali {/* Top Shades */}

Login

Masuk ke akun Anda untuk mengakses dashboard.

setIdentifier(e.target.value)} autoComplete="username" required /> setPassword(e.target.value)} autoComplete="current-password" required /> setShowPassword((value) => !value)} > {showPassword ? : } {error && (

{error}

)}
{/* Quick Demo Credentials */}

Demo Credentials (Quick Login)

Click a role to auto-fill the login form:

{DEMO_CREDENTIALS.map((cred) => ( ))}
); }