@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.
Files changed (212) hide show
  1. package/es/actions/api/fetch-skills.d.ts +4 -6
  2. package/es/actions/api/fetch-skills.js +7 -4
  3. package/es/actions/api/fetch-slide.d.ts +14 -7
  4. package/es/actions/api/fetch-slide.js +22 -19
  5. package/es/actions/api/post-progression.d.ts +4 -6
  6. package/es/actions/api/post-progression.js +13 -8
  7. package/es/actions/api/test/create-test-store.d.ts +5 -0
  8. package/es/actions/api/test/create-test-store.js +16 -0
  9. package/es/actions/api/test/fetch-skills.test.js +54 -0
  10. package/es/actions/api/test/fetch-slide.test.js +61 -0
  11. package/es/actions/api/test/post-progression.test.d.ts +1 -0
  12. package/es/actions/api/test/post-progression.test.js +102 -0
  13. package/es/actions/ui/answers.d.ts +7 -0
  14. package/es/actions/ui/answers.js +7 -0
  15. package/es/fixtures/temp-fixture.d.ts +1 -1
  16. package/es/index.js +10 -16
  17. package/es/reducers/data/index.d.ts +1 -1
  18. package/es/reducers/data/slides.d.ts +2 -2
  19. package/es/reducers/data/slides.js +5 -1
  20. package/es/reducers/data/test/progression.test.d.ts +1 -0
  21. package/es/reducers/data/test/progression.test.js +38 -0
  22. package/es/reducers/data/test/skills.test.d.ts +1 -0
  23. package/es/reducers/data/test/skills.test.js +12 -0
  24. package/es/reducers/data/test/slides.test.d.ts +1 -0
  25. package/es/reducers/data/test/slides.test.js +20 -0
  26. package/es/reducers/data/test/token.test.d.ts +1 -0
  27. package/es/reducers/data/test/token.test.js +11 -0
  28. package/es/reducers/index.d.ts +2 -2
  29. package/es/reducers/ui/answers.d.ts +4 -0
  30. package/es/reducers/ui/answers.js +13 -0
  31. package/es/reducers/ui/index.d.ts +4 -4
  32. package/es/reducers/ui/index.js +2 -2
  33. package/es/reducers/ui/test/answers.test.d.ts +1 -0
  34. package/es/reducers/ui/test/answers.test.js +11 -0
  35. package/es/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
  36. package/es/reducers/ui/test/current-slide-ref.test.js +12 -0
  37. package/es/reducers/ui/test/navigation.test.d.ts +1 -0
  38. package/es/reducers/ui/test/navigation.test.js +15 -0
  39. package/es/services/fetch-slide.js +1 -1
  40. package/es/services/index.js +3 -1
  41. package/es/services/post-answer.d.ts +2 -0
  42. package/es/services/post-answer.js +18 -0
  43. package/es/services/test/fetch-slide.test.d.ts +1 -0
  44. package/es/services/test/fetch-slide.test.js +22 -0
  45. package/es/services/test/post-answer.test.d.ts +1 -0
  46. package/es/services/test/post-answer.test.js +57 -0
  47. package/es/services/test/post-progression.test.js +9 -1
  48. package/es/test/util/services.mock.js +37 -7
  49. package/es/types/common.d.ts +22 -8
  50. package/es/views/slides/index.d.ts +78 -2
  51. package/es/views/slides/index.js +70 -4
  52. package/es/views/slides/map-api-slide-to-ui.d.ts +8 -0
  53. package/es/views/slides/map-api-slide-to-ui.js +172 -0
  54. package/{lib/helpers → es/views/slides}/test/fixtures/free-text.d.ts +1 -1
  55. package/es/views/slides/test/fixtures/free-text.js +38 -0
  56. package/es/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +1 -1
  57. package/es/views/slides/test/fixtures/qcm-drag.js +108 -0
  58. package/es/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +1 -1
  59. package/es/views/slides/test/fixtures/qcm-graphic.js +88 -0
  60. package/es/{helpers → views/slides}/test/fixtures/qcm.d.ts +1 -1
  61. package/es/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
  62. package/es/{helpers → views/slides}/test/fixtures/select-template.d.ts +1 -1
  63. package/es/views/slides/test/fixtures/select-template.js +92 -0
  64. package/es/{helpers → views/slides}/test/fixtures/slider.d.ts +1 -1
  65. package/es/views/slides/test/fixtures/slider.js +36 -0
  66. package/es/{helpers → views/slides}/test/fixtures/text-template.d.ts +1 -1
  67. package/es/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
  68. package/es/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
  69. package/es/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
  70. package/lib/actions/api/fetch-skills.d.ts +4 -6
  71. package/lib/actions/api/fetch-skills.js +55 -7
  72. package/lib/actions/api/fetch-slide.d.ts +14 -7
  73. package/lib/actions/api/fetch-slide.js +70 -20
  74. package/lib/actions/api/post-progression.d.ts +4 -6
  75. package/lib/actions/api/post-progression.js +63 -9
  76. package/lib/actions/api/test/create-test-store.d.ts +5 -0
  77. package/lib/actions/api/test/create-test-store.js +18 -0
  78. package/lib/actions/api/test/fetch-skills.test.d.ts +1 -0
  79. package/lib/actions/api/test/fetch-skills.test.js +113 -0
  80. package/lib/actions/api/test/fetch-slide.test.d.ts +1 -0
  81. package/lib/actions/api/test/fetch-slide.test.js +120 -0
  82. package/lib/actions/api/test/post-progression.test.d.ts +1 -0
  83. package/lib/actions/api/test/post-progression.test.js +160 -0
  84. package/lib/actions/ui/answers.d.ts +7 -0
  85. package/lib/actions/ui/answers.js +9 -0
  86. package/lib/fixtures/temp-fixture.d.ts +1 -1
  87. package/lib/index.js +21 -18
  88. package/lib/reducers/data/index.d.ts +1 -1
  89. package/lib/reducers/data/slides.d.ts +2 -2
  90. package/lib/reducers/data/slides.js +5 -1
  91. package/lib/reducers/data/test/progression.test.d.ts +1 -0
  92. package/lib/reducers/data/test/progression.test.js +38 -0
  93. package/lib/reducers/data/test/skills.test.d.ts +1 -0
  94. package/lib/reducers/data/test/skills.test.js +12 -0
  95. package/lib/reducers/data/test/slides.test.d.ts +1 -0
  96. package/lib/reducers/data/test/slides.test.js +20 -0
  97. package/lib/reducers/data/test/token.test.d.ts +1 -0
  98. package/lib/reducers/data/test/token.test.js +11 -0
  99. package/lib/reducers/index.d.ts +2 -2
  100. package/lib/reducers/ui/answers.d.ts +4 -0
  101. package/lib/reducers/ui/answers.js +14 -0
  102. package/lib/reducers/ui/index.d.ts +4 -4
  103. package/lib/reducers/ui/index.js +2 -2
  104. package/lib/reducers/ui/test/answers.test.d.ts +1 -0
  105. package/lib/reducers/ui/test/answers.test.js +11 -0
  106. package/lib/reducers/ui/test/current-slide-ref.test.d.ts +1 -0
  107. package/lib/reducers/ui/test/current-slide-ref.test.js +12 -0
  108. package/lib/reducers/ui/test/navigation.test.d.ts +1 -0
  109. package/lib/reducers/ui/test/navigation.test.js +15 -0
  110. package/lib/services/fetch-slide.js +1 -1
  111. package/lib/services/index.js +3 -1
  112. package/lib/services/post-answer.d.ts +2 -0
  113. package/lib/services/post-answer.js +62 -0
  114. package/lib/services/test/fetch-slide.test.d.ts +1 -0
  115. package/lib/services/test/fetch-slide.test.js +76 -0
  116. package/lib/services/test/post-answer.test.d.ts +1 -0
  117. package/lib/services/test/post-answer.test.js +111 -0
  118. package/lib/services/test/post-progression.test.js +9 -1
  119. package/lib/test/util/services.mock.js +37 -7
  120. package/lib/types/common.d.ts +22 -8
  121. package/lib/views/slides/index.d.ts +78 -2
  122. package/lib/views/slides/index.js +70 -4
  123. package/lib/views/slides/map-api-slide-to-ui.d.ts +8 -0
  124. package/lib/views/slides/map-api-slide-to-ui.js +178 -0
  125. package/{es/helpers → lib/views/slides}/test/fixtures/free-text.d.ts +1 -1
  126. package/lib/views/slides/test/fixtures/free-text.js +38 -0
  127. package/lib/{helpers → views/slides}/test/fixtures/qcm-drag.d.ts +1 -1
  128. package/lib/views/slides/test/fixtures/qcm-drag.js +108 -0
  129. package/lib/{helpers → views/slides}/test/fixtures/qcm-graphic.d.ts +1 -1
  130. package/lib/views/slides/test/fixtures/qcm-graphic.js +88 -0
  131. package/lib/{helpers → views/slides}/test/fixtures/qcm.d.ts +1 -1
  132. package/lib/{helpers → views/slides}/test/fixtures/qcm.js +5 -1
  133. package/lib/{helpers → views/slides}/test/fixtures/select-template.d.ts +1 -1
  134. package/lib/views/slides/test/fixtures/select-template.js +92 -0
  135. package/lib/{helpers → views/slides}/test/fixtures/slider.d.ts +1 -1
  136. package/lib/views/slides/test/fixtures/slider.js +36 -0
  137. package/lib/{helpers → views/slides}/test/fixtures/text-template.d.ts +1 -1
  138. package/lib/{helpers → views/slides}/test/fixtures/text-template.js +5 -1
  139. package/lib/views/slides/test/map-api-slide-to-ui.test.d.ts +1 -0
  140. package/lib/{helpers → views/slides}/test/map-api-slide-to-ui.test.js +19 -9
  141. package/package.json +3 -3
  142. package/src/actions/api/fetch-skills.ts +12 -12
  143. package/src/actions/api/fetch-slide.ts +33 -29
  144. package/src/actions/api/post-progression.ts +18 -21
  145. package/src/actions/api/test/create-test-store.ts +25 -0
  146. package/src/actions/api/test/fetch-skills.test.ts +70 -0
  147. package/src/actions/api/test/fetch-slide.test.ts +77 -0
  148. package/src/actions/api/test/post-progression.test.ts +119 -0
  149. package/src/actions/ui/answers.ts +16 -0
  150. package/src/fixtures/temp-fixture.ts +1 -1
  151. package/src/index.tsx +14 -29
  152. package/src/reducers/data/index.ts +1 -1
  153. package/src/reducers/data/slides.ts +11 -2
  154. package/src/reducers/data/test/progression.test.ts +42 -0
  155. package/src/reducers/data/test/skills.test.ts +14 -0
  156. package/src/reducers/data/test/slides.test.ts +26 -0
  157. package/src/reducers/data/test/token.test.ts +13 -0
  158. package/src/reducers/ui/answers.ts +19 -0
  159. package/src/reducers/ui/index.ts +3 -3
  160. package/src/reducers/ui/test/answers.test.ts +13 -0
  161. package/src/reducers/ui/test/current-slide-ref.test.ts +14 -0
  162. package/src/reducers/ui/test/navigation.test.ts +19 -0
  163. package/src/services/fetch-slide.ts +1 -1
  164. package/src/services/index.ts +3 -1
  165. package/src/services/post-answer.ts +27 -0
  166. package/src/services/test/fetch-slide.test.ts +30 -0
  167. package/src/services/test/post-answer.test.ts +68 -0
  168. package/src/services/test/post-progression.test.ts +9 -1
  169. package/src/test/util/services.mock.ts +37 -7
  170. package/src/types/common.ts +34 -14
  171. package/src/views/slides/index.ts +164 -5
  172. package/src/views/slides/map-api-slide-to-ui.ts +251 -0
  173. package/src/views/slides/test/fixtures/free-text.ts +43 -0
  174. package/src/views/slides/test/fixtures/qcm-drag.ts +111 -0
  175. package/src/views/slides/test/fixtures/qcm-graphic.ts +94 -0
  176. package/src/{helpers → views/slides}/test/fixtures/qcm.ts +6 -2
  177. package/src/views/slides/test/fixtures/select-template.ts +98 -0
  178. package/src/views/slides/test/fixtures/slider.ts +41 -0
  179. package/src/{helpers → views/slides}/test/fixtures/text-template.ts +6 -2
  180. package/src/{helpers → views/slides}/test/map-api-slide-to-ui.test.ts +21 -10
  181. package/es/helpers/map-api-slide-to-ui.d.ts +0 -11
  182. package/es/helpers/map-api-slide-to-ui.js +0 -193
  183. package/es/helpers/test/fixtures/free-text.js +0 -30
  184. package/es/helpers/test/fixtures/qcm-drag.js +0 -112
  185. package/es/helpers/test/fixtures/qcm-graphic.js +0 -76
  186. package/es/helpers/test/fixtures/select-template.js +0 -94
  187. package/es/helpers/test/fixtures/slider.js +0 -33
  188. package/es/reducers/ui/slides.d.ts +0 -9
  189. package/es/reducers/ui/slides.js +0 -42
  190. package/es/types/views/slides.d.ts +0 -74
  191. package/es/types/views/slides.js +0 -6
  192. package/lib/helpers/map-api-slide-to-ui.d.ts +0 -11
  193. package/lib/helpers/map-api-slide-to-ui.js +0 -201
  194. package/lib/helpers/test/fixtures/free-text.js +0 -30
  195. package/lib/helpers/test/fixtures/qcm-drag.js +0 -112
  196. package/lib/helpers/test/fixtures/qcm-graphic.js +0 -76
  197. package/lib/helpers/test/fixtures/select-template.js +0 -94
  198. package/lib/helpers/test/fixtures/slider.js +0 -33
  199. package/lib/reducers/ui/slides.d.ts +0 -9
  200. package/lib/reducers/ui/slides.js +0 -43
  201. package/lib/types/views/slides.d.ts +0 -74
  202. package/lib/types/views/slides.js +0 -6
  203. package/src/helpers/map-api-slide-to-ui.ts +0 -279
  204. package/src/helpers/test/fixtures/free-text.ts +0 -33
  205. package/src/helpers/test/fixtures/qcm-drag.ts +0 -115
  206. package/src/helpers/test/fixtures/qcm-graphic.ts +0 -79
  207. package/src/helpers/test/fixtures/select-template.ts +0 -97
  208. package/src/helpers/test/fixtures/slider.ts +0 -36
  209. package/src/reducers/ui/slides.ts +0 -58
  210. package/src/types/views/slides.ts +0 -90
  211. /package/es/{helpers/test/map-api-slide-to-ui.test.d.ts → actions/api/test/fetch-skills.test.d.ts} +0 -0
  212. /package/{lib/helpers/test/map-api-slide-to-ui.test.d.ts → es/actions/api/test/fetch-slide.test.d.ts} +0 -0
