@magmamath/students-features 0.2.10 → 0.2.12

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 (180) hide show
  1. package/dist/commonjs/features/chatbot/components/ChatControls/ChatControls.js +2 -2
  2. package/dist/commonjs/features/chatbot/components/ChatControls/ChatControls.js.map +1 -1
  3. package/dist/commonjs/features/feedback/components/EmptyComment.js +4 -5
  4. package/dist/commonjs/features/feedback/components/EmptyComment.js.map +1 -1
  5. package/dist/commonjs/features/feedback/components/ListCardCommentsCount.js +1 -1
  6. package/dist/commonjs/features/feedback/components/TeacherFeedback.js +5 -6
  7. package/dist/commonjs/features/feedback/components/TeacherFeedback.js.map +1 -1
  8. package/dist/commonjs/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js +32 -9
  9. package/dist/commonjs/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js.map +1 -1
  10. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.js +1 -3
  11. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.js.map +1 -1
  12. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js +1 -8
  13. package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js.map +1 -1
  14. package/dist/commonjs/features/feedback/components/UnreadMessagesBadge.js +1 -1
  15. package/dist/commonjs/features/feedback/components/UnreadMessagesBadge.js.map +1 -1
  16. package/dist/commonjs/features/feedback/constants.js +11 -3
  17. package/dist/commonjs/features/feedback/constants.js.map +1 -1
  18. package/dist/commonjs/features/feedback/helpers.js +24 -0
  19. package/dist/commonjs/features/feedback/helpers.js.map +1 -1
  20. package/dist/commonjs/features/feedback/model/api.js.map +1 -1
  21. package/dist/commonjs/features/feedback/model/comments.js +17 -33
  22. package/dist/commonjs/features/feedback/model/comments.js.map +1 -1
  23. package/dist/commonjs/features/feedback/model/model.js +5 -3
  24. package/dist/commonjs/features/feedback/model/model.js.map +1 -1
  25. package/dist/commonjs/features/feedback/types.js.map +1 -1
  26. package/dist/commonjs/lib/helpers/helpers.js +20 -16
  27. package/dist/commonjs/lib/helpers/helpers.js.map +1 -1
  28. package/dist/commonjs/lib/localization/en.json +12 -0
  29. package/dist/commonjs/lib/localization/gb.json +12 -0
  30. package/dist/commonjs/lib/localization/sw.json +12 -0
  31. package/dist/commonjs/shared/icons/MessageBubbleIcon.js.map +1 -0
  32. package/dist/commonjs/shared/icons/XCloseIcon.js.map +1 -0
  33. package/dist/commonjs/shared/translation/constants.js +1 -42
  34. package/dist/commonjs/shared/translation/constants.js.map +1 -1
  35. package/dist/commonjs/shared/translation/helpers.js.map +1 -1
  36. package/dist/commonjs/shared/translation/types.js.map +1 -1
  37. package/dist/module/features/chatbot/components/ChatControls/ChatControls.js +2 -2
  38. package/dist/module/features/chatbot/components/ChatControls/ChatControls.js.map +1 -1
  39. package/dist/module/features/feedback/components/EmptyComment.js +5 -6
  40. package/dist/module/features/feedback/components/EmptyComment.js.map +1 -1
  41. package/dist/module/features/feedback/components/ListCardCommentsCount.js +1 -1
  42. package/dist/module/features/feedback/components/ListCardCommentsCount.js.map +1 -1
  43. package/dist/module/features/feedback/components/TeacherFeedback.js +6 -7
  44. package/dist/module/features/feedback/components/TeacherFeedback.js.map +1 -1
  45. package/dist/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js +32 -9
  46. package/dist/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js.map +1 -1
  47. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.js +1 -3
  48. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.js.map +1 -1
  49. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js +2 -9
  50. package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js.map +1 -1
  51. package/dist/module/features/feedback/components/UnreadMessagesBadge.js +1 -1
  52. package/dist/module/features/feedback/components/UnreadMessagesBadge.js.map +1 -1
  53. package/dist/module/features/feedback/constants.js +10 -2
  54. package/dist/module/features/feedback/constants.js.map +1 -1
  55. package/dist/module/features/feedback/helpers.js +23 -0
  56. package/dist/module/features/feedback/helpers.js.map +1 -1
  57. package/dist/module/features/feedback/model/api.js.map +1 -1
  58. package/dist/module/features/feedback/model/comments.js +14 -30
  59. package/dist/module/features/feedback/model/comments.js.map +1 -1
  60. package/dist/module/features/feedback/model/model.js +6 -4
  61. package/dist/module/features/feedback/model/model.js.map +1 -1
  62. package/dist/module/features/feedback/types.js.map +1 -1
  63. package/dist/module/lib/helpers/helpers.js +20 -16
  64. package/dist/module/lib/helpers/helpers.js.map +1 -1
  65. package/dist/module/lib/localization/en.json +12 -0
  66. package/dist/module/lib/localization/gb.json +12 -0
  67. package/dist/module/lib/localization/sw.json +12 -0
  68. package/dist/module/shared/icons/MessageBubbleIcon.js.map +1 -0
  69. package/dist/module/shared/icons/XCloseIcon.js.map +1 -0
  70. package/dist/module/shared/translation/constants.js +0 -41
  71. package/dist/module/shared/translation/constants.js.map +1 -1
  72. package/dist/module/shared/translation/helpers.js.map +1 -1
  73. package/dist/module/shared/translation/types.js.map +1 -1
  74. package/dist/typescript/commonjs/features/chatbot/components/Chatbot.d.ts.map +1 -1
  75. package/dist/typescript/commonjs/features/feedback/components/EmptyComment.d.ts +1 -6
  76. package/dist/typescript/commonjs/features/feedback/components/EmptyComment.d.ts.map +1 -1
  77. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedback.d.ts +5 -5
  78. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedback.d.ts.map +1 -1
  79. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.d.ts.map +1 -1
  80. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts +2 -4
  81. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts.map +1 -1
  82. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts +2 -4
  83. package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts.map +1 -1
  84. package/dist/typescript/commonjs/features/feedback/components/UnreadMessagesBadge.d.ts +1 -1
  85. package/dist/typescript/commonjs/features/feedback/components/UnreadMessagesBadge.d.ts.map +1 -1
  86. package/dist/typescript/commonjs/features/feedback/constants.d.ts +2 -2
  87. package/dist/typescript/commonjs/features/feedback/constants.d.ts.map +1 -1
  88. package/dist/typescript/commonjs/features/feedback/helpers.d.ts +10 -1
  89. package/dist/typescript/commonjs/features/feedback/helpers.d.ts.map +1 -1
  90. package/dist/typescript/commonjs/features/feedback/model/api.d.ts +6 -2
  91. package/dist/typescript/commonjs/features/feedback/model/api.d.ts.map +1 -1
  92. package/dist/typescript/commonjs/features/feedback/model/comments.d.ts +10 -12
  93. package/dist/typescript/commonjs/features/feedback/model/comments.d.ts.map +1 -1
  94. package/dist/typescript/commonjs/features/feedback/model/model.d.ts +4 -7
  95. package/dist/typescript/commonjs/features/feedback/model/model.d.ts.map +1 -1
  96. package/dist/typescript/commonjs/features/feedback/types.d.ts +8 -1
  97. package/dist/typescript/commonjs/features/feedback/types.d.ts.map +1 -1
  98. package/dist/typescript/commonjs/lib/helpers/helpers.d.ts +1 -2
  99. package/dist/typescript/commonjs/lib/helpers/helpers.d.ts.map +1 -1
  100. package/dist/typescript/commonjs/shared/icons/MessageBubbleIcon.d.ts.map +1 -0
  101. package/dist/typescript/commonjs/shared/icons/XCloseIcon.d.ts.map +1 -0
  102. package/dist/typescript/commonjs/shared/translation/constants.d.ts +38 -40
  103. package/dist/typescript/commonjs/shared/translation/constants.d.ts.map +1 -1
  104. package/dist/typescript/commonjs/shared/translation/helpers.d.ts.map +1 -1
  105. package/dist/typescript/commonjs/shared/translation/types.d.ts +4 -1
  106. package/dist/typescript/commonjs/shared/translation/types.d.ts.map +1 -1
  107. package/dist/typescript/module/features/chatbot/components/Chatbot.d.ts.map +1 -1
  108. package/dist/typescript/module/features/feedback/components/EmptyComment.d.ts +1 -6
  109. package/dist/typescript/module/features/feedback/components/EmptyComment.d.ts.map +1 -1
  110. package/dist/typescript/module/features/feedback/components/TeacherFeedback.d.ts +5 -5
  111. package/dist/typescript/module/features/feedback/components/TeacherFeedback.d.ts.map +1 -1
  112. package/dist/typescript/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.d.ts.map +1 -1
  113. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts +2 -4
  114. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts.map +1 -1
  115. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts +2 -4
  116. package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts.map +1 -1
  117. package/dist/typescript/module/features/feedback/components/UnreadMessagesBadge.d.ts +1 -1
  118. package/dist/typescript/module/features/feedback/components/UnreadMessagesBadge.d.ts.map +1 -1
  119. package/dist/typescript/module/features/feedback/constants.d.ts +2 -2
  120. package/dist/typescript/module/features/feedback/constants.d.ts.map +1 -1
  121. package/dist/typescript/module/features/feedback/helpers.d.ts +10 -1
  122. package/dist/typescript/module/features/feedback/helpers.d.ts.map +1 -1
  123. package/dist/typescript/module/features/feedback/model/api.d.ts +6 -2
  124. package/dist/typescript/module/features/feedback/model/api.d.ts.map +1 -1
  125. package/dist/typescript/module/features/feedback/model/comments.d.ts +10 -12
  126. package/dist/typescript/module/features/feedback/model/comments.d.ts.map +1 -1
  127. package/dist/typescript/module/features/feedback/model/model.d.ts +4 -7
  128. package/dist/typescript/module/features/feedback/model/model.d.ts.map +1 -1
  129. package/dist/typescript/module/features/feedback/types.d.ts +8 -1
  130. package/dist/typescript/module/features/feedback/types.d.ts.map +1 -1
  131. package/dist/typescript/module/lib/helpers/helpers.d.ts +1 -2
  132. package/dist/typescript/module/lib/helpers/helpers.d.ts.map +1 -1
  133. package/dist/typescript/module/shared/icons/MessageBubbleIcon.d.ts.map +1 -0
  134. package/dist/typescript/module/shared/icons/XCloseIcon.d.ts.map +1 -0
  135. package/dist/typescript/module/shared/translation/constants.d.ts +38 -40
  136. package/dist/typescript/module/shared/translation/constants.d.ts.map +1 -1
  137. package/dist/typescript/module/shared/translation/helpers.d.ts.map +1 -1
  138. package/dist/typescript/module/shared/translation/types.d.ts +4 -1
  139. package/dist/typescript/module/shared/translation/types.d.ts.map +1 -1
  140. package/package.json +1 -1
  141. package/src/features/chatbot/components/ChatControls/ChatControls.tsx +2 -2
  142. package/src/features/chatbot/components/Chatbot.tsx +1 -1
  143. package/src/features/feedback/components/EmptyComment.tsx +5 -8
  144. package/src/features/feedback/components/ListCardCommentsCount.tsx +1 -1
  145. package/src/features/feedback/components/TeacherFeedback.tsx +7 -8
  146. package/src/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.tsx +30 -16
  147. package/src/features/feedback/components/TeacherFeedbackComments/TeacherComment.tsx +3 -5
  148. package/src/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.tsx +2 -10
  149. package/src/features/feedback/components/UnreadMessagesBadge.tsx +10 -3
  150. package/src/features/feedback/constants.ts +12 -3
  151. package/src/features/feedback/helpers.ts +31 -0
  152. package/src/features/feedback/model/api.ts +6 -2
  153. package/src/features/feedback/model/comments.ts +17 -39
  154. package/src/features/feedback/model/model.ts +8 -11
  155. package/src/features/feedback/types.ts +7 -1
  156. package/src/lib/helpers/helpers.ts +24 -16
  157. package/src/lib/localization/en.json +12 -0
  158. package/src/lib/localization/gb.json +12 -0
  159. package/src/lib/localization/sw.json +12 -0
  160. package/src/shared/translation/constants.ts +0 -42
  161. package/src/shared/translation/helpers.ts +17 -17
  162. package/src/shared/translation/types.ts +12 -4
  163. package/dist/commonjs/features/feedback/assets/icons/MessageBubbleIcon.js.map +0 -1
  164. package/dist/commonjs/features/feedback/assets/icons/XCloseIcon.js.map +0 -1
  165. package/dist/module/features/feedback/assets/icons/MessageBubbleIcon.js.map +0 -1
  166. package/dist/module/features/feedback/assets/icons/XCloseIcon.js.map +0 -1
  167. package/dist/typescript/commonjs/features/feedback/assets/icons/MessageBubbleIcon.d.ts.map +0 -1
  168. package/dist/typescript/commonjs/features/feedback/assets/icons/XCloseIcon.d.ts.map +0 -1
  169. package/dist/typescript/module/features/feedback/assets/icons/MessageBubbleIcon.d.ts.map +0 -1
  170. package/dist/typescript/module/features/feedback/assets/icons/XCloseIcon.d.ts.map +0 -1
  171. /package/dist/commonjs/{features/feedback/assets → shared}/icons/MessageBubbleIcon.js +0 -0
  172. /package/dist/commonjs/{features/feedback/assets → shared}/icons/XCloseIcon.js +0 -0
  173. /package/dist/module/{features/feedback/assets → shared}/icons/MessageBubbleIcon.js +0 -0
  174. /package/dist/module/{features/feedback/assets → shared}/icons/XCloseIcon.js +0 -0
  175. /package/dist/typescript/commonjs/{features/feedback/assets → shared}/icons/MessageBubbleIcon.d.ts +0 -0
  176. /package/dist/typescript/commonjs/{features/feedback/assets → shared}/icons/XCloseIcon.d.ts +0 -0
  177. /package/dist/typescript/module/{features/feedback/assets → shared}/icons/MessageBubbleIcon.d.ts +0 -0
  178. /package/dist/typescript/module/{features/feedback/assets → shared}/icons/XCloseIcon.d.ts +0 -0
  179. /package/src/{features/feedback/assets → shared}/icons/MessageBubbleIcon.tsx +0 -0
  180. /package/src/{features/feedback/assets → shared}/icons/XCloseIcon.tsx +0 -0
