Files
goldenChart/frontend/src/utils/indicatorSettingsList.ts
T
2026-05-29 23:03:47 +09:00

66 lines
2.2 KiB
TypeScript

/**
* 보조지표 설정 목록 — Main 탭 지표 우선 + 전체 registry, 검색 필터
*/
import { INDICATOR_REGISTRY } from './indicatorRegistry';
import { getIndicatorDef } from './indicatorRegistry';
import { MAIN_INDICATOR_TYPES, MAIN_INDICATOR_LABELS, isMainIndicatorType } from './indicatorMainTab';
const MAIN_SET = new Set<string>(MAIN_INDICATOR_TYPES);
/** 설정 UI에서 제외할 타입 없음 */
const EXCLUDED_TYPES = new Set<string>();
/** Main 탭 지표 + 그 외 모든 보조지표 type (순서 고정, Main 항목은 하단 registry 에서 제외) */
export function getSettingsIndicatorTypes(): string[] {
const rest = INDICATOR_REGISTRY
.map(d => d.type)
.filter(t => !MAIN_SET.has(t) && !EXCLUDED_TYPES.has(t));
return [...MAIN_INDICATOR_TYPES, ...rest];
}
export function isSettingsMainSection(type: string): boolean {
return isMainIndicatorType(type);
}
export function getIndicatorListLabels(type: string): { ko: string; en: string } {
const def = getIndicatorDef(type);
const main = MAIN_INDICATOR_LABELS[type];
return {
ko: main?.ko ?? def?.description ?? def?.koreanName ?? type,
en: main?.en ?? def?.name ?? type,
};
}
/** 지표 추가 팝업과 동일 — 이름·약어·한글명·설명 검색 */
export function matchIndicatorSearch(type: string, query: string): boolean {
const q = query.trim().toLowerCase();
if (!q) return true;
const def = getIndicatorDef(type);
if (!def) return type.toLowerCase().includes(q);
const main = MAIN_INDICATOR_LABELS[type];
const hay = [
type,
def.name,
def.koreanName,
def.shortName,
def.description ?? '',
main?.ko ?? '',
main?.en ?? '',
].join(' ').toLowerCase();
return hay.includes(q);
}
export function filterSettingsIndicatorTypes(types: readonly string[], query: string): string[] {
return types.filter(t => matchIndicatorSearch(t, query));
}
export function partitionFilteredTypes(filtered: string[]): { main: string[]; other: string[] } {
const main: string[] = [];
const other: string[] = [];
for (const t of filtered) {
if (isSettingsMainSection(t)) main.push(t);
else other.push(t);
}
return { main, other };
}