mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-11 13:45:25 +03:00
Only show relevant labels
This commit is contained in:
parent
61dd1377d6
commit
fe8c0937e8
@ -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=""
|
||||||
|
|||||||
@ -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,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user