Files
goldenChart/frontend/src/utils/tradeNotificationGridPresets.ts
T
2026-05-28 21:58:15 +09:00

77 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** 매매 시그널 알림 — 그리드형 n×n 레이아웃 프리셋 (TradingView 스타일) */
export type TradeNotificationGridPresetId =
| '1x1'
| '2x1'
| '1x2'
| '3x1'
| '1x3'
| '2x1-31'
| '2x2'
| '4x1'
| '1x4'
| '2x1-211'
| '5x1'
| '3x2'
| '2x3'
| '4x2'
| '2x4';
export interface TradeNotificationGridPreset {
id: TradeNotificationGridPresetId;
/** 스크롤 목록에 적용할 열 수 */
cols: number;
/** 팝업 그룹 라벨 (패널 수) */
group: number;
/** 짧은 표기 (2×2 등) */
label: string;
}
export const TRADE_NOTIFICATION_GRID_PRESETS: TradeNotificationGridPreset[] = [
{ id: '1x1', cols: 1, group: 1, label: '1×1' },
{ id: '2x1', cols: 2, group: 2, label: '2×1' },
{ id: '1x2', cols: 1, group: 2, label: '1×2' },
{ id: '3x1', cols: 3, group: 3, label: '3×1' },
{ id: '1x3', cols: 1, group: 3, label: '1×3' },
{ id: '2x1-31', cols: 2, group: 3, label: '2+1' },
{ id: '2x2', cols: 2, group: 4, label: '2×2' },
{ id: '4x1', cols: 4, group: 4, label: '4×1' },
{ id: '1x4', cols: 1, group: 4, label: '1×4' },
{ id: '2x1-211', cols: 2, group: 4, label: '2+2' },
{ id: '5x1', cols: 5, group: 5, label: '5×1' },
{ id: '3x2', cols: 3, group: 6, label: '3×2' },
{ id: '2x3', cols: 2, group: 6, label: '2×3' },
{ id: '4x2', cols: 4, group: 8, label: '4×2' },
{ id: '2x4', cols: 2, group: 8, label: '2×4' },
];
const PRESET_MAP = new Map(
TRADE_NOTIFICATION_GRID_PRESETS.map(p => [p.id, p]),
);
export const DEFAULT_TRADE_NOTIFICATION_GRID_PRESET: TradeNotificationGridPresetId = '2x2';
export function getTradeNotificationGridPreset(
id: string | undefined | null,
): TradeNotificationGridPreset {
const preset = id ? PRESET_MAP.get(id as TradeNotificationGridPresetId) : undefined;
return preset ?? PRESET_MAP.get(DEFAULT_TRADE_NOTIFICATION_GRID_PRESET)!;
}
export function normalizeTradeNotificationGridPreset(
id: string | undefined | null,
): TradeNotificationGridPresetId {
return getTradeNotificationGridPreset(id).id;
}
/** 그룹별 프리셋 (팝업 행 구성) */
export function gridPresetsByGroup(): Map<number, TradeNotificationGridPreset[]> {
const map = new Map<number, TradeNotificationGridPreset[]>();
for (const p of TRADE_NOTIFICATION_GRID_PRESETS) {
const list = map.get(p.group) ?? [];
list.push(p);
map.set(p.group, list);
}
return map;
}