Files
goldenChart/frontend/src/utils/virtualTargetStrategy.ts
T
2026-05-27 23:36:48 +09:00

56 lines
1.9 KiB
TypeScript

import type { VirtualTargetItem } from './virtualTradingStorage';
/** 종목 전략 셀렉트 — 기본(전역) 전략 옵션 값 */
export const VIRTUAL_DEFAULT_STRATEGY_VALUE = '__default__';
/** 종목에 전략이 지정되지 않았으면 전역(기본) 전략 ID */
export function resolveVirtualTargetStrategyId(
target: Pick<VirtualTargetItem, 'strategyId'>,
globalStrategyId: number | null,
): number | null {
if (target.strategyId != null) return target.strategyId;
return globalStrategyId;
}
export function usesDefaultStrategy(target: Pick<VirtualTargetItem, 'strategyId'>): boolean {
return target.strategyId == null;
}
export function targetStrategySelectValue(target: Pick<VirtualTargetItem, 'strategyId'>): string {
return target.strategyId != null ? String(target.strategyId) : VIRTUAL_DEFAULT_STRATEGY_VALUE;
}
export function parseTargetStrategySelectValue(value: string): number | null {
if (!value || value === VIRTUAL_DEFAULT_STRATEGY_VALUE) return null;
const n = Number(value);
return Number.isFinite(n) ? n : null;
}
export function defaultStrategyOptionLabel(
globalStrategyId: number | null,
strategies: Array<{ id?: number; name?: string }>,
): string {
if (globalStrategyId == null) return '기본 전략 (미설정)';
const name = strategies.find(s => s.id === globalStrategyId)?.name;
return name ? `기본 전략 (${name})` : '기본 전략';
}
/**
* 예전에 전역 전략 ID가 종목에 복사 저장된 항목 → null(기본 전략 따름)로 정규화
*/
export function coalesceTargetsToDefaultStrategy(
targets: VirtualTargetItem[],
globalStrategyId: number | null,
): VirtualTargetItem[] {
if (globalStrategyId == null) return targets;
let changed = false;
const next = targets.map(t => {
if (t.strategyId != null && t.strategyId === globalStrategyId) {
changed = true;
return { ...t, strategyId: null };
}
return t;
});
return changed ? next : targets;
}