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


import classNames from 'classnames';
import dayjs from 'dayjs';

import { Button, Tooltip } from 'exchange-elements/v2';
import { useEffect, useState } from 'react';
import { Observable } from 'rxjs';

import { CHART_SCROLLABLE_CLASSNAME } from '@src/constants';
import { t } from '@src/translations';

import { Intervals, IntervalsToTimeframe, Timeframes } from '@src/types';

import { formatUtcOffset, useObservable } from '@src/utils';

import styles from './index.module.scss';

interface FooterProps {
  intervalObs: Observable<Intervals | null>;
  setInterval: (next: Intervals) => void;
  supportedTimeframes: Timeframes[];
}

export function Footer({ setInterval: setIntervalValue, intervalObs, supportedTimeframes }: FooterProps) {
  const [currentTime, setCurrentTime] = useState(dayjs().format('HH:mm:ss'));
  const selectedInterval = useObservable<null | Intervals>(intervalObs);

  const utcOffset = formatUtcOffset();

  useEffect(() => {
    const intervalId = setInterval(() => setCurrentTime(dayjs().format('HH:mm:ss')), 1000);

    return () => clearInterval(intervalId);
  }, []);

  return (
    <footer className={styles.footer}>
      <div className={classNames(styles.intervals, CHART_SCROLLABLE_CLASSNAME)}>
        {(Object.keys(Intervals) as Intervals[])
          .filter((interval: Intervals) => {
            if (!IntervalsToTimeframe[interval]) {
              return false;
            }

            return supportedTimeframes.includes(IntervalsToTimeframe[interval]);
          })
          .map((interval) => (
            <Tooltip
              tooltipClassName={styles.tooltip}
              key={interval}
              label={`${t(interval)} ${t('interval for')} ${t(IntervalsToTimeframe[interval] as string)} ${t('timeframe')}`}
            >
              <Button
                key={interval}
                size="sm"
                variant="solid"
                className={`${styles.interval} ${interval === selectedInterval ? styles.pressed : ''}`}
                onClick={() => setIntervalValue(interval)}
                label={t(interval)}
              />
            </Tooltip>
          ))}
      </div>
      <span className={styles.time}>
        {currentTime} UTC{utcOffset}
      </span>
    </footer>
  );
}