kcg-monitoring/frontend/src/hooks/useMonitor.ts
htlee e2b531d9c5 fix: LIVE 모드 렌더링 최적화 + 특정어업수역 폴리곤 수정
- useMonitor 1초 setInterval 제거 (LIVE 60배 과잉 재계산 해소)
- useKoreaFilters currentTime 의존성 제거 (5분 polling 시에만 재계산)
- useKoreaData aircraft/satellite LIVE/REPLAY 분리
- 특정어업수역 실제 폴리곤 좌표 적용 (bbox→원본 GeoJSON 변환)
- FishingZoneLayer zone 속성 매칭 수정
- 선박/분석 라벨 폰트 크기 80% 축소
2026-03-23 15:26:41 +09:00

31 lines
1.0 KiB
TypeScript

import { useState, useCallback } from 'react';
export interface MonitorState {
currentTime: number; // always Date.now()
historyMinutes: number; // how far back to show (default 60)
}
export function useMonitor() {
const [state, setState] = useState<MonitorState>({
currentTime: Date.now(),
historyMinutes: 60,
});
// LIVE 모드에서 1초 tick 제거 — 데이터 polling 응답 시에만 갱신하면 충분.
// currentTime은 표시용으로 렌더 시 Date.now() 사용, 데이터 훅에는 전달하지 않음.
const setHistoryMinutes = useCallback((minutes: number) => {
setState(prev => ({ ...prev, historyMinutes: minutes }));
}, []);
/** 데이터 갱신 시점에 호출하여 currentTime 동기화 */
const refreshTime = useCallback(() => {
setState(prev => ({ ...prev, currentTime: Date.now() }));
}, []);
const startTime = state.currentTime - state.historyMinutes * 60_000;
const endTime = state.currentTime;
return { state, startTime, endTime, setHistoryMinutes, refreshTime };
}