import React, { useState, useMemo } from 'react'; import { Link } from 'react-router-dom'; import { STATUS_CONFIG, TABS, } from './realEstateUtils'; import useComplexes from './hooks/useComplexes'; import ComplexCard from './components/ComplexCard'; import RightPanel from './components/RightPanel'; import ScheduleView from './components/ScheduleView'; import PriceAnalysis from './components/PriceAnalysis'; import ComplexModal from './components/ComplexModal'; import 'leaflet/dist/leaflet.css'; import './RealEstate.css'; // ── 메인 컴포넌트 ────────────────────────────────────────────────────────────── const RealEstate = () => { const { complexes, addComplex, updateComplex, deleteComplex } = useComplexes(); const [selectedComplex, setSelectedComplex] = useState(null); const [activeTab, setActiveTab] = useState('목록'); const [filterStatus, setFilterStatus] = useState('전체'); const [showModal, setShowModal] = useState(false); const [editingComplex, setEditingComplex] = useState(null); const handleAdd = (data) => { addComplex(data); setShowModal(false); }; const handleUpdate = (data) => { updateComplex(data); if (selectedComplex?.id === data.id) setSelectedComplex(data); setEditingComplex(null); setShowModal(false); }; const handleDelete = (id) => { if (!confirm('삭제하시겠습니까?')) return; deleteComplex(id); if (selectedComplex?.id === id) setSelectedComplex(null); }; const handleModalSave = (data) => { if (editingComplex) { handleUpdate({ ...editingComplex, ...data }); } else { handleAdd(data); } }; const filteredComplexes = useMemo(() => { if (filterStatus === '전체') return complexes; return complexes.filter((c) => c.status === filterStatus); }, [complexes, filterStatus]); const stats = useMemo(() => ({ total: complexes.length, upcoming: complexes.filter((c) => c.status === '청약예정').length, active: complexes.filter((c) => c.status === '청약중').length, avgPrice: complexes.length ? Math.round(complexes.reduce((s, c) => s + c.avgPricePerPyeong, 0) / complexes.length) : 0, }), [complexes]); return (
{/* 헤더 */}

부동산 정보

관심 단지 관리

관심 있는 아파트 단지 정보를 수집하고 분석합니다.

← 청약 대시보드 청약홈 →

{stats.total}

관심 단지

{stats.upcoming}

청약 예정

{stats.active}

청약 중

{stats.avgPrice.toLocaleString()}만

평균 평당가

{/* 탭 바 */}
{TABS.map((tab) => ( ))}
{activeTab === '목록' && (
{['전체', ...Object.keys(STATUS_CONFIG)].map((s) => ( ))}
)}
{/* 목록 탭 — 카드 + 지도/상세 */} {activeTab === '목록' && (
{filteredComplexes.length === 0 ? (

등록된 단지가 없습니다.

) : ( filteredComplexes.map((c) => ( setSelectedComplex(c)} /> )) )}
{ setEditingComplex(selectedComplex); setShowModal(true); }} onDelete={() => handleDelete(selectedComplex.id)} />
)} {activeTab === '일정' && (

캘린더

청약 일정

청약 시작·마감·당첨 발표일을 타임라인으로 확인합니다.

)} {activeTab === '분석' && ( )} {showModal && ( { setShowModal(false); setEditingComplex(null); }} onSave={handleModalSave} /> )}
); }; export default RealEstate;