Files
goldenChart/frontend/src/utils/virtualTargetNames.ts
T
2026-06-03 02:04:30 +09:00

48 lines
1.7 KiB
TypeScript

import { getKoreanName } from './marketNameCache';
/** 백엔드/캐시에 마켓 코드가 한글명으로 들어온 경우 보정 */
export function isInvalidStoredKoreanName(market: string, name?: string | null): boolean {
if (!name || !name.trim()) return true;
const trimmed = name.trim();
if (trimmed === market) return true;
if (trimmed.startsWith('KRW-')) return true;
const sym = market.replace(/^KRW-/, '');
if (trimmed === sym) return true;
return false;
}
/** 투자대상 표시·저장용 한글명·영문 심볼 */
export function resolveVirtualTargetNames(
market: string,
koreanName?: string | null,
englishName?: string | null,
): { koreanName: string; englishName: string } {
const en = (englishName?.trim() || market.replace(/^KRW-/, '')).replace(/^KRW-/, '');
const ko = !isInvalidStoredKoreanName(market, koreanName)
? koreanName!.trim()
: getKoreanName(market);
return { koreanName: ko, englishName: en };
}
/** 투자대상·차트 종목 선택 — 한글명(영문명) */
export function formatVirtualTargetOptionLabel(
market: string,
koreanName?: string | null,
englishName?: string | null,
): string {
const { koreanName: ko, englishName: en } = resolveVirtualTargetNames(market, koreanName, englishName);
return `${ko}(${en})`;
}
/** 카드·차트 상단 — 투자전략 표시명 */
export function resolveVirtualTargetStrategyDisplayName(
strategy: { name?: string } | undefined,
strategies: Array<{ id?: number; name?: string }>,
readOnlyStrategyLabel?: string,
): string {
const ro = readOnlyStrategyLabel?.trim();
if (ro) return ro;
if (strategy?.name?.trim()) return strategy.name.trim();
return '전략 미지정';
}