diff --git a/web/src/components/ui/slider.tsx b/web/src/components/ui/slider.tsx index 4907ff9d8..0f57209d8 100644 --- a/web/src/components/ui/slider.tsx +++ b/web/src/components/ui/slider.tsx @@ -1,7 +1,7 @@ -import * as React from "react" -import * as SliderPrimitive from "@radix-ui/react-slider" +import * as React from "react"; +import * as SliderPrimitive from "@radix-ui/react-slider"; -import { cn } from "@/lib/utils" +import { cn } from "@/lib/utils"; const Slider = React.forwardRef< React.ElementRef, @@ -11,7 +11,7 @@ const Slider = React.forwardRef< ref={ref} className={cn( "relative flex w-full touch-none select-none items-center", - className + className, )} {...props} > @@ -20,8 +20,8 @@ const Slider = React.forwardRef< -)) -Slider.displayName = SliderPrimitive.Root.displayName +)); +Slider.displayName = SliderPrimitive.Root.displayName; const VolumeSlider = React.forwardRef< React.ElementRef, @@ -56,7 +56,7 @@ const NoThumbSlider = React.forwardRef< {...props} > - + @@ -71,16 +71,17 @@ const DualThumbSlider = React.forwardRef< ref={ref} className={cn( "relative flex w-full touch-none select-none items-center", - className + className, )} {...props} > - - + + - + + -)) -DualThumbSlider.displayName = SliderPrimitive.Root.displayName +)); +DualThumbSlider.displayName = SliderPrimitive.Root.displayName; -export { DualThumbSlider, Slider, NoThumbSlider, VolumeSlider } +export { DualThumbSlider, Slider, NoThumbSlider, VolumeSlider }; diff --git a/web/src/pages/SubmitPlus.tsx b/web/src/pages/SubmitPlus.tsx index d1214fdf6..16d32d636 100644 --- a/web/src/pages/SubmitPlus.tsx +++ b/web/src/pages/SubmitPlus.tsx @@ -1,5 +1,4 @@ import { baseUrl } from "@/api/baseUrl"; -import FilterCheckBox from "@/components/filter/FilterCheckBox"; import { CamerasFilterButton, GeneralFilterContent, @@ -17,10 +16,11 @@ import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer"; import { DropdownMenu, DropdownMenuContent, - DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; +import { Input } from "@/components/ui/input"; +import { DualThumbSlider } from "@/components/ui/slider"; import { Event } from "@/types/event"; import { FrigateConfig } from "@/types/frigateConfig"; import axios from "axios"; @@ -53,6 +53,8 @@ export default function SubmitPlus() { is_submitted: 0, cameras: selectedCameras ? selectedCameras.join(",") : null, labels: selectedLabels ? selectedLabels.join(",") : null, + min_score: scoreRange ? scoreRange[0] : null, + max_score: scoreRange ? scoreRange[1] : null, }, ]); const [upload, setUpload] = useState(); @@ -112,9 +114,11 @@ export default function SubmitPlus() {
@@ -184,15 +188,19 @@ const ATTRIBUTES = ["amazon", "face", "fedex", "license_plate", "ups"]; type PlusFilterGroupProps = { selectedCameras: string[] | undefined; - setSelectedCameras: (cameras: string[] | undefined) => void; selectedLabels: string[] | undefined; + selectedScoreRange: number[] | undefined; + setSelectedCameras: (cameras: string[] | undefined) => void; setSelectedLabels: (cameras: string[] | undefined) => void; + setSelectedScoreRange: (range: number[] | undefined) => void; }; function PlusFilterGroup({ selectedCameras, - setSelectedCameras, selectedLabels, + selectedScoreRange, + setSelectedCameras, setSelectedLabels, + setSelectedScoreRange, }: PlusFilterGroupProps) { const { data: config } = useSWR("config"); @@ -226,12 +234,12 @@ function PlusFilterGroup({ const [open, setOpen] = useState<"none" | "camera" | "label" | "score">( "none", ); - const [currentCameras, setCurrentCameras] = useState( - undefined, - ); const [currentLabels, setCurrentLabels] = useState( undefined, ); + const [currentScoreRange, setCurrentScoreRange] = useState< + number[] | undefined + >(undefined); const Menu = isMobile ? Drawer : DropdownMenu; const Trigger = isMobile ? DrawerTrigger : DropdownMenuTrigger; @@ -284,77 +292,79 @@ function PlusFilterGroup({ { - if (!open) { - setCurrentCameras(selectedCameras); - } setOpen(open ? "score" : "none"); }} > - - - - Filter Cameras - - - { - if (isChecked) { - setCurrentCameras(undefined); + +
+ + setCurrentScoreRange([ + parseInt(e.target.value) / 100.0, + currentScoreRange?.at(1) ?? 1.0, + ]) } - }} - /> - -
- {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); - setCurrentCameras(updatedCameras); - } - } - }} - /> - ))} + /> + + + setCurrentScoreRange([ + currentScoreRange?.at(0) ?? 0.5, + parseInt(e.target.value) / 100.0, + ]) + } + />
-
+
+