12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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>
- )
- }
|