TaskEditDrawer.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { Button, Drawer, Space, Typography } from "antd";
  2. import { useEffect, useState } from "react";
  3. import { ITaskData } from "../api/task";
  4. import Task from "./Task";
  5. import { useIntl } from "react-intl";
  6. import { fullUrl } from "../../utils";
  7. import LikeAvatar from "../like/LikeAvatar";
  8. const { Text } = Typography;
  9. interface IWidget {
  10. taskId?: string;
  11. openDrawer?: boolean;
  12. onClose?: () => void;
  13. onChange?: (data: ITaskData) => void;
  14. }
  15. const TaskEditDrawer = ({
  16. taskId,
  17. openDrawer = false,
  18. onClose,
  19. onChange,
  20. }: IWidget) => {
  21. const [open, setOpen] = useState(openDrawer);
  22. const intl = useIntl();
  23. useEffect(() => {
  24. setOpen(openDrawer);
  25. }, [openDrawer]);
  26. const onCloseDrawer = () => {
  27. setOpen(false);
  28. if (onClose) {
  29. onClose();
  30. }
  31. };
  32. return (
  33. <>
  34. <Drawer
  35. title={""}
  36. placement={"right"}
  37. width={1000}
  38. onClose={onCloseDrawer}
  39. open={open}
  40. destroyOnClose={true}
  41. footer={
  42. <Space>
  43. <Text>关注</Text>
  44. <LikeAvatar resId={taskId} resType="task" type="watch" />
  45. </Space>
  46. }
  47. extra={
  48. <Button
  49. type="link"
  50. onClick={() => {
  51. window.open(fullUrl(`/article/task/${taskId}`), "_blank");
  52. }}
  53. >
  54. {intl.formatMessage({
  55. id: "buttons.open.in.new.tab",
  56. })}
  57. </Button>
  58. }
  59. >
  60. <Task taskId={taskId} onChange={onChange} />
  61. </Drawer>
  62. </>
  63. );
  64. };
  65. export default TaskEditDrawer;