'use client'; import dynamic from 'next/dynamic'; import { useState } from 'react'; import { ComparablesTable } from '@/components/valuation/comparables-table'; import { ExportPdfButton } from '@/components/valuation/export-pdf-button'; import { MarketContextCard } from '@/components/valuation/market-context-card'; import { ValuationForm } from '@/components/valuation/valuation-form'; import { ValuationHistory } from '@/components/valuation/valuation-history'; import { ValuationResults } from '@/components/valuation/valuation-results'; import { useValuationPredict, useValuationHistory, useValuationDetail, } from '@/lib/hooks/use-valuation'; import type { ValuationRequest, ValuationResult } from '@/lib/valuation-api'; // Lazy-load chart component (uses Recharts, no SSR) const ValuationHistoryChart = dynamic( () => import('@/components/valuation/valuation-history-chart').then( (m) => m.ValuationHistoryChart, ), { ssr: false, loading: () => (
Đang tải...
), }, ); export default function ValuationPage() { const [historyPage, setHistoryPage] = useState(1); const [selectedId, setSelectedId] = useState(null); const predictMutation = useValuationPredict(); const { data: historyData, isLoading: historyLoading } = useValuationHistory(historyPage); const { data: selectedResult } = useValuationDetail(selectedId ?? ''); const currentResult: ValuationResult | undefined = predictMutation.data ?? selectedResult; const handleSubmit = (data: ValuationRequest) => { setSelectedId(null); predictMutation.mutate(data); }; const handleSelectHistory = (id: string) => { setSelectedId(id); }; return (
{/* Page header */}

Định giá AI

Sử dụng AI để ước tính giá trị bất động sản dựa trên dữ liệu thị trường

{currentResult && ( )}
{/* Form + Results (left 2 cols) */}
{predictMutation.isError && (
Không thể định giá. Vui lòng thử lại sau.
)} {currentResult && ( <> {/* Main results with confidence badge + driver charts */} {/* Comparables table (TanStack Table) */} {currentResult.comparables.length > 0 && ( )} {/* Market context card */} {currentResult.marketContext && ( )} {/* Valuation history chart */} {currentResult.valuationHistory && currentResult.valuationHistory.length >= 2 && ( )} )}
{/* History sidebar (right col) */}
); }