Jelajahi Sumber

fix(web): fix AppCard Menu popover open bug (#1107)

Rhon Joe 1 tahun lalu
induk
melakukan
f28cb84977

+ 5 - 3
web/app/(commonLayout)/apps/AppCard.tsx

@@ -16,6 +16,7 @@ import { ToastContext } from '@/app/components/base/toast'
 import { deleteApp, fetchAppDetail, updateAppSiteConfig } from '@/service/apps'
 import AppIcon from '@/app/components/base/app-icon'
 import AppsContext, { useAppContext } from '@/context/app-context'
+import type { HtmlContentProps } from '@/app/components/base/popover'
 import CustomPopover from '@/app/components/base/popover'
 import Divider from '@/app/components/base/divider'
 import { asyncRunSafe } from '@/utils'
@@ -100,14 +101,14 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
     [app.id],
   )
 
-  const Operations = (props: any) => {
+  const Operations = (props: HtmlContentProps) => {
     const onClickSettings = async (e: React.MouseEvent<HTMLButtonElement>) => {
-      props?.onClose()
+      props.onClick?.()
       e.preventDefault()
       await getAppDetail()
     }
     const onClickDelete = async (e: React.MouseEvent<HTMLDivElement>) => {
-      props?.onClose()
+      props.onClick?.()
       e.preventDefault()
       setShowConfirmDelete(true)
     }
@@ -157,6 +158,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
               )
             }
             className={'!w-[128px] h-fit !z-20'}
+            manualClose
           />}
         </div>
         <div className={style.listItemDescription}>

+ 7 - 2
web/app/components/base/popover/index.tsx

@@ -2,9 +2,14 @@ import { Popover, Transition } from '@headlessui/react'
 import { Fragment, cloneElement, useRef } from 'react'
 import s from './style.module.css'
 
+export type HtmlContentProps = {
+  onClose?: () => void
+  onClick?: () => void
+}
+
 type IPopover = {
   className?: string
-  htmlContent: React.ReactNode
+  htmlContent: React.ReactElement<HtmlContentProps>
   trigger?: 'click' | 'hover'
   position?: 'bottom' | 'br'
   btnElement?: string | React.ReactNode
@@ -84,7 +89,7 @@ export default function CustomPopover({
                         })
                       }
                     >
-                      {cloneElement(htmlContent as React.ReactElement, {
+                      {cloneElement(htmlContent as React.ReactElement<HtmlContentProps>, {
                         onClose: () => onMouseLeave(open),
                         ...(manualClose
                           ? {