mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Dialog, Transition } from '@headlessui/react'
 | |
| import { Fragment } from 'react'
 | |
| import { useTranslation } from 'react-i18next'
 | |
| import ConfirmUI from '../confirm-ui'
 | |
| 
 | |
| // https://headlessui.com/react/dialog
 | |
| 
 | |
| type IConfirm = {
 | |
|   className?: string
 | |
|   isShow: boolean
 | |
|   onClose: () => void
 | |
|   type?: 'info' | 'warning'
 | |
|   title: string
 | |
|   content: string
 | |
|   confirmText?: string
 | |
|   onConfirm: () => void
 | |
|   cancelText?: string
 | |
|   onCancel: () => void
 | |
| }
 | |
| 
 | |
| export default function Confirm({
 | |
|   isShow,
 | |
|   onClose,
 | |
|   type = 'warning',
 | |
|   title,
 | |
|   content,
 | |
|   confirmText,
 | |
|   cancelText,
 | |
|   onConfirm,
 | |
|   onCancel,
 | |
| }: IConfirm) {
 | |
|   const { t } = useTranslation()
 | |
|   const confirmTxt = confirmText || `${t('common.operation.confirm')}`
 | |
|   const cancelTxt = cancelText || `${t('common.operation.cancel')}`
 | |
|   return (
 | |
|     <Transition appear show={isShow} as={Fragment}>
 | |
|       <Dialog as="div" className="relative z-[100]" onClose={onClose} onClick={e => e.preventDefault()}>
 | |
|         <Transition.Child
 | |
|           as={Fragment}
 | |
|           enter="ease-out duration-300"
 | |
|           enterFrom="opacity-0"
 | |
|           enterTo="opacity-100"
 | |
|           leave="ease-in duration-200"
 | |
|           leaveFrom="opacity-100"
 | |
|           leaveTo="opacity-0"
 | |
|         >
 | |
|           <div className="fixed inset-0 bg-black bg-opacity-25" />
 | |
|         </Transition.Child>
 | |
| 
 | |
|         <div className="fixed inset-0 overflow-y-auto">
 | |
|           <div className="flex items-center justify-center min-h-full p-4 text-center">
 | |
|             <Transition.Child
 | |
|               as={Fragment}
 | |
|               enter="ease-out duration-300"
 | |
|               enterFrom="opacity-0 scale-95"
 | |
|               enterTo="opacity-100 scale-100"
 | |
|               leave="ease-in duration-200"
 | |
|               leaveFrom="opacity-100 scale-100"
 | |
|               leaveTo="opacity-0 scale-95"
 | |
|             >
 | |
|               <Dialog.Panel className={'w-full max-w-md transform overflow-hidden rounded-2xl bg-white text-left align-middle shadow-xl transition-all'}>
 | |
|                 <ConfirmUI
 | |
|                   type={type}
 | |
|                   title={title}
 | |
|                   content={content}
 | |
|                   confirmText={confirmTxt}
 | |
|                   cancelText={cancelTxt}
 | |
|                   onConfirm={onConfirm}
 | |
|                   onCancel={onCancel}
 | |
|                 />
 | |
|               </Dialog.Panel>
 | |
|             </Transition.Child>
 | |
| 
 | |
|           </div>
 | |
|         </div>
 | |
|       </Dialog>
 | |
|     </Transition>
 | |
|   )
 | |
| }
 | 
