VideoModal.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { useEffect, useState } from "react";
  2. import { Modal } from "antd";
  3. import Video from "./Video";
  4. interface IWidget {
  5. src?: string;
  6. type?: string;
  7. open?: boolean;
  8. trigger?: JSX.Element;
  9. onOpenChange?: Function;
  10. }
  11. export const VideoModalWidget = ({
  12. src,
  13. type,
  14. open = false,
  15. trigger,
  16. onOpenChange,
  17. }: IWidget) => {
  18. //TODO 跟video ctl 合并
  19. const [isModalOpen, setIsModalOpen] = useState(open);
  20. useEffect(() => setIsModalOpen(open), [open]);
  21. const showModal = () => {
  22. setIsModalOpen(true);
  23. if (typeof onOpenChange !== "undefined") {
  24. onOpenChange(true);
  25. }
  26. };
  27. const handleClose = () => {
  28. setIsModalOpen(false);
  29. if (typeof onOpenChange !== "undefined") {
  30. onOpenChange(false);
  31. }
  32. };
  33. return (
  34. <>
  35. <span onClick={showModal}>{trigger}</span>
  36. <Modal
  37. style={{ top: 20 }}
  38. title="Basic Modal"
  39. footer={false}
  40. open={isModalOpen}
  41. onOk={handleClose}
  42. onCancel={handleClose}
  43. width={800}
  44. destroyOnHidden={false}
  45. maskClosable={false}
  46. mask={false}
  47. >
  48. <div>
  49. <Video src={src} type={type} />
  50. </div>
  51. </Modal>
  52. </>
  53. );
  54. };
  55. export default VideoModalWidget;