diff --git a/web/src/components/filter/FilterSwitch.tsx b/web/src/components/filter/FilterSwitch.tsx
new file mode 100644
index 000000000..8af6d6ce3
--- /dev/null
+++ b/web/src/components/filter/FilterSwitch.tsx
@@ -0,0 +1,29 @@
+import { Switch } from "../ui/switch";
+import { Label } from "../ui/label";
+
+type FilterSwitchProps = {
+ label: string;
+ isChecked: boolean;
+ onCheckedChange: (checked: boolean) => void;
+};
+export default function FilterSwitch({
+ label,
+ isChecked,
+ onCheckedChange,
+}: FilterSwitchProps) {
+ return (
+
+
+
+
+ );
+}
diff --git a/web/src/components/filter/ReviewFilterGroup.tsx b/web/src/components/filter/ReviewFilterGroup.tsx
index a92399539..252b8d5df 100644
--- a/web/src/components/filter/ReviewFilterGroup.tsx
+++ b/web/src/components/filter/ReviewFilterGroup.tsx
@@ -30,6 +30,7 @@ import MobileReviewSettingsDrawer, {
DrawerFeatures,
} from "../overlay/MobileReviewSettingsDrawer";
import useOptimisticState from "@/hooks/use-optimistic-state";
+import FilterSwitch from "./FilterSwitch";
const REVIEW_FILTERS = [
"cameras",
@@ -248,8 +249,8 @@ export function CamerasFilterButton({
>
)}
-
-
+ {
@@ -260,51 +261,52 @@ export function CamerasFilterButton({
/>
{groups.length > 0 && (
<>
-
+
{groups.map(([name, conf]) => {
return (
- {
- setCurrentCameras([...conf.cameras]);
- }}
- />
+ className="w-full px-2 py-1.5 text-sm text-primary capitalize cursor-pointer rounded-lg hover:bg-muted"
+ onClick={() => setCurrentCameras([...conf.cameras])}
+ >
+ {name}
+
);
})}
>
)}
-
- {allCameras.map((item) => (
- {
- if (isChecked) {
- const updatedCameras = currentCameras
- ? [...currentCameras]
- : [];
+
+
+ {allCameras.map((item) => (
+ {
+ if (isChecked) {
+ const updatedCameras = currentCameras
+ ? [...currentCameras]
+ : [];
- updatedCameras.push(item);
- setCurrentCameras(updatedCameras);
- } else {
- const updatedCameras = currentCameras
- ? [...currentCameras]
- : [];
-
- // can not deselect the last item
- if (updatedCameras.length > 1) {
- updatedCameras.splice(updatedCameras.indexOf(item), 1);
+ updatedCameras.push(item);
setCurrentCameras(updatedCameras);
+ } else {
+ const updatedCameras = currentCameras
+ ? [...currentCameras]
+ : [];
+
+ // can not deselect the last item
+ if (updatedCameras.length > 1) {
+ updatedCameras.splice(updatedCameras.indexOf(item), 1);
+ setCurrentCameras(updatedCameras);
+ }
}
- }
- }}
- />
- ))}
+ }}
+ />
+ ))}
+
-
+