@magmamath/students-features 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/commonjs/features/chatbot/constants.js +21 -12
  2. package/dist/commonjs/features/chatbot/constants.js.map +1 -1
  3. package/dist/commonjs/features/chatbot/model/api.js +21 -1
  4. package/dist/commonjs/features/chatbot/model/api.js.map +1 -1
  5. package/dist/commonjs/features/feedback/assets/icons/MessageBubbleIcon.js.map +1 -0
  6. package/dist/commonjs/features/feedback/assets/icons/XCloseIcon.js.map +1 -0
  7. package/dist/commonjs/features/feedback/components/{EmptyComment/EmptyComment.js → EmptyComment.js} +3 -3
  8. package/dist/commonjs/features/feedback/components/EmptyComment.js.map +1 -0
  9. package/dist/commonjs/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.js → ListCardCommentsCount.js} +2 -2
  10. package/dist/commonjs/features/feedback/components/ListCardCommentsCount.js.map +1 -0
  11. package/dist/commonjs/features/feedback/components/TeacherFeedback.js +8 -8
  12. package/dist/commonjs/features/feedback/components/TeacherFeedback.js.map +1 -1
  13. package/dist/commonjs/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js +2 -2
  14. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.js +3 -3
  15. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.js.map +1 -1
  16. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js +1 -1
  17. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js.map +1 -1
  18. package/dist/commonjs/features/feedback/components/index.js +1 -1
  19. package/dist/commonjs/features/feedback/constants.js +1 -18
  20. package/dist/commonjs/features/feedback/constants.js.map +1 -1
  21. package/dist/commonjs/features/feedback/helpers.js +22 -64
  22. package/dist/commonjs/features/feedback/helpers.js.map +1 -1
  23. package/dist/commonjs/features/feedback/index.js +8 -8
  24. package/dist/commonjs/features/feedback/index.js.map +1 -1
  25. package/dist/commonjs/features/feedback/model/api.js +15 -0
  26. package/dist/commonjs/features/feedback/model/api.js.map +1 -0
  27. package/dist/commonjs/features/feedback/model/comments.js +88 -0
  28. package/dist/commonjs/features/feedback/model/comments.js.map +1 -0
  29. package/dist/commonjs/features/feedback/model/model.js +104 -0
  30. package/dist/commonjs/features/feedback/model/model.js.map +1 -0
  31. package/dist/commonjs/features/feedback/model/sockets.js +25 -0
  32. package/dist/commonjs/features/feedback/model/sockets.js.map +1 -0
  33. package/dist/commonjs/features/feedback/types.js +12 -0
  34. package/dist/commonjs/features/feedback/types.js.map +1 -0
  35. package/dist/commonjs/lib/helpers/helpers.js +24 -1
  36. package/dist/commonjs/lib/helpers/helpers.js.map +1 -1
  37. package/dist/commonjs/shared/translation/constants.js +42 -1
  38. package/dist/commonjs/shared/translation/constants.js.map +1 -1
  39. package/dist/module/features/chatbot/constants.js +20 -11
  40. package/dist/module/features/chatbot/constants.js.map +1 -1
  41. package/dist/module/features/chatbot/model/api.js +21 -1
  42. package/dist/module/features/chatbot/model/api.js.map +1 -1
  43. package/dist/module/features/feedback/assets/icons/MessageBubbleIcon.js.map +1 -0
  44. package/dist/module/features/feedback/assets/icons/XCloseIcon.js.map +1 -0
  45. package/dist/module/features/feedback/components/{EmptyComment/EmptyComment.js → EmptyComment.js} +3 -3
  46. package/dist/module/features/feedback/components/EmptyComment.js.map +1 -0
  47. package/dist/module/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.js → ListCardCommentsCount.js} +2 -2
  48. package/dist/module/features/feedback/components/ListCardCommentsCount.js.map +1 -0
  49. package/dist/module/features/feedback/components/TeacherFeedback.js +8 -8
  50. package/dist/module/features/feedback/components/TeacherFeedback.js.map +1 -1
  51. package/dist/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js +2 -2
  52. package/dist/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js.map +1 -1
  53. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.js +3 -3
  54. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.js.map +1 -1
  55. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js +1 -1
  56. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js.map +1 -1
  57. package/dist/module/features/feedback/components/index.js +1 -1
  58. package/dist/module/features/feedback/components/index.js.map +1 -1
  59. package/dist/module/features/feedback/constants.js +0 -16
  60. package/dist/module/features/feedback/constants.js.map +1 -1
  61. package/dist/module/features/feedback/helpers.js +20 -62
  62. package/dist/module/features/feedback/helpers.js.map +1 -1
  63. package/dist/module/features/feedback/index.js +2 -2
  64. package/dist/module/features/feedback/index.js.map +1 -1
  65. package/dist/module/features/feedback/model/api.js +10 -0
  66. package/dist/module/features/feedback/model/api.js.map +1 -0
  67. package/dist/module/features/feedback/model/comments.js +83 -0
  68. package/dist/module/features/feedback/model/comments.js.map +1 -0
  69. package/dist/module/features/feedback/model/model.js +99 -0
  70. package/dist/module/features/feedback/model/model.js.map +1 -0
  71. package/dist/module/features/feedback/model/sockets.js +20 -0
  72. package/dist/module/features/feedback/model/sockets.js.map +1 -0
  73. package/dist/module/features/feedback/types.js +8 -0
  74. package/dist/module/features/feedback/types.js.map +1 -0
  75. package/dist/module/lib/helpers/helpers.js +22 -0
  76. package/dist/module/lib/helpers/helpers.js.map +1 -1
  77. package/dist/module/shared/translation/constants.js +41 -0
  78. package/dist/module/shared/translation/constants.js.map +1 -1
  79. package/dist/typescript/commonjs/features/chatbot/constants.d.ts +6 -0
  80. package/dist/typescript/commonjs/features/chatbot/constants.d.ts.map +1 -1
  81. package/dist/typescript/commonjs/features/chatbot/model/api.d.ts +1 -0
  82. package/dist/typescript/commonjs/features/chatbot/model/api.d.ts.map +1 -1
  83. package/dist/typescript/commonjs/features/feedback/assets/icons/MessageBubbleIcon.d.ts.map +1 -0
  84. package/dist/typescript/commonjs/features/feedback/assets/icons/XCloseIcon.d.ts.map +1 -0
  85. package/dist/typescript/commonjs/features/feedback/components/{EmptyComment/EmptyComment.d.ts → EmptyComment.d.ts} +1 -1
  86. package/dist/typescript/commonjs/features/feedback/components/EmptyComment.d.ts.map +1 -0
  87. package/dist/typescript/commonjs/features/feedback/components/ListCardCommentsCount.d.ts.map +1 -0
  88. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedback.d.ts +6 -2
  89. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedback.d.ts.map +1 -1
  90. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts +2 -2
  91. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts.map +1 -1
  92. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts +3 -2
  93. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts.map +1 -1
  94. package/dist/typescript/commonjs/features/feedback/components/index.d.ts +1 -1
  95. package/dist/typescript/commonjs/features/feedback/components/index.d.ts.map +1 -1
  96. package/dist/typescript/commonjs/features/feedback/constants.d.ts +0 -14
  97. package/dist/typescript/commonjs/features/feedback/constants.d.ts.map +1 -1
  98. package/dist/typescript/commonjs/features/feedback/helpers.d.ts +9 -2
  99. package/dist/typescript/commonjs/features/feedback/helpers.d.ts.map +1 -1
  100. package/dist/typescript/commonjs/features/feedback/index.d.ts +2 -2
  101. package/dist/typescript/commonjs/features/feedback/index.d.ts.map +1 -1
  102. package/dist/typescript/commonjs/features/feedback/model/api.d.ts +9 -0
  103. package/dist/typescript/commonjs/features/feedback/model/api.d.ts.map +1 -0
  104. package/dist/typescript/commonjs/features/feedback/model/comments.d.ts +16 -0
  105. package/dist/typescript/commonjs/features/feedback/model/comments.d.ts.map +1 -0
  106. package/dist/typescript/commonjs/features/feedback/model/model.d.ts +27 -0
  107. package/dist/typescript/commonjs/features/feedback/model/model.d.ts.map +1 -0
  108. package/dist/typescript/commonjs/features/feedback/model/sockets.d.ts +10 -0
  109. package/dist/typescript/commonjs/features/feedback/model/sockets.d.ts.map +1 -0
  110. package/dist/typescript/commonjs/features/feedback/types.d.ts +40 -0
  111. package/dist/typescript/commonjs/features/feedback/types.d.ts.map +1 -0
  112. package/dist/typescript/commonjs/lib/helpers/helpers.d.ts +2 -0
  113. package/dist/typescript/commonjs/lib/helpers/helpers.d.ts.map +1 -1
  114. package/dist/typescript/commonjs/shared/translation/constants.d.ts +41 -0
  115. package/dist/typescript/commonjs/shared/translation/constants.d.ts.map +1 -1
  116. package/dist/typescript/module/features/chatbot/constants.d.ts +6 -0
  117. package/dist/typescript/module/features/chatbot/constants.d.ts.map +1 -1
  118. package/dist/typescript/module/features/chatbot/model/api.d.ts +1 -0
  119. package/dist/typescript/module/features/chatbot/model/api.d.ts.map +1 -1
  120. package/dist/typescript/module/features/feedback/assets/icons/MessageBubbleIcon.d.ts.map +1 -0
  121. package/dist/typescript/module/features/feedback/assets/icons/XCloseIcon.d.ts.map +1 -0
  122. package/dist/typescript/module/features/feedback/components/{EmptyComment/EmptyComment.d.ts → EmptyComment.d.ts} +1 -1
  123. package/dist/typescript/module/features/feedback/components/EmptyComment.d.ts.map +1 -0
  124. package/dist/typescript/module/features/feedback/components/ListCardCommentsCount.d.ts.map +1 -0
  125. package/dist/typescript/module/features/feedback/components/TeacherFeedback.d.ts +6 -2
  126. package/dist/typescript/module/features/feedback/components/TeacherFeedback.d.ts.map +1 -1
  127. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts +2 -2
  128. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts.map +1 -1
  129. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts +3 -2
  130. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts.map +1 -1
  131. package/dist/typescript/module/features/feedback/components/index.d.ts +1 -1
  132. package/dist/typescript/module/features/feedback/components/index.d.ts.map +1 -1
  133. package/dist/typescript/module/features/feedback/constants.d.ts +0 -14
  134. package/dist/typescript/module/features/feedback/constants.d.ts.map +1 -1
  135. package/dist/typescript/module/features/feedback/helpers.d.ts +9 -2
  136. package/dist/typescript/module/features/feedback/helpers.d.ts.map +1 -1
  137. package/dist/typescript/module/features/feedback/index.d.ts +2 -2
  138. package/dist/typescript/module/features/feedback/index.d.ts.map +1 -1
  139. package/dist/typescript/module/features/feedback/model/api.d.ts +9 -0
  140. package/dist/typescript/module/features/feedback/model/api.d.ts.map +1 -0
  141. package/dist/typescript/module/features/feedback/model/comments.d.ts +16 -0
  142. package/dist/typescript/module/features/feedback/model/comments.d.ts.map +1 -0
  143. package/dist/typescript/module/features/feedback/model/model.d.ts +27 -0
  144. package/dist/typescript/module/features/feedback/model/model.d.ts.map +1 -0
  145. package/dist/typescript/module/features/feedback/model/sockets.d.ts +10 -0
  146. package/dist/typescript/module/features/feedback/model/sockets.d.ts.map +1 -0
  147. package/dist/typescript/module/features/feedback/types.d.ts +40 -0
  148. package/dist/typescript/module/features/feedback/types.d.ts.map +1 -0
  149. package/dist/typescript/module/lib/helpers/helpers.d.ts +2 -0
  150. package/dist/typescript/module/lib/helpers/helpers.d.ts.map +1 -1
  151. package/dist/typescript/module/shared/translation/constants.d.ts +41 -0
  152. package/dist/typescript/module/shared/translation/constants.d.ts.map +1 -1
  153. package/package.json +1 -1
  154. package/src/features/chatbot/constants.ts +30 -22
  155. package/src/features/chatbot/model/api.ts +47 -17
  156. package/src/features/feedback/components/{EmptyComment/EmptyComment.tsx → EmptyComment.tsx} +3 -3
  157. package/src/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.tsx → ListCardCommentsCount.tsx} +2 -2
  158. package/src/features/feedback/components/TeacherFeedback.tsx +21 -11
  159. package/src/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.tsx +2 -2
  160. package/src/features/feedback/components/TeacherFeedbackComments/TeacherComment.tsx +10 -4
  161. package/src/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.tsx +4 -3
  162. package/src/features/feedback/components/index.ts +1 -1
  163. package/src/features/feedback/constants.ts +2 -18
  164. package/src/features/feedback/helpers.ts +27 -60
  165. package/src/features/feedback/index.ts +2 -2
  166. package/src/features/feedback/model/api.ts +13 -0
  167. package/src/features/feedback/model/comments.ts +82 -0
  168. package/src/features/feedback/model/model.ts +102 -0
  169. package/src/features/feedback/model/sockets.ts +22 -0
  170. package/src/features/feedback/types.ts +42 -0
  171. package/src/lib/helpers/helpers.ts +26 -0
  172. package/src/shared/translation/constants.ts +45 -3
  173. package/dist/commonjs/features/feedback/components/EmptyComment/EmptyComment.js.map +0 -1
  174. package/dist/commonjs/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.js.map +0 -1
  175. package/dist/commonjs/features/feedback/components/icons/MessageBubbleIcon.js.map +0 -1
  176. package/dist/commonjs/features/feedback/components/icons/XCloseIcon.js.map +0 -1
  177. package/dist/commonjs/features/feedback/model/teacherFeedback.model.js +0 -215
  178. package/dist/commonjs/features/feedback/model/teacherFeedback.model.js.map +0 -1
  179. package/dist/commonjs/features/feedback/types/teacherFeedback.types.js +0 -18
  180. package/dist/commonjs/features/feedback/types/teacherFeedback.types.js.map +0 -1
  181. package/dist/module/features/feedback/components/EmptyComment/EmptyComment.js.map +0 -1
  182. package/dist/module/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.js.map +0 -1
  183. package/dist/module/features/feedback/components/icons/MessageBubbleIcon.js.map +0 -1
  184. package/dist/module/features/feedback/components/icons/XCloseIcon.js.map +0 -1
  185. package/dist/module/features/feedback/model/teacherFeedback.model.js +0 -210
  186. package/dist/module/features/feedback/model/teacherFeedback.model.js.map +0 -1
  187. package/dist/module/features/feedback/types/teacherFeedback.types.js +0 -14
  188. package/dist/module/features/feedback/types/teacherFeedback.types.js.map +0 -1
  189. package/dist/typescript/commonjs/features/feedback/components/EmptyComment/EmptyComment.d.ts.map +0 -1
  190. package/dist/typescript/commonjs/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.d.ts.map +0 -1
  191. package/dist/typescript/commonjs/features/feedback/components/icons/MessageBubbleIcon.d.ts.map +0 -1
  192. package/dist/typescript/commonjs/features/feedback/components/icons/XCloseIcon.d.ts.map +0 -1
  193. package/dist/typescript/commonjs/features/feedback/model/teacherFeedback.model.d.ts +0 -45
  194. package/dist/typescript/commonjs/features/feedback/model/teacherFeedback.model.d.ts.map +0 -1
  195. package/dist/typescript/commonjs/features/feedback/types/teacherFeedback.types.d.ts +0 -33
  196. package/dist/typescript/commonjs/features/feedback/types/teacherFeedback.types.d.ts.map +0 -1
  197. package/dist/typescript/module/features/feedback/components/EmptyComment/EmptyComment.d.ts.map +0 -1
  198. package/dist/typescript/module/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.d.ts.map +0 -1
  199. package/dist/typescript/module/features/feedback/components/icons/MessageBubbleIcon.d.ts.map +0 -1
  200. package/dist/typescript/module/features/feedback/components/icons/XCloseIcon.d.ts.map +0 -1
  201. package/dist/typescript/module/features/feedback/model/teacherFeedback.model.d.ts +0 -45
  202. package/dist/typescript/module/features/feedback/model/teacherFeedback.model.d.ts.map +0 -1
  203. package/dist/typescript/module/features/feedback/types/teacherFeedback.types.d.ts +0 -33
  204. package/dist/typescript/module/features/feedback/types/teacherFeedback.types.d.ts.map +0 -1
  205. package/src/features/feedback/model/teacherFeedback.model.ts +0 -255
  206. package/src/features/feedback/types/teacherFeedback.types.ts +0 -32
  207. /package/dist/commonjs/features/feedback/{components → assets}/icons/MessageBubbleIcon.js +0 -0
  208. /package/dist/commonjs/features/feedback/{components → assets}/icons/XCloseIcon.js +0 -0
  209. /package/dist/module/features/feedback/{components → assets}/icons/MessageBubbleIcon.js +0 -0
  210. /package/dist/module/features/feedback/{components → assets}/icons/XCloseIcon.js +0 -0
  211. /package/dist/typescript/commonjs/features/feedback/{components → assets}/icons/MessageBubbleIcon.d.ts +0 -0
  212. /package/dist/typescript/commonjs/features/feedback/{components → assets}/icons/XCloseIcon.d.ts +0 -0
  213. /package/dist/typescript/commonjs/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.d.ts → ListCardCommentsCount.d.ts} +0 -0
  214. /package/dist/typescript/module/features/feedback/{components → assets}/icons/MessageBubbleIcon.d.ts +0 -0
  215. /package/dist/typescript/module/features/feedback/{components → assets}/icons/XCloseIcon.d.ts +0 -0
  216. /package/dist/typescript/module/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.d.ts → ListCardCommentsCount.d.ts} +0 -0
  217. /package/src/features/feedback/{components → assets}/icons/MessageBubbleIcon.tsx +0 -0
  218. /package/src/features/feedback/{components → assets}/icons/XCloseIcon.tsx +0 -0
