From 081cf3fb80093390b2c0aab2ed2a57961b72e55d Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Sun, 2 Aug 2026 14:29:57 -0600 Subject: [PATCH] fix(ui): keep dropdown menus open on window blur --- apps/dokploy/components/ui/dropdown-menu.tsx | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/dokploy/components/ui/dropdown-menu.tsx b/apps/dokploy/components/ui/dropdown-menu.tsx index bf06bb708..dcb1520f2 100644 --- a/apps/dokploy/components/ui/dropdown-menu.tsx +++ b/apps/dokploy/components/ui/dropdown-menu.tsx @@ -1,21 +1,37 @@ import { CheckIcon, ChevronRightIcon } from "lucide-react"; import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui"; -import type * as React from "react"; +import * as React from "react"; import { markNestedPopupClosed } from "@/components/ui/nested-popup-context"; import { cn } from "@/lib/utils"; function DropdownMenu({ + open, + defaultOpen, onOpenChange, ...props }: React.ComponentProps) { + const [uncontrolledOpen, setUncontrolledOpen] = React.useState( + defaultOpen ?? false, + ); + const isControlled = open !== undefined; + const isOpen = isControlled ? open : uncontrolledOpen; + return ( { - if (!open) { + open={isOpen} + onOpenChange={(nextOpen) => { + // Radix closes menus on window blur, unmounting any dialog rendered inside + if (!nextOpen && !document.hasFocus()) { + return; + } + if (!isControlled) { + setUncontrolledOpen(nextOpen); + } + if (!nextOpen) { markNestedPopupClosed(); } - onOpenChange?.(open); + onOpenChange?.(nextOpen); }} {...props} />