@coorpacademy/app-review 0.1.15 → 0.1.17

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 (289) hide show
  1. package/es/actions/api/fetch-skills.d.ts +5 -7
  2. package/es/actions/api/fetch-skills.js +12 -4
  3. package/es/actions/api/fetch-slide.d.ts +14 -7
  4. package/es/actions/api/fetch-slide.js +23 -18
  5. package/es/actions/api/post-answer.d.ts +10 -0
  6. package/es/actions/api/post-answer.js +25 -0
  7. package/es/actions/api/post-progression.d.ts +5 -7
  8. package/es/actions/api/post-progression.js +16 -8
  9. package/es/actions/api/test/fetch-skills.test.js +57 -0
  10. package/es/actions/api/test/fetch-slide.test.js +64 -0
  11. package/es/actions/api/test/post-answer.test.d.ts +1 -0
  12. package/es/actions/api/test/post-answer.test.js +82 -0
  13. package/es/actions/api/test/post-progression.test.d.ts +1 -0
  14. package/es/actions/api/test/post-progression.test.js +105 -0
  15. package/es/actions/data/test/token.test.d.ts +1 -0
  16. package/es/actions/data/test/token.test.js +25 -0
  17. package/es/actions/index.d.ts +1 -8
  18. package/es/actions/test/create-test-store.d.ts +5 -0
  19. package/es/actions/test/create-test-store.js +16 -0
  20. package/es/actions/ui/answers.d.ts +21 -0
  21. package/es/actions/ui/answers.js +43 -0
  22. package/es/actions/ui/slides.d.ts +0 -5
  23. package/es/actions/ui/slides.js +0 -4
  24. package/es/actions/ui/test/answers.test.d.ts +1 -0
  25. package/es/actions/ui/test/answers.test.js +90 -0
  26. package/es/actions/ui/test/slides.test.d.ts +1 -0
  27. package/es/actions/ui/test/slides.test.js +26 -0
  28. package/es/common/index.d.ts +0 -3
  29. package/es/common/index.js +0 -4
  30. package/es/index.js +11 -19
  31. package/es/reducers/data/index.d.ts +2 -2
  32. package/es/reducers/data/progression.d.ts +2 -3
  33. package/es/reducers/data/progression.js +0 -5
  34. package/es/reducers/data/slides.d.ts +3 -4
  35. package/es/reducers/data/slides.js +5 -1
  36. package/es/reducers/data/test/progression.test.d.ts +1 -0
  37. package/es/reducers/data/test/progression.test.js +38 -0
  38. package/es/reducers/data/test/skills.test.d.ts +1 -0
  39. package/es/reducers/data/test/skills.test.js +12 -0
  40. package/es/reducers/data/test/slides.test.d.ts +1 -0
  41. package/es/reducers/data/test/slides.test.js +20 -0
  42. package/es/reducers/data/test/token.test.d.ts +1 -0
  43. package/es/reducers/data/test/token.test.js +11 -0
  44. package/es/reducers/index.d.ts +3 -2
  45. package/es/reducers/ui/answers.d.ts +4 -0
  46. package/es/reducers/ui/answers.js +9 -0
  47. package/es/reducers/ui/index.d.ts +7 -4
  48. package/es/reducers/ui/index.js +4 -2
  49. package/es/reducers/ui/slide.d.ts +8 -0
  50. package/es/reducers/ui/slide.js +26 -0
  51. package/es/reducers/ui/test/answers.test.d.ts +1 -0
  52. package/es/reducers/ui/test/answers.test.js +27 -0
  53. package/es/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
  54. package/es/reducers/ui/test/current-slide-ref.test.js +12 -0
  55. package/es/reducers/ui/test/navigation.test.d.ts +1 -0
  56. package/es/reducers/ui/test/navigation.test.js +15 -0
  57. package/es/reducers/ui/test/slide.test.d.ts +1 -0
  58. package/es/reducers/ui/test/slide.test.js +12 -0
  59. package/es/services/fetch-slide.js +1 -1
  60. package/es/services/index.js +3 -1
  61. package/es/services/post-answer.d.ts +2 -0
  62. package/es/services/post-answer.js +18 -0
  63. package/es/services/test/fetch-slide.test.d.ts +1 -0
  64. package/es/services/test/fetch-slide.test.js +22 -0
  65. package/es/services/test/post-answer.test.d.ts +1 -0
  66. package/es/services/test/post-answer.test.js +57 -0
  67. package/es/services/test/post-progression.test.js +9 -1
  68. package/es/test/util/services.mock.d.ts +2 -1
  69. package/es/test/util/services.mock.js +88 -44
  70. package/es/types/common.d.ts +22 -33
  71. package/es/views/skills/index.d.ts +1 -1
  72. package/es/views/skills/index.js +0 -3
  73. package/es/views/skills/test/skills.test.d.ts +1 -0
  74. package/es/views/skills/test/skills.test.js +94 -0
  75. package/es/views/slides/index.d.ts +89 -2
  76. package/es/views/slides/index.js +80 -10
  77. package/es/views/slides/map-api-slide-to-ui.d.ts +8 -0
  78. package/es/views/slides/map-api-slide-to-ui.js +165 -0
  79. package/es/{helpers → views/slides}/test/fixtures/free-text.d.ts +2 -1
  80. package/es/views/slides/test/fixtures/free-text.js +38 -0
  81. package/es/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +2 -1
  82. package/es/views/slides/test/fixtures/qcm-drag.js +108 -0
  83. package/es/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +2 -1
  84. package/es/views/slides/test/fixtures/qcm-graphic.js +88 -0
  85. package/es/{helpers → views/slides}/test/fixtures/qcm.d.ts +2 -1
  86. package/es/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
  87. package/es/{helpers → views/slides}/test/fixtures/select-template.d.ts +2 -1
  88. package/es/views/slides/test/fixtures/select-template.js +92 -0
  89. package/es/{helpers → views/slides}/test/fixtures/slider.d.ts +2 -1
  90. package/es/views/slides/test/fixtures/slider.js +36 -0
  91. package/es/{helpers → views/slides}/test/fixtures/text-template.d.ts +2 -1
  92. package/es/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
  93. package/es/views/slides/test/index.test.d.ts +1 -0
  94. package/es/views/slides/test/index.test.js +234 -0
  95. package/es/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
  96. package/es/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
  97. package/lib/actions/api/fetch-skills.d.ts +5 -7
  98. package/lib/actions/api/fetch-skills.js +58 -7
  99. package/lib/actions/api/fetch-slide.d.ts +14 -7
  100. package/lib/actions/api/fetch-slide.js +72 -20
  101. package/lib/actions/api/post-answer.d.ts +10 -0
  102. package/lib/actions/api/post-answer.js +75 -0
  103. package/lib/actions/api/post-progression.d.ts +5 -7
  104. package/lib/actions/api/post-progression.js +67 -10
  105. package/lib/actions/api/test/fetch-skills.test.d.ts +1 -0
  106. package/lib/actions/api/test/fetch-skills.test.js +116 -0
  107. package/lib/actions/api/test/fetch-slide.test.d.ts +1 -0
  108. package/lib/actions/api/test/fetch-slide.test.js +123 -0
  109. package/lib/actions/api/test/post-answer.test.d.ts +1 -0
  110. package/lib/actions/api/test/post-answer.test.js +145 -0
  111. package/lib/actions/api/test/post-progression.test.d.ts +1 -0
  112. package/lib/actions/api/test/post-progression.test.js +163 -0
  113. package/lib/actions/data/test/token.test.d.ts +1 -0
  114. package/lib/actions/data/test/token.test.js +70 -0
  115. package/lib/actions/index.d.ts +1 -8
  116. package/lib/actions/test/create-test-store.d.ts +5 -0
  117. package/lib/actions/test/create-test-store.js +18 -0
  118. package/lib/actions/ui/answers.d.ts +21 -0
  119. package/lib/actions/ui/answers.js +54 -0
  120. package/lib/actions/ui/slides.d.ts +0 -5
  121. package/lib/actions/ui/slides.js +0 -4
  122. package/lib/actions/ui/test/answers.test.d.ts +1 -0
  123. package/lib/actions/ui/test/answers.test.js +171 -0
  124. package/lib/actions/ui/test/slides.test.d.ts +1 -0
  125. package/lib/actions/ui/test/slides.test.js +71 -0
  126. package/lib/common/index.d.ts +0 -3
  127. package/lib/common/index.js +0 -4
  128. package/lib/index.js +22 -21
  129. package/lib/reducers/data/index.d.ts +2 -2
  130. package/lib/reducers/data/progression.d.ts +2 -3
  131. package/lib/reducers/data/progression.js +0 -5
  132. package/lib/reducers/data/slides.d.ts +3 -4
  133. package/lib/reducers/data/slides.js +5 -1
  134. package/lib/reducers/data/test/progression.test.d.ts +1 -0
  135. package/lib/reducers/data/test/progression.test.js +38 -0
  136. package/lib/reducers/data/test/skills.test.d.ts +1 -0
  137. package/lib/reducers/data/test/skills.test.js +12 -0
  138. package/lib/reducers/data/test/slides.test.d.ts +1 -0
  139. package/lib/reducers/data/test/slides.test.js +20 -0
  140. package/lib/reducers/data/test/token.test.d.ts +1 -0
  141. package/lib/reducers/data/test/token.test.js +11 -0
  142. package/lib/reducers/index.d.ts +3 -2
  143. package/lib/reducers/ui/answers.d.ts +4 -0
  144. package/lib/reducers/ui/answers.js +10 -0
  145. package/lib/reducers/ui/index.d.ts +7 -4
  146. package/lib/reducers/ui/index.js +4 -2
  147. package/lib/reducers/ui/slide.d.ts +8 -0
  148. package/lib/reducers/ui/slide.js +27 -0
  149. package/lib/reducers/ui/test/answers.test.d.ts +1 -0
  150. package/lib/reducers/ui/test/answers.test.js +27 -0
  151. package/lib/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
  152. package/lib/reducers/ui/test/current-slide-ref.test.js +12 -0
  153. package/lib/reducers/ui/test/navigation.test.d.ts +1 -0
  154. package/lib/reducers/ui/test/navigation.test.js +15 -0
  155. package/lib/reducers/ui/test/slide.test.d.ts +1 -0
  156. package/lib/reducers/ui/test/slide.test.js +12 -0
  157. package/lib/services/fetch-slide.js +1 -1
  158. package/lib/services/index.js +3 -1
  159. package/lib/services/post-answer.d.ts +2 -0
  160. package/lib/services/post-answer.js +62 -0
  161. package/lib/services/test/fetch-slide.test.d.ts +1 -0
  162. package/lib/services/test/fetch-slide.test.js +76 -0
  163. package/lib/services/test/post-answer.test.d.ts +1 -0
  164. package/lib/services/test/post-answer.test.js +111 -0
  165. package/lib/services/test/post-progression.test.js +9 -1
  166. package/lib/test/util/services.mock.d.ts +2 -1
  167. package/lib/test/util/services.mock.js +88 -44
  168. package/lib/types/common.d.ts +22 -33
  169. package/lib/views/skills/index.d.ts +1 -1
  170. package/lib/views/skills/index.js +0 -3
  171. package/lib/views/skills/test/skills.test.d.ts +1 -0
  172. package/lib/views/skills/test/skills.test.js +94 -0
  173. package/lib/views/slides/index.d.ts +89 -2
  174. package/lib/views/slides/index.js +80 -10
  175. package/lib/views/slides/map-api-slide-to-ui.d.ts +8 -0
  176. package/lib/views/slides/map-api-slide-to-ui.js +179 -0
  177. package/lib/{helpers → views/slides}/test/fixtures/free-text.d.ts +2 -1
  178. package/lib/views/slides/test/fixtures/free-text.js +38 -0
  179. package/lib/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +2 -1
  180. package/lib/views/slides/test/fixtures/qcm-drag.js +108 -0
  181. package/lib/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +2 -1
  182. package/lib/views/slides/test/fixtures/qcm-graphic.js +88 -0
  183. package/lib/{helpers → views/slides}/test/fixtures/qcm.d.ts +2 -1
  184. package/lib/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
  185. package/lib/{helpers → views/slides}/test/fixtures/select-template.d.ts +2 -1
  186. package/lib/views/slides/test/fixtures/select-template.js +92 -0
  187. package/lib/{helpers → views/slides}/test/fixtures/slider.d.ts +2 -1
  188. package/lib/views/slides/test/fixtures/slider.js +36 -0
  189. package/lib/{helpers → views/slides}/test/fixtures/text-template.d.ts +2 -1
  190. package/lib/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
  191. package/lib/views/slides/test/index.test.d.ts +1 -0
  192. package/lib/views/slides/test/index.test.js +234 -0
  193. package/lib/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
  194. package/lib/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
  195. package/package.json +6 -5
  196. package/src/actions/api/fetch-skills.ts +19 -12
  197. package/src/actions/api/fetch-slide.ts +35 -29
  198. package/src/actions/api/post-answer.ts +39 -0
  199. package/src/actions/api/post-progression.ts +22 -22
  200. package/src/actions/api/test/fetch-skills.test.ts +73 -0
  201. package/src/actions/api/test/fetch-slide.test.ts +80 -0
  202. package/src/actions/api/test/post-answer.test.ts +101 -0
  203. package/src/actions/api/test/post-progression.test.ts +122 -0
  204. package/src/actions/data/test/token.test.ts +29 -0
  205. package/src/actions/index.ts +1 -17
  206. package/src/actions/test/create-test-store.ts +25 -0
  207. package/src/actions/ui/answers.ts +63 -0
  208. package/src/actions/ui/slides.ts +1 -8
  209. package/src/actions/ui/test/answers.test.ts +103 -0
  210. package/src/actions/ui/test/slides.test.ts +30 -0
  211. package/src/common/index.ts +0 -7
  212. package/src/index.tsx +15 -32
  213. package/src/reducers/data/index.ts +1 -1
  214. package/src/reducers/data/progression.ts +2 -7
  215. package/src/reducers/data/slides.ts +12 -4
  216. package/src/reducers/data/test/progression.test.ts +42 -0
  217. package/src/reducers/data/test/skills.test.ts +14 -0
  218. package/src/reducers/data/test/slides.test.ts +26 -0
  219. package/src/reducers/data/test/token.test.ts +13 -0
  220. package/src/reducers/ui/answers.ts +15 -0
  221. package/src/reducers/ui/index.ts +6 -3
  222. package/src/reducers/ui/slide.ts +43 -0
  223. package/src/reducers/ui/test/answers.test.ts +33 -0
  224. package/src/reducers/ui/test/current-slide-ref.test.ts +14 -0
  225. package/src/reducers/ui/test/navigation.test.ts +19 -0
  226. package/src/reducers/ui/test/slide.test.ts +15 -0
  227. package/src/services/fetch-slide.ts +1 -1
  228. package/src/services/index.ts +3 -1
  229. package/src/services/post-answer.ts +27 -0
  230. package/src/services/test/fetch-slide.test.ts +30 -0
  231. package/src/services/test/post-answer.test.ts +68 -0
  232. package/src/services/test/post-progression.test.ts +9 -1
  233. package/src/test/util/services.mock.ts +93 -45
  234. package/src/types/common.ts +34 -44
  235. package/src/views/skills/index.ts +1 -5
  236. package/src/views/skills/test/skills.test.ts +101 -0
  237. package/src/views/slides/index.ts +186 -12
  238. package/src/views/slides/map-api-slide-to-ui.ts +251 -0
  239. package/src/views/slides/test/fixtures/free-text.ts +44 -0
  240. package/src/views/slides/test/fixtures/qcm-drag.ts +112 -0
  241. package/src/views/slides/test/fixtures/qcm-graphic.ts +95 -0
  242. package/src/{helpers → views/slides}/test/fixtures/qcm.ts +7 -2
  243. package/src/views/slides/test/fixtures/select-template.ts +99 -0
  244. package/src/views/slides/test/fixtures/slider.ts +42 -0
  245. package/src/{helpers → views/slides}/test/fixtures/text-template.ts +7 -2
  246. package/src/views/slides/test/index.test.ts +240 -0
  247. package/src/{helpers → views/slides}/test/map-api-slide-to-ui.test.ts +22 -10
  248. package/es/fixtures/qcm-slide.d.ts +0 -2
  249. package/es/fixtures/qcm-slide.js +0 -33
  250. package/es/fixtures/temp-fixture.d.ts +0 -3
  251. package/es/fixtures/temp-fixture.js +0 -84
  252. package/es/helpers/map-api-slide-to-ui.d.ts +0 -11
  253. package/es/helpers/map-api-slide-to-ui.js +0 -193
  254. package/es/helpers/test/fixtures/free-text.js +0 -30
  255. package/es/helpers/test/fixtures/qcm-drag.js +0 -112
  256. package/es/helpers/test/fixtures/qcm-graphic.js +0 -76
  257. package/es/helpers/test/fixtures/select-template.js +0 -94
  258. package/es/helpers/test/fixtures/slider.js +0 -33
  259. package/es/reducers/ui/slides.d.ts +0 -9
  260. package/es/reducers/ui/slides.js +0 -42
  261. package/es/types/views/slides.d.ts +0 -74
  262. package/es/types/views/slides.js +0 -6
  263. package/lib/fixtures/qcm-slide.d.ts +0 -2
  264. package/lib/fixtures/qcm-slide.js +0 -33
  265. package/lib/fixtures/temp-fixture.d.ts +0 -3
  266. package/lib/fixtures/temp-fixture.js +0 -84
  267. package/lib/helpers/map-api-slide-to-ui.d.ts +0 -11
  268. package/lib/helpers/map-api-slide-to-ui.js +0 -201
  269. package/lib/helpers/test/fixtures/free-text.js +0 -30
  270. package/lib/helpers/test/fixtures/qcm-drag.js +0 -112
  271. package/lib/helpers/test/fixtures/qcm-graphic.js +0 -76
  272. package/lib/helpers/test/fixtures/select-template.js +0 -94
  273. package/lib/helpers/test/fixtures/slider.js +0 -33
  274. package/lib/reducers/ui/slides.d.ts +0 -9
  275. package/lib/reducers/ui/slides.js +0 -43
  276. package/lib/types/views/slides.d.ts +0 -74
  277. package/lib/types/views/slides.js +0 -6
  278. package/src/fixtures/qcm-slide.ts +0 -35
  279. package/src/fixtures/temp-fixture.ts +0 -94
  280. package/src/helpers/map-api-slide-to-ui.ts +0 -279
  281. package/src/helpers/test/fixtures/free-text.ts +0 -33
  282. package/src/helpers/test/fixtures/qcm-drag.ts +0 -115
  283. package/src/helpers/test/fixtures/qcm-graphic.ts +0 -79
  284. package/src/helpers/test/fixtures/select-template.ts +0 -97
  285. package/src/helpers/test/fixtures/slider.ts +0 -36
  286. package/src/reducers/ui/slides.ts +0 -58
  287. package/src/types/views/slides.ts +0 -90
  288. /package/es/{helpers/test/map-api-slide-to-ui.test.d.ts → actions/api/test/fetch-skills.test.d.ts} +0 -0
  289. /package/{lib/helpers/test/map-api-slide-to-ui.test.d.ts → es/actions/api/test/fetch-slide.test.d.ts} +0 -0
