import { StyledDiv } from 'components/Styled'; import { INTERVAL_UNITS } from 'container/TraceDetail/utils'; import useThemeMode from 'hooks/useThemeMode'; import React, { useMemo, useState } from 'react'; import { useMeasure } from 'react-use'; import { styles, Svg, TimelineInterval } from './styles'; import { Interval } from './types'; import { getIntervals, getIntervalSpread } from './utils'; interface TimelineProps { traceMetaData: object; globalTraceMetadata: object; intervalUnit: object; setIntervalUnit: Function; } const Timeline = ({ traceMetaData, globalTraceMetadata, intervalUnit, setIntervalUnit, }: TimelineProps): JSX.Element => { 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;