@magmamath/students-features 0.2.3 → 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.
- package/dist/commonjs/features/feedback/assets/icons/MessageBubbleIcon.js.map +1 -0
- package/dist/commonjs/features/feedback/assets/icons/XCloseIcon.js.map +1 -0
- package/dist/commonjs/features/feedback/components/{EmptyComment/EmptyComment.js → EmptyComment.js} +3 -3
- package/dist/commonjs/features/feedback/components/EmptyComment.js.map +1 -0
- package/dist/commonjs/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.js → ListCardCommentsCount.js} +2 -2
- package/dist/commonjs/features/feedback/components/ListCardCommentsCount.js.map +1 -0
- package/dist/commonjs/features/feedback/components/TeacherFeedback.js +8 -8
- package/dist/commonjs/features/feedback/components/TeacherFeedback.js.map +1 -1
- package/dist/commonjs/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js +2 -2
- package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.js +3 -3
- package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.js.map +1 -1
- package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js +1 -1
- package/dist/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js.map +1 -1
- package/dist/commonjs/features/feedback/components/index.js +1 -1
- package/dist/commonjs/features/feedback/constants.js +1 -18
- package/dist/commonjs/features/feedback/constants.js.map +1 -1
- package/dist/commonjs/features/feedback/helpers.js +22 -64
- package/dist/commonjs/features/feedback/helpers.js.map +1 -1
- package/dist/commonjs/features/feedback/index.js +8 -8
- package/dist/commonjs/features/feedback/index.js.map +1 -1
- package/dist/commonjs/features/feedback/model/api.js +15 -0
- package/dist/commonjs/features/feedback/model/api.js.map +1 -0
- package/dist/commonjs/features/feedback/model/comments.js +88 -0
- package/dist/commonjs/features/feedback/model/comments.js.map +1 -0
- package/dist/commonjs/features/feedback/model/model.js +104 -0
- package/dist/commonjs/features/feedback/model/model.js.map +1 -0
- package/dist/commonjs/features/feedback/model/sockets.js +25 -0
- package/dist/commonjs/features/feedback/model/sockets.js.map +1 -0
- package/dist/commonjs/features/feedback/types.js +12 -0
- package/dist/commonjs/features/feedback/types.js.map +1 -0
- package/dist/commonjs/lib/helpers/helpers.js +24 -1
- package/dist/commonjs/lib/helpers/helpers.js.map +1 -1
- package/dist/commonjs/shared/translation/constants.js +42 -1
- package/dist/commonjs/shared/translation/constants.js.map +1 -1
- package/dist/module/features/feedback/assets/icons/MessageBubbleIcon.js.map +1 -0
- package/dist/module/features/feedback/assets/icons/XCloseIcon.js.map +1 -0
- package/dist/module/features/feedback/components/{EmptyComment/EmptyComment.js → EmptyComment.js} +3 -3
- package/dist/module/features/feedback/components/EmptyComment.js.map +1 -0
- package/dist/module/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.js → ListCardCommentsCount.js} +2 -2
- package/dist/module/features/feedback/components/ListCardCommentsCount.js.map +1 -0
- package/dist/module/features/feedback/components/TeacherFeedback.js +8 -8
- package/dist/module/features/feedback/components/TeacherFeedback.js.map +1 -1
- package/dist/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js +2 -2
- package/dist/module/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.js.map +1 -1
- package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.js +3 -3
- package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.js.map +1 -1
- package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js +1 -1
- package/dist/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.js.map +1 -1
- package/dist/module/features/feedback/components/index.js +1 -1
- package/dist/module/features/feedback/components/index.js.map +1 -1
- package/dist/module/features/feedback/constants.js +0 -16
- package/dist/module/features/feedback/constants.js.map +1 -1
- package/dist/module/features/feedback/helpers.js +20 -62
- package/dist/module/features/feedback/helpers.js.map +1 -1
- package/dist/module/features/feedback/index.js +2 -2
- package/dist/module/features/feedback/index.js.map +1 -1
- package/dist/module/features/feedback/model/api.js +10 -0
- package/dist/module/features/feedback/model/api.js.map +1 -0
- package/dist/module/features/feedback/model/comments.js +83 -0
- package/dist/module/features/feedback/model/comments.js.map +1 -0
- package/dist/module/features/feedback/model/model.js +99 -0
- package/dist/module/features/feedback/model/model.js.map +1 -0
- package/dist/module/features/feedback/model/sockets.js +20 -0
- package/dist/module/features/feedback/model/sockets.js.map +1 -0
- package/dist/module/features/feedback/types.js +8 -0
- package/dist/module/features/feedback/types.js.map +1 -0
- package/dist/module/lib/helpers/helpers.js +22 -0
- package/dist/module/lib/helpers/helpers.js.map +1 -1
- package/dist/module/shared/translation/constants.js +41 -0
- package/dist/module/shared/translation/constants.js.map +1 -1
- package/dist/typescript/commonjs/features/feedback/assets/icons/MessageBubbleIcon.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/assets/icons/XCloseIcon.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/components/{EmptyComment/EmptyComment.d.ts → EmptyComment.d.ts} +1 -1
- package/dist/typescript/commonjs/features/feedback/components/EmptyComment.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/components/ListCardCommentsCount.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/components/TeacherFeedback.d.ts +6 -2
- package/dist/typescript/commonjs/features/feedback/components/TeacherFeedback.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts +2 -2
- package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts +3 -2
- package/dist/typescript/commonjs/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/components/index.d.ts +1 -1
- package/dist/typescript/commonjs/features/feedback/components/index.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/constants.d.ts +0 -14
- package/dist/typescript/commonjs/features/feedback/constants.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/helpers.d.ts +9 -2
- package/dist/typescript/commonjs/features/feedback/helpers.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/index.d.ts +2 -2
- package/dist/typescript/commonjs/features/feedback/index.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/feedback/model/api.d.ts +9 -0
- package/dist/typescript/commonjs/features/feedback/model/api.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/model/comments.d.ts +16 -0
- package/dist/typescript/commonjs/features/feedback/model/comments.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/model/model.d.ts +27 -0
- package/dist/typescript/commonjs/features/feedback/model/model.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/model/sockets.d.ts +10 -0
- package/dist/typescript/commonjs/features/feedback/model/sockets.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/feedback/types.d.ts +40 -0
- package/dist/typescript/commonjs/features/feedback/types.d.ts.map +1 -0
- package/dist/typescript/commonjs/lib/helpers/helpers.d.ts +2 -0
- package/dist/typescript/commonjs/lib/helpers/helpers.d.ts.map +1 -1
- package/dist/typescript/commonjs/shared/translation/constants.d.ts +41 -0
- package/dist/typescript/commonjs/shared/translation/constants.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/assets/icons/MessageBubbleIcon.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/assets/icons/XCloseIcon.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/components/{EmptyComment/EmptyComment.d.ts → EmptyComment.d.ts} +1 -1
- package/dist/typescript/module/features/feedback/components/EmptyComment.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/components/ListCardCommentsCount.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/components/TeacherFeedback.d.ts +6 -2
- package/dist/typescript/module/features/feedback/components/TeacherFeedback.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts +2 -2
- package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherComment.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts +3 -2
- package/dist/typescript/module/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/components/index.d.ts +1 -1
- package/dist/typescript/module/features/feedback/components/index.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/constants.d.ts +0 -14
- package/dist/typescript/module/features/feedback/constants.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/helpers.d.ts +9 -2
- package/dist/typescript/module/features/feedback/helpers.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/index.d.ts +2 -2
- package/dist/typescript/module/features/feedback/index.d.ts.map +1 -1
- package/dist/typescript/module/features/feedback/model/api.d.ts +9 -0
- package/dist/typescript/module/features/feedback/model/api.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/model/comments.d.ts +16 -0
- package/dist/typescript/module/features/feedback/model/comments.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/model/model.d.ts +27 -0
- package/dist/typescript/module/features/feedback/model/model.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/model/sockets.d.ts +10 -0
- package/dist/typescript/module/features/feedback/model/sockets.d.ts.map +1 -0
- package/dist/typescript/module/features/feedback/types.d.ts +40 -0
- package/dist/typescript/module/features/feedback/types.d.ts.map +1 -0
- package/dist/typescript/module/lib/helpers/helpers.d.ts +2 -0
- package/dist/typescript/module/lib/helpers/helpers.d.ts.map +1 -1
- package/dist/typescript/module/shared/translation/constants.d.ts +41 -0
- package/dist/typescript/module/shared/translation/constants.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/features/feedback/components/{EmptyComment/EmptyComment.tsx → EmptyComment.tsx} +3 -3
- package/src/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.tsx → ListCardCommentsCount.tsx} +2 -2
- package/src/features/feedback/components/TeacherFeedback.tsx +21 -11
- package/src/features/feedback/components/TeacherFeedbackButton/TeacherFeedbackButton.tsx +2 -2
- package/src/features/feedback/components/TeacherFeedbackComments/TeacherComment.tsx +10 -4
- package/src/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.tsx +4 -3
- package/src/features/feedback/components/index.ts +1 -1
- package/src/features/feedback/constants.ts +2 -18
- package/src/features/feedback/helpers.ts +27 -60
- package/src/features/feedback/index.ts +2 -2
- package/src/features/feedback/model/api.ts +13 -0
- package/src/features/feedback/model/comments.ts +82 -0
- package/src/features/feedback/model/model.ts +102 -0
- package/src/features/feedback/model/sockets.ts +22 -0
- package/src/features/feedback/types.ts +42 -0
- package/src/lib/helpers/helpers.ts +26 -0
- package/src/shared/translation/constants.ts +45 -3
- package/dist/commonjs/features/feedback/components/EmptyComment/EmptyComment.js.map +0 -1
- package/dist/commonjs/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.js.map +0 -1
- package/dist/commonjs/features/feedback/components/icons/MessageBubbleIcon.js.map +0 -1
- package/dist/commonjs/features/feedback/components/icons/XCloseIcon.js.map +0 -1
- package/dist/commonjs/features/feedback/model/teacherFeedback.model.js +0 -211
- package/dist/commonjs/features/feedback/model/teacherFeedback.model.js.map +0 -1
- package/dist/commonjs/features/feedback/types/teacherFeedback.types.js +0 -18
- package/dist/commonjs/features/feedback/types/teacherFeedback.types.js.map +0 -1
- package/dist/module/features/feedback/components/EmptyComment/EmptyComment.js.map +0 -1
- package/dist/module/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.js.map +0 -1
- package/dist/module/features/feedback/components/icons/MessageBubbleIcon.js.map +0 -1
- package/dist/module/features/feedback/components/icons/XCloseIcon.js.map +0 -1
- package/dist/module/features/feedback/model/teacherFeedback.model.js +0 -206
- package/dist/module/features/feedback/model/teacherFeedback.model.js.map +0 -1
- package/dist/module/features/feedback/types/teacherFeedback.types.js +0 -14
- package/dist/module/features/feedback/types/teacherFeedback.types.js.map +0 -1
- package/dist/typescript/commonjs/features/feedback/components/EmptyComment/EmptyComment.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/feedback/components/icons/MessageBubbleIcon.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/feedback/components/icons/XCloseIcon.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/feedback/model/teacherFeedback.model.d.ts +0 -45
- package/dist/typescript/commonjs/features/feedback/model/teacherFeedback.model.d.ts.map +0 -1
- package/dist/typescript/commonjs/features/feedback/types/teacherFeedback.types.d.ts +0 -33
- package/dist/typescript/commonjs/features/feedback/types/teacherFeedback.types.d.ts.map +0 -1
- package/dist/typescript/module/features/feedback/components/EmptyComment/EmptyComment.d.ts.map +0 -1
- package/dist/typescript/module/features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.d.ts.map +0 -1
- package/dist/typescript/module/features/feedback/components/icons/MessageBubbleIcon.d.ts.map +0 -1
- package/dist/typescript/module/features/feedback/components/icons/XCloseIcon.d.ts.map +0 -1
- package/dist/typescript/module/features/feedback/model/teacherFeedback.model.d.ts +0 -45
- package/dist/typescript/module/features/feedback/model/teacherFeedback.model.d.ts.map +0 -1
- package/dist/typescript/module/features/feedback/types/teacherFeedback.types.d.ts +0 -33
- package/dist/typescript/module/features/feedback/types/teacherFeedback.types.d.ts.map +0 -1
- package/src/features/feedback/model/teacherFeedback.model.ts +0 -268
- package/src/features/feedback/types/teacherFeedback.types.ts +0 -32
- /package/dist/commonjs/features/feedback/{components → assets}/icons/MessageBubbleIcon.js +0 -0
- /package/dist/commonjs/features/feedback/{components → assets}/icons/XCloseIcon.js +0 -0
- /package/dist/module/features/feedback/{components → assets}/icons/MessageBubbleIcon.js +0 -0
- /package/dist/module/features/feedback/{components → assets}/icons/XCloseIcon.js +0 -0
- /package/dist/typescript/commonjs/features/feedback/{components → assets}/icons/MessageBubbleIcon.d.ts +0 -0
- /package/dist/typescript/commonjs/features/feedback/{components → assets}/icons/XCloseIcon.d.ts +0 -0
- /package/dist/typescript/commonjs/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.d.ts → ListCardCommentsCount.d.ts} +0 -0
- /package/dist/typescript/module/features/feedback/{components → assets}/icons/MessageBubbleIcon.d.ts +0 -0
- /package/dist/typescript/module/features/feedback/{components → assets}/icons/XCloseIcon.d.ts +0 -0
- /package/dist/typescript/module/features/feedback/components/{ListCardCommentsCount/ListCardCommentsCount.d.ts → ListCardCommentsCount.d.ts} +0 -0
- /package/src/features/feedback/{components → assets}/icons/MessageBubbleIcon.tsx +0 -0
- /package/src/features/feedback/{components → assets}/icons/XCloseIcon.tsx +0 -0
|
@@ -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 = ({
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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.$
|
|
23
|
-
fn: (feedback, [assignmentId, problemId]) => feedback
|
|
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 &&
|
|
39
|
+
{isOpen && (
|
|
40
|
+
<TeacherFeedbackComments comments={teacherFeedback.comments} locale={locale} mode={mode} />
|
|
41
|
+
)}
|
|
32
42
|
<TeacherFeedbackButton
|
|
33
|
-
onPress={() => model.
|
|
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 '
|
|
6
|
-
import { XCloseIcon } from '
|
|
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 {
|
|
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 = ({
|
|
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
|
-
{
|
|
31
|
+
{getRelativeTimeText(createdAt, locale ?? Locale.EN)}
|
|
26
32
|
</Text>
|
|
27
33
|
</View>
|
|
28
34
|
|
package/src/features/feedback/components/TeacherFeedbackComments/TeacherFeedbackComments.tsx
CHANGED
|
@@ -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
|
|
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:
|
|
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
|
|
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 =
|
|
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 {
|
|
1
|
+
import { CommentsMap, FeedbackEntity, GetCommentsResponse } from './types'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
13
|
+
return acc
|
|
14
|
+
},
|
|
15
|
+
{},
|
|
16
|
+
)
|
|
48
17
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const diffTime = now - targetDate
|
|
18
|
+
return new Map().set(assignmentId, problemsMap)
|
|
19
|
+
}
|
|
52
20
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const years = Math.floor(days / 365)
|
|
21
|
+
type FindCommentsByCreditsProps = {
|
|
22
|
+
data: CommentsMap | null
|
|
23
|
+
assignmentId: string
|
|
24
|
+
problemId: string
|
|
25
|
+
}
|
|
59
26
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return
|
|
27
|
+
export function findCommentsByCredits({
|
|
28
|
+
data,
|
|
29
|
+
assignmentId,
|
|
30
|
+
problemId,
|
|
31
|
+
}: FindCommentsByCreditsProps) {
|
|
32
|
+
return data?.get(assignmentId)?.[problemId]?.comments ?? []
|
|
66
33
|
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createEvent, restore, sample } from 'effector'
|
|
2
|
+
import { CommentsMap, Credits, FeedbackEntity, TeacherComment } from '../types'
|
|
3
|
+
|
|
4
|
+
type UpdateProps = {
|
|
5
|
+
state: CommentsMap | null
|
|
6
|
+
assignmentId: string
|
|
7
|
+
problemId: string
|
|
8
|
+
fn: (data: FeedbackEntity) => FeedbackEntity | undefined
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class TeacherComments {
|
|
12
|
+
public readonly setAllCommentsRead = createEvent<Credits>()
|
|
13
|
+
public readonly addComment = createEvent<Credits & { comment: TeacherComment; isRead: boolean }>()
|
|
14
|
+
public readonly deleteComment = createEvent<Credits & { commentId: string }>()
|
|
15
|
+
|
|
16
|
+
public readonly setData = createEvent<CommentsMap>()
|
|
17
|
+
public readonly $data = restore<CommentsMap | null>(this.setData, null)
|
|
18
|
+
.on(this.setAllCommentsRead, (state, { assignmentId, problemId }) =>
|
|
19
|
+
this.update({
|
|
20
|
+
state,
|
|
21
|
+
assignmentId,
|
|
22
|
+
problemId,
|
|
23
|
+
fn: data => ({
|
|
24
|
+
comments: data.comments.map(comment => ({ ...comment, isRead: true })),
|
|
25
|
+
unreadMessagesCount: 0,
|
|
26
|
+
}),
|
|
27
|
+
}),
|
|
28
|
+
)
|
|
29
|
+
.on(this.addComment, (state, { assignmentId, problemId, comment, isRead }) =>
|
|
30
|
+
this.update({
|
|
31
|
+
state,
|
|
32
|
+
assignmentId,
|
|
33
|
+
problemId,
|
|
34
|
+
fn: data => ({
|
|
35
|
+
comments: [...data.comments, comment],
|
|
36
|
+
unreadMessagesCount: isRead ? data.unreadMessagesCount : data.unreadMessagesCount + 1,
|
|
37
|
+
}),
|
|
38
|
+
}),
|
|
39
|
+
)
|
|
40
|
+
.on(this.deleteComment, (state, { assignmentId, problemId, commentId }) =>
|
|
41
|
+
this.update({
|
|
42
|
+
state,
|
|
43
|
+
assignmentId,
|
|
44
|
+
problemId,
|
|
45
|
+
fn: data => {
|
|
46
|
+
const commentToDelete = data.comments.find(({ _id }) => _id === commentId)
|
|
47
|
+
if (!commentToDelete) return data
|
|
48
|
+
return {
|
|
49
|
+
comments: data.comments.filter(({ _id }) => _id !== commentId),
|
|
50
|
+
unreadMessagesCount: commentToDelete.isRead
|
|
51
|
+
? data.unreadMessagesCount
|
|
52
|
+
: data.unreadMessagesCount - 1,
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
constructor() {
|
|
59
|
+
sample({
|
|
60
|
+
clock: this.deleteComment,
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private update({ state, assignmentId, problemId, fn }: UpdateProps) {
|
|
65
|
+
if (!state) return state
|
|
66
|
+
|
|
67
|
+
const updatedState = new Map(state)
|
|
68
|
+
const assignmentMap = updatedState.get(assignmentId) || {}
|
|
69
|
+
const currentData = assignmentMap[problemId]
|
|
70
|
+
const updatedData = fn(currentData)
|
|
71
|
+
|
|
72
|
+
if (updatedData === undefined) {
|
|
73
|
+
delete assignmentMap[problemId]
|
|
74
|
+
if (Object.keys(assignmentMap).length === 0) updatedState.delete(assignmentId)
|
|
75
|
+
return updatedState
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
assignmentMap[problemId] = updatedData
|
|
79
|
+
updatedState.set(assignmentId, assignmentMap)
|
|
80
|
+
return updatedState
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { createEvent, restore, sample, Store } from 'effector'
|
|
2
|
+
import { TeacherFeedbackAPI } from './api'
|
|
3
|
+
import { TeacherFeedbackSockets } from './sockets'
|
|
4
|
+
import { TeacherComments } from './comments'
|
|
5
|
+
import { findCommentsByCredits, generateCommentsMap } from '../helpers'
|
|
6
|
+
import {
|
|
7
|
+
GetCommentsPayload,
|
|
8
|
+
GetCommentsResponse,
|
|
9
|
+
TeacherComment,
|
|
10
|
+
UpdateCommentStatusSeenPayload,
|
|
11
|
+
} from '../types'
|
|
12
|
+
|
|
13
|
+
export type TeacherFeedbackModelProps = {
|
|
14
|
+
api: {
|
|
15
|
+
getComments: (props: GetCommentsPayload) => Promise<GetCommentsResponse>
|
|
16
|
+
updateCommentStatusSeen: (props: UpdateCommentStatusSeenPayload) => Promise<void>
|
|
17
|
+
}
|
|
18
|
+
socket: any
|
|
19
|
+
credits: {
|
|
20
|
+
$assignmentId: Store<string>
|
|
21
|
+
$problemId: Store<string>
|
|
22
|
+
}
|
|
23
|
+
defaults: { EMPTY_COMMENT: TeacherComment }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class TeacherFeedbackModel {
|
|
27
|
+
private readonly sockets: TeacherFeedbackSockets
|
|
28
|
+
public readonly api: TeacherFeedbackAPI
|
|
29
|
+
public readonly comments: TeacherComments
|
|
30
|
+
public readonly setIsOpen = createEvent<boolean>()
|
|
31
|
+
public readonly $isOpen = restore(this.setIsOpen, false)
|
|
32
|
+
|
|
33
|
+
constructor({ api, socket, credits }: TeacherFeedbackModelProps) {
|
|
34
|
+
this.api = new TeacherFeedbackAPI(api)
|
|
35
|
+
this.sockets = new TeacherFeedbackSockets(socket)
|
|
36
|
+
this.comments = new TeacherComments()
|
|
37
|
+
|
|
38
|
+
sample({
|
|
39
|
+
clock: credits.$problemId,
|
|
40
|
+
fn: () => false,
|
|
41
|
+
target: this.setIsOpen,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
sample({
|
|
45
|
+
clock: this.setIsOpen,
|
|
46
|
+
source: {
|
|
47
|
+
data: this.comments.$data,
|
|
48
|
+
assignmentId: credits.$assignmentId,
|
|
49
|
+
problemId: credits.$problemId,
|
|
50
|
+
},
|
|
51
|
+
filter: (source, isOpen) => {
|
|
52
|
+
const comments = findCommentsByCredits(source)
|
|
53
|
+
const hasUnreadComments = comments.some(({ isRead }) => !isRead)
|
|
54
|
+
return isOpen && hasUnreadComments
|
|
55
|
+
},
|
|
56
|
+
fn: source => {
|
|
57
|
+
const comments = findCommentsByCredits(source)
|
|
58
|
+
return { ids: comments.map(({ _id }) => _id) }
|
|
59
|
+
},
|
|
60
|
+
target: this.api.updateCommentStatusSeenFx,
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
sample({
|
|
64
|
+
clock: this.api.updateCommentStatusSeenFx.pending,
|
|
65
|
+
source: { assignmentId: credits.$assignmentId, problemId: credits.$problemId },
|
|
66
|
+
target: this.comments.setAllCommentsRead,
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
sample({
|
|
70
|
+
clock: this.api.getCommentsFx.done,
|
|
71
|
+
fn: ({ params, result }) => generateCommentsMap(params.id, result),
|
|
72
|
+
target: this.comments.setData,
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
sample({
|
|
76
|
+
clock: this.sockets.commentDeleted,
|
|
77
|
+
source: { assignmentId: credits.$assignmentId },
|
|
78
|
+
fn: ({ assignmentId }, comment) => ({
|
|
79
|
+
assignmentId,
|
|
80
|
+
problemId: comment.problemId,
|
|
81
|
+
commentId: comment._id,
|
|
82
|
+
}),
|
|
83
|
+
target: this.comments.deleteComment,
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
sample({
|
|
87
|
+
clock: this.sockets.commentAdded,
|
|
88
|
+
source: {
|
|
89
|
+
assignmentId: credits.$assignmentId,
|
|
90
|
+
problemId: credits.$problemId,
|
|
91
|
+
isOpen: this.$isOpen,
|
|
92
|
+
},
|
|
93
|
+
fn: ({ assignmentId, problemId, isOpen }, comment) => ({
|
|
94
|
+
assignmentId,
|
|
95
|
+
problemId,
|
|
96
|
+
comment,
|
|
97
|
+
isRead: isOpen && comment.problemId === problemId,
|
|
98
|
+
}),
|
|
99
|
+
target: this.comments.addComment,
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createEvent } from 'effector'
|
|
2
|
+
import { TeacherComment, FeedbackSocketEvents } from '../types'
|
|
3
|
+
|
|
4
|
+
export class TeacherFeedbackSockets {
|
|
5
|
+
private readonly socket: any
|
|
6
|
+
public readonly commentAdded = createEvent<TeacherComment>()
|
|
7
|
+
public readonly commentDeleted = createEvent<TeacherComment>()
|
|
8
|
+
|
|
9
|
+
constructor(socket: any) {
|
|
10
|
+
this.socket = socket
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
connect() {
|
|
14
|
+
this.socket.on(FeedbackSocketEvents.COMMENT_ADDED, this.commentAdded)
|
|
15
|
+
this.socket.on(FeedbackSocketEvents.COMMENT_DELETED, this.commentDeleted)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
off() {
|
|
19
|
+
this.socket.off(FeedbackSocketEvents.COMMENT_ADDED, this.commentAdded)
|
|
20
|
+
this.socket.off(FeedbackSocketEvents.COMMENT_DELETED, this.commentDeleted)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type GetCommentsPayload = {
|
|
2
|
+
id: string
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export type GetCommentsResponse = {
|
|
6
|
+
[problemId: string]: { comments: TeacherComment[] }
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type UpdateCommentStatusSeenPayload = {
|
|
10
|
+
ids: string[]
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type TeacherComment = {
|
|
14
|
+
_id: string
|
|
15
|
+
teacherId: string
|
|
16
|
+
teacherName: string
|
|
17
|
+
studentId: string
|
|
18
|
+
problemId: string
|
|
19
|
+
exerciseId: string
|
|
20
|
+
content: string
|
|
21
|
+
isRead: boolean
|
|
22
|
+
createdAt: Date
|
|
23
|
+
updatedAt: Date
|
|
24
|
+
__v: number
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type FeedbackEntity = {
|
|
28
|
+
comments: TeacherComment[]
|
|
29
|
+
unreadMessagesCount: number
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type CommentsMap = Map<string, { [problemId: string]: FeedbackEntity }>
|
|
33
|
+
|
|
34
|
+
export type Credits = {
|
|
35
|
+
assignmentId: string
|
|
36
|
+
problemId: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export enum FeedbackSocketEvents {
|
|
40
|
+
COMMENT_ADDED = 'exerciseCommentCreated',
|
|
41
|
+
COMMENT_DELETED = 'exerciseCommentDeleted',
|
|
42
|
+
}
|
|
@@ -1,2 +1,28 @@
|
|
|
1
|
+
import { RELATIVE_TIME_LABELS } from '../../shared/translation/constants'
|
|
2
|
+
import { Locale } from '@magmamath/students-features'
|
|
3
|
+
|
|
1
4
|
export const generateRandomId = () =>
|
|
2
5
|
Date.now().toString(36) + Math.random().toString(36).substring(2)
|
|
6
|
+
|
|
7
|
+
export const getRelativeTimeText = (date: Date, lang: Locale) => {
|
|
8
|
+
const t = RELATIVE_TIME_LABELS[lang] || RELATIVE_TIME_LABELS[Locale.EN]
|
|
9
|
+
const timeBufferMs = 2000 // adds 2 seconds time buffer because when used with sockets, it displayed -1 seconds ago, instead of 1 second ago.
|
|
10
|
+
|
|
11
|
+
const now = new Date().getTime()
|
|
12
|
+
const targetDate = new Date(date).getTime() - timeBufferMs
|
|
13
|
+
const diffTime = now - targetDate
|
|
14
|
+
|
|
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)
|
|
21
|
+
|
|
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}`
|
|
28
|
+
}
|
|
@@ -4,7 +4,49 @@ import GB from '../../lib/localization/gb.json'
|
|
|
4
4
|
import SW from '../../lib/localization/sw.json'
|
|
5
5
|
|
|
6
6
|
export const LOCALIZATION_CONFIGS = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
[Locale.EN]: EN,
|
|
8
|
+
[Locale.GB]: GB,
|
|
9
|
+
[Locale.SW]: SW,
|
|
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
|
+
},
|
|
10
52
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeUi","_constants","_teacherFeedbackTypes","_jsxRuntime","e","__esModule","default","EmptyComment","locale","jsx","View","style","styles","container","children","Text","text","Locale","SV","NO_COMMENTS_SWE","NO_COMMENTS_ENG","exports","StyleSheet","create","padding","gap","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","shadowColor","COLORS","NEUTRAL_10","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","backgroundColor","NEUTRAL_3","alignItems","justifyContent","fontSize","fontFamily","BUENOS_AIRES_FONT","fontWeight","color","NEUTRAL_7","lineHeight"],"sourceRoot":"../../../../../../src","sources":["features/feedback/components/EmptyComment/EmptyComment.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,qBAAA,GAAAJ,OAAA;AAA0D,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAMnD,MAAMG,YAAY,GAAGA,CAAC;EAAEC;AAA0B,CAAC,KAAK;EAC7D,oBACE,IAAAL,WAAA,CAAAM,GAAA,EAACV,YAAA,CAAAW,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,eAC5B,IAAAX,WAAA,CAAAM,GAAA,EAACV,YAAA,CAAAgB,IAAI;MAACJ,KAAK,EAAEC,MAAM,CAACI,IAAK;MAAAF,QAAA,EAAEN,MAAM,KAAKS,4BAAM,CAACC,EAAE,GAAGC,0BAAe,GAAGC;IAAe,CAAO;EAAC,CACvF,CAAC;AAEX,CAAC;AAAAC,OAAA,CAAAd,YAAA,GAAAA,YAAA;AAED,MAAMK,MAAM,GAAGU,uBAAU,CAACC,MAAM,CAAC;EAC/BV,SAAS,EAAE;IACTW,OAAO,EAAE,CAAC;IACVC,GAAG,EAAE,EAAE;IACPC,mBAAmB,EAAE,CAAC;IACtBC,oBAAoB,EAAE,CAAC;IACvBC,uBAAuB,EAAE,CAAC;IAC1BC,WAAW,EAAEC,qBAAM,CAACC,UAAU;IAC9BC,YAAY,EAAE;MAAEC,KAAK,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;IACrCC,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE,CAAC;IACfC,SAAS,EAAE,CAAC;IACZC,eAAe,EAAER,qBAAM,CAACS,SAAS;IACjCC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDzB,IAAI,EAAE;IACJ0B,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAEC,4BAAiB;IAC7BC,UAAU,EAAE,KAAK;IACjBC,KAAK,EAAEhB,qBAAM,CAACiB,SAAS;IACvBvB,OAAO,EAAE,CAAC;IACVwB,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_MessageBubbleIcon","_reactNativeUi","_constants","_jsxRuntime","e","__esModule","default","ListCardCommentsCount","count","jsxs","View","style","styles","container","children","jsx","MessageBubbleIcon","size","color","COLORS","NEUTRAL_7","Text","text","exports","StyleSheet","create","width","flexDirection","alignItems","gap","fontSize","fontFamily","BUENOS_AIRES_FONT","fontWeight"],"sourceRoot":"../../../../../../src","sources":["features/feedback/components/ListCardCommentsCount/ListCardCommentsCount.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAAmD,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAM5C,MAAMG,qBAAqB,GAAGA,CAAC;EAAEC;AAAkC,CAAC,KAAK;EAC9E,oBACE,IAAAL,WAAA,CAAAM,IAAA,EAACV,YAAA,CAAAW,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC5B,IAAAX,WAAA,CAAAY,GAAA,EAACf,kBAAA,CAAAgB,iBAAiB;MAACC,IAAI,EAAE,EAAG;MAACC,KAAK,EAAEC,qBAAM,CAACC;IAAU,CAAE,CAAC,eACxD,IAAAjB,WAAA,CAAAY,GAAA,EAAChB,YAAA,CAAAsB,IAAI;MAACV,KAAK,EAAEC,MAAM,CAACU,IAAK;MAAAR,QAAA,EAAEN;IAAK,CAAO,CAAC;EAAA,CACpC,CAAC;AAEX,CAAC;AAAAe,OAAA,CAAAhB,qBAAA,GAAAA,qBAAA;AAED,MAAMK,MAAM,GAAGY,uBAAU,CAACC,MAAM,CAAC;EAC/BZ,SAAS,EAAE;IACTa,KAAK,EAAE,EAAE;IACTC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,GAAG,EAAE;EACP,CAAC;EACDP,IAAI,EAAE;IACJQ,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAEC,4BAAiB;IAC7Bd,KAAK,EAAEC,qBAAM,CAACC,SAAS;IACvBa,UAAU,EAAE;EACd;AACF,CAAC,CAAC","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","MessageBubbleIcon","size","color","COLORS","NEUTRAL_1","jsx","width","height","viewBox","fill","children","Path","d","stroke","strokeWidth","strokeLinejoin","exports"],"sourceRoot":"../../../../../../src","sources":["features/feedback/components/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/components/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":[]}
|