ArticlePrevDrawer.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { Drawer, Typography } from "antd";
  2. import React, { useEffect, useState } from "react";
  3. import { put } from "../../request";
  4. import type { IArticleDataResponse, IArticleResponse } from "../../api/Article";
  5. import ArticleView from "./ArticleView";
  6. const { Paragraph } = Typography;
  7. interface IArticlePrevRequest {
  8. content: string;
  9. }
  10. interface IWidget {
  11. trigger?: React.ReactNode;
  12. title?: React.ReactNode;
  13. content?: string;
  14. articleId: string;
  15. }
  16. const ArticlePrevDrawerWidget = ({
  17. trigger,
  18. title,
  19. content,
  20. articleId,
  21. }: IWidget) => {
  22. const [articleData, setArticleData] = useState<IArticleDataResponse>();
  23. const [open, setOpen] = useState(false);
  24. const [errorMsg, setErrorMsg] = useState<string>();
  25. const showDrawer = () => {
  26. setOpen(true);
  27. };
  28. const onClose = () => {
  29. setOpen(false);
  30. };
  31. useEffect(() => {
  32. put<IArticlePrevRequest, IArticleResponse>(
  33. `/v2/article-preview/${articleId}`,
  34. {
  35. content: content ? content : "",
  36. }
  37. )
  38. .then((res) => {
  39. console.log("save response", res);
  40. if (res.ok) {
  41. setArticleData(res.data);
  42. } else {
  43. setErrorMsg(res.message);
  44. }
  45. })
  46. .catch((e: IArticleResponse) => {
  47. setErrorMsg(e.message);
  48. });
  49. }, [articleId, content]);
  50. return (
  51. <>
  52. <span onClick={() => showDrawer()}>{trigger}</span>
  53. <Drawer
  54. title={title}
  55. width={900}
  56. placement="right"
  57. onClose={onClose}
  58. open={open}
  59. destroyOnHidden={true}
  60. >
  61. <Paragraph type="danger">{errorMsg}</Paragraph>
  62. {articleData ? (
  63. <ArticleView
  64. id={articleData.uid}
  65. title={articleData.title}
  66. subTitle={articleData.subtitle}
  67. summary={articleData.summary}
  68. content={articleData.content ? articleData.content : ""}
  69. html={articleData.html ? [articleData.html] : []}
  70. path={articleData.path}
  71. created_at={articleData.created_at}
  72. updated_at={articleData.updated_at}
  73. articleId={articleId}
  74. />
  75. ) : (
  76. <></>
  77. )}
  78. </Drawer>
  79. </>
  80. );
  81. };
  82. export default ArticlePrevDrawerWidget;