'use client'; import { Package, Search, X } from 'lucide-react'; import * as React from 'react'; import { TransferListingCard } from '@/components/chuyen-nhuong/transfer-listing-card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { type SearchTransferListingsParams, type TransferCategory, type TransferListingStatus, CATEGORY_ICONS, CATEGORY_LABELS, STATUS_LABELS, } from '@/lib/chuyen-nhuong-api'; import { useTransferListingsSearch } from '@/lib/hooks/use-chuyen-nhuong'; import { HCM_DISTRICTS } from '@/lib/vietnam-geo'; const PAGE_SIZE = 12; export default function ChuyenNhuongPage() { const [filters, setFilters] = React.useState({ page: 1, limit: PAGE_SIZE, }); const [searchInput, setSearchInput] = React.useState(''); const { data, isLoading, isError } = useTransferListingsSearch(filters); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); setFilters((prev) => ({ ...prev, q: searchInput.trim() || undefined, page: 1 })); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleCategoryChange = (category: TransferCategory | undefined) => { setFilters((prev) => ({ ...prev, category, page: 1 })); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const updateFilter = (key: keyof SearchTransferListingsParams, value: string) => { setFilters((prev) => ({ ...prev, [key]: value || undefined, page: 1 })); }; const handlePageChange = (page: number) => { setFilters((prev) => ({ ...prev, page })); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleClear = () => { setSearchInput(''); setFilters({ page: 1, limit: PAGE_SIZE }); }; const hasFilters = filters.q || filters.category || filters.status || filters.district; return (
{/* Page header */}

Chuyển Nhượng

Tìm kiếm nội thất, thiết bị và mặt bằng chuyển nhượng

{/* Search bar */}
setSearchInput(e.target.value)} className="pl-9" />
{/* Filters */}
{hasFilters && ( )}
{/* Category tabs */}
{(Object.entries(CATEGORY_LABELS) as [TransferCategory, string][]).map(([key, label]) => { const Icon = CATEGORY_ICONS[key]; return ( ); })}
{/* Results */}
{isLoading ? (
{Array.from({ length: 6 }).map((_, i) => (
))}
) : isError ? (

Không thể tải danh sách chuyển nhượng. Vui lòng thử lại.

) : data && data.data.length > 0 ? ( <>

{data.total} tin chuyển nhượng được tìm thấy

{data.data.map((listing) => ( ))}
{/* Pagination */} {data.totalPages > 1 && (
Trang {data.page} / {data.totalPages}
)} ) : (

Không tìm thấy tin chuyển nhượng

Thử thay đổi bộ lọc để tìm kiếm nhiều hơn

)}
); }