ShareModal.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { useEffect, useState } from "react";
  2. import { Modal } from "antd";
  3. import Share, { EResType } from "./Share";
  4. import { useIntl } from "react-intl";
  5. interface IWidget {
  6. resId: string;
  7. resType: EResType;
  8. trigger?: React.ReactNode;
  9. open?: boolean;
  10. onClose?: () => void;
  11. }
  12. const ShareModalWidget = ({
  13. resId,
  14. resType,
  15. trigger,
  16. open,
  17. onClose,
  18. }: IWidget) => {
  19. const [isModalOpen, setIsModalOpen] = useState(open);
  20. const intl = useIntl();
  21. useEffect(() => setIsModalOpen(open), [open]);
  22. const showModal = () => {
  23. setIsModalOpen(true);
  24. };
  25. const handleOk = () => {
  26. if (onClose) {
  27. onClose();
  28. } else {
  29. setIsModalOpen(false);
  30. }
  31. };
  32. const handleCancel = () => {
  33. handleOk();
  34. };
  35. return (
  36. <>
  37. <span onClick={showModal}>{trigger}</span>
  38. <Modal
  39. destroyOnHidden={true}
  40. width={700}
  41. title={intl.formatMessage({ id: "labels.collaboration" })}
  42. open={isModalOpen}
  43. onOk={handleOk}
  44. onCancel={handleCancel}
  45. footer={false}
  46. >
  47. <Share resId={resId} resType={resType} />
  48. </Modal>
  49. </>
  50. );
  51. };
  52. export default ShareModalWidget;