lobe-chat
46 строк · 1.1 Кб
1import { App } from 'antd';
2import { ModalFuncProps } from 'antd/es/modal/interface';
3import { MutableRefObject, ReactNode, useRef } from 'react';
4
5import { closeIcon, useStyles } from './style';
6
7interface CreateModalProps extends ModalFuncProps {
8content: ReactNode;
9}
10
11interface ModalInstance {
12destroy: (...args: any[]) => void;
13}
14
15type PropsFunc<T = undefined> = (
16instance: MutableRefObject<ModalInstance | undefined>,
17props?: T,
18) => CreateModalProps;
19
20const createModal = <T>(params: CreateModalProps | PropsFunc<T>) => {
21const useModal = () => {
22const { styles } = useStyles();
23const { modal } = App.useApp();
24const instanceRef = useRef<ModalInstance>();
25
26const open = (outProps?: T) => {
27const props = typeof params === 'function' ? params(instanceRef, outProps) : params;
28
29instanceRef.current = modal.confirm({
30className: styles.content,
31closable: true,
32closeIcon,
33footer: false,
34icon: null,
35wrapClassName: styles.wrap,
36...props,
37});
38};
39
40return { open };
41};
42
43return useModal;
44};
45
46export { createModal };
47