Files
goldenChart/frontend/src/utils/workspaceChartIndicatorsCache.ts
T
2026-06-10 09:57:38 +09:00

49 lines
1.4 KiB
TypeScript

/**
* 워크스페이스 slot0 보조지표 — 알림 미니 차트가 메인 차트 인스턴스 스타일과 맞추도록
*/
import type { IndicatorConfig } from '../types';
import { loadWorkspace } from './backendApi';
let cached: IndicatorConfig[] | null = null;
let loadPromise: Promise<IndicatorConfig[]> | null = null;
let loadedSessionKey: number | null = null;
export function invalidateWorkspaceChartIndicatorsCache(): void {
cached = null;
loadPromise = null;
loadedSessionKey = null;
}
export function ensureWorkspaceChartIndicators(sessionKey = 0): Promise<IndicatorConfig[]> {
if (cached !== null && loadedSessionKey === sessionKey) {
return Promise.resolve(cached);
}
if (loadedSessionKey !== sessionKey) {
cached = null;
loadPromise = null;
}
if (!loadPromise) {
loadPromise = loadWorkspace()
.then(ws => {
const slot0 = (Array.isArray(ws?.slots) ? ws.slots[0] : null) as
| { indicators?: IndicatorConfig[] }
| null;
cached = Array.isArray(slot0?.indicators) ? slot0!.indicators! : [];
loadedSessionKey = sessionKey;
loadPromise = null;
return cached;
})
.catch(() => {
cached = [];
loadedSessionKey = sessionKey;
loadPromise = null;
return [];
});
}
return loadPromise;
}
export function getWorkspaceChartIndicatorsCache(): IndicatorConfig[] | null {
return cached;
}