AnthologyModal.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { useState } from "react";
  2. import { Modal } from "antd";
  3. import AnthologyList from "./AnthologyList";
  4. interface IWidget {
  5. studioName?: string;
  6. trigger?: React.ReactNode;
  7. open?: boolean;
  8. onClose?: (closed: boolean) => void;
  9. onSelect?: (selected: string) => void;
  10. onCancel?: () => void;
  11. }
  12. const AnthologyModalWidget = ({
  13. studioName,
  14. trigger,
  15. open,
  16. onClose,
  17. onSelect,
  18. }: IWidget) => {
  19. const [innerOpen, setInnerOpen] = useState(false);
  20. const isModalOpen = open ?? innerOpen;
  21. const openModal = () => {
  22. if (open === undefined) {
  23. setInnerOpen(true);
  24. } else {
  25. onClose?.(true);
  26. }
  27. };
  28. const closeModal = () => {
  29. onClose?.(false);
  30. if (open === undefined) {
  31. setInnerOpen(false);
  32. }
  33. };
  34. return (
  35. <>
  36. <span role="button" tabIndex={0} onClick={openModal}>
  37. {trigger}
  38. </span>
  39. <Modal
  40. width="80%"
  41. title="加入文集"
  42. open={isModalOpen}
  43. onOk={closeModal}
  44. onCancel={closeModal}
  45. >
  46. <AnthologyList
  47. title="选择文集"
  48. studioName={studioName}
  49. showCreate={false}
  50. showOption={false}
  51. onTitleClick={(id) => {
  52. onSelect?.(id);
  53. closeModal();
  54. }}
  55. />
  56. </Modal>
  57. </>
  58. );
  59. };
  60. export default AnthologyModalWidget;