ArticlePrevDrawer.tsx 2.2 KB

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