diff --git a/web/src/components/filter/SearchFilterGroup.tsx b/web/src/components/filter/SearchFilterGroup.tsx
index 376c9b599..6850b9df3 100644
--- a/web/src/components/filter/SearchFilterGroup.tsx
+++ b/web/src/components/filter/SearchFilterGroup.tsx
@@ -448,105 +448,6 @@ function ZoneFilterButton({
);
}
-type ZoneFilterContentProps = {
- allZones?: string[];
- selectedZones?: string[];
- currentZones?: string[];
- updateZoneFilter?: (zones: string[] | undefined) => void;
- setCurrentZones?: (zones: string[] | undefined) => void;
- onClose: () => void;
-};
-export function ZoneFilterContent({
- allZones,
- selectedZones,
- currentZones,
- updateZoneFilter,
- setCurrentZones,
- onClose,
-}: ZoneFilterContentProps) {
- return (
- <>
-
- {allZones && setCurrentZones && (
- <>
- {isDesktop &&
}
-
-
- {
- if (isChecked) {
- setCurrentZones(undefined);
- }
- }}
- />
-
-
- {allZones.map((item) => (
- {
- if (isChecked) {
- const updatedZones = currentZones
- ? [...currentZones]
- : [];
-
- updatedZones.push(item);
- setCurrentZones(updatedZones);
- } else {
- const updatedZones = currentZones
- ? [...currentZones]
- : [];
-
- // can not deselect the last item
- if (updatedZones.length > 1) {
- updatedZones.splice(updatedZones.indexOf(item), 1);
- setCurrentZones(updatedZones);
- }
- }
- }}
- />
- ))}
-
- >
- )}
-
- {isDesktop && }
-
-
-
-
- >
- );
-}
-
type SubFilterButtonProps = {
allSubLabels: string[];
selectedSubLabels: string[] | undefined;
diff --git a/web/src/components/overlay/dialog/SearchFilterDialog.tsx b/web/src/components/overlay/dialog/SearchFilterDialog.tsx
index 17ed0cb30..7359505f8 100644
--- a/web/src/components/overlay/dialog/SearchFilterDialog.tsx
+++ b/web/src/components/overlay/dialog/SearchFilterDialog.tsx
@@ -19,6 +19,10 @@ import {
import { isDesktop } from "react-device-detect";
import { useFormattedHour } from "@/hooks/use-date-utils";
import Heading from "@/components/ui/heading";
+import FilterSwitch from "@/components/filter/FilterSwitch";
+import { Switch } from "@/components/ui/switch";
+import { Label } from "@/components/ui/label";
+import { DropdownMenuSeparator } from "@/components/ui/dropdown-menu";
type SearchFilterDialogProps = {
config?: FrigateConfig;
@@ -63,6 +67,35 @@ export default function SearchFilterDialog({
setCurrentFilter({ time_range: newRange, ...currentFilter })
}
/>
+
+ setCurrentFilter({ zones: newZones, ...currentFilter })
+ }
+ />
+ {isDesktop && }
+
+
+
+
>
);
@@ -70,7 +103,7 @@ export default function SearchFilterDialog({
@@ -210,6 +243,72 @@ function TimeRangeFilterContent({
);
}
+type ZoneFilterContentProps = {
+ allZones?: string[];
+ zones?: string[];
+ updateZones: (zones: string[] | undefined) => void;
+};
+export function ZoneFilterContent({
+ allZones,
+ zones,
+ updateZones,
+}: ZoneFilterContentProps) {
+ return (
+ <>
+
+ {allZones && (
+ <>
+ {isDesktop &&
}
+
+
+ {
+ if (isChecked) {
+ updateZones(undefined);
+ }
+ }}
+ />
+
+
+ {allZones.map((item) => (
+ {
+ if (isChecked) {
+ const updatedZones = zones ? [...zones] : [];
+
+ updatedZones.push(item);
+ updateZones(updatedZones);
+ } else {
+ const updatedZones = zones ? [...zones] : [];
+
+ // can not deselect the last item
+ if (updatedZones.length > 1) {
+ updatedZones.splice(updatedZones.indexOf(item), 1);
+ updateZones(updatedZones);
+ }
+ }
+ }}
+ />
+ ))}
+
+ >
+ )}
+
+ >
+ );
+}
+
/**
* {filters.includes("date") && (