Only show relevant labels

This commit is contained in:
Nicolas Mowen 2024-05-10 06:29:37 -06:00
parent 61dd1377d6
commit fe8c0937e8
3 changed files with 28 additions and 32 deletions

View File

@ -53,6 +53,7 @@ type ReviewFilterGroupProps = {
reviewSummary?: ReviewSummary;
filter?: ReviewFilter;
motionOnly: boolean;
filterLabels?: string[];
onUpdateFilter: (filter: ReviewFilter) => void;
setMotionOnly: React.Dispatch<React.SetStateAction<boolean>>;
};
@ -63,12 +64,17 @@ export default function ReviewFilterGroup({
reviewSummary,
filter,
motionOnly,
filterLabels,
onUpdateFilter,
setMotionOnly,
}: ReviewFilterGroupProps) {
const { data: config } = useSWR<FrigateConfig>("config");
const allLabels = useMemo<string[]>(() => {
if (filterLabels) {
return filterLabels;
}
if (!config) {
return [];
}
@ -93,7 +99,7 @@ export default function ReviewFilterGroup({
});
return [...labels].sort();
}, [config, filter]);
}, [config, filterLabels, filter]);
const filterValues = useMemo(
() => ({
@ -197,6 +203,7 @@ export default function ReviewFilterGroup({
filter={filter}
currentSeverity={currentSeverity}
reviewSummary={reviewSummary}
allLabels={allLabels}
onUpdateFilter={onUpdateFilter}
// not applicable as exports are not used
camera=""

View File

@ -1,4 +1,4 @@
import { useCallback, useMemo, useState } from "react";
import { useCallback, useState } from "react";
import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer";
import { Button } from "../ui/button";
import { FaArrowDown, FaCalendarAlt, FaCog, FaFilter } from "react-icons/fa";
@ -10,8 +10,6 @@ import { SelectSeparator } from "../ui/select";
import { ReviewFilter, ReviewSeverity, ReviewSummary } from "@/types/review";
import { getEndOfDayTimestamp } from "@/utils/dateUtil";
import { GeneralFilterContent } from "../filter/ReviewFilterGroup";
import useSWR from "swr";
import { FrigateConfig } from "@/types/frigateConfig";
import { toast } from "sonner";
import axios from "axios";
import SaveExportOverlay from "./SaveExportOverlay";
@ -37,6 +35,7 @@ type MobileReviewSettingsDrawerProps = {
range?: TimeRange;
mode: ExportMode;
reviewSummary?: ReviewSummary;
allLabels: string[];
onUpdateFilter: (filter: ReviewFilter) => void;
setRange: (range: TimeRange | undefined) => void;
setMode: (mode: ExportMode) => void;
@ -51,11 +50,11 @@ export default function MobileReviewSettingsDrawer({
range,
mode,
reviewSummary,
allLabels,
onUpdateFilter,
setRange,
setMode,
}: MobileReviewSettingsDrawerProps) {
const { data: config } = useSWR<FrigateConfig>("config");
const [drawerMode, setDrawerMode] = useState<DrawerMode>("none");
// exports
@ -102,32 +101,6 @@ export default function MobileReviewSettingsDrawer({
// filters
const allLabels = useMemo<string[]>(() => {
if (!config) {
return [];
}
const labels = new Set<string>();
const cameras = filter?.cameras || Object.keys(config.cameras);
cameras.forEach((camera) => {
if (camera == "birdseye") {
return;
}
const cameraConfig = config.cameras[camera];
cameraConfig.objects.track.forEach((label) => {
labels.add(label);
});
if (cameraConfig.audio.enabled_in_config) {
cameraConfig.audio.listen.forEach((label) => {
labels.add(label);
});
}
});
return [...labels].sort();
}, [config, filter]);
const [currentLabels, setCurrentLabels] = useState<string[] | undefined>(
filter?.labels,
);

View File

@ -232,6 +232,21 @@ export default function EventView({
100,
);
// review filter info
const reviewLabels = useMemo(() => {
const uniqueLabels = new Set<string>();
reviewItems?.all?.forEach((rev) => {
rev.data.objects.forEach((obj) =>
uniqueLabels.add(obj.replace("-verified", "")),
);
rev.data.audio.forEach((aud) => uniqueLabels.add(aud));
});
return [...uniqueLabels];
}, [reviewItems]);
if (!config) {
return <ActivityIndicator />;
}
@ -297,8 +312,9 @@ export default function EventView({
currentSeverity={severityToggle}
reviewSummary={reviewSummary}
filter={filter}
onUpdateFilter={updateFilter}
motionOnly={motionOnly}
filterLabels={reviewLabels}
onUpdateFilter={updateFilter}
setMotionOnly={setMotionOnly}
/>
) : (