;
- playback: TimelinePlayback;
+ timelineData: CardsData;
+ selectedPlayback: TimelinePlayback;
+ setSelectedPlayback: (timeline: TimelinePlayback) => void;
playbackUri: string;
- playbackTimes: { start: number; end: number };
timelineTime: number;
hasRelevantPreview: boolean;
scrubbing: boolean;
@@ -244,9 +245,10 @@ function DesktopView({
config,
playerRef,
previewRef,
- playback,
+ timelineData,
+ selectedPlayback,
+ setSelectedPlayback,
playbackUri,
- playbackTimes,
timelineTime,
hasRelevantPreview,
scrubbing,
@@ -257,7 +259,13 @@ function DesktopView({
onStopScrubbing,
}: DesktopViewProps) {
const timelineStack =
- playback == undefined ? [] : getTimelineHoursForDay(timelineTime);
+ selectedPlayback == undefined
+ ? []
+ : getTimelineHoursForDay(
+ selectedPlayback.camera,
+ timelineData,
+ timelineTime
+ );
return (
@@ -283,7 +291,9 @@ function DesktopView({
seekOptions={{ forward: 10, backward: 5 }}
onReady={(player) => {
playerRef.current = player;
- player.currentTime(timelineTime - playbackTimes.start);
+ player.currentTime(
+ timelineTime - selectedPlayback.range.start
+ );
player.on("playing", () => {
onSelectItem(undefined);
});
@@ -295,7 +305,7 @@ function DesktopView({
{config && focusedItem ? (
) : undefined}
@@ -311,7 +321,7 @@ function DesktopView({
loadingSpinner: false,
sources: [
{
- src: `${playback.relevantPreview?.src}`,
+ src: `${selectedPlayback.relevantPreview?.src}`,
type: "video/mp4",
},
],
@@ -330,12 +340,12 @@ function DesktopView({
>
- {playback.timelineItems.map((timeline) => {
+ {selectedPlayback.timelineItems.map((timeline) => {
return (
onSelectItem(timeline)}
/>
);
@@ -343,38 +353,42 @@ function DesktopView({
- {timelineStack.map((range) => {
- const isSelected = timelineTime > range.start && timelineTime < range.end;
+ {timelineStack.map((timeline) => {
+ const isSelected =
+ timeline.range.start == selectedPlayback.range.start;
return (
{
- if (data.items.length > 0) {
- const selected = data.items[0];
- onSelectItem(
- playback.timelineItems.find(
- (timeline) => timeline.timestamp == selected
- )
- );
+ key={timeline.range.start}
+ items={[]}
+ timeBars={
+ hasRelevantPreview
+ ? [{ time: new Date(timelineTime * 1000), id: "playback" }]
+ : []
}
- }}
- />
+ options={{
+ snap: null,
+ min: new Date(timeline.range.start * 1000),
+ max: new Date(timeline.range.end * 1000),
+ zoomable: false,
+ }}
+ timechangeHandler={onScrubTime}
+ timechangedHandler={onStopScrubbing}
+ doubleClickHandler={(data) => {
+ setSelectedPlayback(timeline);
+ }}
+ selectHandler={(data) => {
+ if (data.items.length > 0) {
+ const selected = data.items[0];
+ onSelectItem(
+ selectedPlayback.timelineItems.find(
+ (timeline) => timeline.timestamp == selected
+ )
+ );
+ }
+ }}
+ />
);
})}
@@ -389,7 +403,6 @@ type MobileViewProps = {
previewRef: React.MutableRefObject
;
playback: TimelinePlayback;
playbackUri: string;
- playbackTimes: { start: number; end: number };
timelineTime: number;
hasRelevantPreview: boolean;
scrubbing: boolean;
@@ -405,7 +418,6 @@ function MobileView({
previewRef,
playback,
playbackUri,
- playbackTimes,
timelineTime,
hasRelevantPreview,
scrubbing,
@@ -437,7 +449,7 @@ function MobileView({
seekOptions={{ forward: 10, backward: 5 }}
onReady={(player) => {
playerRef.current = player;
- player.currentTime(timelineTime - playbackTimes.start);
+ player.currentTime(timelineTime - playback.range.start);
player.on("playing", () => {
onSelectItem(undefined);
});
@@ -493,14 +505,14 @@ function MobileView({
}
options={{
start: new Date(
- Math.max(playbackTimes.start, timelineTime - 300) * 1000
+ Math.max(playback.range.start, timelineTime - 300) * 1000
),
end: new Date(
- Math.min(playbackTimes.end, timelineTime + 300) * 1000
+ Math.min(playback.range.end, timelineTime + 300) * 1000
),
snap: null,
- min: new Date(playbackTimes.start * 1000),
- max: new Date(playbackTimes.end * 1000),
+ min: new Date(playback.range.start * 1000),
+ max: new Date(playback.range.end * 1000),
timeAxis: { scale: "minute", step: 5 },
}}
timechangeHandler={onScrubTime}