1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import type { FC, ReactElement } from 'react'
- import { useTranslation } from 'react-i18next'
- import cn from 'classnames'
- import s from './common.module.css'
- import Modal from '@/app/components/base/modal'
- import { XClose } from '@/app/components/base/icons/src/vender/line/general'
- import { AlertCircle } from '@/app/components/base/icons/src/vender/solid/alertsAndFeedback'
- import { CheckCircle } from '@/app/components/base/icons/src/vender/solid/general'
- import Button from '@/app/components/base/button'
- export type ConfirmCommonProps = {
- type?: string
- isShow: boolean
- onCancel: () => void
- title: string
- desc?: string
- onConfirm?: () => void
- showOperate?: boolean
- showOperateCancel?: boolean
- confirmBtnClassName?: string
- confirmText?: string
- confirmWrapperClassName?: string
- confirmDisabled?: boolean
- }
- const ConfirmCommon: FC<ConfirmCommonProps> = ({
- type = 'danger',
- isShow,
- onCancel,
- title,
- desc,
- onConfirm,
- showOperate = true,
- showOperateCancel = true,
- confirmBtnClassName,
- confirmText,
- confirmWrapperClassName,
- confirmDisabled,
- }) => {
- const { t } = useTranslation()
- const CONFIRM_MAP: Record<string, { icon: ReactElement; confirmText: string }> = {
- danger: {
- icon: <AlertCircle className='w-6 h-6 text-[#D92D20]' />,
- confirmText: t('common.operation.remove'),
- },
- success: {
- icon: <CheckCircle className='w-6 h-6 text-[#039855]' />,
- confirmText: t('common.operation.ok'),
- },
- }
- return (
- <Modal isShow={isShow} onClose={() => {}} className='!w-[480px] !max-w-[480px] !p-0 !rounded-2xl' wrapperClassName={confirmWrapperClassName}>
- <div className={cn(s[`wrapper-${type}`], 'relative p-8')}>
- <div className='flex items-center justify-center absolute top-4 right-4 w-8 h-8 cursor-pointer' onClick={onCancel}>
- <XClose className='w-4 h-4 text-gray-500' />
- </div>
- <div className='flex items-center justify-center mb-3 w-12 h-12 bg-white shadow-xl rounded-xl'>
- {CONFIRM_MAP[type].icon}
- </div>
- <div className='text-xl font-semibold text-gray-900'>{title}</div>
- {
- desc && <div className='mt-1 text-sm text-gray-500'>{desc}</div>
- }
- {
- showOperate && (
- <div className='flex items-center justify-end mt-10'>
- {
- showOperateCancel && (
- <Button
- className='mr-2 min-w-24 text-sm font-medium !text-gray-700'
- onClick={onCancel}
- >
- {t('common.operation.cancel')}
- </Button>
- )
- }
- <Button
- type='primary'
- className={confirmBtnClassName || ''}
- onClick={onConfirm}
- disabled={confirmDisabled}
- >
- {confirmText || CONFIRM_MAP[type].confirmText}
- </Button>
- </div>
- )
- }
- </div>
- </Modal>
- )
- }
- export default ConfirmCommon
|