mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-01-27 06:28:30 +03:00
Improve filter handling
This commit is contained in:
parent
bbb506925b
commit
b372dd8f03
@ -67,9 +67,39 @@ function Exports() {
|
|||||||
: "exports",
|
: "exports",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const exportsByCase = useMemo<{ [caseId: string]: Export[] }>(() => {
|
||||||
|
const grouped: { [caseId: string]: Export[] } = {};
|
||||||
|
(rawExports ?? []).forEach((exp) => {
|
||||||
|
const caseId = exp.export_case || "none";
|
||||||
|
if (!grouped[caseId]) {
|
||||||
|
grouped[caseId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exportFilter?.cameras?.length) {
|
||||||
|
if (exportFilter.cameras.includes(exp.camera)) {
|
||||||
|
grouped[caseId].push(exp);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
grouped[caseId].push(exp);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return grouped;
|
||||||
|
}, [rawExports, exportFilter]);
|
||||||
|
|
||||||
|
const filteredCases = useMemo<ExportCase[]>(() => {
|
||||||
|
if (!cases) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return cases.filter((caseItem) => {
|
||||||
|
const caseExports = exportsByCase[caseItem.id];
|
||||||
|
return caseExports?.length;
|
||||||
|
});
|
||||||
|
}, [cases, exportsByCase]);
|
||||||
|
|
||||||
const exports = useMemo<Export[]>(
|
const exports = useMemo<Export[]>(
|
||||||
() => (rawExports ?? []).filter((e) => !e.export_case),
|
() => exportsByCase["none"] || [],
|
||||||
[rawExports],
|
[exportsByCase],
|
||||||
);
|
);
|
||||||
|
|
||||||
const mutate = useCallback(() => {
|
const mutate = useCallback(() => {
|
||||||
@ -90,20 +120,20 @@ function Exports() {
|
|||||||
const [selectedAspect, setSelectedAspect] = useState(0.0);
|
const [selectedAspect, setSelectedAspect] = useState(0.0);
|
||||||
|
|
||||||
useSearchEffect("id", (id) => {
|
useSearchEffect("id", (id) => {
|
||||||
if (!exports) {
|
if (!rawExports) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
setSelected(exports.find((exp) => exp.id == id));
|
setSelected(rawExports.find((exp) => exp.id == id));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
useSearchEffect("caseId", (caseId: string) => {
|
useSearchEffect("caseId", (caseId: string) => {
|
||||||
if (!cases) {
|
if (!filteredCases) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const exists = cases.some((c) => c.id === caseId);
|
const exists = filteredCases.some((c) => c.id === caseId);
|
||||||
|
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
return false;
|
return false;
|
||||||
@ -162,8 +192,8 @@ function Exports() {
|
|||||||
useKeyboardListener([], undefined, contentRef);
|
useKeyboardListener([], undefined, contentRef);
|
||||||
|
|
||||||
const selectedCase = useMemo(
|
const selectedCase = useMemo(
|
||||||
() => cases?.find((c) => c.id === selectedCaseId),
|
() => filteredCases?.find((c) => c.id === selectedCaseId),
|
||||||
[cases, selectedCaseId],
|
[filteredCases, selectedCaseId],
|
||||||
);
|
);
|
||||||
|
|
||||||
const resetCaseDialog = useCallback(() => {
|
const resetCaseDialog = useCallback(() => {
|
||||||
@ -276,7 +306,7 @@ function Exports() {
|
|||||||
<CaseView
|
<CaseView
|
||||||
contentRef={contentRef}
|
contentRef={contentRef}
|
||||||
selectedCase={selectedCase}
|
selectedCase={selectedCase}
|
||||||
exports={rawExports}
|
exports={exportsByCase[selectedCase.id] || []}
|
||||||
search={search}
|
search={search}
|
||||||
setSelected={setSelected}
|
setSelected={setSelected}
|
||||||
renameClip={onHandleRename}
|
renameClip={onHandleRename}
|
||||||
@ -287,7 +317,7 @@ function Exports() {
|
|||||||
<AllExportsView
|
<AllExportsView
|
||||||
contentRef={contentRef}
|
contentRef={contentRef}
|
||||||
search={search}
|
search={search}
|
||||||
cases={cases}
|
cases={filteredCases}
|
||||||
exports={exports}
|
exports={exports}
|
||||||
setSelectedCaseId={setSelectedCaseId}
|
setSelectedCaseId={setSelectedCaseId}
|
||||||
setSelected={setSelected}
|
setSelected={setSelected}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user