36 lines
974 B
TypeScript
36 lines
974 B
TypeScript
import React, { useEffect, useState, ReactNode } from 'react';
|
||
import Modal, { ModalProps } from 'antd/lib/modal';
|
||
import { StarProps } from '../interface';
|
||
|
||
/**
|
||
* 星级模态框组件,基于Antd Modal的增强组件
|
||
* 提供国际化和组件生命周期管理功能
|
||
*/
|
||
const StarModal: React.FC<ModalProps & StarProps & { children: ReactNode }> = (props) => {
|
||
const { open, destroyOnClose, children, format: formate, ...rest } = props;
|
||
const [exist, setExist] = useState<boolean | undefined>(open);
|
||
|
||
useEffect(() => {
|
||
if (open) setExist(open);
|
||
}, [open]);
|
||
|
||
const elements = exist ? (
|
||
<Modal
|
||
destroyOnClose={destroyOnClose}
|
||
open={open}
|
||
afterClose={() => setExist(false)}
|
||
okText={formate ? formate({ id: 'confirm' }) : '确定'}
|
||
cancelText={formate ? formate({ id: 'cancel' }) : '取消'}
|
||
{...rest}
|
||
>
|
||
{children}
|
||
</Modal>
|
||
) : (
|
||
<div />
|
||
);
|
||
|
||
return elements;
|
||
};
|
||
|
||
export default StarModal;
|