@@ -31,3 +31,34 @@ export function findCommentsByCredits({
31
31
  }: FindCommentsByCreditsProps) {
32
32
  return data?.get(assignmentId)?.[problemId]?.comments ?? []
33
33
  }
34
+
35
+ type UpdateCommentsStateProps = {
36
+ state: CommentsMap | null
37
+ assignmentId: string
38
+ problemId: string
39
+ fn: (data: FeedbackEntity) => FeedbackEntity | undefined
40
+ }
41
+
42
+ export function updateCommentsState({
43
+ state,
44
+ assignmentId,
45
+ problemId,
46
+ fn,
47
+ }: UpdateCommentsStateProps) {
48
+ if (!state) return state
49
+
50
+ const updatedState = new Map(state)
51
+ const assignmentMap = updatedState.get(assignmentId) || {}
52
+ const currentData = assignmentMap[problemId] || { comments: [], unreadMessagesCount: 0 }
53
+ const updatedData = fn(currentData)
54
+
55
+ if (updatedData === undefined) {
56
+ delete assignmentMap[problemId]
57
+ if (Object.keys(assignmentMap).length === 0) updatedState.delete(assignmentId)
58
+ return updatedState
59
+ }
60
+
61
+ assignmentMap[problemId] = updatedData
62
+ updatedState.set(assignmentId, assignmentMap)
63
+ return updatedState
64
+ }
@@ -1,12 +1,16 @@
1
1
  import { createEffect, Effect } from 'effector'
