From fb6f9e617d07f146b97229e81b3f7b9f0ba97a45 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 16 Dec 2025 13:07:29 -0700 Subject: [PATCH] implement basic filter --- .../components/filter/ExportFilterGroup.tsx | 57 ++++++++++++++++++- web/src/pages/Exports.tsx | 8 ++- web/vite.config.ts | 2 +- 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/web/src/components/filter/ExportFilterGroup.tsx b/web/src/components/filter/ExportFilterGroup.tsx index 680b24fee..c5fe4f33c 100644 --- a/web/src/components/filter/ExportFilterGroup.tsx +++ b/web/src/components/filter/ExportFilterGroup.tsx @@ -1,4 +1,14 @@ -import { ExportFilter, ExportFilters } from "@/types/export"; +import { cn } from "@/lib/utils"; +import { + DEFAULT_EXPORT_FILTERS, + ExportFilter, + ExportFilters, +} from "@/types/export"; +import { CamerasFilterButton } from "./CamerasFilterButton"; +import { useAllowedCameras } from "@/hooks/use-allowed-cameras"; +import { useMemo } from "react"; +import { FrigateConfig } from "@/types/frigateConfig"; +import useSWR from "swr"; type ExportFilterGroupProps = { className: string; @@ -9,8 +19,49 @@ type ExportFilterGroupProps = { export default function ExportFilterGroup({ className, filter, - filters, + filters = DEFAULT_EXPORT_FILTERS, onUpdateFilter, }: ExportFilterGroupProps) { - return
; + const { data: config } = useSWR("config", { + revalidateOnFocus: false, + }); + const allowedCameras = useAllowedCameras(); + + const filterValues = useMemo( + () => ({ + cameras: allowedCameras, + }), + [allowedCameras], + ); + + const groups = useMemo(() => { + if (!config) { + return []; + } + + return Object.entries(config.camera_groups).sort( + (a, b) => a[1].order - b[1].order, + ); + }, [config]); + + return ( +
+ {filters.includes("cameras") && ( + { + onUpdateFilter({ ...filter, cameras: newCameras }); + }} + /> + )} +
+ ); } diff --git a/web/src/pages/Exports.tsx b/web/src/pages/Exports.tsx index 00fe37264..5faf0c08f 100644 --- a/web/src/pages/Exports.tsx +++ b/web/src/pages/Exports.tsx @@ -35,6 +35,7 @@ import { useTranslation } from "react-i18next"; import { LuFolderX } from "react-icons/lu"; import { toast } from "sonner"; import useSWR from "swr"; +import ExportFilterGroup from "@/components/filter/ExportFilterGroup"; function Exports() { const { t } = useTranslation(["views/exports"]); @@ -246,7 +247,12 @@ function Exports() { onChange={(e) => setSearch(e.target.value)} /> -
+ {}} + /> {selectedCase ? ( diff --git a/web/vite.config.ts b/web/vite.config.ts index 98a9afde1..148048995 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -4,7 +4,7 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react-swc"; import monacoEditorPlugin from "vite-plugin-monaco-editor"; -const proxyHost = process.env.PROXY_HOST || "192.168.50.106:5002"; +const proxyHost = process.env.PROXY_HOST || "1ocalhost:5000"; // https://vitejs.dev/config/ export default defineConfig({