import { StyledDiv } from 'components/Styled'; import { IIntervalUnit, INTERVAL_UNITS } from 'container/TraceDetail/utils'; import useThemeMode from 'hooks/useThemeMode'; import React, { useEffect, useState } from 'react'; import { useMeasure } from 'react-use'; import { styles, Svg, TimelineInterval } from './styles'; import { Interval } from './types'; import { getIntervals, getIntervalSpread } from './utils'; const Timeline_Height = 22; const Timeline_H_Spacing = 0; const Timeline = ({ traceMetaData, globalTraceMetadata, setIntervalUnit, }: TimelineProps): JSX.Element => { const [ref, { width }] = useMeasure(); const { isDarkMode } = useThemeMode(); const [intervals, setIntervals] = useState(null); useEffect(() => { const { baseInterval, baseSpread, intervalSpreadNormalized, } = getIntervalSpread({ globalTraceMetadata: globalTraceMetadata, localTraceMetaData: traceMetaData, }); let intervalUnit = INTERVAL_UNITS[0]; for (let idx = 0; idx < INTERVAL_UNITS.length; idx++) { const standard_interval = INTERVAL_UNITS[idx]; if (baseSpread * standard_interval.multiplier < 1) { if (idx > 1) intervalUnit = INTERVAL_UNITS[idx - 1]; break; } } intervalUnit = intervalUnit || INTERVAL_UNITS[0]; setIntervals( getIntervals({ baseInterval, baseSpread, intervalSpreadNormalized, intervalUnit, }), ); setIntervalUnit(intervalUnit); }, [traceMetaData, globalTraceMetadata, setIntervalUnit]); return ( {intervals && intervals.map((interval, index) => ( {interval.label} ))} ); }; interface TimelineProps { traceMetaData: object; globalTraceMetadata: Record; intervalUnit: IIntervalUnit; setIntervalUnit: VoidFunction; } export default Timeline;