From 3aee75ba8160cc09b2debc0292766bb703564748 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 8 Nov 2025 07:22:46 -0600 Subject: [PATCH] refactor description box to remove buttons and add row of action icon buttons --- .../overlay/detail/SearchDetailDialog.tsx | 296 +++++++++++------- 1 file changed, 175 insertions(+), 121 deletions(-) diff --git a/web/src/components/overlay/detail/SearchDetailDialog.tsx b/web/src/components/overlay/detail/SearchDetailDialog.tsx index 67a9b4999..43c5681e5 100644 --- a/web/src/components/overlay/detail/SearchDetailDialog.tsx +++ b/web/src/components/overlay/detail/SearchDetailDialog.tsx @@ -34,9 +34,12 @@ import ActivityIndicator from "@/components/indicators/activity-indicator"; import { FaArrowRight, FaCheckCircle, - FaChevronDown, FaChevronLeft, FaChevronRight, + FaMicrophone, + FaRedo, + FaCheck, + FaTimes, } from "react-icons/fa"; import { TrackingDetails } from "./TrackingDetails"; import { AnnotationSettingsPane } from "./AnnotationSettingsPane"; @@ -684,6 +687,8 @@ function ObjectDetailsTab({ const [desc, setDesc] = useState(search?.data.description); const [isSubLabelDialogOpen, setIsSubLabelDialogOpen] = useState(false); const [isLPRDialogOpen, setIsLPRDialogOpen] = useState(false); + const [isEditingDesc, setIsEditingDesc] = useState(false); + const originalDescRef = useRef(null); const handleDescriptionFocus = useCallback(() => { setInputFocused(true); @@ -1114,6 +1119,23 @@ function ObjectDetailsTab({ ); const popoverContainerRef = useRef(null); + const canRegenerate = !!( + config?.cameras[search.camera].objects.genai.enabled && search.end_time + ); + const showAiPlaceholder = !!( + config?.cameras[search.camera].objects.genai.enabled && + !search.end_time && + (config.cameras[search.camera].objects.genai.required_zones.length === 0 || + search.zones.some((zone) => + config.cameras[search.camera].objects.genai.required_zones.includes( + zone, + ), + )) && + (config.cameras[search.camera].objects.genai.objects.length === 0 || + config.cameras[search.camera].objects.genai.objects.includes( + search.label, + )) + ); return (
@@ -1374,75 +1396,68 @@ function ObjectDetailsTab({
)}
- {config?.cameras[search.camera].objects.genai.enabled && - !search.end_time && - (config.cameras[search.camera].objects.genai.required_zones.length === - 0 || - search.zones.some((zone) => - config.cameras[search.camera].objects.genai.required_zones.includes( - zone, - ), - )) && - (config.cameras[search.camera].objects.genai.objects.length === 0 || - config.cameras[search.camera].objects.genai.objects.includes( - search.label, - )) ? ( - <> -
- {t("details.description.label")} -
-
-
- -
-
{t("details.description.aiTips")}
-
- - ) : ( - <> -
-