2
- import { TeacherFeedbackModelProps } from './model'
3
2
  import { GetCommentsPayload, GetCommentsResponse, UpdateCommentStatusSeenPayload } from '../types'
4
3
 
4
+ type TeacherFeedbackAPIProps = {
5
+ getComments: (props: GetCommentsPayload) => Promise<GetCommentsResponse>
6
+ updateCommentStatusSeen: (props: UpdateCommentStatusSeenPayload) => Promise<void>
7
+ }
8
+
5
9
  export class TeacherFeedbackAPI {
6
10
  public readonly getCommentsFx: Effect<GetCommentsPayload, GetCommentsResponse>
7
11
  public readonly updateCommentStatusSeenFx: Effect<UpdateCommentStatusSeenPayload, void>
8
12
 
9
- constructor(api: TeacherFeedbackModelProps['api']) {
13
+ constructor(api: TeacherFeedbackAPIProps) {
10
14
  this.getCommentsFx = createEffect(api.getComments)
11
15
  this.updateCommentStatusSeenFx = createEffect(api.updateCommentStatusSeen)
12
16
  }
@@ -1,25 +1,25 @@
1
1
  import { createEvent, restore, sample, Store } from 'effector'
2
- import { CommentsMap, Credits, FeedbackEntity, TeacherComment } from '../types'
2
+ import { AddCommentProps, CommentsMap, Credits, DeleteCommentProps, TeacherComment } from '../types'
3
3
  import { TeacherFeedbackAPI } from './api'
4
- import { TeacherFeedbackModelProps } from './model'
4
+ import { updateCommentsState } from '../helpers'
5
+ import { getText } from '../../../shared/translation/helpers'
6
+ import { EMPTY_COMMENT } from '@magmamath/students-features'
5
7
 
6
- type UpdateProps = {
7
- state: CommentsMap | null
8
- assignmentId: string
9
- problemId: string
10
- fn: (data: FeedbackEntity) => FeedbackEntity | undefined
8
+ type TeacherCommentsModelProps = {
9
+ api: TeacherFeedbackAPI
10
+ $isOpen: Store<boolean>
11
11
  }
12
12
 
13
- export class TeacherComments {
13
+ export class TeacherCommentsModel {
14
14
  private readonly setNoCommentsMessage = createEvent<TeacherComment>()
15
15
  public readonly setAllCommentsRead = createEvent<Credits>()
16
- public readonly add = createEvent<Credits & { comment: TeacherComment; isRead: boolean }>()
17
- public readonly delete = createEvent<Credits & { commentId: string }>()
16
+ public readonly add = createEvent<AddCommentProps>()
17
+ public readonly delete = createEvent<DeleteCommentProps>()
18
18
 
19
19
  public readonly setData = createEvent<CommentsMap>()
20
20
  public readonly $data = restore<CommentsMap | null>(this.setData, null)
21
21
  .on(this.setAllCommentsRead, (state, { assignmentId, problemId }) =>
22
- this.update({
22
+ updateCommentsState({
23
23
  state,
24
24
  assignmentId,
25
25
  problemId,
@@ -30,7 +30,7 @@ export class TeacherComments {
30
30
  }),
31
31
  )
32
32
  .on(this.add, (state, { assignmentId, problemId, comment, isRead }) =>
33
- this.update({
33
+ updateCommentsState({
34
34
  state,
35
35
  assignmentId,
36
36
  problemId,
@@ -41,7 +41,7 @@ export class TeacherComments {
41
41
  }),
42
42
  )
43
43
  .on(this.delete, (state, { assignmentId, problemId, commentId }) =>
44
- this.update({
44
+ updateCommentsState({
45
45
  state,
46
46
  assignmentId,
47
47
  problemId,
@@ -62,7 +62,7 @@ export class TeacherComments {
62
62
  }),
63
63
  )
64
64
  .on(this.setNoCommentsMessage, (state, noCommentsMessage) =>
65
- this.update({
65
+ updateCommentsState({
66
66
  state,
67
67
  assignmentId: noCommentsMessage.exerciseId,
68
68
  problemId: noCommentsMessage.problemId,
@@ -73,11 +73,7 @@ export class TeacherComments {
73
73
  }),
74
74
  )
75
75
 
76
- constructor(
77
- api: TeacherFeedbackAPI,
78
- $isOpen: Store<boolean>,
79
- EMPTY_COMMENT: TeacherFeedbackModelProps['defaults']['EMPTY_COMMENT'],
80
- ) {
76
+ constructor({ api, $isOpen }: TeacherCommentsModelProps) {
81
77
  sample({
82
78
  clock: this.add,
83
79
  source: { isOpen: $isOpen },
@@ -97,31 +93,13 @@ export class TeacherComments {
97
93
  ?.comments.length
98
94
  return isOpen && hasNoMessages
99
95
  },
100
- fn: (_, { assignmentId, problemId }) => ({
96
+ fn: (_, { assignmentId, problemId }): TeacherComment => ({
101
97
  ...EMPTY_COMMENT,
102
98
  exerciseId: assignmentId,
103
99
  problemId,
100
+ content: getText('teacherFeedback.noComments'),
104
101
  }),
105
102
  target: this.setNoCommentsMessage,
106
103
  })
107
104
  }
108
-
109
- private update({ state, assignmentId, problemId, fn }: UpdateProps) {
110
- if (!state) return state
111
-
112
- const updatedState = new Map(state)
113
- const assignmentMap = updatedState.get(assignmentId) || {}
114
- const currentData = assignmentMap[problemId] || { comments: [], unreadMessagesCount: 0 }
115
- const updatedData = fn(currentData)
116
-
117
- if (updatedData === undefined) {
118
- delete assignmentMap[problemId]
119
- if (Object.keys(assignmentMap).length === 0) updatedState.delete(assignmentId)
120
- return updatedState
121
- }
122
-
123
- assignmentMap[problemId] = updatedData
124
- updatedState.set(assignmentId, assignmentMap)
125
- return updatedState
126
- }
127
105
  }
@@ -1,14 +1,9 @@
1
1
  import { createEvent, restore, sample, Store } from 'effector'
2
2
  import { TeacherFeedbackAPI } from './api'
3
3
  import { TeacherFeedbackSockets } from './sockets'
4
- import { TeacherComments } from './comments'
4
+ import { TeacherCommentsModel } from './comments'
5
5
  import { findCommentsByCredits, generateCommentsMap } from '../helpers'
6
- import {
7
- GetCommentsPayload,
8
- GetCommentsResponse,
9
- NoCommentsMessage,
10
- UpdateCommentStatusSeenPayload,
11
- } from '../types'
6
+ import { GetCommentsPayload, GetCommentsResponse, UpdateCommentStatusSeenPayload } from '../types'
12
7
  import { EMPTY_COMMENT_ID } from '../constants'
13
8
 
14
9
  export type TeacherFeedbackModelProps = {
@@ -21,23 +16,25 @@ export type TeacherFeedbackModelProps = {
21
16
  $assignmentId: Store<string>
22
17
  $problemId: Store<string>
23
18
  }
24
- defaults: { EMPTY_COMMENT: NoCommentsMessage }
25
19
  }
26
20
 
27
21
  export class TeacherFeedbackModel {
28
22
  public readonly sockets: TeacherFeedbackSockets
29
23
  public readonly api: TeacherFeedbackAPI
30
- public readonly comments: TeacherComments
24
+ public readonly comments: TeacherCommentsModel
31
25
  public readonly setIsOpen = createEvent<boolean>()
32
26
  public readonly $isOpen = restore(this.setIsOpen, false)
33
27
 
34
28
  public readonly setIsFeedbackIconDisplayed = createEvent<boolean>()
35
29
  public readonly $isFeedbackIconDisplayed = restore(this.setIsFeedbackIconDisplayed, true)
36
30
 
37
- constructor({ api, socket, credits, defaults }: TeacherFeedbackModelProps) {
31
+ constructor({ api, socket, credits }: TeacherFeedbackModelProps) {
38
32
  this.api = new TeacherFeedbackAPI(api)
39
33
  this.sockets = new TeacherFeedbackSockets(socket)
40
- this.comments = new TeacherComments(this.api, this.$isOpen, defaults.EMPTY_COMMENT)
34
+ this.comments = new TeacherCommentsModel({
35
+ api: this.api,
36
+ $isOpen: this.$isOpen,
37
+ })
41
38
 
42
39
  sample({
43
40
  clock: credits.$problemId,
@@ -26,7 +26,10 @@ export type TeacherComment = {
26
26
  __v: number
27
27
  }
28
28
 
29
- export type NoCommentsMessage = Omit<TeacherComment, '_id' | 'problemId' | 'exerciseId'> & {
29
+ export type NoCommentsMessage = Omit<
30
+ TeacherComment,
31
+ '_id' | 'problemId' | 'exerciseId' | 'content'
32
+ > & {
30
33
  _id: typeof EMPTY_COMMENT_ID
31
34
  }
32
35
 
@@ -46,3 +49,6 @@ export enum FeedbackSocketEvents {
46
49
  COMMENT_ADDED = 'exerciseCommentCreated',
47
50
  COMMENT_DELETED = 'exerciseCommentDeleted',
48
51
  }
52
+
53
+ export type AddCommentProps = Credits & { comment: TeacherComment; isRead: boolean }
54
+ export type DeleteCommentProps = Credits & { commentId: string }
@@ -1,28 +1,36 @@
1
- import { RELATIVE_TIME_LABELS } from '../../shared/translation/constants'
2
- import { Locale } from '@magmamath/students-features'
1
+ import { getText } from '../../shared/translation/helpers'
3
2
 
4
3
  export const generateRandomId = () =>
5
4
  Date.now().toString(36) + Math.random().toString(36).substring(2)
6
5
 
7
- export const getRelativeTimeText = (date: Date, lang: Locale) => {
8
- const t = RELATIVE_TIME_LABELS[lang] || RELATIVE_TIME_LABELS[Locale.EN]
6
+ const getYears = (days: number) => Math.floor(days / 365)
7
+ const getMonths = (days: number) => Math.floor(days / 30)
8
+ const getDays = (hours: number) => Math.floor(hours / 24)
9
+ const getHours = (minutes: number) => Math.floor(minutes / 60)
10
+ const getMinutes = (seconds: number) => Math.floor(seconds / 60)
11
+ const getSeconds = (milliseconds: number) => Math.floor(milliseconds / 1000)
12
+
13
+ export const getRelativeTimeText = (date: Date) => {
9
14
  const timeBufferMs = 2000 // adds 2 seconds time buffer because when used with sockets, it displayed -1 seconds ago, instead of 1 second ago.
10
15
 
11
16
  const now = new Date().getTime()
12
17
  const targetDate = new Date(date).getTime() - timeBufferMs
13
18
  const diffTime = now - targetDate
14
19
 
15
- const seconds = Math.floor(diffTime / 1000)
16
- const minutes = Math.floor(seconds / 60)
17
- const hours = Math.floor(minutes / 60)
18
- const days = Math.floor(hours / 24)
19
- const months = Math.floor(days / 30)
20
- const years = Math.floor(days / 365)
20
+ const seconds = getSeconds(diffTime)
21
+ const minutes = getMinutes(seconds)
22
+ const hours = getHours(minutes)
23
+ const days = getDays(hours)
24
+ const months = getMonths(days)
25
+ const years = getYears(days)
21
26
 
22
- if (seconds < 60) return t.justNow
23
- if (minutes < 60) return `${minutes} ${minutes === 1 ? t.minuteAgo : t.minutesAgo}`
24
- if (hours < 24) return `${hours} ${hours === 1 ? t.hourAgo : t.hoursAgo}`
25
- if (days < 30) return `${days} ${days === 1 ? t.dayAgo : t.daysAgo}`
26
- if (months < 12) return `${months} ${months === 1 ? t.monthAgo : t.monthsAgo}`
27
- return `${years} ${years === 1 ? t.yearAgo : t.yearsAgo}`
27
+ if (seconds < 60) return getText('time.justNow')
28
+ if (minutes < 60)
29
+ return `${minutes} ${minutes === 1 ? getText('time.minuteAgo') : getText('time.minutesAgo')}`
30
+ if (hours < 24)
31
+ return `${hours} ${hours === 1 ? getText('time.hourAgo') : getText('time.hoursAgo')}`
32
+ if (days < 30) return `${days} ${days === 1 ? getText('time.dayAgo') : getText('time.daysAgo')}`
33
+ if (months < 12)
34
+ return `${months} ${months === 1 ? getText('time.monthAgo') : getText('time.monthsAgo')}`
35
+ return `${years} ${years === 1 ? getText('time.yearAgo') : getText('time.yearsAgo')}`
28
36
  }
@@ -1,2 +1,14 @@
1
1
  {
2
+ "teacherFeedback.noComments": "No comments yet",
3
+ "time.justNow": "just now",
4
+ "time.minuteAgo": "minute ago",
5
+ "time.minutesAgo": "minutes ago",
6
+ "time.hourAgo": "hour ago",
7
+ "time.hoursAgo": "hours ago",
8
+ "time.dayAgo": "day ago",
9
+ "time.daysAgo": "days ago",
10
+ "time.monthAgo": "month ago",
11
+ "time.monthsAgo": "months ago",
12
+ "time.yearAgo": "year ago",
13
+ "time.yearsAgo": "years ago"
2
14
  }
@@ -1,2 +1,14 @@
1
1
  {
2
+ "teacherFeedback.noComments": "No comments yet",
3
+ "time.justNow": "just now",
4
+ "time.minuteAgo": "minute ago",
5
+ "time.minutesAgo": "minutes ago",
6
+ "time.hourAgo": "hour ago",
7
+ "time.hoursAgo": "hours ago",
8
+ "time.dayAgo": "day ago",
9
+ "time.daysAgo": "days ago",
10
+ "time.monthAgo": "month ago",
11
+ "time.monthsAgo": "months ago",
12
+ "time.yearAgo": "year ago",
13
+ "time.yearsAgo": "years ago"
2
14
  }
@@ -1,2 +1,14 @@
1
1
  {
2
+ "teacherFeedback.noComments": "Inga kommentarer än",
3
+ "time.justNow": "alldeles nyss",
4
+ "time.minuteAgo": "minut sedan",
5
+ "time.minutesAgo": "minuter sedan",
6
+ "time.hourAgo": "timme sedan",
7
+ "time.hoursAgo": "timmar sedan",
8
+ "time.dayAgo": "dag sedan",
9
+ "time.daysAgo": "dagar sedan",
10
+ "time.monthAgo": "månad sedan",
11
+ "time.monthsAgo": "månader sedan",
12
+ "time.yearAgo": "år sedan",
13
+ "time.yearsAgo": "år sedan"
2
14
  }
@@ -8,45 +8,3 @@ export const LOCALIZATION_CONFIGS = {
8
8
  [Locale.GB]: GB,
9
9
  [Locale.SW]: SW,
10
10
  }
11
-
12
- export const RELATIVE_TIME_LABELS = {
13
- [Locale.EN]: {
14
- justNow: 'just now',
15
- minuteAgo: 'minute ago',
16
- minutesAgo: 'minutes ago',
17
- hourAgo: 'hour ago',
18
- hoursAgo: 'hours ago',
19
- dayAgo: 'day ago',
20
- daysAgo: 'days ago',
21
- monthAgo: 'month ago',
22
- monthsAgo: 'months ago',
23
- yearAgo: 'year ago',
24
- yearsAgo: 'years ago',
25
- },
26
- [Locale.SW]: {
27
- justNow: 'alldeles nyss',
28
- minuteAgo: 'minut sedan',
29
- minutesAgo: 'minuter sedan',
30
- hourAgo: 'timme sedan',
31
- hoursAgo: 'timmar sedan',
32
- dayAgo: 'dag sedan',
33
- daysAgo: 'dagar sedan',
34
- monthAgo: 'månad sedan',
35
- monthsAgo: 'månader sedan',
36
- yearAgo: 'år sedan',
37
- yearsAgo: 'år sedan',
38
- },
39
- [Locale.GB]: {
40
- justNow: 'just now',
41
- minuteAgo: 'minute ago',
42
- minutesAgo: 'minutes ago',
43
- hourAgo: 'hour ago',
44
- hoursAgo: 'hours ago',
45
- dayAgo: 'day ago',
46
- daysAgo: 'days ago',
47
- monthAgo: 'month ago',
48
- monthsAgo: 'months ago',
49
- yearAgo: 'year ago',
50
- yearsAgo: 'years ago',
51
- },
52
- }
@@ -1,34 +1,34 @@
1
1
  import { LOCALIZATION_CONFIGS } from './constants'
2
2
  import { $localization, setLocalization } from './model'
3
- import { GetText, LocalizationConfig } from './types'
3
+ import { GetText, LocalizationConfig, TranslationKeys } from './types'
4
4
 
5
5
  export const getSubstitutedString = (str: string, substitutions: Record<string, string> = {}) => {
6
- const substitutionsArray = Object.entries(substitutions)
7
- let result = str
6
+ const substitutionsArray = Object.entries(substitutions)
7
+ let result = str
8
8
 
9
- if (!substitutionsArray.length) return result
9
+ if (!substitutionsArray.length) return result
10
10
 
11
- substitutionsArray.forEach(([key, value]) => {
12
- result = result.replace(`{{${key}}}`, value)
13
- })
11
+ substitutionsArray.forEach(([key, value]) => {
12
+ result = result.replace(`{{${key}}}`, value)
13
+ })
14
14
 
15
- return result
15
+ return result
16
16
  }
17
17
 
18
- export const getText: GetText = (key, args = null) => {
19
- const config = $localization.getState()
18
+ export const getText: GetText = (key: TranslationKeys, args = null) => {
19
+ const config = $localization.getState()
20
20
 
21
- const translation = config?.[key]
21
+ const translation = config?.[key]
22
22
 
23
- if (translation && args) {
24
- return getSubstitutedString(translation, args)
25
- }
23
+ if (translation && args) {
24
+ return getSubstitutedString(translation, args)
25
+ }
26
26
 
27
- return translation ?? key
27
+ return translation ?? key
28
28
  }
29
29
 
30
30
  export const setFeaturesLocalization = (
31
- generator: ((config: typeof LOCALIZATION_CONFIGS) => LocalizationConfig) | LocalizationConfig,
31
+ generator: ((config: typeof LOCALIZATION_CONFIGS) => LocalizationConfig) | LocalizationConfig,
32
32
  ) => {
33
- setLocalization(generator)
33
+ setLocalization(generator)
34
34
  }
@@ -1,9 +1,17 @@
1
- export type GetText = (key: string, args?: Record<string, string> | null) => string
1
+ import enTranslations from '../../lib/localization/en.json'
2
+
3
+ export type Translations = typeof enTranslations
4
+ export type TranslationKeys = keyof Translations
5
+
6
+ export type GetText = <T extends TranslationKeys>(
7
+ key: T,
8
+ args?: Record<string, string> | null,
9
+ ) => Translations[T]
2
10
 
3
11
  export enum Locale {
4
- EN = 'en-SE',
5
- SW = 'sv-SE',
6
- GB = 'en-GB',
12
+ EN = 'en-SE',
13
+ SW = 'sv-SE',
14
+ GB = 'en-GB',
7
15
  }
8
16
 
9
17
  export type LocalizationConfig = Record<string, string>
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSvg","_interopRequireWildcard","_reactNativeUi","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","MessageBubbleIcon","size","color","COLORS","NEUTRAL_1","jsx","width","height","viewBox","fill","children","Path","d","stroke","strokeWidth","strokeLinejoin","exports"],"sourceRoot":"../../../../../../src","sources":["features/feedback/assets/icons/MessageBubbleIcon.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAA8D,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAf,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAI,UAAA,GAAAJ,CAAA,KAAAK,OAAA,EAAAL,CAAA;AAEvD,MAAMmB,iBAAiB,GAAGA,CAAC;EAAEC,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAGC,qBAAM,CAACC;AAAqB,CAAC,KAAK;EACvF,oBACE,IAAAzB,WAAA,CAAA0B,GAAA,EAAC7B,eAAA,CAAAU,OAAG;IAACoB,KAAK,EAAEL,IAAK;IAACM,MAAM,EAAEN,IAAK;IAACO,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAAC,QAAA,eAC7D,IAAA/B,WAAA,CAAA0B,GAAA,EAAC7B,eAAA,CAAAmC,IAAI;MACHC,CAAC,EAAC,+SAA+S;MACjTC,MAAM,EAAEX,KAAM;MACdY,WAAW,EAAC,GAAG;MACfC,cAAc,EAAC;IAAO,CACvB;EAAC,CACC,CAAC;AAEV,CAAC;AAAAC,OAAA,CAAAhB,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSvg","_interopRequireWildcard","_reactNativeUi","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","XCloseIcon","size","color","COLORS","NEUTRAL_9","jsx","width","height","viewBox","fill","children","Path","d","exports"],"sourceRoot":"../../../../../../src","sources":["features/feedback/assets/icons/XCloseIcon.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAA8D,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAf,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAI,UAAA,GAAAJ,CAAA,KAAAK,OAAA,EAAAL,CAAA;AAEvD,MAAMmB,UAAU,GAAGA,CAAC;EAAEC,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAGC,qBAAM,CAACC;AAAqB,CAAC,KAAK;EAChF,oBACE,IAAAzB,WAAA,CAAA0B,GAAA,EAAC7B,eAAA,CAAAU,OAAG;IAACoB,KAAK,EAAEL,IAAK;IAACM,MAAM,EAAEN,IAAK;IAACO,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAAC,QAAA,eAC7D,IAAA/B,WAAA,CAAA0B,GAAA,EAAC7B,eAAA,CAAAmC,IAAI;MACHC,CAAC,EAAC,ufAAuf;MACzfH,IAAI,EAAEP;IAAM,CACb;EAAC,CACC,CAAC;AAEV,CAAC;AAAAW,OAAA,CAAAb,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","Svg","Path","COLORS","jsx","_jsx","MessageBubbleIcon","size","color","NEUTRAL_1","width","height","viewBox","fill","children","d","stroke","strokeWidth","strokeLinejoin"],"sourceRoot":"../../../../../../src","sources":["features/feedback/assets/icons/MessageBubbleIcon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAC5C,SAAoBC,MAAM,QAAQ,4BAA4B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE9D,OAAO,MAAMC,iBAAiB,GAAGA,CAAC;EAAEC,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAGL,MAAM,CAACM;AAAqB,CAAC,KAAK;EACvF,oBACEJ,IAAA,CAACJ,GAAG;IAACS,KAAK,EAAEH,IAAK;IAACI,MAAM,EAAEJ,IAAK;IAACK,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAAC,QAAA,eAC7DT,IAAA,CAACH,IAAI;MACHa,CAAC,EAAC,+SAA+S;MACjTC,MAAM,EAAER,KAAM;MACdS,WAAW,EAAC,GAAG;MACfC,cAAc,EAAC;IAAO,CACvB;EAAC,CACC,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","Svg","Path","COLORS","jsx","_jsx","XCloseIcon","size","color","NEUTRAL_9","width","height","viewBox","fill","children","d"],"sourceRoot":"../../../../../../src","sources":["features/feedback/assets/icons/XCloseIcon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAC5C,SAAoBC,MAAM,QAAQ,4BAA4B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE9D,OAAO,MAAMC,UAAU,GAAGA,CAAC;EAAEC,IAAI,GAAG,EAAE;EAAEC,KAAK,GAAGL,MAAM,CAACM;AAAqB,CAAC,KAAK;EAChF,oBACEJ,IAAA,CAACJ,GAAG;IAACS,KAAK,EAAEH,IAAK;IAACI,MAAM,EAAEJ,IAAK;IAACK,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC,MAAM;IAAAC,QAAA,eAC7DT,IAAA,CAACH,IAAI;MACHa,CAAC,EAAC,ufAAuf;MACzfF,IAAI,EAAEL;IAAM,CACb;EAAC,CACC,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MessageBubbleIcon.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/feedback/assets/icons/MessageBubbleIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAAU,MAAM,4BAA4B,CAAA;AAE9D,eAAO,MAAM,iBAAiB,oBAA6C,SAAS,sBAWnF,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"XCloseIcon.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/feedback/assets/icons/XCloseIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAAU,MAAM,4BAA4B,CAAA;AAE9D,eAAO,MAAM,UAAU,oBAA6C,SAAS,sBAS5E,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MessageBubbleIcon.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/feedback/assets/icons/MessageBubbleIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAAU,MAAM,4BAA4B,CAAA;AAE9D,eAAO,MAAM,iBAAiB,oBAA6C,SAAS,sBAWnF,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"XCloseIcon.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/feedback/assets/icons/XCloseIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAAU,MAAM,4BAA4B,CAAA;AAE9D,eAAO,MAAM,UAAU,oBAA6C,SAAS,sBAS5E,CAAA"}