@@ -0,0 +1,36 @@
1
+ import noop from 'lodash/fp/noop';
2
+ export const sliderSlide = {
3
+ question: {
4
+ content: {
5
+ min: 1,
6
+ max: 15,
7
+ unitLabel: 'an(s)'
8
+ },
9
+ type: 'slider',
10
+ header: 'En combien d’années la communauté de communes du Thouarsais est-elle passée de zéro à un tiers d’énergies renouvelables ?',
11
+ explanation: 'Déplacez le curseur.'
12
+ },
13
+ 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 !',
14
+ tips: 'En 2014, le Thouarsais a reçu la médaille de bronze du championnat européen des énergies renouvelables.',
15
+ universalRef: 'sli_VkAzsCLKb',
16
+ id: 'sli_VkAzsCLKb',
17
+ parentContentTitle: {
18
+ title: 'Developing the review app',
19
+ type: 'course'
20
+ }
21
+ };
22
+ export const sliderUISlide = {
23
+ questionText: 'En combien d’années la communauté de communes du Thouarsais est-elle passée de zéro à un tiers d’énergies renouvelables ?',
24
+ answerUI: {
25
+ help: 'Déplacez le curseur.',
26
+ model: {
27
+ type: 'slider',
28
+ placeholder: 'Déplacez le curseur.',
29
+ minLabel: '1 an(s)',
30
+ maxLabel: '15 an(s)',
31
+ title: '1 an(s)',
32
+ value: 0,
33
+ onChange: noop
34
+ }
35
+ }
36
+ };
@@ -1,3 +1,4 @@
1
- import { SlideFromAPI, UISlide } from '../../../types/common';
1
+ import { UISlide } from '../..';
2
+ import { SlideFromAPI } from '../../../../types/common';
2
3
  export declare const textTemplateSlide: SlideFromAPI;
