RecentModal.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React, { useEffect, useState } from "react";
  2. import { Modal } from "antd";
  3. import RecentList, { type IRecent } from "./RecentList";
  4. import { useIntl } from "react-intl";
  5. interface IWidget {
  6. trigger?: React.ReactNode;
  7. open?: boolean;
  8. onSelect?: Function;
  9. onOpen?: Function;
  10. }
  11. const RecentModalWidget = ({
  12. trigger,
  13. open = false,
  14. onSelect,
  15. onOpen,
  16. }: IWidget) => {
  17. const [isModalOpen, setIsModalOpen] = useState(open);
  18. const intl = useIntl();
  19. useEffect(() => {
  20. setIsModalOpen(open);
  21. if (typeof onOpen !== "undefined") {
  22. onOpen(open);
  23. }
  24. }, [open]);
  25. const showModal = () => {
  26. setIsModalOpen(true);
  27. if (typeof onOpen !== "undefined") {
  28. onOpen(true);
  29. }
  30. };
  31. const handleOk = () => {
  32. setIsModalOpen(false);
  33. if (typeof onOpen !== "undefined") {
  34. onOpen(false);
  35. }
  36. };
  37. const handleCancel = () => {
  38. setIsModalOpen(false);
  39. if (typeof onOpen !== "undefined") {
  40. onOpen(false);
  41. }
  42. };
  43. return (
  44. <>
  45. <span onClick={showModal}>{trigger}</span>
  46. <Modal
  47. width={"80%"}
  48. title={intl.formatMessage({
  49. id: `labels.recent-scan`,
  50. })}
  51. footer={false}
  52. open={isModalOpen}
  53. onOk={handleOk}
  54. onCancel={handleCancel}
  55. destroyOnClose
  56. >
  57. <RecentList
  58. onSelect={(
  59. event: React.MouseEvent<HTMLElement, MouseEvent>,
  60. param: IRecent
  61. ) => {
  62. if (typeof onSelect !== "undefined") {
  63. onSelect(event, param);
  64. }
  65. }}
  66. />
  67. </Modal>
  68. </>
  69. );
  70. };
  71. export default RecentModalWidget;