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


private async setup(initialIndicators: IndicatorSnapshot[]): Promise<void> {
  this.restoringInitialIndicators = true;

  try {
    for (const indicator of initialIndicators) {
      const config = indicator.config;

      if (indicator.indicatorType !== undefined || !config?.symbolInfo) {
        continue;
      }

      const symbolInfo = normalizeSymbolInfo(config.symbolInfo);

      if (!symbolInfo) {
        continue;
      }

      const series = config.series[0];

      const compareMode =
        series.seriesOptions?.priceScaleId === Direction.Left
          ? CompareMode.NewScale
          : config.newPane
            ? CompareMode.NewPane
            : CompareMode.Percentage;

      // eslint-disable-next-line no-await-in-loop
      await this.setSymbolMode(series.name, symbolInfo, compareMode, indicator.paneId);
    }
  } finally {
    this.restoringInitialIndicators = false;
  }
}




private publish(): void {
  const entries = Array.from(this.entries.values());

  this.itemsSubject.next(
    entries.map(({ symbolId, symbol, symbolName, mode }) => ({
      symbolId,
      symbol,
      symbolName,
      mode,
    })),
  );

  this.entitiesSubject.next(entries.map(({ entity }) => entity));
}




const addedSymbolIds: string[] = [];

for (let index = 0; index < symbolIds.length; index += 1) {
  const symbolId = symbolIds[index];

  if (!symbolId) continue;

  if (previousSymbolIdsSet.has(symbolId)) {
    continue;
  }

  addedSymbolIds.push(symbolId);
}





this.subscriptions.add(
  symbolIds$.subscribe((symbolIds) => {
    const previousSymbolIds = new Set(this.activeSymbolIds);

    this.activeSymbolIds = symbolIds;
    this.dataSource.setSymbols(symbolIds);

    const addedSymbolIds = symbolIds.filter((symbolId) => !previousSymbolIds.has(symbolId));

    if (addedSymbolIds.length) {
      warmupSymbolIds(addedSymbolIds);
    }
  }),
);





const warmupSymbolIds = (symbolIds: string[]): void => {
  const from = getWarmupFrom();

  if (!from) return;

  Promise.all(symbolIds.map((symbolId) => this.dataSource.loadTill(symbolId, from))).catch((error) => {
    console.error('[Chart] Ошибка при прогреве символов:', error);
  });
};