@@ -1,13 +1,11 @@
1
- import type { ThunkAction } from 'redux-thunk';
2
- import { AnyAction } from 'redux';
1
+ import { Dispatch } from 'redux';
3
2
  import type { StoreState } from '../../reducers';
4
3
  import { 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: (token: string) => (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => Promise<void>;
@@ -1,13 +1,61 @@
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
  export var SKILLS_FETCH_REQUEST = '@@skills/FETCH_REQUEST';
3
39
  export var SKILLS_FETCH_SUCCESS = '@@skills/FETCH_SUCCESS';
4
40
  export var SKILLS_FETCH_FAILURE = '@@skills/FETCH_FAILURE';
5
41
  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
- }
12
- });
42
+ return 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 () { return services.fetchSkills(token); }
52
+ });
53
+ return [4 /*yield*/, dispatch(action)];
54
+ case 1:
55
+ _b.sent();
56
+ return [2 /*return*/];
57
+ }
58
+ });
59
+ });
60
+ };
13
61
  };
@@ -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, token: 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,40 @@ 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, token) {
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
+ return services.fetchSlide(slideRef, token);
60
+ },
61
+ meta: { slideRef: slideRef }
62
+ });
63
+ return [4 /*yield*/, dispatch(action)];
64
+ case 1:
65
+ response = _b.sent();
66
+ if (response.type === SLIDE_FETCH_SUCCESS) {
67
+ slideFromAPI = response.payload;
68
+ if (!slideFromAPI)
69
+ throw new Error('Slide not found');
70
+ state = getState();
71
+ slides = get('data.progression.state.slides', state);
72
+ if (isEmpty(slides)) {
73
+ dispatch(setCurrentSlide(slideFromAPI));
74
+ }
75
+ }
76
+ return [2 /*return*/];
26
77
  }
