+ {Object.keys(streamers).map((streamerId) => {
+ const streamer = streamers[streamerId]
+
+ const timelineBar =
+ {streamer.vods.map(vod =>
)}
+
+
+ const playingVod = playingVodForStreamer[streamerId];
+
+ return (
+
+
+
+ onStreamerNameDragStart(e, streamerId)} draggable="true">
+
+ { streamerImageRefs.current[streamerId] = img }} src={`${publicRuntimeConfig.CDN_URL}${streamer.imagePath}`} alt={streamer.name} w={'1.5em'} h={'1.5em'} radius={'1.5em'} />
+ {streamer.name}
+
+
+ {
+ if (!playingVod) return;
+ const valAsNumber = Math.trunc(+value * 1000);
+ if (isNaN(valAsNumber)) return;
+ setVodOffset(playingVod.id, valAsNumber);
+ }}
+ />
+
+
+ {timelineBar}
+
+ )
+ })}
+
+ {
+ (() => {
+ let timelineBarRef: HTMLDivElement | null = null;
+
+ return
+ timelineBarRef = el} onClick={(event) => onTimelineClick(timelineBarRef, event)} onPointerMove={(event) => { updateTimelineTooltip(timelineBarRef, event); updateHoverPlayhead(timelineBarRef, event) }} onPointerLeave={hideHoverPlayhead}>
+
+ {hoverPlayheadDate != null &&
}
+
+
+ })()
+ }
+
+ }
+