@coorpacademy/app-review 0.1.15 → 0.1.16
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/es/actions/api/fetch-skills.d.ts +4 -6
- package/es/actions/api/fetch-skills.js +7 -4
- package/es/actions/api/fetch-slide.d.ts +14 -7
- package/es/actions/api/fetch-slide.js +22 -19
- package/es/actions/api/post-progression.d.ts +4 -6
- package/es/actions/api/post-progression.js +13 -8
- package/es/actions/api/test/create-test-store.d.ts +5 -0
- package/es/actions/api/test/create-test-store.js +16 -0
- package/es/actions/api/test/fetch-skills.test.js +54 -0
- package/es/actions/api/test/fetch-slide.test.js +61 -0
- package/es/actions/api/test/post-progression.test.d.ts +1 -0
- package/es/actions/api/test/post-progression.test.js +102 -0
- package/es/actions/ui/answers.d.ts +7 -0
- package/es/actions/ui/answers.js +7 -0
- package/es/fixtures/temp-fixture.d.ts +1 -1
- package/es/index.js +10 -16
- package/es/reducers/data/index.d.ts +1 -1
- package/es/reducers/data/slides.d.ts +2 -2
- package/es/reducers/data/slides.js +5 -1
- package/es/reducers/data/test/progression.test.d.ts +1 -0
- package/es/reducers/data/test/progression.test.js +38 -0
- package/es/reducers/data/test/skills.test.d.ts +1 -0
- package/es/reducers/data/test/skills.test.js +12 -0
- package/es/reducers/data/test/slides.test.d.ts +1 -0
- package/es/reducers/data/test/slides.test.js +20 -0
- package/es/reducers/data/test/token.test.d.ts +1 -0
- package/es/reducers/data/test/token.test.js +11 -0
- package/es/reducers/index.d.ts +2 -2
- package/es/reducers/ui/answers.d.ts +4 -0
- package/es/reducers/ui/answers.js +13 -0
- package/es/reducers/ui/index.d.ts +4 -4
- package/es/reducers/ui/index.js +2 -2
- package/es/reducers/ui/test/answers.test.d.ts +1 -0
- package/es/reducers/ui/test/answers.test.js +11 -0
- package/es/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
- package/es/reducers/ui/test/current-slide-ref.test.js +12 -0
- package/es/reducers/ui/test/navigation.test.d.ts +1 -0
- package/es/reducers/ui/test/navigation.test.js +15 -0
- package/es/services/fetch-slide.js +1 -1
- package/es/services/index.js +3 -1
- package/es/services/post-answer.d.ts +2 -0
- package/es/services/post-answer.js +18 -0
- package/es/services/test/fetch-slide.test.d.ts +1 -0
- package/es/services/test/fetch-slide.test.js +22 -0
- package/es/services/test/post-answer.test.d.ts +1 -0
- package/es/services/test/post-answer.test.js +57 -0
- package/es/services/test/post-progression.test.js +9 -1
- package/es/test/util/services.mock.js +37 -7
- package/es/types/common.d.ts +22 -8
- package/es/views/slides/index.d.ts +78 -2
- package/es/views/slides/index.js +70 -4
- package/es/views/slides/map-api-slide-to-ui.d.ts +8 -0
- package/es/views/slides/map-api-slide-to-ui.js +172 -0
- package/{lib/helpers → es/views/slides}/test/fixtures/free-text.d.ts +1 -1
- package/es/views/slides/test/fixtures/free-text.js +38 -0
- package/es/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +1 -1
- package/es/views/slides/test/fixtures/qcm-drag.js +108 -0
- package/es/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +1 -1
- package/es/views/slides/test/fixtures/qcm-graphic.js +88 -0
- package/es/{helpers → views/slides}/test/fixtures/qcm.d.ts +1 -1
- package/es/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
- package/es/{helpers → views/slides}/test/fixtures/select-template.d.ts +1 -1
- package/es/views/slides/test/fixtures/select-template.js +92 -0
- package/es/{helpers → views/slides}/test/fixtures/slider.d.ts +1 -1
- package/es/views/slides/test/fixtures/slider.js +36 -0
- package/es/{helpers → views/slides}/test/fixtures/text-template.d.ts +1 -1
- package/es/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
- package/es/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
- package/es/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
- package/lib/actions/api/fetch-skills.d.ts +4 -6
- package/lib/actions/api/fetch-skills.js +55 -7
- package/lib/actions/api/fetch-slide.d.ts +14 -7
- package/lib/actions/api/fetch-slide.js +70 -20
- package/lib/actions/api/post-progression.d.ts +4 -6
- package/lib/actions/api/post-progression.js +63 -9
- package/lib/actions/api/test/create-test-store.d.ts +5 -0
- package/lib/actions/api/test/create-test-store.js +18 -0
- package/lib/actions/api/test/fetch-skills.test.d.ts +1 -0
- package/lib/actions/api/test/fetch-skills.test.js +113 -0
- package/lib/actions/api/test/fetch-slide.test.d.ts +1 -0
- package/lib/actions/api/test/fetch-slide.test.js +120 -0
- package/lib/actions/api/test/post-progression.test.d.ts +1 -0
- package/lib/actions/api/test/post-progression.test.js +160 -0
- package/lib/actions/ui/answers.d.ts +7 -0
- package/lib/actions/ui/answers.js +9 -0
- package/lib/fixtures/temp-fixture.d.ts +1 -1
- package/lib/index.js +21 -18
- package/lib/reducers/data/index.d.ts +1 -1
- package/lib/reducers/data/slides.d.ts +2 -2
- package/lib/reducers/data/slides.js +5 -1
- package/lib/reducers/data/test/progression.test.d.ts +1 -0
- package/lib/reducers/data/test/progression.test.js +38 -0
- package/lib/reducers/data/test/skills.test.d.ts +1 -0
- package/lib/reducers/data/test/skills.test.js +12 -0
- package/lib/reducers/data/test/slides.test.d.ts +1 -0
- package/lib/reducers/data/test/slides.test.js +20 -0
- package/lib/reducers/data/test/token.test.d.ts +1 -0
- package/lib/reducers/data/test/token.test.js +11 -0
- package/lib/reducers/index.d.ts +2 -2
- package/lib/reducers/ui/answers.d.ts +4 -0
- package/lib/reducers/ui/answers.js +14 -0
- package/lib/reducers/ui/index.d.ts +4 -4
- package/lib/reducers/ui/index.js +2 -2
- package/lib/reducers/ui/test/answers.test.d.ts +1 -0
- package/lib/reducers/ui/test/answers.test.js +11 -0
- package/lib/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
- package/lib/reducers/ui/test/current-slide-ref.test.js +12 -0
- package/lib/reducers/ui/test/navigation.test.d.ts +1 -0
- package/lib/reducers/ui/test/navigation.test.js +15 -0
- package/lib/services/fetch-slide.js +1 -1
- package/lib/services/index.js +3 -1
- package/lib/services/post-answer.d.ts +2 -0
- package/lib/services/post-answer.js +62 -0
- package/lib/services/test/fetch-slide.test.d.ts +1 -0
- package/lib/services/test/fetch-slide.test.js +76 -0
- package/lib/services/test/post-answer.test.d.ts +1 -0
- package/lib/services/test/post-answer.test.js +111 -0
- package/lib/services/test/post-progression.test.js +9 -1
- package/lib/test/util/services.mock.js +37 -7
- package/lib/types/common.d.ts +22 -8
- package/lib/views/slides/index.d.ts +78 -2
- package/lib/views/slides/index.js +70 -4
- package/lib/views/slides/map-api-slide-to-ui.d.ts +8 -0
- package/lib/views/slides/map-api-slide-to-ui.js +178 -0
- package/{es/helpers → lib/views/slides}/test/fixtures/free-text.d.ts +1 -1
- package/lib/views/slides/test/fixtures/free-text.js +38 -0
- package/lib/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +1 -1
- package/lib/views/slides/test/fixtures/qcm-drag.js +108 -0
- package/lib/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +1 -1
- package/lib/views/slides/test/fixtures/qcm-graphic.js +88 -0
- package/lib/{helpers → views/slides}/test/fixtures/qcm.d.ts +1 -1
- package/lib/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
- package/lib/{helpers → views/slides}/test/fixtures/select-template.d.ts +1 -1
- package/lib/views/slides/test/fixtures/select-template.js +92 -0
- package/lib/{helpers → views/slides}/test/fixtures/slider.d.ts +1 -1
- package/lib/views/slides/test/fixtures/slider.js +36 -0
- package/lib/{helpers → views/slides}/test/fixtures/text-template.d.ts +1 -1
- package/lib/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
- package/lib/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
- package/lib/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
- package/package.json +3 -3
- package/src/actions/api/fetch-skills.ts +12 -12
- package/src/actions/api/fetch-slide.ts +33 -29
- package/src/actions/api/post-progression.ts +18 -21
- package/src/actions/api/test/create-test-store.ts +25 -0
- package/src/actions/api/test/fetch-skills.test.ts +70 -0
- package/src/actions/api/test/fetch-slide.test.ts +77 -0
- package/src/actions/api/test/post-progression.test.ts +119 -0
- package/src/actions/ui/answers.ts +16 -0
- package/src/fixtures/temp-fixture.ts +1 -1
- package/src/index.tsx +14 -29
- package/src/reducers/data/index.ts +1 -1
- package/src/reducers/data/slides.ts +11 -2
- package/src/reducers/data/test/progression.test.ts +42 -0
- package/src/reducers/data/test/skills.test.ts +14 -0
- package/src/reducers/data/test/slides.test.ts +26 -0
- package/src/reducers/data/test/token.test.ts +13 -0
- package/src/reducers/ui/answers.ts +19 -0
- package/src/reducers/ui/index.ts +3 -3
- package/src/reducers/ui/test/answers.test.ts +13 -0
- package/src/reducers/ui/test/current-slide-ref.test.ts +14 -0
- package/src/reducers/ui/test/navigation.test.ts +19 -0
- package/src/services/fetch-slide.ts +1 -1
- package/src/services/index.ts +3 -1
- package/src/services/post-answer.ts +27 -0
- package/src/services/test/fetch-slide.test.ts +30 -0
- package/src/services/test/post-answer.test.ts +68 -0
- package/src/services/test/post-progression.test.ts +9 -1
- package/src/test/util/services.mock.ts +37 -7
- package/src/types/common.ts +34 -14
- package/src/views/slides/index.ts +164 -5
- package/src/views/slides/map-api-slide-to-ui.ts +251 -0
- package/src/views/slides/test/fixtures/free-text.ts +43 -0
- package/src/views/slides/test/fixtures/qcm-drag.ts +111 -0
- package/src/views/slides/test/fixtures/qcm-graphic.ts +94 -0
- package/src/{helpers → views/slides}/test/fixtures/qcm.ts +6 -2
- package/src/views/slides/test/fixtures/select-template.ts +98 -0
- package/src/views/slides/test/fixtures/slider.ts +41 -0
- package/src/{helpers → views/slides}/test/fixtures/text-template.ts +6 -2
- package/src/{helpers → views/slides}/test/map-api-slide-to-ui.test.ts +21 -10
- package/es/helpers/map-api-slide-to-ui.d.ts +0 -11
- package/es/helpers/map-api-slide-to-ui.js +0 -193
- package/es/helpers/test/fixtures/free-text.js +0 -30
- package/es/helpers/test/fixtures/qcm-drag.js +0 -112
- package/es/helpers/test/fixtures/qcm-graphic.js +0 -76
- package/es/helpers/test/fixtures/select-template.js +0 -94
- package/es/helpers/test/fixtures/slider.js +0 -33
- package/es/reducers/ui/slides.d.ts +0 -9
- package/es/reducers/ui/slides.js +0 -42
- package/es/types/views/slides.d.ts +0 -74
- package/es/types/views/slides.js +0 -6
- package/lib/helpers/map-api-slide-to-ui.d.ts +0 -11
- package/lib/helpers/map-api-slide-to-ui.js +0 -201
- package/lib/helpers/test/fixtures/free-text.js +0 -30
- package/lib/helpers/test/fixtures/qcm-drag.js +0 -112
- package/lib/helpers/test/fixtures/qcm-graphic.js +0 -76
- package/lib/helpers/test/fixtures/select-template.js +0 -94
- package/lib/helpers/test/fixtures/slider.js +0 -33
- package/lib/reducers/ui/slides.d.ts +0 -9
- package/lib/reducers/ui/slides.js +0 -43
- package/lib/types/views/slides.d.ts +0 -74
- package/lib/types/views/slides.js +0 -6
- package/src/helpers/map-api-slide-to-ui.ts +0 -279
- package/src/helpers/test/fixtures/free-text.ts +0 -33
- package/src/helpers/test/fixtures/qcm-drag.ts +0 -115
- package/src/helpers/test/fixtures/qcm-graphic.ts +0 -79
- package/src/helpers/test/fixtures/select-template.ts +0 -97
- package/src/helpers/test/fixtures/slider.ts +0 -36
- package/src/reducers/ui/slides.ts +0 -58
- package/src/types/views/slides.ts +0 -90
- /package/es/{helpers/test/map-api-slide-to-ui.test.d.ts → actions/api/test/fetch-skills.test.d.ts} +0 -0
- /package/{lib/helpers/test/map-api-slide-to-ui.test.d.ts → es/actions/api/test/fetch-slide.test.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import noop from 'lodash/fp/noop';
|
|
2
|
-
import {SlideFromAPI, UISlide} from '
|
|
2
|
+
import {SlideFromAPI, UISlide} from '../../../../types/common';
|
|
3
3
|
|
|
4
4
|
export const qcmSlide: SlideFromAPI = {
|
|
5
5
|
question: {
|
|
@@ -70,7 +70,11 @@ export const qcmSlide: SlideFromAPI = {
|
|
|
70
70
|
tips: 'En 2021, le média en ligne Numerama a créé un NFT vendu aux enchères sur OpenSea. Sur cette plateforme, il est obligatoire de mettre un prix de réserve, autrement dit un prix minimum au-dessous duquel la vente ne sera pas automatiquement acceptée. Sur OpenSea il ne peut être inférieur à 1 ETH. Si le prix de réserve est atteint, pas de problème, les "gas fees" (les frais de gaz) sont couverts par OpenSea. Mais, si ce n’est pas le cas, c’est au vendeur de s’en acquitter. <br/>Le NFT en question est parti à 0,021 ETH, soit 40€ au cours de l\'époque, un prix inférieur au prix de réserve. Numerama a dû acquitter des frais de gaz, et payer 190 €. <br/>Avec les NFT, on ne gagne pas à tous les coups.',
|
|
71
71
|
universalRef: 'sli_N1XACJobn',
|
|
72
72
|
hasClue: true,
|
|
73
|
-
id: 'sli_N1XACJobn'
|
|
73
|
+
id: 'sli_N1XACJobn',
|
|
74
|
+
parentContentTitle: {
|
|
75
|
+
title: 'Developing the review app',
|
|
76
|
+
type: 'course'
|
|
77
|
+
}
|
|
74
78
|
};
|
|
75
79
|
|
|
76
80
|
export const qcmUISlide: Partial<UISlide> = {
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import noop from 'lodash/fp/noop';
|
|
2
|
+
import {SlideFromAPI, UISlide} from '../../../../types/common';
|
|
3
|
+
|
|
4
|
+
export const selectTemplateSlide: SlideFromAPI = {
|
|
5
|
+
question: {
|
|
6
|
+
content: {
|
|
7
|
+
template:
|
|
8
|
+
'La vue {{sel80495}} présente la liste des utilisateurs ayant le plus grand nombre d’étoiles cumulées.',
|
|
9
|
+
choices: [
|
|
10
|
+
{
|
|
11
|
+
items: [
|
|
12
|
+
{
|
|
13
|
+
_id: '5b57464e3b594d002e8829f7',
|
|
14
|
+
value: 'sli_N13-hG3kX.choice_NJgC3aznJm',
|
|
15
|
+
text: 'Catalogue'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
_id: '5b57464e3b594d002e8829f6',
|
|
19
|
+
value: 'sli_N13-hG3kX.choice_EJZ02aMny7',
|
|
20
|
+
text: 'Leaderboard'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
_id: '5b57464e3b594d002e8829f5',
|
|
24
|
+
value: 'sli_N13-hG3kX.choice_4keCaf21Q',
|
|
25
|
+
text: 'Activité'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
_id: '5b57464e3b594d002e8829f4',
|
|
29
|
+
value: 'sli_N13-hG3kX.choice_NkbJAMn17',
|
|
30
|
+
text: 'Slides'
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
_id: '5b57464e3b594d002e8829f3',
|
|
34
|
+
name: 'sel80495',
|
|
35
|
+
type: 'select'
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
type: 'template',
|
|
40
|
+
header: 'Complétez la phrase ci-dessous.',
|
|
41
|
+
explanation:
|
|
42
|
+
'Saisissez votre réponse ou sélectionnez la bonne réponse dans le(s) menu(s) déroulant(s).'
|
|
43
|
+
},
|
|
44
|
+
klf: 'L’apprenant peut aussi évaluer sa performance grâce à un classement disponible sur la vue leaderboard. Elle compare sa position par rapport à celle des autres apprenants de la plateforme.',
|
|
45
|
+
tips: "La position d'un apprenant peut être aussi consultée depuis le header ou en-tête de la page. Elle se met à jour à chaque fois qu'un apprenant obtient des étoiles.",
|
|
46
|
+
universalRef: 'sli_N13-hG3kX',
|
|
47
|
+
id: 'sli_N13-hG3kX',
|
|
48
|
+
parentContentTitle: {
|
|
49
|
+
title: 'Developing the review app',
|
|
50
|
+
type: 'course'
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const selectTemplateUISlide: Partial<UISlide> = {
|
|
55
|
+
questionText: 'Complétez la phrase ci-dessous.',
|
|
56
|
+
answerUI: {
|
|
57
|
+
help: 'Saisissez votre réponse ou sélectionnez la bonne réponse dans le(s) menu(s) déroulant(s).',
|
|
58
|
+
model: {
|
|
59
|
+
type: 'template',
|
|
60
|
+
template:
|
|
61
|
+
'La vue {{sel80495}} présente la liste des utilisateurs ayant le plus grand nombre d’étoiles cumulées.',
|
|
62
|
+
answers: [
|
|
63
|
+
{
|
|
64
|
+
type: 'select',
|
|
65
|
+
name: 'sel80495',
|
|
66
|
+
onChange: noop,
|
|
67
|
+
options: [
|
|
68
|
+
{name: 'Select an answer', value: '', validOption: false, selected: true},
|
|
69
|
+
{
|
|
70
|
+
name: 'Catalogue',
|
|
71
|
+
value: 'Catalogue',
|
|
72
|
+
validOption: true,
|
|
73
|
+
selected: false
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'Leaderboard',
|
|
77
|
+
value: 'Leaderboard',
|
|
78
|
+
validOption: true,
|
|
79
|
+
selected: false
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'Activité',
|
|
83
|
+
value: 'Activité',
|
|
84
|
+
validOption: true,
|
|
85
|
+
selected: false
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'Slides',
|
|
89
|
+
value: 'Slides',
|
|
90
|
+
validOption: true,
|
|
91
|
+
selected: false
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import noop from 'lodash/fp/noop';
|
|
2
|
+
import {SlideFromAPI, UISlide} from '../../../../types/common';
|
|
3
|
+
|
|
4
|
+
export const sliderSlide: SlideFromAPI = {
|
|
5
|
+
question: {
|
|
6
|
+
content: {
|
|
7
|
+
min: 1,
|
|
8
|
+
max: 15,
|
|
9
|
+
unitLabel: 'an(s)'
|
|
10
|
+
},
|
|
11
|
+
type: 'slider',
|
|
12
|
+
header:
|
|
13
|
+
'En combien d’années la communauté de communes du Thouarsais est-elle passée de zéro à un tiers d’énergies renouvelables ?',
|
|
14
|
+
explanation: 'Déplacez le curseur.'
|
|
15
|
+
},
|
|
16
|
+
klf: 'Dans le cadre d’un projet local, la communauté de communes du Thouarsais, dans le Poitou (ouest de la France), a développé un parc diversifié d’énergies renouvelables : éolien, biomasse, solaire… En sept ans seulement, entre 2007 et 2014, la part d’énergies renouvelables est passée de zéro à un tiers !',
|
|
17
|
+
tips: 'En 2014, le Thouarsais a reçu la médaille de bronze du championnat européen des énergies renouvelables.',
|
|
18
|
+
universalRef: 'sli_VkAzsCLKb',
|
|
19
|
+
id: 'sli_VkAzsCLKb',
|
|
20
|
+
parentContentTitle: {
|
|
21
|
+
title: 'Developing the review app',
|
|
22
|
+
type: 'course'
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const sliderUISlide: Partial<UISlide> = {
|
|
27
|
+
questionText:
|
|
28
|
+
'En combien d’années la communauté de communes du Thouarsais est-elle passée de zéro à un tiers d’énergies renouvelables ?',
|
|
29
|
+
answerUI: {
|
|
30
|
+
help: 'Déplacez le curseur.',
|
|
31
|
+
model: {
|
|
32
|
+
type: 'slider',
|
|
33
|
+
placeholder: 'Déplacez le curseur.',
|
|
34
|
+
minLabel: '1 an(s)',
|
|
35
|
+
maxLabel: '15 an(s)',
|
|
36
|
+
title: '1 an(s)',
|
|
37
|
+
value: 0,
|
|
38
|
+
onChange: noop
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import noop from 'lodash/fp/noop';
|
|
2
|
-
import {SlideFromAPI, UISlide} from '
|
|
2
|
+
import {SlideFromAPI, UISlide} from '../../../../types/common';
|
|
3
3
|
|
|
4
4
|
export const textTemplateSlide: SlideFromAPI = {
|
|
5
5
|
question: {
|
|
@@ -33,7 +33,11 @@ export const textTemplateSlide: SlideFromAPI = {
|
|
|
33
33
|
tips: "L'origine de l'expression <i>role model</i> est attribué au sociologue Robert K. Merton.",
|
|
34
34
|
universalRef: 'sli_VJKQonm2g',
|
|
35
35
|
hasClue: true,
|
|
36
|
-
id: 'sli_VJKQonm2g'
|
|
36
|
+
id: 'sli_VJKQonm2g',
|
|
37
|
+
parentContentTitle: {
|
|
38
|
+
title: 'Using redux',
|
|
39
|
+
type: 'chapter'
|
|
40
|
+
}
|
|
37
41
|
};
|
|
38
42
|
|
|
39
43
|
export const textTemplateUISlide: Partial<UISlide> = {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import test from 'ava';
|
|
2
|
-
import
|
|
2
|
+
import identity from 'lodash/fp/identity';
|
|
3
|
+
import {SlideFromAPI, UISlide} from '../../../types/common';
|
|
3
4
|
import {mapApiSlideToUi} from '../map-api-slide-to-ui';
|
|
4
5
|
import {qcmUISlide, qcmSlide} from './fixtures/qcm';
|
|
5
6
|
import {qcmDragUISlide, qcmDragSlide} from './fixtures/qcm-drag';
|
|
@@ -9,7 +10,7 @@ import {textTemplateSlide, textTemplateUISlide} from './fixtures/text-template';
|
|
|
9
10
|
import {selectTemplateSlide, selectTemplateUISlide} from './fixtures/select-template';
|
|
10
11
|
import {sliderSlide, sliderUISlide} from './fixtures/slider';
|
|
11
12
|
|
|
12
|
-
const _mapApiSlideToUi = mapApiSlideToUi(
|
|
13
|
+
const _mapApiSlideToUi = mapApiSlideToUi(identity);
|
|
13
14
|
|
|
14
15
|
const macro = test.macro({
|
|
15
16
|
title(providedTitle) {
|
|
@@ -19,28 +20,38 @@ const macro = test.macro({
|
|
|
19
20
|
t,
|
|
20
21
|
arg: {
|
|
21
22
|
slide: SlideFromAPI;
|
|
23
|
+
answers: string[];
|
|
22
24
|
expectedUiSlide: Partial<UISlide>;
|
|
23
25
|
}
|
|
24
26
|
) {
|
|
25
27
|
t.deepEqual(
|
|
26
|
-
JSON.parse(JSON.stringify(_mapApiSlideToUi(arg.slide))),
|
|
28
|
+
JSON.parse(JSON.stringify(_mapApiSlideToUi(arg.slide, arg.answers))),
|
|
27
29
|
JSON.parse(JSON.stringify(arg.expectedUiSlide))
|
|
28
30
|
);
|
|
29
31
|
}
|
|
30
32
|
});
|
|
31
33
|
|
|
32
|
-
test('qcm', macro, {slide: qcmSlide, expectedUiSlide: qcmUISlide});
|
|
33
|
-
test('qcm drag', macro, {slide: qcmDragSlide, expectedUiSlide: qcmDragUISlide});
|
|
34
|
-
test('qcm graphic', macro, {
|
|
35
|
-
|
|
34
|
+
test('qcm', macro, {slide: qcmSlide, answers: [], expectedUiSlide: qcmUISlide});
|
|
35
|
+
test('qcm drag', macro, {slide: qcmDragSlide, answers: [], expectedUiSlide: qcmDragUISlide});
|
|
36
|
+
test('qcm graphic', macro, {
|
|
37
|
+
slide: qcmGraphicSlide,
|
|
38
|
+
answers: [],
|
|
39
|
+
expectedUiSlide: qcmGraphicUISlide
|
|
40
|
+
});
|
|
41
|
+
test('text template', macro, {
|
|
42
|
+
slide: textTemplateSlide,
|
|
43
|
+
answers: [],
|
|
44
|
+
expectedUiSlide: textTemplateUISlide
|
|
45
|
+
});
|
|
36
46
|
test('select template', macro, {
|
|
37
47
|
slide: selectTemplateSlide,
|
|
48
|
+
answers: [],
|
|
38
49
|
expectedUiSlide: selectTemplateUISlide
|
|
39
50
|
});
|
|
40
|
-
test('free text', macro, {slide: freeTextSlide, expectedUiSlide: freeTextUISlide});
|
|
41
|
-
test('slider', macro, {slide: sliderSlide, expectedUiSlide: sliderUISlide});
|
|
51
|
+
test('free text', macro, {slide: freeTextSlide, answers: [], expectedUiSlide: freeTextUISlide});
|
|
52
|
+
test('slider', macro, {slide: sliderSlide, answers: [], expectedUiSlide: sliderUISlide});
|
|
42
53
|
|
|
43
54
|
test('should throw an error if the question type can not be handled', t => {
|
|
44
55
|
const faultySlide = {...qcmSlide, question: {type: 'lol'}};
|
|
45
|
-
t.throws(() => _mapApiSlideToUi(faultySlide as SlideFromAPI));
|
|
56
|
+
t.throws(() => _mapApiSlideToUi(faultySlide as SlideFromAPI, []));
|
|
46
57
|
});
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { AnswerUI } from '../types/slides';
|
|
2
|
-
import { SlideFromAPI } from '../types/common';
|
|
3
|
-
declare type UiUtils = {
|
|
4
|
-
translate: (text: string) => string;
|
|
5
|
-
};
|
|
6
|
-
export declare const getQuestionType: (slide: SlideFromAPI) => SlideFromAPI['question']['type'];
|
|
7
|
-
export declare const mapApiSlideToUi: (uiUtils: UiUtils) => (slide: SlideFromAPI) => {
|
|
8
|
-
questionText: string;
|
|
9
|
-
answerUI: AnswerUI;
|
|
10
|
-
};
|
|
11
|
-
export {};
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { concat, divide, get, getOr, head, includes, indexOf, isEmpty, map, pipe, rangeStep, size, toInteger } from 'lodash/fp';
|
|
2
|
-
const qcmProps = (question) => {
|
|
3
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
4
|
-
const answers = [];
|
|
5
|
-
return {
|
|
6
|
-
type: 'qcm',
|
|
7
|
-
answers: map(choice => ({
|
|
8
|
-
title: choice.label,
|
|
9
|
-
selected: includes(choice.label, answers),
|
|
10
|
-
// TODO: EDIT_CHOICES
|
|
11
|
-
// eslint-disable-next-line no-console
|
|
12
|
-
onClick: () => console.log('TODO: on choice click'),
|
|
13
|
-
ariaLabel: choice.label
|
|
14
|
-
}),
|
|
15
|
-
// TODO: EDIT_CHOICES -> getChoices
|
|
16
|
-
question.content.choices)
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
const qcmDragProps = (question) => {
|
|
20
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
21
|
-
const answers = [];
|
|
22
|
-
return {
|
|
23
|
-
type: 'qcmDrag',
|
|
24
|
-
answers: map(choice => {
|
|
25
|
-
const indexInAnswer = indexOf(choice.label, answers);
|
|
26
|
-
return {
|
|
27
|
-
title: choice.label,
|
|
28
|
-
selected: indexInAnswer !== -1,
|
|
29
|
-
order: indexInAnswer,
|
|
30
|
-
// TODO: EDIT_CHOICES
|
|
31
|
-
// eslint-disable-next-line no-console
|
|
32
|
-
onClick: () => console.log('TODO: on choice click')
|
|
33
|
-
};
|
|
34
|
-
// TODO: EDIT_CHOICES -> getChoices
|
|
35
|
-
}, question.content.choices)
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
const qcmGraphicProps = (question) => {
|
|
39
|
-
// mock the answers
|
|
40
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
41
|
-
const answers = [];
|
|
42
|
-
return {
|
|
43
|
-
type: 'qcmGraphic',
|
|
44
|
-
answers: map(choice => ({
|
|
45
|
-
title: choice.label,
|
|
46
|
-
image: get('media.src.0.url', choice),
|
|
47
|
-
selected: includes(choice.label, answers),
|
|
48
|
-
// TODO: EDIT_CHOICES
|
|
49
|
-
// eslint-disable-next-line no-console
|
|
50
|
-
onClick: () => console.log('TODO: on choice click')
|
|
51
|
-
}),
|
|
52
|
-
// TODO: EDIT_CHOICES -> getChoices
|
|
53
|
-
question.content.choices)
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
const templateTextProps = (uiUtils) => (choice, index) => {
|
|
57
|
-
const { translate } = uiUtils;
|
|
58
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
59
|
-
const answers = [];
|
|
60
|
-
return {
|
|
61
|
-
type: 'text',
|
|
62
|
-
name: getOr('', 'name', choice),
|
|
63
|
-
placeholder: translate('Type here'),
|
|
64
|
-
value: get(index, answers),
|
|
65
|
-
// TODO: EDIT_CHOICES
|
|
66
|
-
// eslint-disable-next-line no-console
|
|
67
|
-
onChange: () => console.log('TODO: on choice change')
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
// const getItemText = (item: ChoiceFromAPI['items'][0]): item['text'] is string =>
|
|
71
|
-
const templateSelectProps = (uiUtils) => {
|
|
72
|
-
return (choice, index) => {
|
|
73
|
-
const { translate } = uiUtils;
|
|
74
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
75
|
-
const answers = [];
|
|
76
|
-
const answer = get(index, answers);
|
|
77
|
-
const temporaryOption = {
|
|
78
|
-
name: translate('Select an answer'),
|
|
79
|
-
value: '',
|
|
80
|
-
validOption: false,
|
|
81
|
-
selected: true
|
|
82
|
-
};
|
|
83
|
-
const selectOptions = choice.items.map(item => {
|
|
84
|
-
const itemText = getOr('', 'text', item);
|
|
85
|
-
return {
|
|
86
|
-
name: itemText,
|
|
87
|
-
value: itemText,
|
|
88
|
-
validOption: true,
|
|
89
|
-
selected: itemText === answer
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
return {
|
|
93
|
-
type: 'select',
|
|
94
|
-
name: getOr('', 'name', choice),
|
|
95
|
-
// TODO: EDIT_CHOICES
|
|
96
|
-
// eslint-disable-next-line no-console
|
|
97
|
-
onChange: () => console.log('TODO: on choice change'),
|
|
98
|
-
options: isEmpty(answer) ? concat([temporaryOption], selectOptions) : selectOptions
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
const templateProps = (uiUtils) => {
|
|
103
|
-
const templateTextProps_ = templateTextProps(uiUtils);
|
|
104
|
-
const templateSelectProps_ = templateSelectProps(uiUtils);
|
|
105
|
-
return question => {
|
|
106
|
-
// TODO: EDIT_CHOICES -> getChoices
|
|
107
|
-
const choices = question.content.choices;
|
|
108
|
-
return {
|
|
109
|
-
type: 'template',
|
|
110
|
-
template: get('content.template', question),
|
|
111
|
-
answers: choices.map((choice, index) => choice.type === 'text'
|
|
112
|
-
? templateTextProps_(choice, index)
|
|
113
|
-
: templateSelectProps_(choice, index))
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
const basicProps = (uiUtils) => {
|
|
118
|
-
const { translate } = uiUtils;
|
|
119
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
120
|
-
const answers = [];
|
|
121
|
-
return () => {
|
|
122
|
-
return {
|
|
123
|
-
type: 'freeText',
|
|
124
|
-
placeholder: translate('Type here'),
|
|
125
|
-
value: head(answers),
|
|
126
|
-
// TODO: EDIT_CHOICES
|
|
127
|
-
// eslint-disable-next-line no-console
|
|
128
|
-
onChange: () => console.log('TODO: on choice change')
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
};
|
|
132
|
-
const sliderProps = (question) => {
|
|
133
|
-
const values = rangeStep(getOr(1, 'content.step', question), getOr(Number.NaN, 'content.min', question), getOr(Number.NaN, 'content.max', question) + 1
|
|
134
|
-
// Lodash doesn't infer the type very well here
|
|
135
|
-
);
|
|
136
|
-
// TODO: EDIT_CHOICES -> getAnswerValues
|
|
137
|
-
const answers = [];
|
|
138
|
-
const stateValue = head(answers);
|
|
139
|
-
const currentValue = toInteger(stateValue);
|
|
140
|
-
const indexValue = indexOf(currentValue, values);
|
|
141
|
-
const sliderPosition = divide(indexValue, size(values) - 1);
|
|
142
|
-
const unitLabel = get('question.content.unitLabel', question);
|
|
143
|
-
return {
|
|
144
|
-
type: 'slider',
|
|
145
|
-
placeholder: question.explanation,
|
|
146
|
-
minLabel: `${question.content.min} ${unitLabel}`,
|
|
147
|
-
maxLabel: `${question.content.max} ${unitLabel}`,
|
|
148
|
-
title: `${currentValue} ${question.content.unitLabel}`,
|
|
149
|
-
value: sliderPosition,
|
|
150
|
-
// TODO: EDIT_CHOICES
|
|
151
|
-
// eslint-disable-next-line no-console
|
|
152
|
-
onChange: () => console.log('TODO: on choice change')
|
|
153
|
-
};
|
|
154
|
-
};
|
|
155
|
-
export const getQuestionType = (slide) => slide.question.type;
|
|
156
|
-
const getHelp = (uiUtils) => (slide) => {
|
|
157
|
-
const { translate } = uiUtils;
|
|
158
|
-
return get('question.explanation', slide) || translate('Select something below');
|
|
159
|
-
};
|
|
160
|
-
const getAnswerUIModel = (uiUtils) => {
|
|
161
|
-
const basicProps_ = basicProps(uiUtils);
|
|
162
|
-
const templateProps_ = templateProps(uiUtils);
|
|
163
|
-
return slide => {
|
|
164
|
-
const type = getQuestionType(slide);
|
|
165
|
-
switch (type) {
|
|
166
|
-
case 'qcm':
|
|
167
|
-
return pipe(get('question'), qcmProps)(slide);
|
|
168
|
-
case 'qcmGraphic':
|
|
169
|
-
return pipe(get('question'), qcmGraphicProps)(slide);
|
|
170
|
-
case 'qcmDrag':
|
|
171
|
-
return pipe(get('question'), qcmDragProps)(slide);
|
|
172
|
-
case 'basic':
|
|
173
|
-
return basicProps_();
|
|
174
|
-
case 'template':
|
|
175
|
-
return pipe(get('question'), templateProps_)(slide);
|
|
176
|
-
case 'slider':
|
|
177
|
-
return pipe(get('question'), sliderProps)(slide);
|
|
178
|
-
default:
|
|
179
|
-
throw new Error(`${type} is not an handled question.type`);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
};
|
|
183
|
-
export const mapApiSlideToUi = (uiUtils) => {
|
|
184
|
-
const getAnswerUIModel_ = getAnswerUIModel(uiUtils);
|
|
185
|
-
const getHelp_ = getHelp(uiUtils);
|
|
186
|
-
return slide => {
|
|
187
|
-
if (!slide) {
|
|
188
|
-
throw new Error('no slide was found');
|
|
189
|
-
}
|
|
190
|
-
const questionText = pipe(getOr('', 'question.header'), uiUtils.translate)(slide);
|
|
191
|
-
return { questionText, answerUI: { model: getAnswerUIModel_(slide), help: getHelp_(slide) } };
|
|
192
|
-
};
|
|
193
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import noop from 'lodash/fp/noop';
|
|
2
|
-
export const freeTextSlide = {
|
|
3
|
-
id: 'sli_E1Pcl-XAYbi',
|
|
4
|
-
universalRef: 'sli_E1Pcl-XAYbi',
|
|
5
|
-
question: {
|
|
6
|
-
type: 'basic',
|
|
7
|
-
header: 'sli_E1Pcl-XAYbi.header',
|
|
8
|
-
explanation: 'sli_E1Pcl-XAYbi.explanation',
|
|
9
|
-
content: {
|
|
10
|
-
label: 'sli_E1Pcl-XAYbi.label',
|
|
11
|
-
placeholder: 'sli_E1Pcl-XAYbi.placeholder',
|
|
12
|
-
id: 'sli_E1Pcl-XAYbi.choice_1'
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
clue: 'sli_E1Pcl-XAYbi.clue',
|
|
16
|
-
klf: 'sli_E1Pcl-XAYbi.klf',
|
|
17
|
-
tips: 'sli_E1Pcl-XAYbi.tips'
|
|
18
|
-
};
|
|
19
|
-
export const freeTextUISlide = {
|
|
20
|
-
answerUI: {
|
|
21
|
-
help: 'sli_E1Pcl-XAYbi.explanation',
|
|
22
|
-
model: {
|
|
23
|
-
type: 'freeText',
|
|
24
|
-
placeholder: 'Type here',
|
|
25
|
-
value: undefined,
|
|
26
|
-
onChange: noop
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
questionText: 'sli_E1Pcl-XAYbi.header'
|
|
30
|
-
};
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import noop from 'lodash/fp/noop';
|
|
2
|
-
export const qcmDragSlide = {
|
|
3
|
-
id: 'sli_419IlQQnf',
|
|
4
|
-
universalRef: 'sli_419IlQQnf',
|
|
5
|
-
question: {
|
|
6
|
-
type: 'qcmDrag',
|
|
7
|
-
header: 'sli_419IlQQnf.header',
|
|
8
|
-
explanation: 'sli_419IlQQnf.explanation',
|
|
9
|
-
content: {
|
|
10
|
-
choices: [
|
|
11
|
-
{
|
|
12
|
-
media: {
|
|
13
|
-
src: [],
|
|
14
|
-
posters: [],
|
|
15
|
-
subtitles: []
|
|
16
|
-
},
|
|
17
|
-
_id: '62b1ba3ec4f4015504212571',
|
|
18
|
-
label: 'sli_419IlQQnf.choice_4kWwlQXhG',
|
|
19
|
-
value: 'sli_419IlQQnf.choice_4kWwlQXhG',
|
|
20
|
-
items: []
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
media: {
|
|
24
|
-
src: [],
|
|
25
|
-
posters: [],
|
|
26
|
-
subtitles: []
|
|
27
|
-
},
|
|
28
|
-
_id: '62b1ba3ec4f4015504212572',
|
|
29
|
-
label: 'sli_419IlQQnf.choice_NJxbwgXm2G',
|
|
30
|
-
value: 'sli_419IlQQnf.choice_NJxbwgXm2G',
|
|
31
|
-
items: []
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
media: {
|
|
35
|
-
src: [],
|
|
36
|
-
posters: [],
|
|
37
|
-
subtitles: []
|
|
38
|
-
},
|
|
39
|
-
_id: '62b1ba3ec4f4015504212573',
|
|
40
|
-
label: 'sli_419IlQQnf.choice_41fwgQXnf',
|
|
41
|
-
value: 'sli_419IlQQnf.choice_41fwgQXnf',
|
|
42
|
-
items: []
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
media: {
|
|
46
|
-
src: [],
|
|
47
|
-
posters: [],
|
|
48
|
-
subtitles: []
|
|
49
|
-
},
|
|
50
|
-
_id: '62b1ba3ec4f4015504212574',
|
|
51
|
-
label: 'sli_419IlQQnf.choice_VJmweQ7nz',
|
|
52
|
-
value: 'sli_419IlQQnf.choice_VJmweQ7nz',
|
|
53
|
-
items: []
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
media: {
|
|
57
|
-
src: [],
|
|
58
|
-
posters: [],
|
|
59
|
-
subtitles: []
|
|
60
|
-
},
|
|
61
|
-
_id: '62b1ba3ec4f4015504212575',
|
|
62
|
-
label: 'sli_419IlQQnf.choice_4kDDgXQhz',
|
|
63
|
-
value: 'sli_419IlQQnf.choice_4kDDgXQhz',
|
|
64
|
-
items: []
|
|
65
|
-
}
|
|
66
|
-
]
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
klf: 'sli_419IlQQnf.klf',
|
|
70
|
-
tips: 'sli_419IlQQnf.tips'
|
|
71
|
-
};
|
|
72
|
-
export const qcmDragUISlide = {
|
|
73
|
-
questionText: 'sli_419IlQQnf.header',
|
|
74
|
-
answerUI: {
|
|
75
|
-
help: 'sli_419IlQQnf.explanation',
|
|
76
|
-
model: {
|
|
77
|
-
type: 'qcmDrag',
|
|
78
|
-
answers: [
|
|
79
|
-
{
|
|
80
|
-
title: 'sli_419IlQQnf.choice_4kWwlQXhG',
|
|
81
|
-
selected: false,
|
|
82
|
-
order: -1,
|
|
83
|
-
onClick: noop
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
title: 'sli_419IlQQnf.choice_NJxbwgXm2G',
|
|
87
|
-
selected: false,
|
|
88
|
-
order: -1,
|
|
89
|
-
onClick: noop
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
title: 'sli_419IlQQnf.choice_41fwgQXnf',
|
|
93
|
-
selected: false,
|
|
94
|
-
order: -1,
|
|
95
|
-
onClick: noop
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
title: 'sli_419IlQQnf.choice_VJmweQ7nz',
|
|
99
|
-
selected: false,
|
|
100
|
-
order: -1,
|
|
101
|
-
onClick: noop
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
title: 'sli_419IlQQnf.choice_4kDDgXQhz',
|
|
105
|
-
selected: false,
|
|
106
|
-
order: -1,
|
|
107
|
-
onClick: noop
|
|
108
|
-
}
|
|
109
|
-
]
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
};
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import noop from 'lodash/fp/noop';
|
|
2
|
-
export const qcmGraphicSlide = {
|
|
3
|
-
id: 'sli_41~RSVclH',
|
|
4
|
-
universalRef: 'sli_41~RSVclH',
|
|
5
|
-
question: {
|
|
6
|
-
type: 'qcmGraphic',
|
|
7
|
-
header: 'sli_41~RSVclH.header',
|
|
8
|
-
explanation: 'sli_41~RSVclH.explanation',
|
|
9
|
-
content: {
|
|
10
|
-
choices: [
|
|
11
|
-
{
|
|
12
|
-
media: {
|
|
13
|
-
type: 'img',
|
|
14
|
-
src: [
|
|
15
|
-
{
|
|
16
|
-
_id: '5fdce726359bf4003ee66997',
|
|
17
|
-
mimeType: 'image/png',
|
|
18
|
-
url: 'med_4JVRrE5gH.mediaUrl_VkBtUV9gB'
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
posters: [],
|
|
22
|
-
subtitles: []
|
|
23
|
-
},
|
|
24
|
-
_id: '5fdce726359bf4003ee66996',
|
|
25
|
-
label: 'sli_41~RSVclH.choice_V1gN0r4qgS',
|
|
26
|
-
value: 'sli_41~RSVclH.choice_V1gN0r4qgS',
|
|
27
|
-
items: []
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
media: {
|
|
31
|
-
type: 'img',
|
|
32
|
-
src: [
|
|
33
|
-
{
|
|
34
|
-
_id: '5fdce726359bf4003ee66999',
|
|
35
|
-
mimeType: 'image/png',
|
|
36
|
-
url: 'med_Ek8gIEqxB.mediaUrl_EkcFUEclH'
|
|
37
|
-
}
|
|
38
|
-
],
|
|
39
|
-
posters: [],
|
|
40
|
-
subtitles: []
|
|
41
|
-
},
|
|
42
|
-
_id: '5fdce726359bf4003ee66998',
|
|
43
|
-
label: 'sli_41~RSVclH.choice_4JlLeLE5lS',
|
|
44
|
-
value: 'sli_41~RSVclH.choice_4JlLeLE5lS',
|
|
45
|
-
items: []
|
|
46
|
-
}
|
|
47
|
-
]
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
clue: 'sli_41~RSVclH.clue',
|
|
51
|
-
klf: 'sli_41~RSVclH.klf',
|
|
52
|
-
tips: 'sli_41~RSVclH.tips'
|
|
53
|
-
};
|
|
54
|
-
export const qcmGraphicUISlide = {
|
|
55
|
-
questionText: 'sli_41~RSVclH.header',
|
|
56
|
-
answerUI: {
|
|
57
|
-
help: 'sli_41~RSVclH.explanation',
|
|
58
|
-
model: {
|
|
59
|
-
type: 'qcmGraphic',
|
|
60
|
-
answers: [
|
|
61
|
-
{
|
|
62
|
-
title: 'sli_41~RSVclH.choice_V1gN0r4qgS',
|
|
63
|
-
image: 'med_4JVRrE5gH.mediaUrl_VkBtUV9gB',
|
|
64
|
-
selected: false,
|
|
65
|
-
onClick: noop
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
title: 'sli_41~RSVclH.choice_4JlLeLE5lS',
|
|
69
|
-
image: 'med_Ek8gIEqxB.mediaUrl_EkcFUEclH',
|
|
70
|
-
selected: false,
|
|
71
|
-
onClick: noop
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
};
|