Загрузка данных


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,
  };
}