@@ -46,6 +46,7 @@ const ActionButtons: FC<ActionButtonsProps> = ({ user }) => {
4646 const [ isActiveNextPlanModalOpen , setIsActiveNextPlanModalOpen ] = useState ( false )
4747 const [ isSubscriptionClientsModalOpen , setSubscriptionClientsModalOpen ] = useState ( false )
4848 const [ isUserAllIPsModalOpen , setUserAllIPsModalOpen ] = useState ( false )
49+ const [ isActionsMenuOpen , setActionsMenuOpen ] = useState ( false )
4950 const queryClient = useQueryClient ( )
5051 const { t } = useTranslation ( )
5152 const dir = useDirDetection ( )
@@ -450,36 +451,41 @@ const ActionButtons: FC<ActionButtonsProps> = ({ user }) => {
450451 < TooltipContent > { copied ? t ( 'usersTable.copied' ) : t ( 'usersTable.copyConfigs' ) } </ TooltipContent >
451452 </ Tooltip >
452453 </ TooltipProvider >
453- < DropdownMenu >
454+ < DropdownMenu modal = { false } open = { isActionsMenuOpen } onOpenChange = { setActionsMenuOpen } >
454455 < DropdownMenuTrigger asChild >
455456 < Button size = "icon" variant = "ghost" >
456457 < EllipsisVertical className = "h-4 w-4" />
457458 </ Button >
458459 </ DropdownMenuTrigger >
459- < DropdownMenuContent align = "end" >
460+ < DropdownMenuContent
461+ align = "end"
462+ onPointerDownOutside = { ( ) => setActionsMenuOpen ( false ) }
463+ onInteractOutside = { ( ) => setActionsMenuOpen ( false ) }
464+ onEscapeKeyDown = { ( ) => setActionsMenuOpen ( false ) }
465+ >
460466 { /* Edit */ }
461- < DropdownMenuItem className = "hidden md:flex" onClick = { handleEdit } >
467+ < DropdownMenuItem className = "hidden md:flex" onSelect = { handleEdit } >
462468 < Pencil className = "mr-2 h-4 w-4" />
463469 < span > { t ( 'edit' ) } </ span >
464470 </ DropdownMenuItem >
465471
466472 { /* QR Code */ }
467- < DropdownMenuItem onClick = { onOpenSubscriptionModal } >
473+ < DropdownMenuItem onSelect = { onOpenSubscriptionModal } >
468474 < QrCode className = "mr-2 h-4 w-4" />
469475 < span > QR Code</ span >
470476 </ DropdownMenuItem >
471477
472478 { /* Set Owner: only for sudo admins */ }
473479 { currentAdmin ?. is_sudo && (
474- < DropdownMenuItem onClick = { handleSetOwner } >
480+ < DropdownMenuItem onSelect = { handleSetOwner } >
475481 < User className = "mr-2 h-4 w-4" />
476482 < span > { t ( 'setOwnerModal.title' ) } </ span >
477483 </ DropdownMenuItem >
478484 ) }
479485
480486 { /* Copy Core Username for sudo admins */ }
481487 { currentAdmin ?. is_sudo && (
482- < DropdownMenuItem onClick = { handleCopyCoreUsername } >
488+ < DropdownMenuItem onSelect = { handleCopyCoreUsername } >
483489 < Cpu className = "mr-2 h-4 w-4" />
484490 < span > { t ( 'coreUsername' ) } </ span >
485491 </ DropdownMenuItem >
@@ -488,40 +494,40 @@ const ActionButtons: FC<ActionButtonsProps> = ({ user }) => {
488494 < DropdownMenuSeparator />
489495
490496 { /* Revoke Sub */ }
491- < DropdownMenuItem onClick = { handleRevokeSubscription } >
497+ < DropdownMenuItem onSelect = { handleRevokeSubscription } >
492498 < Link2Off className = "mr-2 h-4 w-4" />
493499 < span > { t ( 'userDialog.revokeSubscription' ) } </ span >
494500 </ DropdownMenuItem >
495501
496502 { /* Reset Usage */ }
497- < DropdownMenuItem onClick = { handleResetUsage } >
503+ < DropdownMenuItem onSelect = { handleResetUsage } >
498504 < RefreshCcw className = "mr-2 h-4 w-4" />
499505 < span > { t ( 'userDialog.resetUsage' ) } </ span >
500506 </ DropdownMenuItem >
501507
502508 { /* Usage State */ }
503- < DropdownMenuItem onClick = { handleUsageState } >
509+ < DropdownMenuItem onSelect = { handleUsageState } >
504510 < PieChart className = "mr-2 h-4 w-4" />
505511 < span > { t ( 'userDialog.usage' ) } </ span >
506512 </ DropdownMenuItem >
507513
508514 { /* Active Next Plan */ }
509515 { user . next_plan && (
510- < DropdownMenuItem onClick = { handleActiveNextPlan } >
516+ < DropdownMenuItem onSelect = { handleActiveNextPlan } >
511517 < ListStart className = "mr-2 h-4 w-4" />
512518 < span > { t ( 'usersTable.activeNextPlanSubmit' ) } </ span >
513519 </ DropdownMenuItem >
514520 ) }
515521
516522 { /* Subscription Info */ }
517- < DropdownMenuItem onClick = { ( ) => setSubscriptionClientsModalOpen ( true ) } >
523+ < DropdownMenuItem onSelect = { ( ) => setSubscriptionClientsModalOpen ( true ) } >
518524 < Users className = "mr-2 h-4 w-4" />
519525 < span > { t ( 'subscriptionClients.clients' , { defaultValue : 'Clients' } ) } </ span >
520526 </ DropdownMenuItem >
521527
522528 { /* View All IPs: only for sudo admins */ }
523529 { currentAdmin ?. is_sudo && (
524- < DropdownMenuItem onClick = { ( ) => setUserAllIPsModalOpen ( true ) } >
530+ < DropdownMenuItem onSelect = { ( ) => setUserAllIPsModalOpen ( true ) } >
525531 < Network className = "mr-2 h-4 w-4" />
526532 < span > { t ( 'userAllIPs.ipAddresses' , { defaultValue : 'IP addresses' } ) } </ span >
527533 </ DropdownMenuItem >
@@ -530,7 +536,7 @@ const ActionButtons: FC<ActionButtonsProps> = ({ user }) => {
530536 < DropdownMenuSeparator />
531537
532538 { /* Trash */ }
533- < DropdownMenuItem onClick = { handleDelete } className = "text-red-600" >
539+ < DropdownMenuItem onSelect = { handleDelete } className = "text-red-600" >
534540 < Trash2 className = "mr-2 h-4 w-4" />
535541 < span > { t ( 'remove' ) } </ span >
536542 </ DropdownMenuItem >
0 commit comments