'use client'; import { Inbox } from 'lucide-react'; import * as React from 'react'; import { InquiryDetailDialog } from '@/components/inquiries/inquiry-detail-dialog'; import { InquiryRow, InquiryStatusBadge } from '@/components/inquiries/inquiry-row'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Select } from '@/components/ui/select'; import { useMyInquiries } from '@/lib/hooks/use-inquiries'; import type { InquiryReadDto } from '@/lib/inquiries-api'; type ReadFilter = 'all' | 'unread' | 'read'; export default function InquiriesPage() { const [page, setPage] = React.useState(1); const [readFilter, setReadFilter] = React.useState('all'); const [selectedInquiry, setSelectedInquiry] = React.useState(null); const [dialogOpen, setDialogOpen] = React.useState(false); const { data: result, isLoading: loading } = useMyInquiries({ page, limit: 20 }); // Client-side filter for read/unread since API doesn't support it directly const filteredData = React.useMemo(() => { if (!result) return []; if (readFilter === 'all') return result.data; if (readFilter === 'unread') return result.data.filter((i) => !i.isRead); return result.data.filter((i) => i.isRead); }, [result, readFilter]); const stats = React.useMemo(() => { if (!result) return { total: 0, unread: 0, read: 0 }; return { total: result.total, unread: result.data.filter((i) => !i.isRead).length, read: result.data.filter((i) => i.isRead).length, }; }, [result]); const handleSelectInquiry = (inquiry: InquiryReadDto) => { setSelectedInquiry(inquiry); setDialogOpen(true); }; return (
{/* Header */}

Quản lý liên hệ

Xem và phản hồi các yêu cầu tư vấn từ khách hàng

{/* Stats */}
Tổng liên hệ {loading ? '...' : stats.total} Chưa đọc {loading ? '...' : stats.unread} Đã đọc {loading ? '...' : stats.read}
{/* Filters */}
{filteredData.length} liên hệ
{/* Content */} {loading ? (
) : filteredData.length === 0 ? (
) : ( <> {/* Mobile card view */}
{filteredData.map((inquiry) => ( handleSelectInquiry(inquiry)} >

{inquiry.userName}

{inquiry.userPhone}

{inquiry.listingTitle}

{inquiry.message}

{new Date(inquiry.createdAt).toLocaleDateString('vi-VN', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', })}

))}
{/* Desktop table view */}
{filteredData.map((inquiry) => ( ))}
Khách hàng Tin đăng Nội dung Trạng thái Ngày gửi
)} {/* Pagination */} {result && result.totalPages > 1 && (
Trang {result.page} / {result.totalPages}
)} {/* Detail Dialog */} { setDialogOpen(open); if (!open) setSelectedInquiry(null); }} />
); }