// frontend/app/page.jsx 'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'; import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from '@/components/ui/dialog'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import { login as authLogin, logout as authLogout, me as fetchMe, credentials, authHeaders } from '@/app/_auth/client'; export default function HomePage() { const router = useRouter(); const [me, setMe] = useState(null); const [loading, setLoading] = useState(true); // login dialog states const [open, setOpen] = useState(false); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [submitting, setSubmitting] = useState(false); const [err, setErr] = useState(''); // โหลดสถานะผู้ใช้แบบไม่ redirect useEffect(() => { let cancelled = false; (async () => { try { const user = await fetchMe(); if (!cancelled) setMe(user); } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, []); async function handleLogin(e) { e?.preventDefault(); setSubmitting(true); setErr(''); try { const user = await authLogin({ username, password }); if (!user) { setErr('ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง'); return; } setMe(user); setOpen(false); router.push('/dashboard'); } catch { setErr('เกิดข้อผิดพลาดในการเชื่อมต่อเซิร์ฟเวอร์'); } finally { setSubmitting(false); } } async function handleLogout() { await authLogout().catch(() => {}); setMe(null); } if (loading) { return (
24
112
8
✔️ User editor01 uploaded Drawing D-2025-07
✔️ Transmittal T-2025-02 issued to Contractor
✔️ RFA R-2025-03 marked as Resolved