PaliChapterHead.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { useState, useEffect } from "react";
  2. import { message } from "antd";
  3. import type { IApiResponsePaliChapter } from "../../api/Corpus";
  4. import { get } from "../../request";
  5. import ChapterHead, { type IChapterInfo } from "./ChapterHead";
  6. import type { IChapter } from "./BookViewer";
  7. import TocPath, { type ITocPathNode } from "./TocPath";
  8. interface IWidget {
  9. para: IChapter;
  10. onChange?: Function;
  11. }
  12. const PaliChapterHeadWidget = ({ para, onChange }: IWidget) => {
  13. const [pathData, setPathData] = useState<ITocPathNode[]>([]);
  14. const [chapterData, setChapterData] = useState<IChapterInfo>({ title: "" });
  15. useEffect(() => {
  16. console.log("pali chapter list useEffect");
  17. fetchData(para);
  18. }, [para]);
  19. function fetchData(para: IChapter) {
  20. const url = `/v2/palitext?view=paragraph&book=${para.book}&para=${para.para}`;
  21. get<IApiResponsePaliChapter>(url).then(function (myJson) {
  22. console.log("ajax", myJson);
  23. const data = myJson;
  24. const path: ITocPathNode[] = JSON.parse(data.data.path);
  25. path.push({
  26. book: data.data.book,
  27. paragraph: data.data.paragraph,
  28. title: data.data.toc,
  29. paliTitle: data.data.toc,
  30. level: data.data.level,
  31. });
  32. setPathData(path);
  33. const chapter: IChapterInfo = {
  34. title: data.data.toc,
  35. subTitle: data.data.toc,
  36. book: data.data.book,
  37. para: data.data.paragraph,
  38. };
  39. setChapterData(chapter);
  40. });
  41. }
  42. return (
  43. <>
  44. <TocPath
  45. data={pathData}
  46. onChange={(
  47. node: ITocPathNode,
  48. _e: React.MouseEvent<HTMLSpanElement | HTMLAnchorElement, MouseEvent>
  49. ) => {
  50. message.success(node.book + ":" + node.paragraph);
  51. if (node.book && node.paragraph) {
  52. const chapter = {
  53. book: node.book,
  54. para: node.paragraph,
  55. level: node.level,
  56. };
  57. fetchData(chapter);
  58. if (typeof onChange !== "undefined") {
  59. onChange(chapter);
  60. }
  61. }
  62. }}
  63. link={"none"}
  64. />
  65. <ChapterHead data={chapterData} />
  66. </>
  67. );
  68. };
  69. export default PaliChapterHeadWidget;