@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
@@ -0,0 +1,27 @@
1
+ import { Store } from 'effector';
2
+ import { TeacherFeedbackAPI } from './api';
3
+ import { TeacherComments } from './comments';
4
+ import { GetCommentsPayload, GetCommentsResponse, TeacherComment, UpdateCommentStatusSeenPayload } from '../types';
5
+ export type TeacherFeedbackModelProps = {
6
+ api: {
7
+ getComments: (props: GetCommentsPayload) => Promise<GetCommentsResponse>;
8
+ updateCommentStatusSeen: (props: UpdateCommentStatusSeenPayload) => Promise<void>;
9
+ };
10
+ socket: any;
11
+ credits: {
12
+ $assignmentId: Store<string>;
13
+ $problemId: Store<string>;
14
+ };
15
+ defaults: {
16
+ EMPTY_COMMENT: TeacherComment;
17
+ };
18
+ };
19
+ export declare class TeacherFeedbackModel {
20
+ private readonly sockets;
21
+ readonly api: TeacherFeedbackAPI;
22
+ readonly comments: TeacherComments;
23
+ readonly setIsOpen: import("effector").EventCallable<boolean>;
24
+ readonly $isOpen: import("effector").StoreWritable<boolean>;
25
+ constructor({ api, socket, credits }: TeacherFeedbackModelProps);
26
+ }
27
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../../src/features/feedback/model/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,8BAA8B,EAC/B,MAAM,UAAU,CAAA;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE;QACH,WAAW,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACxE,uBAAuB,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAClF,CAAA;IACD,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE;QACP,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAC1B,CAAA;IACD,QAAQ,EAAE;QAAE,aAAa,EAAE,cAAc,CAAA;KAAE,CAAA;CAC5C,CAAA;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,SAAgB,GAAG,EAAE,kBAAkB,CAAA;IACvC,SAAgB,QAAQ,EAAE,eAAe,CAAA;IACzC,SAAgB,SAAS,4CAAyB;IAClD,SAAgB,OAAO,4CAAiC;gBAE5C,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,yBAAyB;CAqEhE"}
@@ -0,0 +1,10 @@
1
+ import { TeacherComment } from '../types';
2
+ export declare class TeacherFeedbackSockets {
3
+ private readonly socket;
4
+ readonly commentAdded: import("effector").EventCallable<TeacherComment>;
5
+ readonly commentDeleted: import("effector").EventCallable<TeacherComment>;
6
+ constructor(socket: any);
7
+ connect(): void;
8
+ off(): void;
9
+ }
10
+ //# sourceMappingURL=sockets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sockets.d.ts","sourceRoot":"","sources":["../../../../../../src/features/feedback/model/sockets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAwB,MAAM,UAAU,CAAA;AAE/D,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAC5B,SAAgB,YAAY,mDAAgC;IAC5D,SAAgB,cAAc,mDAAgC;gBAElD,MAAM,EAAE,GAAG;IAIvB,OAAO;IAKP,GAAG;CAIJ"}
@@ -0,0 +1,40 @@
1
+ export type GetCommentsPayload = {
2
+ id: string;
3
+ };
4
+ export type GetCommentsResponse = {
5
+ [problemId: string]: {
6
+ comments: TeacherComment[];
7
+ };
8
+ };
9
+ export type UpdateCommentStatusSeenPayload = {
10
+ ids: string[];
11
+ };
12
+ export type TeacherComment = {
13
+ _id: string;
14
+ teacherId: string;
15
+ teacherName: string;
16
+ studentId: string;
17
+ problemId: string;
18
+ exerciseId: string;
19
+ content: string;
20
+ isRead: boolean;
21
+ createdAt: Date;
22
+ updatedAt: Date;
23
+ __v: number;
24
+ };
25
+ export type FeedbackEntity = {
26
+ comments: TeacherComment[];
27
+ unreadMessagesCount: number;
28
+ };
29
+ export type CommentsMap = Map<string, {
30
+ [problemId: string]: FeedbackEntity;
31
+ }>;
32
+ export type Credits = {
33
+ assignmentId: string;
34
+ problemId: string;
35
+ };
36
+ export declare enum FeedbackSocketEvents {
37
+ COMMENT_ADDED = "exerciseCommentCreated",
38
+ COMMENT_DELETED = "exerciseCommentDeleted"
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/feedback/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAA;KAAE,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC3C,GAAG,EAAE,MAAM,EAAE,CAAA;CACd,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,OAAO,GAAG;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,oBAAY,oBAAoB;IAC9B,aAAa,2BAA2B;IACxC,eAAe,2BAA2B;CAC3C"}
@@ -1,2 +1,4 @@
1
+ import { Locale } from '@magmamath/students-features';
1
2
  export declare const generateRandomId: () => string;
3
+ export declare const getRelativeTimeText: (date: Date, lang: Locale) => string;
2
4
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/lib/helpers/helpers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,cACsC,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/lib/helpers/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAErD,eAAO,MAAM,gBAAgB,cACsC,CAAA;AAEnE,eAAO,MAAM,mBAAmB,SAAU,IAAI,QAAQ,MAAM,WAqB3D,CAAA"}
@@ -3,4 +3,45 @@ export declare const LOCALIZATION_CONFIGS: {
3
3
  "en-GB": {};
4
4
  "sv-SE": {};
5
5
  };
6
+ export declare const RELATIVE_TIME_LABELS: {
7
+ "en-SE": {
8
+ justNow: string;
9
+ minuteAgo: string;
10
+ minutesAgo: string;
11
+ hourAgo: string;
12
+ hoursAgo: string;
13
+ dayAgo: string;
14
+ daysAgo: string;
15
+ monthAgo: string;
16
+ monthsAgo: string;
17
+ yearAgo: string;
18
+ yearsAgo: string;
19
+ };
20
+ "sv-SE": {
21
+ justNow: string;
22
+ minuteAgo: string;
23
+ minutesAgo: string;
24
+ hourAgo: string;
25
+ hoursAgo: string;
26
+ dayAgo: string;
27
+ daysAgo: string;
28
+ monthAgo: string;
29
+ monthsAgo: string;
30
+ yearAgo: string;
31
+ yearsAgo: string;
32
+ };
33
+ "en-GB": {
34
+ justNow: string;
35
+ minuteAgo: string;
36
+ minutesAgo: string;
37
+ hourAgo: string;
38
+ hoursAgo: string;
39
+ dayAgo: string;
40
+ daysAgo: string;
41
+ monthAgo: string;
42
+ monthsAgo: string;
43
+ yearAgo: string;
44
+ yearsAgo: string;
45
+ };
46
+ };
6
47
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/shared/translation/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/shared/translation/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwChC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmamath/students-features",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Magmamath features library",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/commonjs/index.js",
@@ -1,30 +1,38 @@
1
1
  import { Platform } from 'react-native'
2
2
 
3
3
  export const AUDIO_CONFIG = {
4
- audioEncoding: 'LINEAR16',
5
- pitch: 0,
6
- speakingRate: 0.8,
4
+ audioEncoding: 'LINEAR16',
5
+ pitch: 0,
6
+ speakingRate: 0.8,
7
7
  }
8
8
 
9
9
  export const DEFAULT_VOICE = {
10
- languageCode: 'en-US',
11
- name: 'en-US-Wavenet-C',
10
+ languageCode: 'en-US',
11
+ name: 'en-US-Wavenet-C',
12
12
  }
13
13
 
14
- export const TEXT_TO_SPEECH_CONFIG =
15
- Platform.OS === 'ios'
16
- ? {
17
- audioConfig: {
18
- audioEncoding: 'MP3',
19
- pitch: 0.8,
20
- speakingRate: 0.8,
21
- },
22
- voice: {
23
- languageCode: 'en-US',
24
- name: 'en-US-Wavenet-C',
25
- },
26
- }
27
- : {
28
- audioConfig: AUDIO_CONFIG,
29
- voice: DEFAULT_VOICE,
30
- }
14
+ export const TEXT_TO_SPEECH_CONFIG = Platform.select({
15
+ ios: {
16
+ audioConfig: {
17
+ audioEncoding: 'MP3',
18
+ pitch: 0.8,
19
+ speakingRate: 0.8,
20
+ },
21
+ voice: {
22
+ languageCode: 'en-US',
23
+ name: 'en-US-Wavenet-C',
24
+ },
25
+ },
26
+ default: {
27
+ audioConfig: AUDIO_CONFIG,
28
+ voice: DEFAULT_VOICE,
29
+ },
30
+ })
31
+
32
+ export const KATEX_REPLACEMENTS = {
33
+ '\\$': '__KATEX_DOLLAR_SYMBOL__',
34
+ } as const
35
+
36
+ export const KATEX_REPLACEMENTS_REVERSE = {
37
+ __KATEX_DOLLAR_SYMBOL__: '$',
38
+ } as const
@@ -4,25 +4,55 @@ import { createControllerEffect } from '../../../lib/effector'
4
4
  import { ControlledEffect } from '../../../lib/effector/createControllerEffect'
5
5
  import { ChatbotModelProps } from '../types/model.types'
6
6
  import {
7
- GetAlternativesResponse,
8
- PostMessagePayload,
9
- PostMessageResponse,
10
- GoogleTranslatePayload,
11
- GoogleTranslateResponse,
12
- GoogleText2SpeechPayload,
13
- GoogleText2SpeechResponse,
7
+ GetAlternativesResponse,
8
+ PostMessagePayload,
9
+ PostMessageResponse,
10
+ GoogleTranslatePayload,
11
+ GoogleTranslateResponse,
12
+ GoogleText2SpeechPayload,
13
+ GoogleText2SpeechResponse,
14
14
  } from '../types/api.types'
15
+ import { KATEX_REPLACEMENTS, KATEX_REPLACEMENTS_REVERSE } from '../constants'
15
16
 
16
17
  export class ChatbotAPI {
17
- postMessageFx: ControlledEffect<PostMessagePayload, PostMessageResponse>
18
- getAlternativesFx: Effect<void, GetAlternativesResponse>
19
- translateTextFx: Effect<GoogleTranslatePayload, GoogleTranslateResponse>
20
- textToSpeechTextFx: Effect<GoogleText2SpeechPayload, GoogleText2SpeechResponse>
18
+ postMessageFx: ControlledEffect<PostMessagePayload, PostMessageResponse>
19
+ getAlternativesFx: Effect<void, GetAlternativesResponse>
20
+ translateTextFx: Effect<GoogleTranslatePayload, GoogleTranslateResponse>
21
+ textToSpeechTextFx: Effect<GoogleText2SpeechPayload, GoogleText2SpeechResponse>
21
22
 
22
- constructor(api: ChatbotModelProps['api']) {
23
- this.postMessageFx = createControllerEffect(api.postMessage)
24
- this.getAlternativesFx = createEffect(api.getAlternatives)
25
- this.translateTextFx = createEffect(api.postTranslateText)
26
- this.textToSpeechTextFx = createEffect(api.postTextToSpeech)
27
- }
23
+ private replaceKatexSyntax(texts: string[], reverse = false) {
24
+ const replacements = reverse
25
+ ? Object.entries(KATEX_REPLACEMENTS_REVERSE)
26
+ : Object.entries(KATEX_REPLACEMENTS)
27
+
28
+ return texts.map(text =>
29
+ replacements.reduce(
30
+ (newText, [pattern, placeholder]) => newText.replace(new RegExp(pattern, 'g'), placeholder),
31
+ text,
32
+ ),
33
+ )
34
+ }
35
+
36
+ constructor(api: ChatbotModelProps['api']) {
37
+ this.postMessageFx = createControllerEffect(api.postMessage)
38
+ this.getAlternativesFx = createEffect(api.getAlternatives)
39
+ this.translateTextFx = createEffect(async (payload: GoogleTranslatePayload) => {
40
+ const response = await api.postTranslateText({
41
+ ...payload,
42
+ text: this.replaceKatexSyntax(payload.text),
43
+ })
44
+
45
+ return {
46
+ ...response,
47
+ data: {
48
+ ...response.data,
49
+ translations: response.data.translations.map(translation => ({
50
+ ...translation,
51
+ translatedText: this.replaceKatexSyntax([translation.translatedText], true)[0],
52
+ })),
53
+ },
54
+ }
55
+ })
56
+ this.textToSpeechTextFx = createEffect(api.postTextToSpeech)
57
+ }
28
58
  }
@@ -1,8 +1,8 @@
1
1
  import React from 'react'
2
2
  import { StyleSheet, Text, View } from 'react-native'
3
3
  import { COLORS } from '@magmamath/react-native-ui'
4
- import { BUENOS_AIRES_FONT, NO_COMMENTS_SWE, NO_COMMENTS_ENG } from '../../constants'
5
- import { Locale } from '../../types/teacherFeedback.types'
4
+ import { BUENOS_AIRES_FONT, NO_COMMENTS_SWE, NO_COMMENTS_ENG } from '../constants'
5
+ import { Locale } from '../../../shared/translation/types'
6
6
 
7
7
  type EmptyCommentProps = {
8
8
  locale: Locale | null
@@ -11,7 +11,7 @@ type EmptyCommentProps = {
11
11
  export const EmptyComment = ({ locale }: EmptyCommentProps) => {
12
12
  return (
13
13
  <View style={styles.container}>
14
- <Text style={styles.text}>{locale === Locale.SV ? NO_COMMENTS_SWE : NO_COMMENTS_ENG}</Text>
14
+ <Text style={styles.text}>{locale === Locale.SW ? NO_COMMENTS_SWE : NO_COMMENTS_ENG}</Text>
15
15
  </View>
16
16
  )
17
17
  }
@@ -1,8 +1,8 @@
1
1
  import React from 'react'
2
2
  import { Text, View, StyleSheet } from 'react-native'
3
- import { MessageBubbleIcon } from '../icons/MessageBubbleIcon'
3
+ import { MessageBubbleIcon } from '../assets/icons/MessageBubbleIcon'
4
4
  import { COLORS } from '@magmamath/react-native-ui'
5
- import { BUENOS_AIRES_FONT } from '../../constants'
5
+ import { BUENOS_AIRES_FONT } from '../constants'
6
6
 
7
7
  type ListCardCommentsCountProps = {
8
8
  count: number
@@ -3,24 +3,32 @@ import { useStoreMap, useUnit } from 'effector-react'
3
3
  import { View, StyleSheet } from 'react-native'
4
4
  import { TeacherFeedbackButton } from './TeacherFeedbackButton/TeacherFeedbackButton'
5
5
  import { TeacherFeedbackComments } from './TeacherFeedbackComments/TeacherFeedbackComments'
6
- import { TeacherFeedbackModel } from '../model/teacherFeedback.model'
7
6
  import { FeedbackButtonColors, FeedbackButtonSize, FeedbackMode } from '../constants'
7
+ import { TeacherFeedbackModel } from '../model/model'
8
+ import { Locale } from '../../../shared/translation'
8
9
 
9
10
  type TeacherFeedbackProps = {
10
11
  model: TeacherFeedbackModel
11
12
  mode: FeedbackMode
13
+ locale: Locale
14
+ assignmentId: string
15
+ problemId: string
12
16
  isExam: boolean
13
17
  }
14
18
 
15
- export const TeacherFeedback = ({ model, mode, isExam = false }: TeacherFeedbackProps) => {
16
- const isOpen = useUnit(model.$isOpened)
17
- const assignmentId = useUnit(model.$assignmentId)
18
- const problemId = useUnit(model.$currentProblemId)
19
- const locale = useUnit(model.$locale)
20
- const isLoading = useUnit(model.getCommentsByAssignmentIdFx.pending)
19
+ export const TeacherFeedback = ({
20
+ model,
21
+ mode,
22
+ assignmentId,
23
+ problemId,
24
+ locale,
25
+ isExam = false,
26
+ }: TeacherFeedbackProps) => {
27
+ const isOpen = useUnit(model.$isOpen)
28
+ const isLoading = useUnit(model.api.getCommentsFx.pending)
21
29
  const teacherFeedback = useStoreMap({
22
- store: model.$comments,
23
- fn: (feedback, [assignmentId, problemId]) => feedback.get(assignmentId)?.[problemId] ?? null,
30
+ store: model.comments.$data,
31
+ fn: (feedback, [assignmentId, problemId]) => feedback?.get(assignmentId)?.[problemId] ?? null,
24
32
  keys: [assignmentId, problemId],
25
33
  })
26
34
 
@@ -28,9 +36,11 @@ export const TeacherFeedback = ({ model, mode, isExam = false }: TeacherFeedback
28
36
 
29
37
  return (
30
38
  <View style={styles.container}>
31
- {isOpen && <TeacherFeedbackComments comments={teacherFeedback.comments} locale={locale} mode={mode} />}
39
+ {isOpen && (
40
+ <TeacherFeedbackComments comments={teacherFeedback.comments} locale={locale} mode={mode} />
41
+ )}
32
42
  <TeacherFeedbackButton
33
- onPress={() => model.setIsOpened(!isOpen)}
43
+ onPress={() => model.setIsOpen(!isOpen)}
34
44
  unreadCommentsCount={teacherFeedback.unreadMessagesCount}
35
45
  isOpen={isOpen}
36
46
  isLoading={isLoading}
@@ -2,8 +2,8 @@ import React from 'react'
2
2
  import { StyleSheet, View } from 'react-native'
3
3
  import { Button, COLORS } from '@magmamath/react-native-ui'
4
4
  import { UnreadMessagesBadge } from '../UnreadMessagesBadge'
5
- import { MessageBubbleIcon } from '../icons/MessageBubbleIcon'
6
- import { XCloseIcon } from '../icons/XCloseIcon'
5
+ import { MessageBubbleIcon } from '../../assets/icons/MessageBubbleIcon'
6
+ import { XCloseIcon } from '../../assets/icons/XCloseIcon'
7
7
  import { COLOR_SCHEMES } from './colorSchemes'
8
8
  import {
9
9
  FeedbackButtonColors,
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { View, Text, StyleSheet } from 'react-native'
3
3
  import { COLORS } from '@magmamath/react-native-ui'
4
- import { getRelativeTime } from '../../helpers'
5
4
  import { BUENOS_AIRES_FONT } from '../../constants'
6
- import { Locale } from '../../types/teacherFeedback.types'
5
+ import { getRelativeTimeText } from '../../../../lib/helpers/helpers'
6
+ import { Locale } from '@magmamath/students-features'
7
7
 
8
8
  type TeacherCommentProps = {
9
9
  content: string
@@ -13,7 +13,13 @@ type TeacherCommentProps = {
13
13
  isLastComment: boolean
14
14
  }
15
15
 
16
- export const TeacherComment = ({ content, teacherName, createdAt, locale, isLastComment }: TeacherCommentProps) => {
16
+ export const TeacherComment = ({
17
+ content,
18
+ teacherName,
19
+ createdAt,
20
+ locale,
21
+ isLastComment,
22
+ }: TeacherCommentProps) => {
17
23
  return (
18
24
  <View style={{ marginBottom: isLastComment ? 8 : 0 }}>
19
25
  <View style={styles.authorInfo}>
@@ -22,7 +28,7 @@ export const TeacherComment = ({ content, teacherName, createdAt, locale, isLast
22
28
  </Text>
23
29
  <View style={styles.spacer} />
24
30
  <Text style={styles.dateAdded} numberOfLines={1}>
25
- {getRelativeTime(createdAt, locale ?? Locale.US)}
31
+ {getRelativeTimeText(createdAt, locale ?? Locale.EN)}
26
32
  </Text>
27
33
  </View>
28
34
 
@@ -1,17 +1,18 @@
1
1
  import React, { useEffect, useRef } from 'react'
2
2
  import { Platform, ScrollView, StyleSheet, useWindowDimensions, View } from 'react-native'
3
- import { Locale, TeacherComment as FeedbackComment } from '../../types/teacherFeedback.types'
4
3
  import { TeacherComment } from './TeacherComment'
5
- import { EmptyComment } from '../EmptyComment/EmptyComment'
4
+ import { EmptyComment } from '../EmptyComment'
6
5
  import { EMPTY_COMMENT_ID, FeedbackMode } from '../../constants'
7
6
  import { COLORS } from '@magmamath/react-native-ui'
7
+ import { Locale } from '../../../../shared/translation'
8
+ import { TeacherComment as TeacherCommentEntity } from '../../types'
8
9
 
9
10
  const TOOLBAR_HEIGHT = 140
10
11
  const BOTTOM_OFFSET = Platform.OS === 'web' ? 270 : 304
11
12
  const SIMPLE_MODE_OFFSET = 70
12
13
 
13
14
  type TeacherFeedbackCommentsProps = {
14
- comments: FeedbackComment[] | null
15
+ comments: TeacherCommentEntity[] | null
15
16
  locale: Locale | null
16
17
  mode: FeedbackMode
17
18
  }
@@ -2,4 +2,4 @@ export { TeacherFeedbackComments } from './TeacherFeedbackComments/TeacherFeedba
2
2
  export { TeacherFeedbackButton } from './TeacherFeedbackButton/TeacherFeedbackButton'
3
3
  export { TeacherFeedback } from './TeacherFeedback'
4
4
  export { UnreadMessagesBadge } from './UnreadMessagesBadge'
5
- export { ListCardCommentsCount } from './ListCardCommentsCount/ListCardCommentsCount'
5
+ export { ListCardCommentsCount } from './ListCardCommentsCount'
@@ -1,28 +1,12 @@
1
1
  import { Platform } from 'react-native'
2
- import { Locale } from './types/teacherFeedback.types'
3
2
 
4
- export const BUENOS_AIRES_FONT = Platform.OS === 'web' ? 'Buenos Aires, sans-serif' : 'BuenosAires-Regular'
3
+ export const BUENOS_AIRES_FONT =
4
+ Platform.OS === 'web' ? 'Buenos Aires, sans-serif' : 'BuenosAires-Regular'
5
5
 
6
6
  export const NO_COMMENTS_ENG = 'No comments yet'
7
7
  export const NO_COMMENTS_SWE = 'Inga kommentarer än'
8
8
  export const EMPTY_COMMENT_ID = 'empty-comment'
9
9
 
10
- export const getEmptyComment = (problemId: string, locale: Locale | null) => {
11
- return {
12
- __v: 0,
13
- _id: EMPTY_COMMENT_ID,
14
- content: locale === Locale.SV ? NO_COMMENTS_SWE : NO_COMMENTS_ENG,
15
- createdAt: new Date(),
16
- exerciseId: '',
17
- isRead: true,
18
- problemId,
19
- studentId: '',
20
- teacherId: '',
21
- teacherName: '',
22
- updatedAt: new Date(),
23
- }
24
- }
25
-
26
10
  export const TEACHER_FEEDBACK_BUTTON_ID = 'teacherFeedbackButton'
27
11
 
28
12
  export enum FeedbackButtonColors {
@@ -1,66 +1,33 @@
1
- import { Locale } from './types/teacherFeedback.types'
1
+ import { CommentsMap, FeedbackEntity, GetCommentsResponse } from './types'
2
2
 
3
- const RELATIVE_TIME_LABELS = {
4
- [Locale.US]: {
5
- justNow: 'just now',
6
- minuteAgo: 'minute ago',
7
- minutesAgo: 'minutes ago',
8
- hourAgo: 'hour ago',
9
- hoursAgo: 'hours ago',
10
- dayAgo: 'day ago',
11
- daysAgo: 'days ago',
12
- monthAgo: 'month ago',
13
- monthsAgo: 'months ago',
14
- yearAgo: 'year ago',
15
- yearsAgo: 'years ago',
16
- },
17
- [Locale.SV]: {
18
- justNow: 'alldeles nyss',
19
- minuteAgo: 'minut sedan',
20
- minutesAgo: 'minuter sedan',
21
- hourAgo: 'timme sedan',
22
- hoursAgo: 'timmar sedan',
23
- dayAgo: 'dag sedan',
24
- daysAgo: 'dagar sedan',
25
- monthAgo: 'månad sedan',
26
- monthsAgo: 'månader sedan',
27
- yearAgo: 'år sedan',
28
- yearsAgo: 'år sedan',
29
- },
30
- [Locale.GB]: {
31
- justNow: 'just now',
32
- minuteAgo: 'minute ago',
33
- minutesAgo: 'minutes ago',
34
- hourAgo: 'hour ago',
35
- hoursAgo: 'hours ago',
36
- dayAgo: 'day ago',
37
- daysAgo: 'days ago',
38
- monthAgo: 'month ago',
39
- monthsAgo: 'months ago',
40
- yearAgo: 'year ago',
41
- yearsAgo: 'years ago',
42
- },
43
- }
3
+ export function generateCommentsMap(assignmentId: string, data: GetCommentsResponse): CommentsMap {
4
+ const problemsMap = Object.entries(data).reduce<Record<string, FeedbackEntity>>(
5
+ (acc, [problemId, feedback]) => {
6
+ const unreadMessages = feedback.comments.filter(({ isRead }) => !isRead)
7
+
8
+ acc[problemId] = {
9
+ comments: feedback.comments,
10
+ unreadMessagesCount: unreadMessages.length,
11
+ }
44
12
 
45
- export const getRelativeTime = (date: Date, lang: Locale) => {
46
- const t = RELATIVE_TIME_LABELS[lang] || RELATIVE_TIME_LABELS[Locale.US]
47
- const timeBufferMs = 2000 // adds 2 seconds time buffer because when used with sockets, it displayed -1 seconds ago, instead of 1 second ago.
13
+ return acc
14
+ },
15
+ {},
16
+ )
48
17
 
49
- const now = new Date().getTime()
50
- const targetDate = new Date(date).getTime() - timeBufferMs
51
- const diffTime = now - targetDate
18
+ return new Map().set(assignmentId, problemsMap)
19
+ }
52
20
 
53
- const seconds = Math.floor(diffTime / 1000)
54
- const minutes = Math.floor(seconds / 60)
55
- const hours = Math.floor(minutes / 60)
56
- const days = Math.floor(hours / 24)
57
- const months = Math.floor(days / 30)
58
- const years = Math.floor(days / 365)
21
+ type FindCommentsByCreditsProps = {
22
+ data: CommentsMap | null
23
+ assignmentId: string
24
+ problemId: string
25
+ }
59
26
 
60
- if (seconds < 60) return t.justNow
61
- if (minutes < 60) return `${minutes} ${minutes === 1 ? t.minuteAgo : t.minutesAgo}`
62
- if (hours < 24) return `${hours} ${hours === 1 ? t.hourAgo : t.hoursAgo}`
63
- if (days < 30) return `${days} ${days === 1 ? t.dayAgo : t.daysAgo}`
64
- if (months < 12) return `${months} ${months === 1 ? t.monthAgo : t.monthsAgo}`
65
- return `${years} ${years === 1 ? t.yearAgo : t.yearsAgo}`
27
+ export function findCommentsByCredits({
28
+ data,
29
+ assignmentId,
30
+ problemId,
31
+ }: FindCommentsByCreditsProps) {
32
+ return data?.get(assignmentId)?.[problemId]?.comments ?? []
66
33
  }
@@ -1,4 +1,4 @@
1
- export * from './model/teacherFeedback.model'
2
- export * from './types/teacherFeedback.types'
1
+ export * from './model/model'
2
+ export * from './types'
3
3
  export * from './constants'
4
4
  export * from './components'
@@ -0,0 +1,13 @@
1
+ import { createEffect, Effect } from 'effector'
2
+ import { TeacherFeedbackModelProps } from './model'
3
+ import { GetCommentsPayload, GetCommentsResponse, UpdateCommentStatusSeenPayload } from '../types'
4
+
5
+ export class TeacherFeedbackAPI {
6
+ public readonly getCommentsFx: Effect<GetCommentsPayload, GetCommentsResponse>
7
+ public readonly updateCommentStatusSeenFx: Effect<UpdateCommentStatusSeenPayload, void>
8
+
9
+ constructor(api: TeacherFeedbackModelProps['api']) {
10
+ this.getCommentsFx = createEffect(api.getComments)
11
+ this.updateCommentStatusSeenFx = createEffect(api.updateCommentStatusSeen)
12
+ }
13
+ }