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; reviewSummary?: ReviewSummary;
filter?: ReviewFilter; filter?: ReviewFilter;
motionOnly: boolean; motionOnly: boolean;
filterLabels?: string[];
onUpdateFilter: (filter: ReviewFilter) => void; onUpdateFilter: (filter: ReviewFilter) => void;
setMotionOnly: React.Dispatch<React.SetStateAction<boolean>>; setMotionOnly: React.Dispatch<React.SetStateAction<boolean>>;
}; };
@ -63,12 +64,17 @@ export default function ReviewFilterGroup({
reviewSummary, reviewSummary,
filter, filter,
motionOnly, motionOnly,
filterLabels,
onUpdateFilter, onUpdateFilter,
setMotionOnly, setMotionOnly,
}: ReviewFilterGroupProps) { }: ReviewFilterGroupProps) {
const { data: config } = useSWR<FrigateConfig>("config"); const { data: config } = useSWR<FrigateConfig>("config");
const allLabels = useMemo<string[]>(() => { const allLabels = useMemo<string[]>(() => {
if (filterLabels) {
return filterLabels;
}
if (!config) { if (!config) {
return []; return [];
} }
@ -93,7 +99,7 @@ export default function ReviewFilterGroup({
}); });
return [...labels].sort(); return [...labels].sort();
}, [config, filter]); }, [config, filterLabels, filter]);
const filterValues = useMemo( const filterValues = useMemo(
() => ({ () => ({
@ -197,6 +203,7 @@ export default function ReviewFilterGroup({
filter={filter} filter={filter}
currentSeverity={currentSeverity} currentSeverity={currentSeverity}
reviewSummary={reviewSummary} reviewSummary={reviewSummary}
allLabels={allLabels}
onUpdateFilter={onUpdateFilter} onUpdateFilter={onUpdateFilter}
// not applicable as exports are not used // not applicable as exports are not used
camera="" 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 { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer";
import { Button } from "../ui/button"; import { Button } from "../ui/button";
import { FaArrowDown, FaCalendarAlt, FaCog, FaFilter } from "react-icons/fa"; 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 { ReviewFilter, ReviewSeverity, ReviewSummary } from "@/types/review";
import { getEndOfDayTimestamp } from "@/utils/dateUtil"; import { getEndOfDayTimestamp } from "@/utils/dateUtil";
import { GeneralFilterContent } from "../filter/ReviewFilterGroup"; import { GeneralFilterContent } from "../filter/ReviewFilterGroup";
import useSWR from "swr";
import { FrigateConfig } from "@/types/frigateConfig";
import { toast } from "sonner"; import { toast } from "sonner";
import axios from "axios"; import axios from "axios";
import SaveExportOverlay from "./SaveExportOverlay"; import SaveExportOverlay from "./SaveExportOverlay";
@ -37,6 +35,7 @@ type MobileReviewSettingsDrawerProps = {
range?: TimeRange; range?: TimeRange;
mode: ExportMode; mode: ExportMode;
reviewSummary?: ReviewSummary; reviewSummary?: ReviewSummary;
allLabels: string[];
onUpdateFilter: (filter: ReviewFilter) => void; onUpdateFilter: (filter: ReviewFilter) => void;
setRange: (range: TimeRange | undefined) => void; setRange: (range: TimeRange | undefined) => void;
setMode: (mode: ExportMode) => void; setMode: (mode: ExportMode) => void;
@ -51,11 +50,11 @@ export default function MobileReviewSettingsDrawer({
range, range,
mode, mode,
reviewSummary, reviewSummary,
allLabels,
onUpdateFilter, onUpdateFilter,
setRange, setRange,
setMode, setMode,
}: MobileReviewSettingsDrawerProps) { }: MobileReviewSettingsDrawerProps) {
const { data: config } = useSWR<FrigateConfig>("config");
const [drawerMode, setDrawerMode] = useState<DrawerMode>("none"); const [drawerMode, setDrawerMode] = useState<DrawerMode>("none");
// exports // exports
@ -102,32 +101,6 @@ export default function MobileReviewSettingsDrawer({
// filters // 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>( const [currentLabels, setCurrentLabels] = useState<string[] | undefined>(
filter?.labels, filter?.labels,
); );

View File

@ -232,6 +232,21 @@ export default function EventView({
100, 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) { if (!config) {
return <ActivityIndicator />; return <ActivityIndicator />;
} }
@ -297,8 +312,9 @@ export default function EventView({
currentSeverity={severityToggle} currentSeverity={severityToggle}
reviewSummary={reviewSummary} reviewSummary={reviewSummary}
filter={filter} filter={filter}
onUpdateFilter={updateFilter}
motionOnly={motionOnly} motionOnly={motionOnly}
filterLabels={reviewLabels}
onUpdateFilter={updateFilter}
setMotionOnly={setMotionOnly} setMotionOnly={setMotionOnly}
/> />
) : ( ) : (