diff --git a/web/src/components/overlay/detail/SearchDetailDialog.tsx b/web/src/components/overlay/detail/SearchDetailDialog.tsx index bdc5cf9b8..7e6ac3e08 100644 --- a/web/src/components/overlay/detail/SearchDetailDialog.tsx +++ b/web/src/components/overlay/detail/SearchDetailDialog.tsx @@ -6,7 +6,14 @@ import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import { getIconForLabel } from "@/utils/iconUtil"; import { useApiHost } from "@/api"; import { Button } from "../../ui/button"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { + useCallback, + useEffect, + useLayoutEffect, + useMemo, + useRef, + useState, +} from "react"; import axios from "axios"; import { toast } from "sonner"; import { Textarea } from "../../ui/textarea"; @@ -91,6 +98,7 @@ type TabsWithActionsProps = { setSimilarity?: () => void; isPopoverOpen: boolean; setIsPopoverOpen: (open: boolean) => void; + dialogContainer: HTMLDivElement | null; }; function TabsWithActions({ @@ -103,9 +111,16 @@ function TabsWithActions({ setSimilarity, isPopoverOpen, setIsPopoverOpen, + dialogContainer, }: TabsWithActionsProps) { const { t } = useTranslation(["views/explore", "views/faceLibrary"]); + useEffect(() => { + if (pageToggle !== "tracking_details" && isPopoverOpen) { + setIsPopoverOpen(false); + } + }, [pageToggle, isPopoverOpen, setIsPopoverOpen]); + if (!search) return null; return ( @@ -155,6 +170,7 @@ function TabsWithActions({ search={search} open={isPopoverOpen} setIsOpen={setIsPopoverOpen} + container={dialogContainer} /> )} @@ -165,12 +181,14 @@ type AnnotationSettingsProps = { search: SearchResult; open: boolean; setIsOpen: (open: boolean) => void; + container?: HTMLElement | null; }; function AnnotationSettings({ search, open, setIsOpen, + container, }: AnnotationSettingsProps) { const { t } = useTranslation(["views/explore"]); const { annotationOffset, setAnnotationOffset } = useDetailStream(); @@ -206,6 +224,9 @@ function AnnotationSettings({ const Overlay = isDesktop ? Popover : Drawer; const Trigger = isDesktop ? PopoverTrigger : DrawerTrigger; const Content = isDesktop ? PopoverContent : DrawerContent; + const contentProps = isDesktop + ? { align: "end" as const, container: container ?? undefined } + : {}; return (