48 lines
1.7 KiB
TypeScript
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 '전략 미지정';
|
|
}
|