DiscussionCount.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { useEffect } from "react";
  2. import { useAppSelector } from "../../hooks";
  3. import { discussions, tags, upgrade } from "../../reducers/discussion-count";
  4. import { sentenceList } from "../../reducers/sentence";
  5. import type {
  6. IDiscussionCountRequest,
  7. IDiscussionCountResponse,
  8. } from "../../api/Comment";
  9. import { get, post } from "../../request";
  10. import store from "../../store";
  11. export const discussionCountUpgrade = (resId?: string) => {
  12. if (typeof resId === "undefined") {
  13. return;
  14. }
  15. const url = `/v2/discussion-count/${resId}`;
  16. console.info("discussion-count api request", url);
  17. get<IDiscussionCountResponse>(url).then((json) => {
  18. console.debug("discussion-count api response", json);
  19. if (json.ok) {
  20. store.dispatch(upgrade({ resId: resId, data: json.data.discussions }));
  21. } else {
  22. console.error(json.message);
  23. }
  24. });
  25. };
  26. interface IWidget {
  27. courseId?: string | null;
  28. }
  29. const DiscussionCount = ({ courseId }: IWidget) => {
  30. const sentences = useAppSelector(sentenceList);
  31. console.debug("sentences", sentences);
  32. useEffect(() => {
  33. const sentId: string[] = sentences
  34. .filter((value) => typeof value.id != "undefined")
  35. .map((item) => item.id);
  36. if (sentId.length === 0) {
  37. return;
  38. }
  39. const url = "/v2/discussion-count";
  40. const data: IDiscussionCountRequest = {
  41. course_id: courseId ?? undefined,
  42. sentences: sentId.map((item) => item.split("-")),
  43. };
  44. console.info("discussion-count api request", url, data);
  45. post<IDiscussionCountRequest, IDiscussionCountResponse>(url, data).then(
  46. (json) => {
  47. console.debug("discussion-count api response", json);
  48. if (json.ok) {
  49. store.dispatch(discussions(json.data.discussions));
  50. store.dispatch(tags(json.data.tags));
  51. }
  52. }
  53. );
  54. }, [courseId, sentences]);
  55. return <></>;
  56. };
  57. export default DiscussionCount;