2026-02-05 06:35:50 +09:00
|
|
|
import { Routes, Route } from 'react-router-dom';
|
|
|
|
|
import { lazy, Suspense } from 'react';
|
2026-01-30 13:01:54 +09:00
|
|
|
|
|
|
|
|
// 구현 영역 - 레이아웃
|
|
|
|
|
import MainLayout from './components/layout/MainLayout';
|
2026-02-05 06:35:50 +09:00
|
|
|
import { ToastContainer } from './components/common/Toast';
|
feat: STS 분석 기능 구현 및 항적분석 고도화
- STS(Ship-to-Ship) 접촉 분석 기능 전체 구현
- API 연동 (vessel-contacts), 스토어, 레이어 훅, 레이어 레지스트리
- 접촉 쌍 그룹핑, 그룹 카드 목록, 상세 모달 (그리드 레이아웃)
- ScatterplotLayer 접촉 포인트 + 위험도 색상
- 항적분석 탭 UI 분리 (구역분석 / STS분석)
- AreaSearchPage → AreaSearchTab, StsAnalysisTab 추출
- 탭 전환 시 결과 초기화 확인, 구역 클리어
- 지도 호버 하이라이트 구현 (구역분석 + STS)
- MapContainer pointermove에 STS 레이어 ID 핸들러 추가
- STS 쌍 항적 동시 하이라이트 (vesselId → groupIndex 매핑)
- 목록↔지도 호버 연동 자동 스크롤
- pickingRadius 12→20 확대
- 재생 컨트롤러(AreaSearchTimeline) STS 지원
- 항적/궤적 토글 activeTab 기반 스토어 분기
- 닫기 시 양쪽 스토어 + 레이어 정리
- 패널 닫기 초기화 수정 (isOpen 감지, clearResults로 탭 보존)
- 조회 중 로딩 오버레이 (LoadingOverlay 공통 컴포넌트)
- 항적분석 다중 방문 대응, 선박 상세 모달, 구역 편집 기능
- trackLayer updateTriggers Set 직렬화, highlightedVesselIds 지원
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 06:20:46 +09:00
|
|
|
import { AlertModalContainer } from './components/common/AlertModal';
|
2026-01-30 13:01:54 +09:00
|
|
|
|
2026-02-05 06:35:50 +09:00
|
|
|
// 퍼블리시 영역 (개발 환경에서만 동적 로드)
|
|
|
|
|
// 프로덕션 빌드 시 tree-shaking으로 제외됨
|
|
|
|
|
const PublishRouter = import.meta.env.DEV
|
2026-02-09 14:29:01 +09:00
|
|
|
? lazy(() =>
|
|
|
|
|
import('./publish').catch(() => ({
|
|
|
|
|
default: () => (
|
|
|
|
|
<div style={{ color: '#fff', padding: '2rem' }}>
|
|
|
|
|
publish 폴더가 없습니다. 퍼블리시 파일을 추가하면 자동으로 활성화됩니다.
|
|
|
|
|
</div>
|
|
|
|
|
),
|
|
|
|
|
}))
|
|
|
|
|
)
|
2026-02-05 06:35:50 +09:00
|
|
|
: null;
|
2026-01-30 13:01:54 +09:00
|
|
|
|
|
|
|
|
export default function App() {
|
|
|
|
|
return (
|
2026-02-05 06:35:50 +09:00
|
|
|
<>
|
|
|
|
|
<ToastContainer />
|
feat: STS 분석 기능 구현 및 항적분석 고도화
- STS(Ship-to-Ship) 접촉 분석 기능 전체 구현
- API 연동 (vessel-contacts), 스토어, 레이어 훅, 레이어 레지스트리
- 접촉 쌍 그룹핑, 그룹 카드 목록, 상세 모달 (그리드 레이아웃)
- ScatterplotLayer 접촉 포인트 + 위험도 색상
- 항적분석 탭 UI 분리 (구역분석 / STS분석)
- AreaSearchPage → AreaSearchTab, StsAnalysisTab 추출
- 탭 전환 시 결과 초기화 확인, 구역 클리어
- 지도 호버 하이라이트 구현 (구역분석 + STS)
- MapContainer pointermove에 STS 레이어 ID 핸들러 추가
- STS 쌍 항적 동시 하이라이트 (vesselId → groupIndex 매핑)
- 목록↔지도 호버 연동 자동 스크롤
- pickingRadius 12→20 확대
- 재생 컨트롤러(AreaSearchTimeline) STS 지원
- 항적/궤적 토글 activeTab 기반 스토어 분기
- 닫기 시 양쪽 스토어 + 레이어 정리
- 패널 닫기 초기화 수정 (isOpen 감지, clearResults로 탭 보존)
- 조회 중 로딩 오버레이 (LoadingOverlay 공통 컴포넌트)
- 항적분석 다중 방문 대응, 선박 상세 모달, 구역 편집 기능
- trackLayer updateTriggers Set 직렬화, highlightedVesselIds 지원
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 06:20:46 +09:00
|
|
|
<AlertModalContainer />
|
2026-01-30 13:01:54 +09:00
|
|
|
<Routes>
|
|
|
|
|
{/* =====================
|
|
|
|
|
구현 영역 (메인)
|
|
|
|
|
- 모든 메뉴 경로를 MainLayout으로 처리
|
|
|
|
|
===================== */}
|
|
|
|
|
<Route path="/*" element={<MainLayout />} />
|
|
|
|
|
|
|
|
|
|
{/* =====================
|
2026-02-05 06:35:50 +09:00
|
|
|
퍼블리시 영역 (개발 환경 전용)
|
2026-01-30 13:01:54 +09:00
|
|
|
/publish/* 로 접근하여 퍼블리시 결과물 미리보기
|
2026-02-05 06:35:50 +09:00
|
|
|
프로덕션 빌드 시 이 라우트와 관련 모듈이 제외됨
|
2026-01-30 13:01:54 +09:00
|
|
|
===================== */}
|
2026-02-10 13:15:12 +09:00
|
|
|
{/*{import.meta.env.DEV && PublishRouter && (*/}
|
|
|
|
|
{/* <Route*/}
|
|
|
|
|
{/* path="/publish/*"*/}
|
|
|
|
|
{/* element={*/}
|
|
|
|
|
{/* <Suspense fallback={<div style={{ color: '#fff', padding: '2rem' }}>Loading publish...</div>}>*/}
|
|
|
|
|
{/* <PublishRouter />*/}
|
|
|
|
|
{/* </Suspense>*/}
|
|
|
|
|
{/* }*/}
|
|
|
|
|
{/* />*/}
|
|
|
|
|
{/*)}*/}
|
2026-01-30 13:01:54 +09:00
|
|
|
</Routes>
|
2026-02-05 06:35:50 +09:00
|
|
|
</>
|
2026-01-30 13:01:54 +09:00
|
|
|
);
|
|
|
|
|
}
|