Review improvements (#11879)

* Update segment even when number of active objects is the same

* add score to frigate+ chip

* Add support for selecting zones

* Add api support for filtering on zones

* Adjust UI

* Update filtering logic

* Clean up
This commit is contained in:
Nicolas Mowen
2024-06-11 09:19:17 -05:00
committed by GitHub
parent b3eab17f2c
commit c9d253a320
11 changed files with 200 additions and 17 deletions

View File

@@ -49,6 +49,7 @@ import scrollIntoView from "scroll-into-view-if-needed";
import { Toaster } from "@/components/ui/sonner";
import { toast } from "sonner";
import { cn } from "@/lib/utils";
import { FilterList } from "@/types/filter";
type EventViewProps = {
reviewItems?: SegmentedReviewData;
@@ -203,8 +204,9 @@ export default function EventView({
// review filter info
const reviewLabels = useMemo(() => {
const reviewFilterList = useMemo<FilterList>(() => {
const uniqueLabels = new Set<string>();
const uniqueZones = new Set<string>();
reviewItems?.all?.forEach((rev) => {
rev.data.objects.forEach((obj) =>
@@ -213,7 +215,11 @@ export default function EventView({
rev.data.audio.forEach((aud) => uniqueLabels.add(aud));
});
return [...uniqueLabels];
reviewItems?.all?.forEach((rev) => {
rev.data.zones.forEach((zone) => uniqueZones.add(zone));
});
return { labels: [...uniqueLabels], zones: [...uniqueZones] };
}, [reviewItems]);
if (!config) {
@@ -282,7 +288,7 @@ export default function EventView({
reviewSummary={reviewSummary}
filter={filter}
motionOnly={motionOnly}
filterLabels={reviewLabels}
filterList={reviewFilterList}
onUpdateFilter={updateFilter}
setMotionOnly={setMotionOnly}
/>

View File

@@ -111,7 +111,7 @@ export function RecordingView({
() => chunkedTimeRange[selectedRangeIdx],
[selectedRangeIdx, chunkedTimeRange],
);
const reviewLabels = useMemo(() => {
const reviewFilterList = useMemo(() => {
const uniqueLabels = new Set<string>();
reviewItems?.forEach((rev) => {
@@ -121,7 +121,13 @@ export function RecordingView({
rev.data.audio.forEach((aud) => uniqueLabels.add(aud));
});
return [...uniqueLabels];
const uniqueZones = new Set<string>();
reviewItems?.forEach((rev) => {
rev.data.zones.forEach((zone) => uniqueZones.add(zone));
});
return { labels: [...uniqueLabels], zones: [...uniqueZones] };
}, [reviewItems]);
// export
@@ -391,7 +397,7 @@ export function RecordingView({
reviewSummary={reviewSummary}
filter={filter}
motionOnly={false}
filterLabels={reviewLabels}
filterList={reviewFilterList}
onUpdateFilter={updateFilter}
setMotionOnly={() => {}}
/>
@@ -434,7 +440,8 @@ export function RecordingView({
latestTime={timeRange.before}
mode={exportMode}
range={exportRange}
allLabels={reviewLabels}
allLabels={reviewFilterList.labels}
allZones={reviewFilterList.zones}
onUpdateFilter={updateFilter}
setRange={setExportRange}
setMode={setExportMode}