대시보드 실시간 기능 추가
This commit is contained in:
29
features/trade/hooks/useDomesticSession.ts
Normal file
29
features/trade/hooks/useDomesticSession.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import {
|
||||
resolveDomesticKisSession,
|
||||
type DomesticKisSession,
|
||||
} from "@/lib/kis/domestic-market-session";
|
||||
|
||||
// 클라이언트 환경에서 현재 시간을 기준으로 세션을 계산합니다.
|
||||
// 매 30초마다 갱신됩니다.
|
||||
|
||||
/**
|
||||
* @description 국내 주식 시장의 세션(장 운영 상태)을 관리하는 훅입니다.
|
||||
* client-side에서 로컬 스토리지를 확인하거나 기본 세션을 반환하며,
|
||||
* 30초마다 세션 정보를 갱신하여 장 시작/마감/시간외 단일가 등 상태 변화를 감지합니다.
|
||||
*/
|
||||
export function useDomesticSession() {
|
||||
const [marketSession, setMarketSession] = useState<DomesticKisSession>(() =>
|
||||
resolveDomesticKisSession(),
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
const timerId = window.setInterval(() => {
|
||||
const nextSession = resolveDomesticKisSession();
|
||||
setMarketSession((prev) => (prev === nextSession ? prev : nextSession));
|
||||
}, 30_000);
|
||||
return () => window.clearInterval(timerId);
|
||||
}, []);
|
||||
|
||||
return marketSession;
|
||||
}
|
||||
Reference in New Issue
Block a user