@@ -1,255 +0,0 @@
1
- import { createEffect, createEvent, createStore, Effect, restore, sample, StoreWritable } from 'effector'
2
- import {
3
- CommentsEntity,
4
- GetCommentsByIdProps,
5
- Locale,
6
- TeacherComment,
7
- UpdateCommentSeenStatusProps,
8
- } from '../types/teacherFeedback.types'
9
- import { EMPTY_COMMENT_ID, getEmptyComment } from '../constants'
10
-
11
- type TeacherFeedbackModelProps = {
12
- credits: {
13
- assignmentId: StoreWritable<string>
14
- problemId: StoreWritable<string>
15
- locale: StoreWritable<Locale | null>
16
- }
17
- api: {
18
- getCommentsByAssignmentId: (props: GetCommentsByIdProps) => Promise<Record<string, { comments: TeacherComment[] }>>
19
- updateCommentSeenStatus: (props: UpdateCommentSeenStatusProps) => Promise<void>
20
- }
21
- }
22
-
23
- type CommentsMap = Map<string, Record<string, CommentsEntity>>
24
-
25
- export class TeacherFeedbackModel {
26
- $assignmentId: StoreWritable<string>
27
- $currentProblemId: StoreWritable<string>
28
- $locale: StoreWritable<Locale | null>
29
-
30
- setCommentsSeen = createEvent<{ ids: string[]; currentProblemId: string; assignmentId: string }>()
31
- $comments = createStore<CommentsMap>(new Map())
32
-
33
- setIsOpened = createEvent<boolean>()
34
- $isOpened = restore(this.setIsOpened, false)
35
- setIsVisible = createEvent<boolean>()
36
- $isVisible = restore(this.setIsVisible, false)
37
-
38
- getCommentsByAssignmentIdFx: Effect<
39
- GetCommentsByIdProps,
40
- {
41
- data: Record<string, { comments: TeacherComment[] }>
42
- assignmentId: string
43
- }
44
- >
45
- updateCommentSeenFx: Effect<UpdateCommentSeenStatusProps, void>
46
-
47
- sockets = {
48
- onCreate: createEvent<TeacherComment>(),
49
- onDeleted: createEvent<TeacherComment>(),
50
- }
51
-
52
- constructor({ api, credits }: TeacherFeedbackModelProps) {
53
- this.getCommentsByAssignmentIdFx = createEffect(async ({ id }: { id: string }) => {
54
- const response = await api.getCommentsByAssignmentId({ id })
55
- return {
56
- data: response,
57
- assignmentId: id,
58
- }
59
- })
60
- this.updateCommentSeenFx = createEffect(api.updateCommentSeenStatus)
61
- this.$assignmentId = credits.assignmentId
62
- this.$currentProblemId = credits.problemId
63
- this.$locale = credits.locale
64
-
65
- sample({
66
- clock: this.$currentProblemId,
67
- fn: () => false,
68
- target: this.setIsOpened,
69
- })
70
-
71
- sample({
72
- clock: this.sockets.onCreate,
73
- source: [this.$isOpened, this.$currentProblemId, this.$assignmentId] as const,
74
- filter: ([isOpen, currentProblemId], payload) => {
75
- return isOpen && currentProblemId === payload.problemId
76
- },
77
- fn: ([_, currentProblemId, assignmentId], { _id }) => ({
78
- currentProblemId,
79
- assignmentId,
80
- ids: [_id],
81
- }),
82
- target: [this.setCommentsSeen, this.updateCommentSeenFx],
83
- })
84
-
85
- sample({
86
- clock: this.$isOpened,
87
- source: [this.$comments, this.$currentProblemId, this.$assignmentId] as const,
88
- filter: ([feedback, currentProblemId, assignmentId], isOpen) => {
89
- const assignmentComments = feedback.get(assignmentId) || {}
90
- const comments = assignmentComments[currentProblemId]?.comments ?? []
91
- const hasUnreadComments = comments.some((comment) => !comment.isRead)
92
- return isOpen && hasUnreadComments
93
- },
94
- fn: ([feedback, currentProblemId, assignmentId]) => {
95
- const assignmentComments = feedback.get(assignmentId) || {}
96
- const comments = assignmentComments[currentProblemId]?.comments ?? []
97
- return {
98
- currentProblemId,
99
- assignmentId,
100
- ids: comments.filter((comment) => !comment.isRead).map((comment) => comment._id),
101
- }
102
- },
103
- target: [this.setCommentsSeen, this.updateCommentSeenFx],
104
- })
105
-
106
- this.$isVisible.on(this.getCommentsByAssignmentIdFx.doneData, (_, { data }) => {
107
- return Object.values(data).some((problemFeedback) => problemFeedback.comments?.length > 0)
108
- })
109
-
110
- this.$comments
111
- .on(this.getCommentsByAssignmentIdFx.doneData, (state, { assignmentId, data }) => {
112
- const problemsMap: Record<string, CommentsEntity> = {}
113
-
114
- for (const [problemId, { comments }] of Object.entries(data)) {
115
- const unreadMessages = comments.filter((comment) => !comment.isRead)
116
- problemsMap[problemId] = {
117
- comments,
118
- unreadMessagesCount: unreadMessages.length,
119
- }
120
- }
121
-
122
- const updatedState = new Map(state)
123
- updatedState.set(assignmentId, problemsMap)
124
- return updatedState
125
- })
126
- .on(this.setCommentsSeen, (state, { ids, currentProblemId, assignmentId }) => {
127
- const assignmentComments = state.get(assignmentId)
128
- if (!assignmentComments) return state
129
-
130
- const feedback = assignmentComments[currentProblemId]
131
- if (!feedback) return state
132
-
133
- const updatedComments = feedback.comments.map((comment) =>
134
- ids.includes(comment._id) ? { ...comment, isRead: true } : comment
135
- )
136
-
137
- const updatedFeedback = {
138
- ...feedback,
139
- comments: updatedComments,
140
- unreadMessagesCount: 0,
141
- }
142
-
143
- const updatedAssignmentComments = {
144
- ...assignmentComments,
145
- [currentProblemId]: updatedFeedback,
146
- }
147
-
148
- const updatedState = new Map(state)
149
- updatedState.set(assignmentId, updatedAssignmentComments)
150
-
151
- return updatedState
152
- })
153
- .on(this.sockets.onCreate, (state, payload) => {
154
- const assignmentComments = state.get(payload.exerciseId) || {}
155
- const feedback = assignmentComments[payload.problemId] ?? { comments: [], unreadMessagesCount: 0 }
156
-
157
- const updatedFeedback = {
158
- ...feedback,
159
- comments: [...feedback.comments, payload],
160
- unreadMessagesCount: feedback.unreadMessagesCount + 1,
161
- }
162
-
163
- const updatedAssignmentComments = {
164
- ...assignmentComments,
165
- [payload.problemId]: updatedFeedback,
166
- }
167
-
168
- const updatedState = new Map(state)
169
- updatedState.set(payload.exerciseId, updatedAssignmentComments)
170
-
171
- return updatedState
172
- })
173
- .on(this.sockets.onDeleted, (state, payload) => {
174
- const assignmentId = this.$assignmentId.getState()
175
- const assignmentComments = state.get(assignmentId)
176
- if (!assignmentComments) return state
177
-
178
- const feedback = assignmentComments[payload.problemId]
179
- if (!feedback) return state
180
-
181
- const isDeleteMessageUnread = feedback.comments.some(
182
- (comment) => comment._id === payload._id && !comment.isRead
183
- )
184
-
185
- const updatedFeedback = {
186
- comments: feedback.comments.filter((comment) => comment._id !== payload._id),
187
- unreadMessagesCount: isDeleteMessageUnread ? feedback.unreadMessagesCount - 1 : feedback.unreadMessagesCount,
188
- }
189
-
190
- const isOpen = this.$isOpened.getState()
191
-
192
- if (updatedFeedback.comments.length === 0) {
193
- const updatedAssignmentComments = { ...assignmentComments }
194
-
195
- if (!isOpen) {
196
- delete updatedAssignmentComments[payload.problemId]
197
-
198
- // If no problems left, remove the assignment entirely
199
- if (Object.keys(updatedAssignmentComments).length === 0) {
200
- const updatedState = new Map(state)
201
- updatedState.delete(assignmentId)
202
- return updatedState
203
- }
204
- } else {
205
- updatedAssignmentComments[payload.problemId] = {
206
- ...updatedFeedback,
207
- comments: [getEmptyComment(payload.problemId, this.$locale.getState())],
208
- }
209
- }
210
-
211
- const updatedState = new Map(state)
212
- updatedState.set(assignmentId, updatedAssignmentComments)
213
- return updatedState
214
- }
215
-
216
- const updatedAssignmentComments = {
217
- ...assignmentComments,
218
- [payload.problemId]: updatedFeedback,
219
- }
220
-
221
- const updatedState = new Map(state)
222
- updatedState.set(assignmentId, updatedAssignmentComments)
223
- return updatedState
224
- })
225
- .on(this.setIsOpened, (state, isOpen) => {
226
- if (isOpen) return state
227
-
228
- const assignmentId = this.$assignmentId.getState()
229
- const problemId = this.$currentProblemId.getState()
230
- const assignmentComments = state.get(assignmentId)
231
- if (!assignmentComments) return state
232
-
233
- const feedback = assignmentComments[problemId]
234
- if (!feedback) return state
235
-
236
- if (feedback.comments.length === 1 && feedback.comments[0]._id === EMPTY_COMMENT_ID) {
237
- const updatedAssignmentComments = { ...assignmentComments }
238
- delete updatedAssignmentComments[problemId]
239
-
240
- // If no problems left, remove the assignment entirely
241
- if (Object.keys(updatedAssignmentComments).length === 0) {
242
- const updatedState = new Map(state)
243
- updatedState.delete(assignmentId)
244
- return updatedState
245
- }
246
-
247
- const updatedState = new Map(state)
248
- updatedState.set(assignmentId, updatedAssignmentComments)
249
- return updatedState
250
- }
251
-
252
- return state
253
- })
254
- }
255
- }
@@ -1,32 +0,0 @@
1
- export type GetCommentsByIdProps = { id: string }
2
- export type UpdateCommentSeenStatusProps = { ids: string[] }
3
-
4
- export type TeacherComment = {
5
- _id: string
6
- teacherId: string
7
- teacherName: string
8
- studentId: string
9
- problemId: string
10
- exerciseId: string
11
- content: string
12
- isRead: boolean
13
- createdAt: Date
14
- updatedAt: Date
15
- __v: number
16
- }
17
-
18
- export type CommentsEntity = {
19
- comments: TeacherComment[]
20
- unreadMessagesCount: number
21
- }
22
-
23
- export enum Locale {
24
- US = 'en-US',
25
- SV = 'sv-SE',
26
- GB = 'en-GB',
27
- }
28
-
29
- export enum TeacherFeedbackSocketEvent {
30
- COMMENT_CREATED = 'exerciseCommentCreated',
31
- COMMENT_DELETED = 'exerciseCommentDeleted',
32
- }