57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { useCallback, useMemo, useRef, useState, type RefObject } from 'react';
|
|
import type { IndicatorConfig } from '../types';
|
|
import type { ChartManager } from '../utils/ChartManager';
|
|
import type { ChartOverlayToggleKey } from '../utils/chartOverlayVisibility';
|
|
import {
|
|
applyPaperOverlayVisibility,
|
|
DEFAULT_PAPER_OVERLAY_VISIBILITY,
|
|
listPaperOverlayToggleItems,
|
|
paperOverlayVisibilityToChart,
|
|
type PaperOverlayToggleKey,
|
|
type PaperOverlayVisibility,
|
|
} from '../utils/paperChartOverlayVisibility';
|
|
|
|
/** 알림·백테스트 등 — 캔들 오버레이 표시/숨김 (세션만, DB 미저장) */
|
|
export function useSessionCandleOverlayControls(
|
|
managerRef: RefObject<ChartManager | null>,
|
|
baseIndicators: IndicatorConfig[],
|
|
) {
|
|
const [overlayVisibility, setOverlayVisibility] = useState<PaperOverlayVisibility>(
|
|
() => ({ ...DEFAULT_PAPER_OVERLAY_VISIBILITY }),
|
|
);
|
|
const overlayVisibilityRef = useRef(overlayVisibility);
|
|
overlayVisibilityRef.current = overlayVisibility;
|
|
|
|
const indicators = useMemo(
|
|
() => applyPaperOverlayVisibility(baseIndicators, overlayVisibility),
|
|
[baseIndicators, overlayVisibility],
|
|
);
|
|
|
|
const candleOverlayToggles = useMemo(
|
|
() => listPaperOverlayToggleItems(baseIndicators, overlayVisibility),
|
|
[baseIndicators, overlayVisibility],
|
|
);
|
|
|
|
const syncToManager = useCallback((mgr: ChartManager) => {
|
|
mgr.setChartOverlayVisibility(paperOverlayVisibilityToChart(overlayVisibilityRef.current));
|
|
}, []);
|
|
|
|
const handleToggleCandleOverlay = useCallback((key: ChartOverlayToggleKey) => {
|
|
const pKey = key as PaperOverlayToggleKey;
|
|
if (!(pKey in DEFAULT_PAPER_OVERLAY_VISIBILITY)) return;
|
|
setOverlayVisibility(prev => {
|
|
const nextVisible = !prev[pKey];
|
|
managerRef.current?.setChartOverlayGroupVisible(key, nextVisible);
|
|
return { ...prev, [pKey]: nextVisible };
|
|
});
|
|
}, [managerRef]);
|
|
|
|
return {
|
|
indicators,
|
|
candleOverlayToggles,
|
|
handleToggleCandleOverlay,
|
|
syncToManager,
|
|
overlayVisibility,
|
|
};
|
|
}
|