import type { ScatSegment } from './scatTypes' import { esiColor, sensColor, statusColor, esiLevel, scatAreas, scatDetailData } from './scatConstants' interface ScatLeftPanelProps { segments: ScatSegment[] selectedSeg: ScatSegment onSelectSeg: (s: ScatSegment) => void onOpenPopup: (idx: number) => void jurisdictionFilter: string onJurisdictionChange: (v: string) => void areaFilter: string onAreaChange: (v: string) => void phaseFilter: string onPhaseChange: (v: string) => void statusFilter: string onStatusChange: (v: string) => void searchTerm: string onSearchChange: (v: string) => void } function ScatLeftPanel({ segments, selectedSeg, onSelectSeg, onOpenPopup, jurisdictionFilter, onJurisdictionChange, areaFilter, onAreaChange, phaseFilter, onPhaseChange, statusFilter, onStatusChange, searchTerm, onSearchChange, }: ScatLeftPanelProps) { const filtered = segments.filter(s => { if (areaFilter !== '전체' && !s.area.includes(areaFilter.replace('서귀포시 ', '').replace('제주시 ', '').replace(' 해안', ''))) return false if (statusFilter !== '전체' && s.status !== statusFilter) return false if (searchTerm && !s.code.includes(searchTerm) && !s.name.includes(searchTerm)) return false return true }) return (
{/* Filters */}
해안 조사 구역
onSearchChange(e.target.value)} className="prd-i flex-1" />
{/* Segment List */}
해안 구간 목록 총 {filtered.length}개 구간
{filtered.map(seg => { const lvl = esiLevel(seg.esiNum) const borderColor = lvl === 'h' ? 'border-l-status-red' : lvl === 'm' ? 'border-l-status-orange' : 'border-l-status-green' const isSelected = selectedSeg.id === seg.id return (
{ onSelectSeg(seg); onOpenPopup(seg.id % scatDetailData.length) }} className={`bg-bg-3 border border-border rounded-sm p-2.5 px-3 cursor-pointer transition-all border-l-4 ${borderColor} ${ isSelected ? 'border-status-green bg-[rgba(34,197,94,0.05)]' : 'hover:border-border-light hover:bg-bg-hover' }`} >
📍 {seg.code} {seg.area} ESI {seg.esi}
유형 {seg.type}
길이 {seg.length}
민감 {seg.sensitivity}
현황 {seg.status}
) })}
) } export default ScatLeftPanel