返回 AiToEarn
index.tsx
1 import React, { ReactNode } from 'react';
2 import { createPortal } from 'react-dom';
3 import './modal.css';
4
5 const ModalTemplate: React.FC<
6 React.PropsWithChildren<{
7 title?: ReactNode;
8 footer?: ReactNode;
9 cancelText?: string;
10 okText?: string;
11 onCancel?: () => void;
12 onOk?: () => void;
13 width?: number;
14 }>
15 > = (props) => {
16 const {
17 title,
18 children,
19 footer,
20 cancelText = 'Cancel',
21 okText = 'OK',
22 onCancel,
23 onOk,
24 width = 530,
25 } = props;
26
27 return (
28 <div className="update-modal">
29 <div className="update-modal__mask" />
30 <div className="update-modal__warp">
31 <div className="update-modal__content" style={{ width }}>
32 <div className="content__header">
33 <div className="content__header-text">{title}</div>
34 <span className="update-modal--close" onClick={onCancel}>
35 <svg
36 viewBox="0 0 1024 1024"
37 version="1.1"
38 xmlns="http://www.w3.org/2000/svg"
39 >
40 <path
41 d="M557.312 513.248l265.28-263.904c12.544-12.48 12.608-32.704 0.128-45.248-12.512-12.576-32.704-12.608-45.248-0.128l-265.344 263.936-263.04-263.84C236.64 191.584 216.384 191.52 203.84 204 191.328 216.48 191.296 236.736 203.776 249.28l262.976 263.776L201.6 776.8c-12.544 12.48-12.608 32.704-0.128 45.248 6.24 6.272 14.464 9.44 22.688 9.44 8.16 0 16.32-3.104 22.56-9.312l265.216-263.808 265.44 266.24c6.24 6.272 14.432 9.408 22.656 9.408 8.192 0 16.352-3.136 22.592-9.344 12.512-12.48 12.544-32.704 0.064-45.248L557.312 513.248z"
42 p-id="2764"
43 fill="currentColor"
44 ></path>
45 </svg>
46 </span>
47 </div>
48 <div className="content__body">{children}</div>
49 {typeof footer !== 'undefined' ? (
50 <div className="content__footer">
51 <button onClick={onCancel}>{cancelText}</button>
52 <button onClick={onOk}>{okText}</button>
53 </div>
54 ) : (
55 footer
56 )}
57 </div>
58 </div>
59 </div>
60 );
61 };
62
63 const Modal = (
64 props: Parameters<typeof ModalTemplate>[0] & { open: boolean },
65 ) => {
66 const { open, ...omit } = props;
67
68 return createPortal(open ? ModalTemplate(omit) : null, document.body);
69 };
70
71 export default Modal;
72
72 lines Plain Text