27
- return slideFromAPI;
28
78
  });
29
- }
30
- });
79
+ });
80
+ };
31
81
  };
@@ -1,13 +1,11 @@
1
- import type { AnyAction } from 'redux';
2
- import type { ThunkAction } from 'redux-thunk';
1
+ import type { Dispatch } from 'redux';
3
2
  import { Options, ProgressionFromAPI } from '../../types/common';
4
3
  import type { StoreState } from '../../reducers';
5
4
  export declare const POST_PROGRESSION_REQUEST: "@@progression/POST_REQUEST";
6
5
  export declare const POST_PROGRESSION_SUCCESS: "@@progression/POST_SUCCESS";
7
6
  export declare const POST_PROGRESSION_FAILURE: "@@progression/POST_FAILURE";
8
- export interface ReceiveProgression extends AnyAction {
7
+ export declare type ReceiveProgression = {
9
8
  type: typeof POST_PROGRESSION_SUCCESS;
10
9
  payload: ProgressionFromAPI;
11
- }
12
- export declare type PostProgressionAction = ThunkAction<Promise<ProgressionFromAPI>, StoreState, Options, AnyAction>;
13
- export declare const postProgression: (skillRef: string, token: string) => PostProgressionAction;
10
+ };
11
+ export declare const postProgression: (skillRef: string, token: string) => (dispatch: Dispatch, getState: () => StoreState, { services }: Options) => Promise<void>;
@@ -1,17 +1,71 @@
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 { fetchSlide } from './fetch-slide';
3
39
  export var POST_PROGRESSION_REQUEST = '@@progression/POST_REQUEST';
