import { ChartSeriesType, Intervals, SymbolInfo, SymbolInfoInput, TimeFormat } from '@src/types';
import { Timeframes } from '@src/types/timeframes';
import { DateFormat, normalizeSymbolInfo } from '@src/utils';
export interface ChartSettings {
symbolInfo: SymbolInfo;
timeframe: Timeframes;
seriesSelected: ChartSeriesType;
timeFormat: TimeFormat;
dateFormat: DateFormat;
interval: Intervals | null;
}
export type ChartSettingsSource =
| (Omit<Partial<ChartSettings>, 'symbolInfo'> & {
symbolInfo?: SymbolInfoInput;
})
| string;
export function parseChartSettings(value: ChartSettingsSource): Partial<ChartSettings> {
let parsedValue: unknown = value;
if (typeof value === 'string') {
try {
parsedValue = JSON.parse(value);
} catch {
return {};
}
}
if (!parsedValue || typeof parsedValue !== 'object' || Array.isArray(parsedValue)) {
return {};
}
const { symbolInfo, ...settings } = parsedValue as Omit<Partial<ChartSettings>, 'symbolInfo'> & {
symbolInfo?: SymbolInfoInput;
};
return {
...settings,
symbolInfo: symbolInfo ? normalizeSymbolInfo(symbolInfo) : undefined,
};
}