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); + } } - } - }} - /> - ))} + }} + /> + ))} +
- +