4
40
  export var POST_PROGRESSION_SUCCESS = '@@progression/POST_SUCCESS';
5
41
  export var POST_PROGRESSION_FAILURE = '@@progression/POST_FAILURE';
6
42
  export var postProgression = function (skillRef, token) {
7
- return buildTask({
8
- types: [POST_PROGRESSION_REQUEST, POST_PROGRESSION_SUCCESS, POST_PROGRESSION_FAILURE],
9
- task: function (dispatch, getState, _a) {
10
- var services = _a.services;
11
- return services.postProgression(skillRef, token).then(function (progression) {
12
- dispatch(fetchSlide(progression, token));
13
- return progression;
43
+ return 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_PROGRESSION_REQUEST, POST_PROGRESSION_SUCCESS, POST_PROGRESSION_FAILURE],
52
+ task: function () {
53
+ return services.postProgression(skillRef, token);
54
+ }
55
+ });
56
+ return [4 /*yield*/, dispatch(action)];
57
+ case 1:
58
+ response = _b.sent();
59
+ if (!(response.type === POST_PROGRESSION_SUCCESS)) return [3 /*break*/, 3];
60
+ progression = response.payload;
61
+ slideRef = progression.state.nextContent.ref;
62
+ return [4 /*yield*/, dispatch(fetchSlide(slideRef, token))];
63
+ case 2:
64
+ _b.sent();
65
+ _b.label = 3;
66
+ case 3: return [2 /*return*/];
67
+ }
14
68
  });
