- useMonitor 1초 setInterval 제거 (LIVE 60배 과잉 재계산 해소) - useKoreaFilters currentTime 의존성 제거 (5분 polling 시에만 재계산) - useKoreaData aircraft/satellite LIVE/REPLAY 분리 - 특정어업수역 실제 폴리곤 좌표 적용 (bbox→원본 GeoJSON 변환) - FishingZoneLayer zone 속성 매칭 수정 - 선박/분석 라벨 폰트 크기 80% 축소
31 lines
1.0 KiB
TypeScript
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 };
|
|
}
|