56 lines
1.9 KiB
TypeScript
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;
|
|
}
|