mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-04-13 18:47:36 +03:00
support multiple selected objects in context
This commit is contained in:
parent
0fbfa77e3c
commit
182df88adf
@ -1,16 +1,14 @@
|
|||||||
import React, { createContext, useContext, useState, useEffect } from "react";
|
import React, { createContext, useContext, useState, useEffect } from "react";
|
||||||
import { FrigateConfig } from "@/types/frigateConfig";
|
import { FrigateConfig } from "@/types/frigateConfig";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import { ObjectLifecycleSequence } from "@/types/timeline";
|
|
||||||
|
|
||||||
export interface DetailStreamContextType {
|
export interface DetailStreamContextType {
|
||||||
selectedObjectId: string | undefined;
|
selectedObjectIds: string[];
|
||||||
selectedObjectTimeline?: ObjectLifecycleSequence[];
|
|
||||||
currentTime: number;
|
currentTime: number;
|
||||||
camera: string;
|
camera: string;
|
||||||
annotationOffset: number; // milliseconds
|
annotationOffset: number; // milliseconds
|
||||||
setAnnotationOffset: (ms: number) => void;
|
setAnnotationOffset: (ms: number) => void;
|
||||||
setSelectedObjectId: (id: string | undefined) => void;
|
toggleObjectSelection: (id: string | undefined) => void;
|
||||||
isDetailMode: boolean;
|
isDetailMode: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,13 +29,21 @@ export function DetailStreamProvider({
|
|||||||
currentTime,
|
currentTime,
|
||||||
camera,
|
camera,
|
||||||
}: DetailStreamProviderProps) {
|
}: DetailStreamProviderProps) {
|
||||||
const [selectedObjectId, setSelectedObjectId] = useState<
|
const [selectedObjectIds, setSelectedObjectIds] = useState<string[]>([]);
|
||||||
string | undefined
|
|
||||||
>();
|
|
||||||
|
|
||||||
const { data: selectedObjectTimeline } = useSWR<ObjectLifecycleSequence[]>(
|
const toggleObjectSelection = (id: string | undefined) => {
|
||||||
selectedObjectId ? ["timeline", { source_id: selectedObjectId }] : null,
|
if (id === undefined) {
|
||||||
);
|
setSelectedObjectIds([]);
|
||||||
|
} else {
|
||||||
|
setSelectedObjectIds((prev) => {
|
||||||
|
if (prev.includes(id)) {
|
||||||
|
return prev.filter((existingId) => existingId !== id);
|
||||||
|
} else {
|
||||||
|
return [...prev, id];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const { data: config } = useSWR<FrigateConfig>("config");
|
const { data: config } = useSWR<FrigateConfig>("config");
|
||||||
|
|
||||||
@ -53,13 +59,12 @@ export function DetailStreamProvider({
|
|||||||
}, [config, camera]);
|
}, [config, camera]);
|
||||||
|
|
||||||
const value: DetailStreamContextType = {
|
const value: DetailStreamContextType = {
|
||||||
selectedObjectId,
|
selectedObjectIds,
|
||||||
selectedObjectTimeline,
|
|
||||||
currentTime,
|
currentTime,
|
||||||
camera,
|
camera,
|
||||||
annotationOffset,
|
annotationOffset,
|
||||||
setAnnotationOffset,
|
setAnnotationOffset,
|
||||||
setSelectedObjectId,
|
toggleObjectSelection,
|
||||||
isDetailMode,
|
isDetailMode,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user