import React, { useState, useMemo } from 'react'; import { isEqual } from 'lodash-es'; import styles from './style.module.css'; import { useMeasure } from 'react-use'; import { toFixed } from 'utils/toFixed'; import { INTERVAL_UNITS, resolveTimeFromInterval, } from 'container/TraceDetail/utils'; import useThemeMode from 'hooks/useThemeMode'; import { Interval } from './types'; import { getIntervalSpread, getIntervals } from './utils'; interface TimelineProps { traceMetaData: object; globalTraceMetadata: object; intervalUnit: object; setIntervalUnit: Function; } const Timeline = ({ traceMetaData, globalTraceMetadata, intervalUnit, setIntervalUnit, }: TimelineProps) => { const [ref, { width }] = useMeasure(); const { isDarkMode } = useThemeMode(); const Timeline_Height = 22; const Timeline_H_Spacing = 0; const [intervals, setIntervals] = useState(null); useMemo(() => { const { baseInterval, baseSpread, intervalSpreadNormalized, } = getIntervalSpread({ globalTraceMetadata: globalTraceMetadata, localTraceMetaData: traceMetaData, }); let intervalUnit = INTERVAL_UNITS[0]; for (const idx in INTERVAL_UNITS) { const standard_interval = INTERVAL_UNITS[idx]; if (baseSpread * standard_interval.multiplier < 1) { intervalUnit = INTERVAL_UNITS[idx - 1]; break; } } setIntervalUnit(intervalUnit); setIntervals( getIntervals({ baseInterval, baseSpread, intervalSpreadNormalized, intervalUnit, }), ); }, [traceMetaData, globalTraceMetadata]); return (
{intervals && intervals.map((interval, index) => ( {interval.label} ))}
); }; export default Timeline;