@coorpacademy/app-review 0.1.14 → 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 +27 -4
- package/es/actions/api/post-progression.d.ts +4 -6
- package/es/actions/api/post-progression.js +13 -9
- 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.js +102 -0
- package/es/actions/index.d.ts +1 -10
- package/es/actions/ui/answers.d.ts +7 -0
- package/es/actions/ui/answers.js +7 -0
- package/es/actions/ui/is-fetching.js +0 -2
- package/es/actions/ui/slides.d.ts +26 -0
- package/es/actions/ui/slides.js +9 -0
- package/es/common/index.d.ts +3 -1
- package/es/common/index.js +3 -1
- package/es/fixtures/qcm-slide.d.ts +2 -2
- package/es/fixtures/temp-fixture.d.ts +2 -2
- package/es/index.js +22 -92
- package/es/reducers/data/index.d.ts +2 -2
- package/es/reducers/data/progression.d.ts +3 -16
- package/es/reducers/data/progression.js +3 -22
- package/es/reducers/data/slides.d.ts +5 -6
- package/es/reducers/data/slides.js +9 -108
- package/es/reducers/data/test/progression.test.js +38 -0
- package/es/reducers/data/test/skills.test.js +12 -0
- package/es/reducers/data/test/slides.test.js +20 -0
- package/es/reducers/data/test/token.test.js +11 -0
- package/es/reducers/index.d.ts +3 -4
- package/es/reducers/ui/answers.d.ts +4 -0
- package/es/reducers/ui/{review-status.js → answers.js} +3 -3
- package/es/reducers/ui/current-slide-ref.d.ts +4 -0
- package/es/reducers/ui/current-slide-ref.js +13 -0
- package/es/reducers/ui/index.d.ts +7 -10
- package/es/reducers/ui/index.js +4 -6
- 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 +14 -4
- package/es/test/util/services.mock.js +46 -4
- package/es/types/common.d.ts +61 -30
- package/es/types/common.js +0 -5
- package/es/types/slides.d.ts +0 -4
- package/{lib/types/views/skills.d.ts → es/views/skills/index.d.ts} +2 -0
- package/es/views/skills/index.js +25 -0
- package/es/views/slides/index.d.ts +79 -0
- package/es/views/slides/index.js +151 -0
- 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/es/views/slides/test/fixtures/free-text.d.ts +3 -0
- package/es/views/slides/test/fixtures/free-text.js +38 -0
- package/es/views/slides/test/fixtures/qcm-drag.d.ts +3 -0
- package/es/views/slides/test/fixtures/qcm-drag.js +108 -0
- package/es/views/slides/test/fixtures/qcm-graphic.d.ts +3 -0
- package/es/views/slides/test/fixtures/qcm-graphic.js +88 -0
- package/es/views/slides/test/fixtures/qcm.d.ts +3 -0
- package/es/{helpers → views/slides}/test/fixtures/qcm.js +37 -27
- package/es/views/slides/test/fixtures/select-template.d.ts +3 -0
- package/es/views/slides/test/fixtures/select-template.js +92 -0
- package/es/views/slides/test/fixtures/slider.d.ts +3 -0
- package/es/views/slides/test/fixtures/slider.js +36 -0
- package/es/views/slides/test/fixtures/text-template.d.ts +3 -0
- package/es/{helpers → views/slides}/test/fixtures/text-template.js +21 -11
- 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 +75 -7
- package/lib/actions/api/post-progression.d.ts +4 -6
- package/lib/actions/api/post-progression.js +63 -10
- 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/index.d.ts +1 -10
- package/lib/actions/ui/answers.d.ts +7 -0
- package/lib/actions/ui/answers.js +9 -0
- package/lib/actions/ui/is-fetching.js +0 -2
- package/lib/actions/ui/slides.d.ts +26 -0
- package/lib/actions/ui/slides.js +9 -0
- package/lib/common/index.d.ts +3 -1
- package/lib/common/index.js +3 -1
- package/lib/fixtures/qcm-slide.d.ts +2 -2
- package/lib/fixtures/temp-fixture.d.ts +2 -2
- package/lib/index.js +33 -94
- package/lib/reducers/data/index.d.ts +2 -2
- package/lib/reducers/data/progression.d.ts +3 -16
- package/lib/reducers/data/progression.js +3 -22
- package/lib/reducers/data/slides.d.ts +5 -6
- package/lib/reducers/data/slides.js +9 -114
- 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 +3 -4
- package/lib/reducers/ui/answers.d.ts +4 -0
- package/lib/reducers/ui/{review-status.js → answers.js} +3 -3
- package/lib/reducers/ui/current-slide-ref.d.ts +4 -0
- package/lib/reducers/ui/current-slide-ref.js +14 -0
- package/lib/reducers/ui/index.d.ts +7 -10
- package/lib/reducers/ui/index.js +4 -6
- 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 +14 -4
- package/lib/test/util/services.mock.js +46 -4
- package/lib/types/common.d.ts +61 -30
- package/lib/types/common.js +0 -5
- package/lib/types/slides.d.ts +0 -4
- package/{es/types/views/skills.d.ts → lib/views/skills/index.d.ts} +2 -0
- package/lib/views/skills/index.js +25 -0
- package/lib/views/slides/index.d.ts +79 -0
- package/lib/views/slides/index.js +155 -0
- 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/lib/views/slides/test/fixtures/free-text.d.ts +3 -0
- package/lib/views/slides/test/fixtures/free-text.js +38 -0
- package/lib/views/slides/test/fixtures/qcm-drag.d.ts +3 -0
- package/lib/views/slides/test/fixtures/qcm-drag.js +108 -0
- package/lib/views/slides/test/fixtures/qcm-graphic.d.ts +3 -0
- package/lib/views/slides/test/fixtures/qcm-graphic.js +88 -0
- package/lib/views/slides/test/fixtures/qcm.d.ts +3 -0
- package/lib/{helpers → views/slides}/test/fixtures/qcm.js +37 -27
- package/lib/views/slides/test/fixtures/select-template.d.ts +3 -0
- package/lib/views/slides/test/fixtures/select-template.js +92 -0
- package/lib/views/slides/test/fixtures/slider.d.ts +3 -0
- package/lib/views/slides/test/fixtures/slider.js +36 -0
- package/lib/views/slides/test/fixtures/text-template.d.ts +3 -0
- package/lib/{helpers → views/slides}/test/fixtures/text-template.js +21 -11
- 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 +4 -3
- package/src/actions/api/fetch-skills.ts +12 -12
- package/src/actions/api/fetch-slide.ts +38 -13
- package/src/actions/api/post-progression.ts +18 -22
- 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/index.ts +1 -10
- package/src/actions/ui/answers.ts +16 -0
- package/src/actions/ui/is-fetching.ts +0 -6
- package/src/actions/ui/slides.ts +35 -0
- package/src/common/index.ts +7 -1
- package/src/fixtures/qcm-slide.ts +2 -2
- package/src/fixtures/temp-fixture.ts +2 -2
- package/src/index.tsx +26 -110
- package/src/reducers/data/index.ts +1 -1
- package/src/reducers/data/progression.ts +5 -40
- package/src/reducers/data/slides.ts +17 -125
- 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/current-slide-ref.ts +19 -0
- package/src/reducers/ui/index.ts +6 -9
- 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 +14 -4
- package/src/test/util/services.mock.ts +46 -4
- package/src/types/common.ts +77 -40
- package/src/types/slides.ts +0 -5
- package/src/views/skills/index.ts +56 -0
- package/src/views/slides/index.ts +251 -0
- 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 +43 -33
- 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 +23 -14
- package/src/{helpers → views/slides}/test/map-api-slide-to-ui.test.ts +22 -20
- package/es/actions/data/slides.d.ts +0 -37
- package/es/actions/data/slides.js +0 -16
- package/es/actions/ui/finished-slides.d.ts +0 -10
- package/es/actions/ui/finished-slides.js +0 -8
- package/es/actions/ui/review-status.d.ts +0 -7
- package/es/actions/ui/review-status.js +0 -7
- package/es/actions/ui/step-items.d.ts +0 -24
- package/es/actions/ui/step-items.js +0 -11
- package/es/helpers/map-api-slide-to-ui.d.ts +0 -8
- package/es/helpers/map-api-slide-to-ui.js +0 -175
- package/es/helpers/test/fixtures/free-text.d.ts +0 -4
- package/es/helpers/test/fixtures/free-text.js +0 -24
- package/es/helpers/test/fixtures/qcm-drag.d.ts +0 -4
- package/es/helpers/test/fixtures/qcm-drag.js +0 -106
- package/es/helpers/test/fixtures/qcm-graphic.d.ts +0 -4
- package/es/helpers/test/fixtures/qcm-graphic.js +0 -70
- package/es/helpers/test/fixtures/qcm.d.ts +0 -4
- package/es/helpers/test/fixtures/select-template.d.ts +0 -4
- package/es/helpers/test/fixtures/select-template.js +0 -88
- package/es/helpers/test/fixtures/slider.d.ts +0 -4
- package/es/helpers/test/fixtures/slider.js +0 -27
- package/es/helpers/test/fixtures/text-template.d.ts +0 -4
- package/es/reducers/ui/finished-slides.d.ts +0 -7
- package/es/reducers/ui/finished-slides.js +0 -33
- package/es/reducers/ui/review-status.d.ts +0 -4
- package/es/reducers/ui/step-items.d.ts +0 -14
- package/es/reducers/ui/step-items.js +0 -74
- package/es/types/ui-progression.d.ts +0 -10
- package/es/types/views/slides.d.ts +0 -60
- package/lib/actions/data/slides.d.ts +0 -37
- package/lib/actions/data/slides.js +0 -16
- package/lib/actions/ui/finished-slides.d.ts +0 -10
- package/lib/actions/ui/finished-slides.js +0 -8
- package/lib/actions/ui/review-status.d.ts +0 -7
- package/lib/actions/ui/review-status.js +0 -7
- package/lib/actions/ui/step-items.d.ts +0 -24
- package/lib/actions/ui/step-items.js +0 -11
- package/lib/helpers/map-api-slide-to-ui.d.ts +0 -8
- package/lib/helpers/map-api-slide-to-ui.js +0 -181
- package/lib/helpers/test/fixtures/free-text.d.ts +0 -4
- package/lib/helpers/test/fixtures/free-text.js +0 -24
- package/lib/helpers/test/fixtures/qcm-drag.d.ts +0 -4
- package/lib/helpers/test/fixtures/qcm-drag.js +0 -106
- package/lib/helpers/test/fixtures/qcm-graphic.d.ts +0 -4
- package/lib/helpers/test/fixtures/qcm-graphic.js +0 -70
- package/lib/helpers/test/fixtures/qcm.d.ts +0 -4
- package/lib/helpers/test/fixtures/select-template.d.ts +0 -4
- package/lib/helpers/test/fixtures/select-template.js +0 -88
- package/lib/helpers/test/fixtures/slider.d.ts +0 -4
- package/lib/helpers/test/fixtures/slider.js +0 -27
- package/lib/helpers/test/fixtures/text-template.d.ts +0 -4
- package/lib/reducers/ui/finished-slides.d.ts +0 -7
- package/lib/reducers/ui/finished-slides.js +0 -45
- package/lib/reducers/ui/review-status.d.ts +0 -4
- package/lib/reducers/ui/step-items.d.ts +0 -14
- package/lib/reducers/ui/step-items.js +0 -86
- package/lib/types/ui-progression.d.ts +0 -10
- package/lib/types/views/slides.d.ts +0 -60
- package/src/actions/data/slides.ts +0 -65
- package/src/actions/ui/finished-slides.ts +0 -21
- package/src/actions/ui/review-status.ts +0 -19
- package/src/actions/ui/step-items.ts +0 -45
- package/src/helpers/map-api-slide-to-ui.ts +0 -253
- package/src/helpers/test/fixtures/free-text.ts +0 -28
- package/src/helpers/test/fixtures/qcm-drag.ts +0 -110
- package/src/helpers/test/fixtures/qcm-graphic.ts +0 -74
- package/src/helpers/test/fixtures/select-template.ts +0 -92
- package/src/helpers/test/fixtures/slider.ts +0 -31
- package/src/reducers/ui/finished-slides.ts +0 -52
- package/src/reducers/ui/review-status.ts +0 -19
- package/src/reducers/ui/step-items.ts +0 -116
- package/src/types/ui-progression.ts +0 -25
- package/src/types/views/skills.ts +0 -27
- package/src/types/views/slides.ts +0 -65
- /package/es/{helpers/test/map-api-slide-to-ui.test.d.ts → actions/api/test/fetch-skills.test.d.ts} +0 -0
- /package/es/{types/ui-progression.js → actions/api/test/fetch-slide.test.d.ts} +0 -0
- /package/es/{types/views/skills.js → actions/api/test/post-progression.test.d.ts} +0 -0
- /package/es/{types/views/slides.js → reducers/data/test/progression.test.d.ts} +0 -0
- /package/{lib/helpers/test/map-api-slide-to-ui.test.d.ts → es/reducers/data/test/skills.test.d.ts} +0 -0
- /package/{lib/types/ui-progression.js → es/reducers/data/test/slides.test.d.ts} +0 -0
- /package/{lib/types/views/skills.js → es/reducers/data/test/token.test.d.ts} +0 -0
- /package/{lib/types/views/slides.js → es/reducers/ui/test/answers.test.d.ts} +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
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 test from 'ava';
|
|
38
|
+
import nock from 'nock';
|
|
39
|
+
import { postAnswer } from '../post-answer';
|
|
40
|
+
var progressionId = '123456789123';
|
|
41
|
+
var skillRef = '_skill-ref';
|
|
42
|
+
var answer = ['Lister vos tâches pour vous libérer l’esprit', 'Vous isoler dans un lieu calme'];
|
|
43
|
+
var result = {
|
|
44
|
+
content: {
|
|
45
|
+
type: 'skill',
|
|
46
|
+
ref: skillRef
|
|
47
|
+
},
|
|
48
|
+
engine: {
|
|
49
|
+
ref: 'review'
|
|
50
|
+
},
|
|
51
|
+
_id: '123456123456',
|
|
52
|
+
state: {
|
|
53
|
+
allAnswers: [
|
|
54
|
+
{
|
|
55
|
+
slideRef: 'sli_NkvrWPFF2',
|
|
56
|
+
isCorrect: true,
|
|
57
|
+
answer: answer
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
isCorrect: true,
|
|
61
|
+
nextContent: {
|
|
62
|
+
type: 'slide',
|
|
63
|
+
ref: 'sli_NJ3m5KtWh'
|
|
64
|
+
},
|
|
65
|
+
pendingSlides: [],
|
|
66
|
+
slides: ['sli_NkvrWPFF2'],
|
|
67
|
+
content: {
|
|
68
|
+
ref: 'sli_NkvrWPFF2',
|
|
69
|
+
type: 'slide'
|
|
70
|
+
},
|
|
71
|
+
step: {
|
|
72
|
+
current: 2
|
|
73
|
+
},
|
|
74
|
+
stars: 4
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
test.before(function () {
|
|
78
|
+
var moocApi = nock('http://localhost:3000');
|
|
79
|
+
moocApi.post("/api/v2/progressions/".concat(progressionId, "/answers")).reply(200, result);
|
|
80
|
+
});
|
|
81
|
+
test.after(function () {
|
|
82
|
+
nock.cleanAll();
|
|
83
|
+
});
|
|
84
|
+
test('should post the answers successfully', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
85
|
+
var token, progression;
|
|
86
|
+
return __generator(this, function (_a) {
|
|
87
|
+
switch (_a.label) {
|
|
88
|
+
case 0:
|
|
89
|
+
token = process.env.API_TEST_TOKEN || '';
|
|
90
|
+
return [4 /*yield*/, postAnswer(skillRef, token, progressionId, answer)];
|
|
91
|
+
case 1:
|
|
92
|
+
progression = _a.sent();
|
|
93
|
+
t.deepEqual(result, progression);
|
|
94
|
+
return [2 /*return*/];
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}); });
|
|
98
|
+
test('should reject bad token', function (t) { return __awaiter(void 0, void 0, void 0, function () {
|
|
99
|
+
var badToken, error;
|
|
100
|
+
return __generator(this, function (_a) {
|
|
101
|
+
switch (_a.label) {
|
|
102
|
+
case 0:
|
|
103
|
+
badToken = 'token is not a jwt';
|
|
104
|
+
return [4 /*yield*/, t.throwsAsync(function () { return postAnswer(skillRef, badToken, progressionId, answer); })];
|
|
105
|
+
case 1:
|
|
106
|
+
error = _a.sent();
|
|
107
|
+
t.is(error === null || error === void 0 ? void 0 : error.message, "Invalid token specified: Cannot read properties of undefined (reading 'replace')");
|
|
108
|
+
return [2 /*return*/];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}); });
|
|
@@ -40,16 +40,26 @@ import { postProgression } from '../post-progression';
|
|
|
40
40
|
var skillRef = '_skill-ref';
|
|
41
41
|
var result = {
|
|
42
42
|
_id: '123456123456',
|
|
43
|
+
content: {
|
|
44
|
+
ref: '_skill-ref',
|
|
45
|
+
type: 'skill'
|
|
46
|
+
},
|
|
47
|
+
engine: {
|
|
48
|
+
ref: 'review'
|
|
49
|
+
},
|
|
43
50
|
state: {
|
|
51
|
+
allAnswers: [],
|
|
44
52
|
isCorrect: true,
|
|
45
|
-
step: {
|
|
46
|
-
current: 1
|
|
47
|
-
},
|
|
48
53
|
nextContent: {
|
|
49
54
|
type: 'slide',
|
|
50
55
|
ref: 'sli_NJ3m5KtWh'
|
|
51
56
|
},
|
|
52
|
-
pendingSlides: []
|
|
57
|
+
pendingSlides: [],
|
|
58
|
+
slides: [],
|
|
59
|
+
step: {
|
|
60
|
+
current: 1
|
|
61
|
+
},
|
|
62
|
+
stars: 0
|
|
53
63
|
}
|
|
54
64
|
};
|
|
55
65
|
test.before(function () {
|
|
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
-
import {
|
|
12
|
+
import { freeTextSlide } from '../../views/slides/test/fixtures/free-text';
|
|
13
13
|
export var services = {
|
|
14
14
|
fetchSkills: function () {
|
|
15
15
|
return Promise.resolve([
|
|
@@ -28,21 +28,63 @@ export var services = {
|
|
|
28
28
|
]);
|
|
29
29
|
},
|
|
30
30
|
fetchSlide: function (ref) {
|
|
31
|
-
return Promise.resolve(__assign(__assign({},
|
|
31
|
+
return Promise.resolve(__assign(__assign({}, freeTextSlide), { universalRef: ref, id: ref }));
|
|
32
32
|
},
|
|
33
33
|
postProgression: function () {
|
|
34
34
|
return Promise.resolve({
|
|
35
35
|
_id: '62b1d1087aa12f00253f40ee',
|
|
36
|
+
content: {
|
|
37
|
+
ref: '_skill-ref',
|
|
38
|
+
type: 'skill'
|
|
39
|
+
},
|
|
40
|
+
engine: {
|
|
41
|
+
ref: 'review'
|
|
42
|
+
},
|
|
36
43
|
state: {
|
|
44
|
+
allAnswers: [],
|
|
45
|
+
isCorrect: true,
|
|
46
|
+
nextContent: {
|
|
47
|
+
ref: 'sli_N1XACJobn',
|
|
48
|
+
type: 'slide'
|
|
49
|
+
},
|
|
37
50
|
pendingSlides: [],
|
|
51
|
+
slides: [],
|
|
38
52
|
step: {
|
|
39
53
|
current: 1
|
|
40
54
|
},
|
|
55
|
+
stars: 0
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
postAnswer: function () {
|
|
60
|
+
return Promise.resolve({
|
|
61
|
+
_id: '62b1d1087aa12f00253f40ee',
|
|
62
|
+
content: {
|
|
63
|
+
ref: '_skill-ref',
|
|
64
|
+
type: 'skill'
|
|
65
|
+
},
|
|
66
|
+
engine: {
|
|
67
|
+
ref: 'review'
|
|
68
|
+
},
|
|
69
|
+
state: {
|
|
70
|
+
allAnswers: [
|
|
71
|
+
{
|
|
72
|
+
slideRef: 'sli_N1XACJobn',
|
|
73
|
+
isCorrect: true,
|
|
74
|
+
answer: ['Le créateur peut fixer un pourcentage pour chaque transaction future']
|
|
75
|
+
}
|
|
76
|
+
],
|
|
41
77
|
isCorrect: true,
|
|
42
78
|
nextContent: {
|
|
43
|
-
ref: '
|
|
79
|
+
ref: 'sli_VkSQroQnx',
|
|
44
80
|
type: 'slide'
|
|
45
|
-
}
|
|
81
|
+
},
|
|
82
|
+
pendingSlides: [],
|
|
83
|
+
slides: ['sli_N1XACJobn'],
|
|
84
|
+
step: {
|
|
85
|
+
current: 2
|
|
86
|
+
},
|
|
87
|
+
stars: 4
|
|
46
88
|
}
|
|
47
89
|
});
|
|
48
90
|
}
|
package/lib/types/common.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SlideIndexes } from '../common';
|
|
2
|
+
import { AnswerUI } from './slides';
|
|
2
3
|
declare type TemplateContextValues = {
|
|
3
4
|
brandTheme?: unknown;
|
|
4
5
|
theme?: unknown;
|
|
@@ -22,21 +23,21 @@ declare type BaseContent = {
|
|
|
22
23
|
media?: unknown;
|
|
23
24
|
choices: ChoiceFromAPI[];
|
|
24
25
|
};
|
|
25
|
-
declare type
|
|
26
|
+
declare type BaseQuestion = {
|
|
26
27
|
header?: string;
|
|
27
28
|
content: BaseContent;
|
|
28
29
|
explanation?: string;
|
|
29
30
|
};
|
|
30
|
-
export declare type QcmQuestion =
|
|
31
|
+
export declare type QcmQuestion = BaseQuestion & {
|
|
31
32
|
type: 'qcm';
|
|
32
33
|
};
|
|
33
|
-
export declare type QcmGraphicQuestion =
|
|
34
|
+
export declare type QcmGraphicQuestion = BaseQuestion & {
|
|
34
35
|
type: 'qcmGraphic';
|
|
35
36
|
};
|
|
36
|
-
export declare type QcmDragQuestion =
|
|
37
|
+
export declare type QcmDragQuestion = BaseQuestion & {
|
|
37
38
|
type: 'qcmDrag';
|
|
38
39
|
};
|
|
39
|
-
export declare type BasicQuestion = Omit<
|
|
40
|
+
export declare type BasicQuestion = Omit<BaseQuestion, 'content'> & {
|
|
40
41
|
type: 'basic';
|
|
41
42
|
content: {
|
|
42
43
|
media?: unknown;
|
|
@@ -45,7 +46,7 @@ export declare type BasicQuestion = Omit<Question, 'content'> & {
|
|
|
45
46
|
id: string;
|
|
46
47
|
};
|
|
47
48
|
};
|
|
48
|
-
export declare type SliderQuestion = Omit<
|
|
49
|
+
export declare type SliderQuestion = Omit<BaseQuestion, 'content'> & {
|
|
49
50
|
content: {
|
|
50
51
|
media?: unknown;
|
|
51
52
|
unitLabel: string;
|
|
@@ -55,34 +56,59 @@ export declare type SliderQuestion = Omit<Question, 'content'> & {
|
|
|
55
56
|
};
|
|
56
57
|
type: 'slider';
|
|
57
58
|
};
|
|
58
|
-
export declare type TemplateQuestion = Omit<
|
|
59
|
+
export declare type TemplateQuestion = Omit<BaseQuestion, 'content'> & {
|
|
59
60
|
content: BaseContent & {
|
|
60
61
|
template: string;
|
|
61
62
|
};
|
|
62
63
|
type: 'template';
|
|
63
64
|
};
|
|
65
|
+
export declare type Question = QcmQuestion | QcmGraphicQuestion | QcmDragQuestion | BasicQuestion | SliderQuestion | TemplateQuestion;
|
|
64
66
|
export declare type SlideFromAPI = {
|
|
65
|
-
question:
|
|
67
|
+
question: Question;
|
|
66
68
|
klf: string;
|
|
67
69
|
universalRef: string;
|
|
68
70
|
tips?: string;
|
|
69
71
|
clue?: string;
|
|
70
72
|
hasClue?: boolean;
|
|
71
|
-
id
|
|
73
|
+
id: string;
|
|
74
|
+
parentContentTitle: {
|
|
75
|
+
title: string;
|
|
76
|
+
type: 'chapter' | 'course';
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
declare type ProgressionAnswerItem = {
|
|
80
|
+
isCorrect: boolean;
|
|
81
|
+
slideRef: string;
|
|
82
|
+
answer: string[];
|
|
83
|
+
};
|
|
84
|
+
export declare type ProgressionState = {
|
|
85
|
+
allAnswers: ProgressionAnswerItem[];
|
|
86
|
+
content?: {
|
|
87
|
+
ref: string;
|
|
88
|
+
type: string;
|
|
89
|
+
};
|
|
90
|
+
isCorrect: boolean;
|
|
91
|
+
nextContent: {
|
|
92
|
+
type: 'success' | 'slide';
|
|
93
|
+
ref: 'successExitNode' | string;
|
|
94
|
+
};
|
|
95
|
+
pendingSlides: string[];
|
|
96
|
+
slides: string[];
|
|
97
|
+
step: {
|
|
98
|
+
current: number;
|
|
99
|
+
};
|
|
100
|
+
stars: number;
|
|
72
101
|
};
|
|
73
102
|
export declare type ProgressionFromAPI = {
|
|
74
103
|
_id: string;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
current: number;
|
|
79
|
-
};
|
|
80
|
-
nextContent: {
|
|
81
|
-
type: 'success' | 'slide';
|
|
82
|
-
ref: 'successExitNode' | string;
|
|
83
|
-
};
|
|
84
|
-
pendingSlides: [];
|
|
104
|
+
content: {
|
|
105
|
+
type: 'skill';
|
|
106
|
+
ref: string;
|
|
85
107
|
};
|
|
108
|
+
engine: {
|
|
109
|
+
ref: 'review';
|
|
110
|
+
};
|
|
111
|
+
state: ProgressionState;
|
|
86
112
|
};
|
|
87
113
|
export declare type Skill = {
|
|
88
114
|
skillRef: string;
|
|
@@ -94,6 +120,7 @@ export declare type Services = {
|
|
|
94
120
|
fetchSkills(token: string): Promise<Skill[]>;
|
|
95
121
|
fetchSlide(slideRef: string, token: string): Promise<SlideFromAPI | void>;
|
|
96
122
|
postProgression(skillRef: string, token: string): Promise<ProgressionFromAPI>;
|
|
123
|
+
postAnswer(skillRef: string, token: string, progressionId: string, answer: string[]): Promise<ProgressionFromAPI>;
|
|
97
124
|
};
|
|
98
125
|
export declare type Options = {
|
|
99
126
|
services: Services;
|
|
@@ -116,23 +143,27 @@ export declare type JWT = {
|
|
|
116
143
|
host: string;
|
|
117
144
|
};
|
|
118
145
|
declare type SlideUIAnimations = 'unstack' | 'restack';
|
|
119
|
-
export declare type
|
|
146
|
+
export declare type NextUISlide = {
|
|
147
|
+
questionText?: string;
|
|
148
|
+
answerUI?: AnswerUI;
|
|
120
149
|
hidden?: boolean;
|
|
121
|
-
position
|
|
150
|
+
position?: number;
|
|
122
151
|
animationType?: SlideUIAnimations;
|
|
123
152
|
isCorrect?: boolean;
|
|
124
153
|
endReview?: boolean;
|
|
125
|
-
nextContent?: Omit<Slide, 'endReview' | 'hidden' | 'position' | 'nextContent'>;
|
|
126
154
|
};
|
|
127
|
-
declare
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
155
|
+
export declare type UISlide = {
|
|
156
|
+
questionText?: string;
|
|
157
|
+
answerUI?: AnswerUI;
|
|
158
|
+
hidden?: boolean;
|
|
159
|
+
position: number;
|
|
160
|
+
animationType?: SlideUIAnimations;
|
|
161
|
+
isCorrect?: boolean;
|
|
162
|
+
endReview?: boolean;
|
|
163
|
+
nextContent?: NextUISlide;
|
|
131
164
|
};
|
|
132
|
-
export declare type IconValue = keyof typeof ICON_VALUES;
|
|
133
165
|
export declare type FinishedSlides = {
|
|
134
|
-
|
|
135
|
-
[key: number]: true;
|
|
166
|
+
[key in SlideIndexes]?: true;
|
|
136
167
|
};
|
|
137
168
|
export declare type WithRequired<T, K extends keyof T> = T & {
|
|
138
169
|
[P in K]-?: T[P];
|
package/lib/types/common.js
CHANGED
package/lib/types/slides.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StoreState } from '../../reducers';
|
|
1
2
|
declare type SkillCard = {
|
|
2
3
|
'aria-label': string;
|
|
3
4
|
skillTitle: string;
|
|
@@ -22,3 +23,4 @@ declare type SkillsProps = NoSkillsProps & {
|
|
|
22
23
|
listSkills: SkillCard[];
|
|
23
24
|
};
|
|
24
25
|
export { SkillsProps };
|
|
26
|
+
export declare const mapStateToSkillsProps: (state: StoreState) => SkillsProps | null;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export var mapStateToSkillsProps = function (state) {
|
|
2
|
+
if (!state.data.skills) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
return {
|
|
6
|
+
title: '@todo title',
|
|
7
|
+
titleNoSkills: '@todo titleNoSkills',
|
|
8
|
+
textNoSkills: '@todo textNoSkills',
|
|
9
|
+
iconSkillAriaLabel: '@todo iconSkillAriaLabel',
|
|
10
|
+
isLoading: false,
|
|
11
|
+
isLoadingAriaLabel: '@todo loading',
|
|
12
|
+
listSkills: state.data.skills.map(function (skill) { return ({
|
|
13
|
+
'aria-label': '',
|
|
14
|
+
isCustom: skill.custom,
|
|
15
|
+
skillTitle: skill.name,
|
|
16
|
+
skillAriaLabel: '@todo skill aria label',
|
|
17
|
+
buttonLabel: '@todo button',
|
|
18
|
+
buttonAriaLabel: '@todo button aria label',
|
|
19
|
+
reviseLabel: '@todo revise',
|
|
20
|
+
reviseAriaLabel: '@todo revise aria label',
|
|
21
|
+
// eslint-disable-next-line no-console
|
|
22
|
+
onClick: function () { return console.log('@todo plug dispatcher select skill'); }
|
|
23
|
+
}); })
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Dispatch } from 'redux';
|
|
2
|
+
import { UISlide } from '../../types/common';
|
|
3
|
+
import { SlideIndexes } from '../../common';
|
|
4
|
+
import { StoreState } from '../../reducers';
|
|
5
|
+
declare const ICON_VALUES: {
|
|
6
|
+
readonly right: "right";
|
|
7
|
+
readonly wrong: "wrong";
|
|
8
|
+
readonly 'no-answer': "no-answer";
|
|
9
|
+
};
|
|
10
|
+
declare type IconValue = keyof typeof ICON_VALUES;
|
|
11
|
+
declare type StepItem = {
|
|
12
|
+
current: boolean;
|
|
13
|
+
icon: IconValue;
|
|
14
|
+
value: string;
|
|
15
|
+
};
|
|
16
|
+
declare type SlidesStack = {
|
|
17
|
+
[key in SlideIndexes]: UISlide;
|
|
18
|
+
};
|
|
19
|
+
export declare type CorrectionPopinProps = {
|
|
20
|
+
klf: {
|
|
21
|
+
label: string;
|
|
22
|
+
onClick: Function;
|
|
23
|
+
tooltip: string;
|
|
24
|
+
};
|
|
25
|
+
information: {
|
|
26
|
+
label: string;
|
|
27
|
+
message: string;
|
|
28
|
+
};
|
|
29
|
+
next: {
|
|
30
|
+
label: string;
|
|
31
|
+
ariaLabel: string;
|
|
32
|
+
};
|
|
33
|
+
successLabel: string;
|
|
34
|
+
failureLabel: string;
|
|
35
|
+
};
|
|
36
|
+
export declare type SlidesViewProps = {
|
|
37
|
+
header: {
|
|
38
|
+
mode: string;
|
|
39
|
+
skillName: string;
|
|
40
|
+
onQuitClick: Function;
|
|
41
|
+
'aria-label'?: string;
|
|
42
|
+
closeButtonAriaLabel: string;
|
|
43
|
+
steps: StepItem[];
|
|
44
|
+
};
|
|
45
|
+
stack: {
|
|
46
|
+
slides: SlidesStack;
|
|
47
|
+
validateButton: {
|
|
48
|
+
label: string;
|
|
49
|
+
disabled: boolean;
|
|
50
|
+
onClick: Function;
|
|
51
|
+
};
|
|
52
|
+
correctionPopinProps?: CorrectionPopinProps;
|
|
53
|
+
endReview: boolean;
|
|
54
|
+
};
|
|
55
|
+
reviewBackgroundAriaLabel?: string;
|
|
56
|
+
congratsProps?: {
|
|
57
|
+
'aria-label'?: string;
|
|
58
|
+
'data-name'?: string;
|
|
59
|
+
animationLottie: unknown;
|
|
60
|
+
title: string;
|
|
61
|
+
cardCongratsStar: unknown;
|
|
62
|
+
cardCongratsRank: unknown;
|
|
63
|
+
buttonRevising: {
|
|
64
|
+
'aria-label'?: string;
|
|
65
|
+
label: string;
|
|
66
|
+
onClick: Function;
|
|
67
|
+
type: string;
|
|
68
|
+
};
|
|
69
|
+
buttonRevisingSkill: {
|
|
70
|
+
'aria-label'?: string;
|
|
71
|
+
label: string;
|
|
72
|
+
onClick: Function;
|
|
73
|
+
type: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export declare const initialState: SlidesStack;
|
|
78
|
+
export declare const mapStateToSlidesProps: (state: StoreState, dispatch: Dispatch) => SlidesViewProps | null;
|
|
79
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
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
|
+
import concat from 'lodash/fp/concat';
|
|
13
|
+
import get from 'lodash/fp/get';
|
|
14
|
+
import getOr from 'lodash/fp/getOr';
|
|
15
|
+
import isEmpty from 'lodash/fp/isEmpty';
|
|
16
|
+
import pipe from 'lodash/fp/pipe';
|
|
17
|
+
import reduce from 'lodash/fp/reduce';
|
|
18
|
+
import set from 'lodash/fp/set';
|
|
19
|
+
import slice from 'lodash/fp/slice';
|
|
20
|
+
import toInteger from 'lodash/fp/toInteger';
|
|
21
|
+
import { mapApiSlideToUi } from './map-api-slide-to-ui';
|
|
22
|
+
var ICON_VALUES = {
|
|
23
|
+
right: 'right',
|
|
24
|
+
wrong: 'wrong',
|
|
25
|
+
'no-answer': 'no-answer'
|
|
26
|
+
};
|
|
27
|
+
export var initialState = {
|
|
28
|
+
'0': {
|
|
29
|
+
hidden: false,
|
|
30
|
+
position: 0
|
|
31
|
+
},
|
|
32
|
+
'1': {
|
|
33
|
+
hidden: false,
|
|
34
|
+
position: 1
|
|
35
|
+
},
|
|
36
|
+
'2': {
|
|
37
|
+
hidden: false,
|
|
38
|
+
position: 2
|
|
39
|
+
},
|
|
40
|
+
'3': {
|
|
41
|
+
hidden: false,
|
|
42
|
+
position: 3
|
|
43
|
+
},
|
|
44
|
+
'4': {
|
|
45
|
+
hidden: false,
|
|
46
|
+
position: 4
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var getProgressionSlidesRef = function (progression) {
|
|
50
|
+
if (progression.state.step.current < 5) {
|
|
51
|
+
var slideRef = progression.state.nextContent.ref;
|
|
52
|
+
return concat([slideRef], progression.state.slides);
|
|
53
|
+
}
|
|
54
|
+
return slice(0, 5, progression.state.slides);
|
|
55
|
+
};
|
|
56
|
+
var buildStackSlides = function (state, dispatch) {
|
|
57
|
+
var currentSlideRef = state.ui.currentSlideRef;
|
|
58
|
+
var progression = state.data.progression;
|
|
59
|
+
if (!currentSlideRef || !progression)
|
|
60
|
+
return initialState;
|
|
61
|
+
var slideRefs = getProgressionSlidesRef(progression);
|
|
62
|
+
// @ts-expect-error typescript does not support capped versions of lodash functions
|
|
63
|
+
var stack = reduce.convert({ cap: false })(function (acc, uiSlide, index) {
|
|
64
|
+
var slideRef = slideRefs[toInteger(index)];
|
|
65
|
+
if (!slideRef)
|
|
66
|
+
return set(index, uiSlide, acc);
|
|
67
|
+
var slideFromAPI = get(slideRef, state.data.slides);
|
|
68
|
+
var answers = state.ui.answers;
|
|
69
|
+
var _a = mapApiSlideToUi(dispatch)(slideFromAPI, answers), questionText = _a.questionText, answerUI = _a.answerUI;
|
|
70
|
+
var parentContentTitle = getOr('', 'parentContentTitle.title', slideFromAPI);
|
|
71
|
+
var parentContentType = getOr('', 'parentContentTitle.type', slideFromAPI);
|
|
72
|
+
var updatedUiSlide = pipe(set(['questionText'], questionText), set(['answerUI'], answerUI), set(['parentContentTitle'], "From \"".concat(parentContentTitle, "\" ").concat(parentContentType)) // TODO translate: -From- .... -Course/chapter-
|
|
73
|
+
// TODO: Set position according to currentSlideRef et slideRefs (or maybe a value on the state ui.slidePositions !!)
|
|
74
|
+
)(uiSlide);
|
|
75
|
+
return set(index, updatedUiSlide, acc);
|
|
76
|
+
}, initialState, initialState);
|
|
77
|
+
return stack;
|
|
78
|
+
};
|
|
79
|
+
var buildStepItems = function (state) {
|
|
80
|
+
var progression = state.data.progression;
|
|
81
|
+
var currentSlideRef = state.ui.currentSlideRef;
|
|
82
|
+
if (!progression)
|
|
83
|
+
return [];
|
|
84
|
+
var defaultProps = [
|
|
85
|
+
{
|
|
86
|
+
icon: 'no-answer',
|
|
87
|
+
current: true,
|
|
88
|
+
value: '1'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
icon: 'no-answer',
|
|
92
|
+
current: false,
|
|
93
|
+
value: '2'
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
icon: 'no-answer',
|
|
97
|
+
current: false,
|
|
98
|
+
value: '3'
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
icon: 'no-answer',
|
|
102
|
+
current: false,
|
|
103
|
+
value: '4'
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
icon: 'no-answer',
|
|
107
|
+
current: false,
|
|
108
|
+
value: '5'
|
|
109
|
+
}
|
|
110
|
+
];
|
|
111
|
+
var allAnswers = progression.state.allAnswers;
|
|
112
|
+
var step = progression.state.step;
|
|
113
|
+
if (isEmpty(allAnswers))
|
|
114
|
+
return defaultProps;
|
|
115
|
+
var steps = defaultProps.map(function (stepItem, index) {
|
|
116
|
+
var givenAnswer = allAnswers[index];
|
|
117
|
+
if (!givenAnswer) {
|
|
118
|
+
return __assign(__assign({}, stepItem), { current: step.current === index + 1 });
|
|
119
|
+
}
|
|
120
|
+
return __assign(__assign({}, stepItem), { icon: givenAnswer.isCorrect ? 'right' : 'wrong', current: givenAnswer.slideRef === currentSlideRef });
|
|
121
|
+
});
|
|
122
|
+
return steps;
|
|
123
|
+
};
|
|
124
|
+
export var mapStateToSlidesProps = function (state, dispatch) {
|
|
125
|
+
if (!state.data.slides) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
header: {
|
|
130
|
+
mode: '__revision_mode',
|
|
131
|
+
skillName: '__agility',
|
|
132
|
+
onQuitClick: function () {
|
|
133
|
+
// eslint-disable-next-line no-console
|
|
134
|
+
console.log('onQuitClick');
|
|
135
|
+
},
|
|
136
|
+
'aria-label': 'aria-header-wrapper',
|
|
137
|
+
closeButtonAriaLabel: 'aria-close-button',
|
|
138
|
+
steps: buildStepItems(state)
|
|
139
|
+
},
|
|
140
|
+
stack: {
|
|
141
|
+
slides: buildStackSlides(state, dispatch),
|
|
142
|
+
validateButton: {
|
|
143
|
+
label: '__validate',
|
|
144
|
+
disabled: true,
|
|
145
|
+
onClick: function () {
|
|
146
|
+
// eslint-disable-next-line no-console
|
|
147
|
+
console.log('TODO: validate question');
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
correctionPopinProps: undefined,
|
|
151
|
+
endReview: false
|
|
152
|
+
},
|
|
153
|
+
congratsProps: undefined
|
|
154
|
+
};
|
|
155
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Dispatch } from 'redux';
|
|
2
|
+
import { AnswerUI } from '../../types/slides';
|
|
3
|
+
import { Question, SlideFromAPI } from '../../types/common';
|
|
4
|
+
export declare const getQuestionType: (question: Question) => Question['type'];
|
|
5
|
+
export declare const mapApiSlideToUi: (dispatch: Dispatch) => (slide: SlideFromAPI, answers: string[]) => {
|
|
6
|
+
questionText: string;
|
|
7
|
+
answerUI: AnswerUI;
|
|
8
|
+
};
|