import useBodyScroll from '@/hooks/use-body-scroll'; import { ExclamationCircleFilled } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Button, Checkbox, Modal, Space, message, type ModalFuncProps } from 'antd'; import { FC, forwardRef, useImperativeHandle, useState } from 'react'; import styled from 'styled-components'; import Styles from './index.less'; const CheckboxWrapper = styled.div` margin-top: 20px; margin-left: 30px; display: flex; justify-content: flex-start; align-items: center; .check-text { font-weight: 700; color: var(--ant-color-warning); } `; interface DeleteModalProps { ref: any; } interface DataOptions { content: string; selection?: boolean; name?: string; okText?: string; cancelText?: string; title?: string; operation: string; checkConfig?: { checkText: string; defautlChecked: boolean; }; } const DeleteModal: FC = forwardRef((props, ref) => { const intl = useIntl(); const { saveScrollHeight, restoreScrollHeight } = useBodyScroll(); const [visible, setVisible] = useState(false); const [checked, setChecked] = useState(false); const [config, setConfig] = useState({} as any); useImperativeHandle(ref, () => ({ show: (data: ModalFuncProps & DataOptions) => { saveScrollHeight(); setConfig(data); setChecked(data.checkConfig?.defautlChecked || false); setVisible(true); }, hide: () => { setVisible(false); restoreScrollHeight(); }, configuration: { checked: checked } })); const handleCancel = () => { setVisible(false); config.onCancel?.(); restoreScrollHeight(); }; const handleOk = async () => { try { const res = await config.onOk?.(); const isArray = Array.isArray(res); if (isArray) { const allSuccess = res.every( (item: any) => item?.status === 'fulfilled' ); if (allSuccess) { message.success(intl.formatMessage({ id: 'common.message.success' })); } } else { message.success(intl.formatMessage({ id: 'common.message.success' })); } } catch (error) { // Handle error if needed } finally { setVisible(false); restoreScrollHeight(); } }; return ( } >
{config.title ? intl.formatMessage({ id: config.title }) : intl.formatMessage({ id: 'common.title.delete.confirm' })}
{config.checkConfig && ( setChecked(e.target.checked)} > {intl.formatMessage({ id: config.checkConfig?.checkText })} )}
); }); export default DeleteModal;