15
- }
16
- });
69
+ });
70
+ };
17
71
  };
@@ -0,0 +1,5 @@
1
+ import type { ExecutionContext } from 'ava';
2
+ import { AnyAction, Store } from 'redux';
3
+ import { StoreState } from '../../../reducers';
4
+ import { Services } from '../../../types/common';
5
+ export declare const createTestStore: (t: ExecutionContext, initialState: StoreState, services: Services, actions: AnyAction[]) => Store;
@@ -0,0 +1,18 @@
1
+ import constant from 'lodash/fp/constant';
2
+ import { applyMiddleware, compose, createStore } from 'redux';
3
+ import thunk from 'redux-thunk';
4
+ import rootReducer from '../../../reducers';
5
+ var assertActionsMiddleware = function (t, ACTIONS) {
6
+ return constant(function (next) { return function (action) {
7
+ var expectedAction = ACTIONS.shift();
8
+ if (!expectedAction)
9
+ throw new Error("Missing {type: \"".concat(action.type, "\"} action"));
10
+ t.deepEqual(action, expectedAction);
11
+ return next(action);
12
+ }; });
13
+ };
14
+ export var createTestStore = function (t, initialState, services, actions) {
15
+ var thunkMiddleware = thunk.withExtraArgument({ services: services });
16
+ var enhancer = compose(applyMiddleware(thunkMiddleware, assertActionsMiddleware(t, actions)));
17
+ return createStore(rootReducer, initialState, enhancer);
18
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,113 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import test from 'ava';
49
+ import { fetchSkills, SKILLS_FETCH_FAILURE, SKILLS_FETCH_REQUEST, SKILLS_FETCH_SUCCESS } from '../fetch-skills';
50
+ import { services as mockedServices } from '../../../test/util/services.mock';
51
+ import { createTestStore } from './create-test-store';
52
+ var initialState = {
53
+ data: {
54
+ progression: null,
55
+ slides: {},
56
+ skills: [],
57
+ token: '1234'
58
+ },
59
+ ui: {
60
+ currentSlideRef: '',
61
+ navigation: [],
62
+ answers: []
63
+ }
64
+ };
65
+ test('should dispatch SKILLS_FETCH_SUCCESS actions when fetchSkills return a list of skills', function (t) { return __awaiter(void 0, void 0, void 0, function () {
66
+ var services, expectedActions, dispatch;
67
+ return __generator(this, function (_a) {
68
+ switch (_a.label) {
69
+ case 0:
70
+ services = __assign(__assign({}, mockedServices), { fetchSkills: function (token) {
71
+ t.is(token, '1234');
72
+ return Promise.resolve([]);
73
+ } });
74
+ expectedActions = [
75
+ { type: SKILLS_FETCH_REQUEST },
76
+ {
77
+ type: SKILLS_FETCH_SUCCESS,
78
+ payload: []
79
+ }
80
+ ];
81
+ dispatch = createTestStore(t, initialState, services, expectedActions).dispatch;
82
+ return [4 /*yield*/, dispatch(fetchSkills('1234'))];
83
+ case 1:
84
+ _a.sent();
85
+ return [2 /*return*/];
86
+ }
87
+ });
88
+ }); });
89
+ test('should dispatch SKILLS_FETCH_FAILURE action when fetchSkills fails', function (t) { return __awaiter(void 0, void 0, void 0, function () {
90
+ var services, expectedActions, dispatch;
91
+ return __generator(this, function (_a) {
92
+ switch (_a.label) {
93
+ case 0:
94
+ services = __assign(__assign({}, mockedServices), { fetchSkills: function (token) {
95
+ t.is(token, '1234');
96
+ return Promise.reject(new Error('unexpected'));
97
+ } });
98
+ expectedActions = [
99
+ { type: SKILLS_FETCH_REQUEST },
100
+ {
101
+ type: SKILLS_FETCH_FAILURE,
102
+ payload: new Error('unexpected'),
103
+ error: true
104
+ }
105
+ ];
106
+ dispatch = createTestStore(t, initialState, services, expectedActions).dispatch;
107
+ return [4 /*yield*/, dispatch(fetchSkills('1234'))];
108
+ case 1:
109
+ _a.sent();
110
+ return [2 /*return*/];
111
+ }
112
+ });
113
+ }); });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,120 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import test from 'ava';
49
+ import { fetchSlide, SLIDE_FETCH_FAILURE, SLIDE_FETCH_REQUEST, SLIDE_FETCH_SUCCESS } from '../fetch-slide';
50
+ import { freeTextSlide } from '../../../views/slides/test/fixtures/free-text';
51
+ import { services as mockedServices } from '../../../test/util/services.mock';
52
+ import { SET_CURRENT_SLIDE } from '../../ui/slides';
53
+ import { createTestStore } from './create-test-store';
54
+ var initialState = {
55
+ data: {
56
+ progression: null,
57
+ slides: {},
58
+ skills: [],
59
+ token: '1234'
60
+ },
61
+ ui: {
62
+ currentSlideRef: '',
63
+ navigation: [],
64
+ answers: []
65
+ }
66
+ };
67
+ test('should dispatch FETCH_SUCCESS and SET_CURRENT_SLIDE actions when fetchSlide return a slide', function (t) { return __awaiter(void 0, void 0, void 0, function () {
68
+ var services, expectedActions, dispatch;
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0:
72
+ services = __assign(__assign({}, mockedServices), { fetchSlide: function (slideRef, token) {
73
+ t.is(token, '1234');
74
+ t.is(slideRef, 'sli_VJYjJnJhg');
75
+ return Promise.resolve(freeTextSlide);
76
+ } });
77
+ expectedActions = [
78
+ { type: SLIDE_FETCH_REQUEST, meta: { slideRef: 'sli_VJYjJnJhg' } },
79
+ {
80
+ type: SLIDE_FETCH_SUCCESS,
81
+ meta: { slideRef: 'sli_VJYjJnJhg' },
82
+ payload: freeTextSlide
83
+ },
84
+ { type: SET_CURRENT_SLIDE, payload: freeTextSlide }
85
+ ];
86
+ dispatch = createTestStore(t, initialState, services, expectedActions).dispatch;
87
+ return [4 /*yield*/, dispatch(fetchSlide('sli_VJYjJnJhg', '1234'))];
88
+ case 1:
89
+ _a.sent();
90
+ return [2 /*return*/];
91
+ }
92
+ });
93
+ }); });
94
+ test('should dispatch SLIDE_FETCH_FAILURE action when fetchSlide fails', function (t) { return __awaiter(void 0, void 0, void 0, function () {
95
+ var services, expectedActions, dispatch;
96
+ return __generator(this, function (_a) {
97
+ switch (_a.label) {
98
+ case 0:
99
+ services = __assign(__assign({}, mockedServices), { fetchSlide: function (slideRef, token) {
100
+ t.is(token, '1234');
101
+ t.is(slideRef, 'slide_ref');
102
+ return Promise.reject(new Error('error'));
103
+ } });
104
+ expectedActions = [
105
+ { type: SLIDE_FETCH_REQUEST, meta: { slideRef: 'slide_ref' } },
106
+ {
107
+ type: SLIDE_FETCH_FAILURE,
108
+ meta: { slideRef: 'slide_ref' },
109
+ payload: new Error('error'),
110
+ error: true
111
+ }
112
+ ];
113
+ dispatch = createTestStore(t, initialState, services, expectedActions).dispatch;
114
+ return [4 /*yield*/, dispatch(fetchSlide('slide_ref', '1234'))];
115
+ case 1:
116
+ _a.sent();
117
+ return [2 /*return*/];
118
+ }
119
+ });
120
+ }); });
@@ -0,0 +1 @@
1
+ export {};