import { StyledDiv } from 'components/Styled'; import { ITraceMetaData } from 'container/GantChart'; import { IIntervalUnit, INTERVAL_UNITS } from 'container/TraceDetail/utils'; import useThemeMode from 'hooks/useThemeMode'; import React, { useEffect, useRef, useState } from 'react'; import { useMeasure } from 'react-use'; import { styles, Svg, TimelineInterval } from './styles'; import { Interval } from './types'; import { getIntervals, getIntervalSpread } from './utils'; const TimelineHeight = 22; const TimelineHSpacing = 0; function Timeline({ traceMetaData, globalTraceMetadata, setIntervalUnit, }: TimelineProps): JSX.Element { const [ref, { width }] = useMeasure(); const { isDarkMode } = useThemeMode(); const asd = useRef(''); asd.current = '1'; const [intervals, setIntervals] = useState(null); useEffect(() => { const { baseInterval, baseSpread, intervalSpreadNormalized, } = getIntervalSpread({ globalTraceMetadata, localTraceMetaData: traceMetaData, }); let intervalUnit = INTERVAL_UNITS[0]; for (let idx = 0; idx < INTERVAL_UNITS.length; idx += 1) { const standardInterval = INTERVAL_UNITS[idx]; if (baseSpread * standardInterval.multiplier < 1) { const index = idx; if (index > 1) intervalUnit = INTERVAL_UNITS[index - 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: { globalStart: number; globalEnd: number; spread: number; totalSpans: number; levels: number; }; globalTraceMetadata: ITraceMetaData; setIntervalUnit: React.Dispatch>; } export default Timeline;