ExerciseList.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { useEffect, useState } from "react";
  2. import { Collapse, Space, Tag } from "antd";
  3. import type { ICourseExerciseResponse } from "../../api/Course";
  4. import { get } from "../../request";
  5. import type { IUser } from "../auth/User";
  6. import MdView from "../template/MdView";
  7. const { Panel } = Collapse;
  8. interface DataItem {
  9. sn: number;
  10. name: string;
  11. user: IUser;
  12. wbw: number;
  13. translation: number;
  14. question: number;
  15. html: string;
  16. }
  17. interface IWidget {
  18. courseId?: string;
  19. articleId?: string;
  20. exerciseId?: string;
  21. }
  22. const ExerciseListWidget = ({ courseId, articleId, exerciseId }: IWidget) => {
  23. const [data, setData] = useState<DataItem[]>();
  24. useEffect(() => {
  25. const url = `/v2/exercise?course_id=${courseId}&article_id=${articleId}&exercise_id=${exerciseId}`;
  26. console.log(url);
  27. get<ICourseExerciseResponse>(url)
  28. .then((json) => {
  29. if (json.ok) {
  30. console.log(json.data);
  31. const items: DataItem[] = json.data.rows.map((item, id) => {
  32. const member: DataItem = {
  33. sn: id,
  34. name: item.user.nickName,
  35. user: item.user,
  36. wbw: item.wbw,
  37. translation: item.translation,
  38. question: item.question,
  39. html: item.html,
  40. };
  41. return member;
  42. });
  43. setData(items);
  44. } else {
  45. console.error(json.message);
  46. }
  47. })
  48. .catch((error) => {
  49. console.error(error);
  50. });
  51. }, [courseId, articleId, exerciseId]);
  52. return (
  53. <>
  54. <Collapse>
  55. {data?.map((item, id) => {
  56. const header = (
  57. <Space>
  58. <span>{item.name}</span>
  59. {item.wbw === 0 ? <></> : <Tag color="blue">wbw-{item.wbw}</Tag>}
  60. {item.question === 0 ? (
  61. <></>
  62. ) : (
  63. <Tag color="#5BD8A6">Q-{item.question}</Tag>
  64. )}
  65. </Space>
  66. );
  67. return (
  68. <Panel header={header} key={id}>
  69. <MdView html={item.html} />
  70. </Panel>
  71. );
  72. })}
  73. </Collapse>
  74. </>
  75. );
  76. };
  77. export default ExerciseListWidget;