3
4
  export declare const textTemplateUISlide: Partial<UISlide>;
@@ -31,7 +31,11 @@ export const textTemplateSlide = {
31
31
  tips: "L'origine de l'expression <i>role model</i> est attribué au sociologue Robert K. Merton.",
32
32
  universalRef: 'sli_VJKQonm2g',
33
33
  hasClue: true,
34
- id: 'sli_VJKQonm2g'
34
+ id: 'sli_VJKQonm2g',
35
+ parentContentTitle: {
36
+ title: 'Using redux',
37
+ type: 'chapter'
38
+ }
35
39
  };
36
40
  export const textTemplateUISlide = {
37
41
  questionText: 'Comment le protégé doit-il percevoir son mentor ?',
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,234 @@
1
+ import test from 'ava';
2
+ import identity from 'lodash/fp/identity';
3
+ import omit from 'lodash/fp/omit';
4
+ import { mapStateToSlidesProps } from '..';
5
+ import { freeTextSlide } from './fixtures/free-text';
6
+ test('should create initial props when fetched slide is still not received', t => {
7
+ const state = {
8
+ data: {
9
+ progression: {
10
+ _id: '62b1d1087aa12f00253f40ee',
11
+ content: {
12
+ ref: '_skillref',
13
+ type: 'skill'
14
+ },
15
+ engine: {
16
+ ref: 'review'
17
+ },
18
+ state: {
19
+ allAnswers: [],
20
+ isCorrect: true,
21
+ nextContent: {
22
+ ref: 'sli_N1XACJobn',
23
+ type: 'slide'
24
+ },
25
+ pendingSlides: [],
26
+ slides: [],
27
+ step: {
28
+ current: 1
29
+ },
30
+ stars: 0
31
+ }
32
+ },
33
+ skills: [],
34
+ slides: {
35
+ sli_N1XACJobn: null
36
+ },
37
+ token: '1234'
38
+ },
39
+ ui: {
40
+ currentSlideRef: '',
41
+ navigation: ['loader', 'slides'],
42
+ answers: [],
43
+ slide: {
44
+ validateButton: false
45
+ }
46
+ }
47
+ };
48
+ const props = mapStateToSlidesProps(state, identity);
49
+ t.is(props.congratsProps, undefined);
50
+ t.deepEqual(omit(['onQuitClick'], props.header), {
51
+ 'aria-label': 'aria-header-wrapper',
52
+ closeButtonAriaLabel: 'aria-close-button',
53
+ mode: '__revision_mode',
54
+ skillName: '__agility',
55
+ steps: [
56
+ {
57
+ current: true,
58
+ icon: 'no-answer',
59
+ value: '1'
60
+ },
61
+ {
62
+ current: false,
63
+ icon: 'no-answer',
64
+ value: '2'
65
+ },
66
+ {
67
+ current: false,
68
+ icon: 'no-answer',
69
+ value: '3'
70
+ },
71
+ {
72
+ current: false,
73
+ icon: 'no-answer',
74
+ value: '4'
75
+ },
76
+ {
77
+ current: false,
78
+ icon: 'no-answer',
79
+ value: '5'
80
+ }
81
+ ]
82
+ });
83
+ t.deepEqual(omit(['validateButton'], props.stack), {
84
+ correctionPopinProps: undefined,
85
+ endReview: false,
86
+ slides: {
87
+ '0': {
88
+ hidden: false,
89
+ position: 0,
90
+ loading: true
91
+ },
92
+ '1': {
93
+ hidden: false,
94
+ position: 1,
95
+ loading: true
96
+ },
97
+ '2': {
98
+ hidden: false,
99
+ position: 2,
100
+ loading: true
101
+ },
102
+ '3': {
103
+ hidden: false,
104
+ position: 3,
105
+ loading: true
106
+ },
107
+ '4': {
108
+ hidden: false,
109
+ position: 4,
110
+ loading: true
111
+ }
112
+ }
113
+ });
114
+ });
115
+ test('should create initial props when the slide is on the state', t => {
116
+ const state = {
117
+ data: {
118
+ progression: {
119
+ _id: '62b1d1087aa12f00253f40ee',
120
+ content: {
121
+ ref: '_skillref',
122
+ type: 'skill'
123
+ },
124
+ engine: {
125
+ ref: 'review'
126
+ },
127
+ state: {
128
+ allAnswers: [],
129
+ isCorrect: true,
130
+ nextContent: {
131
+ ref: 'sli_N1XACJobn',
132
+ type: 'slide'
133
+ },
134
+ pendingSlides: [],
135
+ slides: [],
136
+ step: {
137
+ current: 1
138
+ },
139
+ stars: 0
140
+ }
141
+ },
142
+ skills: [],
143
+ slides: {
144
+ sli_N1XACJobn: freeTextSlide
145
+ },
146
+ token: '1234'
147
+ },
148
+ ui: {
149
+ currentSlideRef: 'sli_N1XACJobn',
150
+ navigation: ['loader', 'slides'],
151
+ answers: ['My value'],
152
+ slide: {
153
+ validateButton: true
154
+ }
155
+ }
156
+ };
157
+ const props = mapStateToSlidesProps(state, identity);
158
+ t.is(props.congratsProps, undefined);
159
+ t.deepEqual(omit(['onQuitClick'], props.header), {
160
+ 'aria-label': 'aria-header-wrapper',
161
+ closeButtonAriaLabel: 'aria-close-button',
162
+ mode: '__revision_mode',
163
+ skillName: '__agility',
164
+ steps: [
165
+ {
166
+ current: true,
167
+ icon: 'no-answer',
168
+ value: '1'
169
+ },
170
+ {
171
+ current: false,
172
+ icon: 'no-answer',
173
+ value: '2'
174
+ },
175
+ {
176
+ current: false,
177
+ icon: 'no-answer',
178
+ value: '3'
179
+ },
180
+ {
181
+ current: false,
182
+ icon: 'no-answer',
183
+ value: '4'
184
+ },
185
+ {
186
+ current: false,
187
+ icon: 'no-answer',
188
+ value: '5'
189
+ }
190
+ ]
191
+ });
192
+ t.deepEqual(omit(['validateButton', 'slides'], props.stack), {
193
+ correctionPopinProps: undefined,
194
+ endReview: false
195
+ });
196
+ t.false(props.stack.validateButton.disabled);
197
+ t.deepEqual(omit('answerUI', props.stack.slides['0']), {
198
+ hidden: false,
199
+ position: 0,
200
+ loading: false,
201
+ parentContentTitle: 'From "Developing the review app" course',
202
+ questionText: 'Which term is used to describe the act of asking what the usual salary is for the position you are applying for?'
203
+ });
204
+ t.deepEqual(omit('model.onChange', props.stack.slides['0'].answerUI), {
205
+ help: 'Type your answer.',
206
+ model: {
207
+ placeholder: 'Type here',
208
+ type: 'freeText',
209
+ value: 'My value'
210
+ }
211
+ });
212
+ t.deepEqual(omit(['0'], props.stack.slides), {
213
+ '1': {
214
+ hidden: false,
215
+ position: 1,
216
+ loading: true
217
+ },
218
+ '2': {
219
+ hidden: false,
220
+ position: 2,
221
+ loading: true
222
+ },
223
+ '3': {
224
+ hidden: false,
225
+ position: 3,
226
+ loading: true
227
+ },
228
+ '4': {
229
+ hidden: false,
230
+ position: 4,
231
+ loading: true
232
+ }
233
+ });
234
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,5 @@
1
1
  import test from 'ava';
2
+ import identity from 'lodash/fp/identity';
2
3
  import { mapApiSlideToUi } from '../map-api-slide-to-ui';
3
4
  import { qcmUISlide, qcmSlide } from './fixtures/qcm';
4
5
  import { qcmDragUISlide, qcmDragSlide } from './fixtures/qcm-drag';
@@ -7,26 +8,35 @@ import { qcmGraphicUISlide, qcmGraphicSlide } from './fixtures/qcm-graphic';
7
8
  import { textTemplateSlide, textTemplateUISlide } from './fixtures/text-template';
8
9
  import { selectTemplateSlide, selectTemplateUISlide } from './fixtures/select-template';
9
10
  import { sliderSlide, sliderUISlide } from './fixtures/slider';
10
- const _mapApiSlideToUi = mapApiSlideToUi({ translate: (text) => text });
11
+ const _mapApiSlideToUi = mapApiSlideToUi(identity);
11
12
  const macro = test.macro({
12
13
  title(providedTitle) {
13
14
  return `should handle ${providedTitle} conversion`.trim();
14
15
  },
15
16
  exec(t, arg) {
16
- t.deepEqual(JSON.parse(JSON.stringify(_mapApiSlideToUi(arg.slide))), JSON.parse(JSON.stringify(arg.expectedUiSlide)));
17
+ t.deepEqual(JSON.parse(JSON.stringify(_mapApiSlideToUi(arg.slide, arg.answers))), JSON.parse(JSON.stringify(arg.expectedUiSlide)));
17
18
  }
18
19
  });
19
- test('qcm', macro, { slide: qcmSlide, expectedUiSlide: qcmUISlide });
20
- test('qcm drag', macro, { slide: qcmDragSlide, expectedUiSlide: qcmDragUISlide });
21
- test('qcm graphic', macro, { slide: qcmGraphicSlide, expectedUiSlide: qcmGraphicUISlide });
22
- test('text template', macro, { slide: textTemplateSlide, expectedUiSlide: textTemplateUISlide });
20
+ test('qcm', macro, { slide: qcmSlide, answers: [], expectedUiSlide: qcmUISlide });
21
+ test('qcm drag', macro, { slide: qcmDragSlide, answers: [], expectedUiSlide: qcmDragUISlide });
22
+ test('qcm graphic', macro, {
23
+ slide: qcmGraphicSlide,
24
+ answers: [],
25
+ expectedUiSlide: qcmGraphicUISlide
26
+ });
27
+ test('text template', macro, {
28
+ slide: textTemplateSlide,
29
+ answers: [],
30
+ expectedUiSlide: textTemplateUISlide
31
+ });
23
32
  test('select template', macro, {
24
33
  slide: selectTemplateSlide,
34
+ answers: [],
25
35
  expectedUiSlide: selectTemplateUISlide
26
36
  });
27
- test('free text', macro, { slide: freeTextSlide, expectedUiSlide: freeTextUISlide });
28
- test('slider', macro, { slide: sliderSlide, expectedUiSlide: sliderUISlide });
37
+ test('free text', macro, { slide: freeTextSlide, answers: [], expectedUiSlide: freeTextUISlide });
38
+ test('slider', macro, { slide: sliderSlide, answers: [], expectedUiSlide: sliderUISlide });
29
39
  test('should throw an error if the question type can not be handled', t => {
30
40
  const faultySlide = { ...qcmSlide, question: { type: 'lol' } };
31
- t.throws(() => _mapApiSlideToUi(faultySlide));
41
+ t.throws(() => _mapApiSlideToUi(faultySlide, []));
32
42
  });
@@ -1,13 +1,11 @@
1
- import type { ThunkAction } from 'redux-thunk';
2
- import { AnyAction } from 'redux';
1
+ import type { Dispatch } from 'redux';
3
2
  import type { StoreState } from '../../reducers';
4
- import { Options, Skill } from '../../types/common';
3
+ import type { Options, Skill } from '../../types/common';
5
4
  export declare const SKILLS_FETCH_REQUEST: "@@skills/FETCH_REQUEST";
6
5
  export declare const SKILLS_FETCH_SUCCESS: "@@skills/FETCH_SUCCESS";
7
6
  export declare const SKILLS_FETCH_FAILURE: "@@skills/FETCH_FAILURE";
8
- export interface ReceivedSkills extends AnyAction {
7
+ export declare type ReceivedSkills = {
9
8
  type: '@@skills/FETCH_SUCCESS';
10
9
  payload: Skill[];
11
- }
12
- export declare type FetchSkillsAction = ThunkAction<Promise<void>, StoreState, Options, AnyAction>;
13
- export declare const fetchSkills: (token: string) => FetchSkillsAction;
10
+ };
11
+ export declare const fetchSkills: (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => Promise<void>;
@@ -1,13 +1,64 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
1
37
  import buildTask from '@coorpacademy/redux-task';
38
+ import get from 'lodash/fp/get';
2
39
  export var SKILLS_FETCH_REQUEST = '@@skills/FETCH_REQUEST';
3
40
  export var SKILLS_FETCH_SUCCESS = '@@skills/FETCH_SUCCESS';
4
41
  export var SKILLS_FETCH_FAILURE = '@@skills/FETCH_FAILURE';
5
- export var fetchSkills = function (token) {
6
- return buildTask({
7
- types: [SKILLS_FETCH_REQUEST, SKILLS_FETCH_SUCCESS, SKILLS_FETCH_FAILURE],
8
- task: function (dispatch, getState, _a) {
9
- var services = _a.services;
10
- return services.fetchSkills(token);
11
- }
42
+ export var fetchSkills = function (dispatch, getState, _a) {
43
+ var services = _a.services;
44
+ return __awaiter(void 0, void 0, void 0, function () {
45
+ var action;
46
+ return __generator(this, function (_b) {
47
+ switch (_b.label) {
48
+ case 0:
49
+ action = buildTask({
50
+ types: [SKILLS_FETCH_REQUEST, SKILLS_FETCH_SUCCESS, SKILLS_FETCH_FAILURE],
51
+ task: function () {
52
+ var state = getState();
53
+ var token = get('data.token', state);
54
+ return services.fetchSkills(token);
55
+ }
56
+ });
57
+ return [4 /*yield*/, dispatch(action)];
58
+ case 1:
59
+ _b.sent();
60
+ return [2 /*return*/];
61
+ }
62
+ });
12
63
  });
13
64
  };
@@ -1,13 +1,20 @@
1
- import type { AnyAction } from 'redux';
2
- import type { ThunkAction } from 'redux-thunk';
1
+ import type { Dispatch } from 'redux';
3
2
  import type { StoreState } from '../../reducers';
4
- import type { Options, ProgressionFromAPI, SlideFromAPI } from '../../types/common';
3
+ import type { Options, SlideFromAPI } from '../../types/common';
5
4
  export declare const SLIDE_FETCH_REQUEST: "@@slides/FETCH_REQUEST";
6
5
  export declare const SLIDE_FETCH_SUCCESS: "@@slides/FETCH_SUCCESS";
7
6
  export declare const SLIDE_FETCH_FAILURE: "@@slides/FETCH_FAILURE";
8
- export interface ReceivedSlide extends AnyAction {
7
+ export declare type FetchSlide = {
8
+ type: typeof SLIDE_FETCH_REQUEST;
9
+ meta: {
10
+ slideRef: string;
11
+ };
12
+ };
13
+ export declare type ReceivedSlide = {
9
14
  type: typeof SLIDE_FETCH_SUCCESS;
10
15
  payload: SlideFromAPI;
11
- }
12
- export declare type FetchSlideAction = ThunkAction<Promise<SlideFromAPI>, StoreState, Options, AnyAction>;
13
- export declare const fetchSlide: (progressionFromAPI: ProgressionFromAPI, token: string) => FetchSlideAction;
16
+ meta: {
17
+ slideRef: string;
18
+ };
19
+ };
20
+ export declare const fetchSlide: (slideRef: string) => (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => Promise<void>;
@@ -1,3 +1,39 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
1
37
  import buildTask from '@coorpacademy/redux-task';
2
38
  import get from 'lodash/fp/get';
3
39
  import has from 'lodash/fp/has';
@@ -6,26 +42,42 @@ import { setCurrentSlide } from '../ui/slides';
6
42
  export var SLIDE_FETCH_REQUEST = '@@slides/FETCH_REQUEST';
7
43
  export var SLIDE_FETCH_SUCCESS = '@@slides/FETCH_SUCCESS';
8
44
  export var SLIDE_FETCH_FAILURE = '@@slides/FETCH_FAILURE';
9
- export var fetchSlide = function (progressionFromAPI, token) {
10
- return buildTask({
11
- types: [SLIDE_FETCH_REQUEST, SLIDE_FETCH_SUCCESS, SLIDE_FETCH_FAILURE],
12
- bailout: function (state) {
13
- var slideRef = get('state.nextContent', progressionFromAPI).ref;
14
- return has("data.slide.".concat(slideRef), state);
15
- },
16
- task: function (dispatch, getState, _a) {
17
- var services = _a.services;
18
- var slideRef = get('state.nextContent', progressionFromAPI).ref;
19
- return services.fetchSlide(slideRef, token).then(function (slideFromAPI) {
20
- if (!slideFromAPI)
21
- throw new Error('Slide not found');
22
- var state = getState();
23
- var slides = get('data.progression.state.slides', state);
24
- if (isEmpty(slides)) {
25
- dispatch(setCurrentSlide(slideFromAPI));
45
+ export var fetchSlide = function (slideRef) {
46
+ return function (dispatch, getState, _a) {
47
+ var services = _a.services;
48
+ return __awaiter(void 0, void 0, void 0, function () {
49
+ var action, response, slideFromAPI, state, slides;
50
+ return __generator(this, function (_b) {
51
+ switch (_b.label) {
52
+ case 0:
53
+ action = buildTask({
54
+ types: [SLIDE_FETCH_REQUEST, SLIDE_FETCH_SUCCESS, SLIDE_FETCH_FAILURE],
55
+ bailout: function (state) {
56
+ return has("data.slide.".concat(slideRef), state);
57
+ },
58
+ task: function () {
59
+ var state = getState();
60
+ var token = get('data.token', state);
61
+ return services.fetchSlide(slideRef, token);
62
+ },
63
+ meta: { slideRef: slideRef }
64
+ });
65
+ return [4 /*yield*/, dispatch(action)];
66
+ case 1:
67
+ response = _b.sent();
68
+ if (response.type === SLIDE_FETCH_SUCCESS) {
69
+ slideFromAPI = response.payload;
70
+ if (!slideFromAPI)
71
+ throw new Error('Slide not found');
72
+ state = getState();
73
+ slides = get('data.progression.state.slides', state);
74
+ if (isEmpty(slides)) {
75
+ dispatch(setCurrentSlide(slideFromAPI));
76
+ }
77
+ }
78
+ return [2 /*return*/];
26
79
  }
27
- return slideFromAPI;
28
80
  });
29
- }
30
- });
81
+ });
82
+ };
31
83
  };
@@ -0,0 +1,10 @@
1
+ import type { Dispatch } from 'redux';
2
+ import type { Options } from '../../types/common';
3
+ import type { StoreState } from '../../reducers';
4
+ export declare const POST_ANSWER_REQUEST: "@@answer/POST_REQUEST";
5
+ export declare const POST_ANSWER_SUCCESS: "@@answer/POST_SUCCESS";
6
+ export declare const POST_ANSWER_FAILURE: "@@answer/POST_FAILURE";
7
+ export declare type PostAnswerRequestAction = {
8
+ type: typeof POST_ANSWER_REQUEST;
9
+ };
10
+ export declare const postAnswer: (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => Promise<void>;
@@ -0,0 +1,75 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import buildTask from '@coorpacademy/redux-task';
38
+ import get from 'lodash/fp/get';
39
+ import { fetchSlide } from './fetch-slide';
40
+ export var POST_ANSWER_REQUEST = '@@answer/POST_REQUEST';
41
+ export var POST_ANSWER_SUCCESS = '@@answer/POST_SUCCESS';
42
+ export var POST_ANSWER_FAILURE = '@@answer/POST_FAILURE';
43
+ export var postAnswer = function (dispatch, getState, _a) {
44
+ var services = _a.services;
45
+ return __awaiter(void 0, void 0, void 0, function () {
46
+ var action, response, progression, slideRef;
47
+ return __generator(this, function (_b) {
48
+ switch (_b.label) {
49
+ case 0:
50
+ action = buildTask({
51
+ types: [POST_ANSWER_REQUEST, POST_ANSWER_SUCCESS, POST_ANSWER_FAILURE],
52
+ task: function () {
53
+ var state = getState();
54
+ var token = get('data.token', state);
55
+ var answer = get('ui.answers', state);
56
+ var progressionId = get('data.progression._id', state);
57
+ var skillRef = get('data.progression.content.ref', state);
58
+ return services.postAnswer(skillRef, token, progressionId, answer);
59
+ }
60
+ });
61
+ return [4 /*yield*/, dispatch(action)];
62
+ case 1:
63
+ response = _b.sent();
64
+ if (!(response.type === POST_ANSWER_SUCCESS)) return [3 /*break*/, 3];
65
+ progression = response.payload;
66
+ slideRef = progression.state.nextContent.ref;
67
+ return [4 /*yield*/, dispatch(fetchSlide(slideRef))];
68
+ case 2:
69
+ _b.sent();
70
+ _b.label = 3;
71
+ case 3: return [2 /*return*/];
72
+ }
73
+ });
74
+ });
75
+ };