"use client" import Link from './LocalizedLink' import { useRouter } from 'next/navigation' import { useEffect, useState } from 'react' import { ChevronRight, Loader2, Package, Search } from 'lucide-react' import { API_BASE } from '../lib/api' import { useLang } from '../hooks/useLang' import { getPathWithLocale } from '../lib/locales' import { toneClass } from '../lib/theme' type TrackResponse = | { success: true; orderId: number } | { error?: string } function parseStoredOrders(value: string | null) { if (!value) return [] try { const parsed = JSON.parse(value) return Array.isArray(parsed) ? parsed.map(Number).filter((id) => Number.isFinite(id) && id > 0) : [] } catch { return [] } } function orderLabel(id: number) { return `#${id.toString().padStart(4, '0')}` } export default function TrackOrderClient() { const router = useRouter() const lang = useLang() const [orderId, setOrderId] = useState('') const [phone, setPhone] = useState('') const [localOrders, setLocalOrders] = useState([]) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) useEffect(() => { const storedOrders = parseStoredOrders(localStorage.getItem('app_local_orders')) queueMicrotask(() => setLocalOrders(storedOrders)) }, []) const saveLocalOrder = (id: number) => { setLocalOrders((current) => { const next = [id, ...current.filter((item) => item !== id)].slice(0, 12) localStorage.setItem('app_local_orders', JSON.stringify(next)) return next }) } const handleSubmit = async (event: React.FormEvent) => { event.preventDefault() setLoading(true) setError(null) const normalizedOrderId = Number.parseInt(orderId.replace(/[^0-9]/g, ''), 10) if (!Number.isFinite(normalizedOrderId) || normalizedOrderId <= 0) { setError('กรุณากรอกหมายเลขคำสั่งซื้อให้ถูกต้อง') setLoading(false) return } try { const response = await fetch(`${API_BASE}/orders/track`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ orderId: normalizedOrderId, phone, }), }) const data = await response.json() as TrackResponse if (response.ok && 'success' in data && data.success) { saveLocalOrder(data.orderId) router.push(getPathWithLocale(`/order/${data.orderId}`, lang)) return } setError('error' in data && data.error ? data.error : 'ไม่สามารถยืนยันข้อมูลคำสั่งซื้อได้') } catch (err) { setError(err instanceof Error ? err.message : 'เกิดข้อผิดพลาดในการเชื่อมต่อ กรุณาลองใหม่อีกครั้ง') } finally { setLoading(false) } } return (

Manual Search

ค้นหาคำสั่งซื้อ

{error && (
{error}
)}
setOrderId(event.target.value)} className="ui-form-shell" placeholder="เช่น 1024" type="text" />
setPhone(event.target.value)} className="ui-form-shell" placeholder="เบอร์โทรที่ใช้ตอนสั่งซื้อ" type="tel" />

Recent Device Orders

{localOrders.length === 0 ? (

ยังไม่มีประวัติคำสั่งซื้อบนอุปกรณ์นี้

ใช้ฟอร์มค้นหาด้านซ้ายเพื่อบันทึกออเดอร์

) : (
{localOrders.map((id) => (

Order

{orderLabel(id)}

))}
)}
) }