@coorpacademy/app-review 0.1.7 → 0.1.9

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 (202) hide show
  1. package/es/actions/api/fetch-skills.d.ts +13 -0
  2. package/es/actions/api/fetch-skills.js +8 -0
  3. package/es/actions/api/fetch-slide.d.ts +13 -0
  4. package/es/actions/api/fetch-slide.js +8 -0
  5. package/es/actions/api/post-progression.d.ts +13 -0
  6. package/es/actions/api/post-progression.js +15 -0
  7. package/es/actions/data/slides.d.ts +3 -24
  8. package/es/actions/data/slides.js +0 -11
  9. package/es/actions/index.d.ts +5 -4
  10. package/es/actions/ui/navigation.d.ts +0 -1
  11. package/es/actions/ui/navigation.js +0 -4
  12. package/es/actions/ui/step-items.d.ts +2 -8
  13. package/es/actions/ui/step-items.js +0 -6
  14. package/es/configure-store.d.ts +3 -26
  15. package/es/configure-store.js +4 -5
  16. package/es/fixtures/qcm-slide.d.ts +2 -2
  17. package/es/index.d.ts +1 -1
  18. package/es/index.js +40 -26
  19. package/es/reducers/data/index.d.ts +16 -5
  20. package/es/reducers/data/progression.d.ts +1 -2
  21. package/es/reducers/data/progression.js +4 -7
  22. package/es/reducers/data/skills.d.ts +4 -5
  23. package/es/reducers/data/skills.js +3 -6
  24. package/es/reducers/data/slides.d.ts +2 -1
  25. package/es/reducers/data/slides.js +3 -3
  26. package/es/reducers/data/token.d.ts +0 -1
  27. package/es/reducers/data/token.js +1 -5
  28. package/es/reducers/index.d.ts +9 -3
  29. package/es/reducers/ui/finished-slides.d.ts +0 -1
  30. package/es/reducers/ui/finished-slides.js +1 -3
  31. package/es/reducers/ui/index.d.ts +14 -4
  32. package/es/reducers/ui/navigation.d.ts +0 -1
  33. package/es/reducers/ui/navigation.js +1 -3
  34. package/es/reducers/ui/review-status.d.ts +0 -1
  35. package/es/reducers/ui/review-status.js +1 -4
  36. package/es/reducers/ui/step-items.d.ts +5 -5
  37. package/es/reducers/ui/step-items.js +0 -1
  38. package/es/services/fetch-skills.d.ts +2 -8
  39. package/es/services/fetch-skills.js +2 -14
  40. package/es/services/fetch-slide.d.ts +2 -8
  41. package/es/services/fetch-slide.js +9 -24
  42. package/es/services/index.d.ts +2 -0
  43. package/es/services/index.js +8 -0
  44. package/es/services/post-progression.d.ts +2 -8
  45. package/es/services/post-progression.js +2 -14
  46. package/es/services/test/fetch-skills.test.js +29 -0
  47. package/es/services/test/post-progression.test.js +35 -0
  48. package/es/{index.test.js → test/index.test.js} +15 -4
  49. package/es/test/util/services.mock.d.ts +2 -0
  50. package/es/test/util/services.mock.js +68 -0
  51. package/es/types/common.d.ts +58 -0
  52. package/es/types/common.js +5 -0
  53. package/es/types/slides.d.ts +1 -1
  54. package/es/types/views/slides.d.ts +1 -1
  55. package/lib/actions/api/fetch-skills.d.ts +13 -0
  56. package/lib/actions/api/fetch-skills.js +13 -0
  57. package/lib/actions/api/fetch-slide.d.ts +13 -0
  58. package/lib/actions/api/fetch-slide.js +13 -0
  59. package/lib/actions/api/post-progression.d.ts +13 -0
  60. package/lib/actions/api/post-progression.js +18 -0
  61. package/lib/actions/data/slides.d.ts +3 -24
  62. package/lib/actions/data/slides.js +0 -11
  63. package/lib/actions/index.d.ts +5 -4
  64. package/lib/actions/ui/navigation.d.ts +0 -1
  65. package/lib/actions/ui/navigation.js +0 -4
  66. package/lib/actions/ui/step-items.d.ts +2 -8
  67. package/lib/actions/ui/step-items.js +0 -6
  68. package/lib/configure-store.d.ts +3 -26
  69. package/lib/configure-store.js +4 -5
  70. package/lib/fixtures/qcm-slide.d.ts +2 -2
  71. package/lib/index.d.ts +1 -1
  72. package/lib/index.js +40 -70
  73. package/lib/reducers/data/index.d.ts +16 -5
  74. package/lib/reducers/data/progression.d.ts +1 -2
  75. package/lib/reducers/data/progression.js +4 -7
  76. package/lib/reducers/data/skills.d.ts +4 -5
  77. package/lib/reducers/data/skills.js +3 -6
  78. package/lib/reducers/data/slides.d.ts +2 -1
  79. package/lib/reducers/data/slides.js +3 -3
  80. package/lib/reducers/data/token.d.ts +0 -1
  81. package/lib/reducers/data/token.js +1 -5
  82. package/lib/reducers/index.d.ts +9 -3
  83. package/lib/reducers/ui/finished-slides.d.ts +0 -1
  84. package/lib/reducers/ui/finished-slides.js +1 -3
  85. package/lib/reducers/ui/index.d.ts +14 -4
  86. package/lib/reducers/ui/navigation.d.ts +0 -1
  87. package/lib/reducers/ui/navigation.js +1 -3
  88. package/lib/reducers/ui/review-status.d.ts +0 -1
  89. package/lib/reducers/ui/review-status.js +1 -4
  90. package/lib/reducers/ui/step-items.d.ts +5 -5
  91. package/lib/reducers/ui/step-items.js +0 -1
  92. package/lib/services/fetch-skills.d.ts +2 -8
  93. package/lib/services/fetch-skills.js +3 -15
  94. package/lib/services/fetch-slide.d.ts +2 -8
  95. package/lib/services/fetch-slide.js +18 -25
  96. package/lib/services/index.d.ts +2 -0
  97. package/lib/services/index.js +8 -0
  98. package/lib/services/post-progression.d.ts +2 -8
  99. package/lib/services/post-progression.js +3 -15
  100. package/lib/services/{fetch-skills.test.js → test/fetch-skills.test.js} +23 -16
  101. package/lib/services/{post-progression.test.js → test/post-progression.test.js} +28 -23
  102. package/lib/{index.test.js → test/index.test.js} +20 -10
  103. package/lib/test/util/services.mock.d.ts +2 -0
  104. package/lib/test/util/services.mock.js +68 -0
  105. package/lib/types/common.d.ts +58 -0
  106. package/lib/types/common.js +5 -0
  107. package/lib/types/slides.d.ts +1 -1
  108. package/lib/types/views/slides.d.ts +1 -1
  109. package/package.json +5 -4
  110. package/src/actions/api/fetch-skills.ts +24 -0
  111. package/src/actions/api/fetch-slide.ts +24 -0
  112. package/src/actions/api/post-progression.ts +36 -0
  113. package/src/actions/data/slides.ts +3 -35
  114. package/src/actions/index.ts +5 -11
  115. package/src/actions/ui/navigation.ts +0 -5
  116. package/src/actions/ui/step-items.ts +2 -14
  117. package/src/configure-store.ts +6 -37
  118. package/src/fixtures/qcm-slide.ts +2 -2
  119. package/src/index.tsx +47 -38
  120. package/src/reducers/data/index.ts +12 -4
  121. package/src/reducers/data/progression.ts +5 -15
  122. package/src/reducers/data/skills.ts +5 -10
  123. package/src/reducers/data/slides.ts +4 -8
  124. package/src/reducers/data/token.ts +1 -11
  125. package/src/reducers/index.ts +7 -2
  126. package/src/reducers/ui/finished-slides.ts +1 -7
  127. package/src/reducers/ui/index.ts +11 -4
  128. package/src/reducers/ui/navigation.ts +1 -6
  129. package/src/reducers/ui/review-status.ts +1 -8
  130. package/src/reducers/ui/step-items.ts +5 -14
  131. package/src/services/fetch-skills.ts +4 -29
  132. package/src/services/fetch-slide.ts +10 -38
  133. package/src/services/index.ts +10 -0
  134. package/src/services/post-progression.ts +6 -28
  135. package/src/services/test/fetch-skills.test.ts +39 -0
  136. package/src/services/test/post-progression.test.ts +45 -0
  137. package/src/{index.test.tsx → test/index.test.tsx} +13 -5
  138. package/src/test/util/services.mock.ts +70 -0
  139. package/src/types/common.ts +70 -0
  140. package/src/types/globals.d.ts +1 -5
  141. package/src/types/slides.ts +1 -1
  142. package/src/types/views/slides.ts +1 -1
  143. package/es/actions/data/progression.d.ts +0 -30
  144. package/es/actions/data/progression.js +0 -12
  145. package/es/actions/data/skills.d.ts +0 -13
  146. package/es/actions/data/skills.js +0 -10
  147. package/es/middlewares/on-receive-progression.d.ts +0 -6
  148. package/es/middlewares/on-receive-progression.js +0 -22
  149. package/es/middlewares/on-receive-progression.test.d.ts +0 -1
  150. package/es/middlewares/on-receive-progression.test.js +0 -43
  151. package/es/middlewares/on-start-app.d.ts +0 -5
  152. package/es/middlewares/on-start-app.js +0 -37
  153. package/es/middlewares/on-start-app.test.d.ts +0 -1
  154. package/es/middlewares/on-start-app.test.js +0 -53
  155. package/es/services/fetch-skills.mock.d.ts +0 -3
  156. package/es/services/fetch-skills.mock.js +0 -17
  157. package/es/services/fetch-skills.test.js +0 -22
  158. package/es/services/post-progression.mock.d.ts +0 -5
  159. package/es/services/post-progression.mock.js +0 -31
  160. package/es/services/post-progression.test.js +0 -30
  161. package/es/services/tools/fetch.mocks.d.ts +0 -8
  162. package/es/services/tools/fetch.mocks.js +0 -13
  163. package/es/types/skills.d.ts +0 -7
  164. package/es/types/skills.js +0 -1
  165. package/lib/actions/data/progression.d.ts +0 -30
  166. package/lib/actions/data/progression.js +0 -12
  167. package/lib/actions/data/skills.d.ts +0 -13
  168. package/lib/actions/data/skills.js +0 -10
  169. package/lib/middlewares/on-receive-progression.d.ts +0 -6
  170. package/lib/middlewares/on-receive-progression.js +0 -27
  171. package/lib/middlewares/on-receive-progression.test.d.ts +0 -1
  172. package/lib/middlewares/on-receive-progression.test.js +0 -88
  173. package/lib/middlewares/on-start-app.d.ts +0 -5
  174. package/lib/middlewares/on-start-app.js +0 -42
  175. package/lib/middlewares/on-start-app.test.d.ts +0 -1
  176. package/lib/middlewares/on-start-app.test.js +0 -98
  177. package/lib/services/fetch-skills.mock.d.ts +0 -3
  178. package/lib/services/fetch-skills.mock.js +0 -17
  179. package/lib/services/post-progression.mock.d.ts +0 -5
  180. package/lib/services/post-progression.mock.js +0 -31
  181. package/lib/services/tools/fetch.mocks.d.ts +0 -8
  182. package/lib/services/tools/fetch.mocks.js +0 -35
  183. package/lib/types/skills.d.ts +0 -7
  184. package/lib/types/skills.js +0 -1
  185. package/src/actions/data/progression.ts +0 -50
  186. package/src/actions/data/skills.ts +0 -24
  187. package/src/middlewares/on-receive-progression.test.ts +0 -60
  188. package/src/middlewares/on-receive-progression.ts +0 -42
  189. package/src/middlewares/on-start-app.test.ts +0 -68
  190. package/src/middlewares/on-start-app.ts +0 -50
  191. package/src/services/fetch-skills.mock.ts +0 -21
  192. package/src/services/fetch-skills.test.ts +0 -32
  193. package/src/services/post-progression.mock.ts +0 -35
  194. package/src/services/post-progression.test.ts +0 -41
  195. package/src/services/tools/fetch.mocks.ts +0 -41
  196. package/src/types/skills.ts +0 -8
  197. /package/es/services/{fetch-skills.test.d.ts → test/fetch-skills.test.d.ts} +0 -0
  198. /package/es/services/{post-progression.test.d.ts → test/post-progression.test.d.ts} +0 -0
  199. /package/es/{index.test.d.ts → test/index.test.d.ts} +0 -0
  200. /package/lib/services/{fetch-skills.test.d.ts → test/fetch-skills.test.d.ts} +0 -0
  201. /package/lib/services/{post-progression.test.d.ts → test/post-progression.test.d.ts} +0 -0
  202. /package/lib/{index.test.d.ts → test/index.test.d.ts} +0 -0
@@ -0,0 +1,13 @@
1
+ import type { ThunkAction } from 'redux-thunk';
2
+ import { AnyAction } from 'redux';
3
+ import type { StoreState } from '../../reducers';
4
+ import { Options, Skill } from '../../types/common';
5
+ export declare const SKILLS_FETCH_REQUEST: "@@skills/FETCH_REQUEST";
6
+ export declare const SKILLS_FETCH_SUCCESS: "@@skills/FETCH_SUCCESS";
7
+ export declare const SKILLS_FETCH_FAILURE: "@@skills/FETCH_FAILURE";
8
+ export interface ReceivedSkills extends AnyAction {
9
+ type: '@@skills/FETCH_SUCCESS';
10
+ payload: Skill[];
11
+ }
12
+ export declare type FetchSkillsAction = ThunkAction<Promise<void>, StoreState, Options, AnyAction>;
13
+ export declare const fetchSkills: (token: string) => FetchSkillsAction;
@@ -0,0 +1,8 @@
1
+ import buildTask from '@coorpacademy/redux-task';
2
+ export const SKILLS_FETCH_REQUEST = '@@skills/FETCH_REQUEST';
3
+ export const SKILLS_FETCH_SUCCESS = '@@skills/FETCH_SUCCESS';
4
+ export const SKILLS_FETCH_FAILURE = '@@skills/FETCH_FAILURE';
5
+ export const fetchSkills = (token) => buildTask({
6
+ types: [SKILLS_FETCH_REQUEST, SKILLS_FETCH_SUCCESS, SKILLS_FETCH_FAILURE],
7
+ task: (dispatch, getState, { services }) => services.fetchSkills(token)
8
+ });
@@ -0,0 +1,13 @@
1
+ import type { AnyAction } from 'redux';
2
+ import type { ThunkAction } from 'redux-thunk';
3
+ import type { StoreState } from '../../reducers';
4
+ import { Options, SlideFromAPI } from '../../types/common';
5
+ export declare const SLIDE_FETCH_REQUEST: "@@slides/FETCH_REQUEST";
6
+ export declare const SLIDE_FETCH_SUCCESS: "@@slides/FETCH_SUCCESS";
7
+ export declare const SLIDE_FETCH_FAILURE: "@@slides/FETCH_FAILURE";
8
+ export interface ReceivedSlide extends AnyAction {
9
+ type: typeof SLIDE_FETCH_SUCCESS;
10
+ payload: SlideFromAPI;
11
+ }
12
+ export declare type FetchSlideAction = ThunkAction<Promise<void>, StoreState, Options, AnyAction>;
13
+ export declare const fetchSlide: (slideRef: string, token: string) => FetchSlideAction;
@@ -0,0 +1,8 @@
1
+ import buildTask from '@coorpacademy/redux-task';
2
+ export const SLIDE_FETCH_REQUEST = '@@slides/FETCH_REQUEST';
3
+ export const SLIDE_FETCH_SUCCESS = '@@slides/FETCH_SUCCESS';
4
+ export const SLIDE_FETCH_FAILURE = '@@slides/FETCH_FAILURE';
5
+ export const fetchSlide = (slideRef, token) => buildTask({
6
+ types: [SLIDE_FETCH_REQUEST, SLIDE_FETCH_SUCCESS, SLIDE_FETCH_FAILURE],
7
+ task: (dispatch, getState, { services }) => services.fetchSlide(slideRef, token)
8
+ });
@@ -0,0 +1,13 @@
1
+ import type { AnyAction } from 'redux';
2
+ import type { ThunkAction } from 'redux-thunk';
3
+ import { Options, ProgressionFromAPI } from '../../types/common';
4
+ import type { StoreState } from '../../reducers';
5
+ export declare const POST_PROGRESSION_REQUEST: "@@progression/POST_REQUEST";
6
+ export declare const POST_PROGRESSION_SUCCESS: "@@progression/POST_SUCCESS";
7
+ export declare const POST_PROGRESSION_FAILURE: "@@progression/POST_FAILURE";
8
+ export interface ReceiveProgression extends AnyAction {
9
+ type: typeof POST_PROGRESSION_SUCCESS;
10
+ payload: ProgressionFromAPI;
11
+ }
12
+ export declare type PostProgressionAction = ThunkAction<Promise<ProgressionFromAPI>, StoreState, Options, AnyAction>;
13
+ export declare const postProgression: (skillRef: string, token: string) => PostProgressionAction;
@@ -0,0 +1,15 @@
1
+ import buildTask from '@coorpacademy/redux-task';
2
+ import { fetchSlide } from './fetch-slide';
3
+ export const POST_PROGRESSION_REQUEST = '@@progression/POST_REQUEST';
4
+ export const POST_PROGRESSION_SUCCESS = '@@progression/POST_SUCCESS';
5
+ export const POST_PROGRESSION_FAILURE = '@@progression/POST_FAILURE';
6
+ export const postProgression = (skillRef, token) => buildTask({
7
+ types: [POST_PROGRESSION_REQUEST, POST_PROGRESSION_SUCCESS, POST_PROGRESSION_FAILURE],
8
+ task: (dispatch, getState, { services }) => {
9
+ return services.postProgression(skillRef, token).then((progression) => {
10
+ const { ref } = progression.state.nextContent;
11
+ dispatch(fetchSlide(ref, token));
12
+ return progression;
13
+ });
14
+ }
15
+ });
@@ -1,10 +1,8 @@
1
- import { Slide as UISlide } from '../../types/slides';
2
- export declare const STORE_FIRST_SLIDE = "@@slide/STORE_FIRST_SLIDE";
1
+ import { UISlide } from '../../types/slides';
2
+ import { ReceivedSlide } from '../api/fetch-slide';
3
3
  export declare const UPDATE_SLIDES_ON_VALIDATION = "@@slide/UPDATE_SLIDES_ON_VALIDATION";
4
4
  export declare const UPDATE_SLIDES_ON_NEXT = "@@slide/UPDATE_SLIDES_ON_NEXT";
5
5
  export declare const VALIDATE_SLIDE = "@@slide/VALIDATE";
6
- export declare const FETCH_NEXT_CONTENT = "@@slide/FETCH_NEXT_CONTENT";
7
- export declare const ERROR_FETCHING_SLIDE = "@@data/slide/ERROR_FETCHING_SLIDE";
8
6
  declare type SlideUIAnimations = 'unstack' | 'restack';
9
7
  export declare type Slide = UISlide & {
10
8
  hidden?: boolean;
@@ -14,15 +12,6 @@ export declare type Slide = UISlide & {
14
12
  endReview?: boolean;
15
13
  nextContent?: Omit<Slide, 'endReview' | 'hidden' | 'position' | 'nextContent'>;
16
14
  };
17
- export declare type SlideFromAPI = {
18
- question: {
19
- content: {
20
- choices: Record<string, unknown>[];
21
- };
22
- };
23
- klf: string;
24
- universalRef: string;
25
- };
26
15
  export declare type ValidationPayload = {
27
16
  slideNumber: number;
28
17
  newSlideContent: Slide;
@@ -30,10 +19,6 @@ export declare type ValidationPayload = {
30
19
  nextContent: Slide;
31
20
  };
32
21
  export declare type OnNextPayload = Omit<ValidationPayload, 'nextContent'>;
33
- export declare type StoreFirstSlide = {
34
- type: typeof STORE_FIRST_SLIDE;
35
- payload: SlideFromAPI;
36
- };
37
22
  export declare type UpdateSlidesOnValidation = {
38
23
  type: typeof UPDATE_SLIDES_ON_VALIDATION;
39
24
  payload: ValidationPayload;
@@ -45,14 +30,8 @@ export declare type UpdateSlidesOnNext = {
45
30
  export declare type ValidateSlide = {
46
31
  type: typeof VALIDATE_SLIDE;
47
32
  };
48
- export declare type ErrorFetchingSlide = {
49
- type: typeof ERROR_FETCHING_SLIDE;
50
- payload: Error;
51
- };
52
- export declare type SlidesAction = StoreFirstSlide | UpdateSlidesOnValidation | UpdateSlidesOnNext;
53
- export declare const storeFirstSlide: (slide: SlideFromAPI) => StoreFirstSlide;
33
+ export declare type SlidesAction = ReceivedSlide | UpdateSlidesOnValidation | UpdateSlidesOnNext;
54
34
  export declare const updateSlidesOnValidation: (payload: ValidationPayload) => UpdateSlidesOnValidation;
55
35
  export declare const updateSlidesOnNext: (payload: OnNextPayload) => UpdateSlidesOnNext;
56
36
  export declare const validateSlide: () => ValidateSlide;
57
- export declare const errorFetchingSlide: (error: Error) => ErrorFetchingSlide;
58
37
  export {};
@@ -1,15 +1,8 @@
1
1
  // -----------------------------------------------------------------------------
2
- export const STORE_FIRST_SLIDE = '@@slide/STORE_FIRST_SLIDE';
3
2
  export const UPDATE_SLIDES_ON_VALIDATION = '@@slide/UPDATE_SLIDES_ON_VALIDATION';
4
3
  export const UPDATE_SLIDES_ON_NEXT = '@@slide/UPDATE_SLIDES_ON_NEXT';
5
4
  export const VALIDATE_SLIDE = '@@slide/VALIDATE';
6
- export const FETCH_NEXT_CONTENT = '@@slide/FETCH_NEXT_CONTENT';
7
- export const ERROR_FETCHING_SLIDE = '@@data/slide/ERROR_FETCHING_SLIDE';
8
5
  // -----------------------------------------------------------------------------
9
- export const storeFirstSlide = (slide) => ({
10
- type: STORE_FIRST_SLIDE,
11
- payload: slide
12
- });
13
6
  export const updateSlidesOnValidation = (payload) => ({
14
7
  type: UPDATE_SLIDES_ON_VALIDATION,
15
8
  payload
@@ -21,7 +14,3 @@ export const updateSlidesOnNext = (payload) => ({
21
14
  export const validateSlide = () => ({
22
15
  type: VALIDATE_SLIDE
23
16
  });
24
- export const errorFetchingSlide = (error) => ({
25
- type: ERROR_FETCHING_SLIDE,
26
- payload: error
27
- });
@@ -1,12 +1,13 @@
1
- import { StoreFirstSlide, updateSlidesOnValidation, updateSlidesOnNext, validateSlide } from './data/slides';
2
- import { ErrorFetchingSkills, ReceivedSkills } from './data/skills';
1
+ import { updateSlidesOnValidation, updateSlidesOnNext, validateSlide } from './data/slides';
3
2
  import { StoreToken } from './data/token';
4
3
  import { updateFinishedSlides } from './ui/finished-slides';
5
4
  import { navigateBack, navigateTo, NavigateBack, NavigateTo, StartApp } from './ui/navigation';
6
5
  import { updateReviewStatus } from './ui/review-status';
7
6
  import { updateStepItemsOnValidation, updateStepItemsOnNext } from './ui/step-items';
8
- import { ErrorCreatingProgression, ReceiveProgression } from './data/progression';
9
- export declare type Action = NavigateBack | NavigateTo | ReceivedSkills | ErrorFetchingSkills | StartApp | StoreFirstSlide | StoreToken | ErrorCreatingProgression | ReceiveProgression;
7
+ import { ReceivedSlide } from './api/fetch-slide';
8
+ import { ReceiveProgression } from './api/post-progression';
9
+ import { ReceivedSkills } from './api/fetch-skills';
10
+ export declare type Action = NavigateBack | NavigateTo | ReceivedSkills | StartApp | ReceivedSlide | StoreToken | ReceiveProgression;
10
11
  export declare type Dispatchers = {
11
12
  navigateTo: typeof navigateTo;
12
13
  navigateBack: typeof navigateBack;
@@ -16,4 +16,3 @@ export declare type StartApp = {
16
16
  };
17
17
  export declare const navigateTo: (newPath: ViewPath) => NavigateTo;
18
18
  export declare const navigateBack: () => NavigateBack;
19
- export declare const startApp: (options: AppOptions) => StartApp;
@@ -8,7 +8,3 @@ export const navigateTo = (newPath) => ({
8
8
  export const navigateBack = () => ({
9
9
  type: NAVIGATE_BACK
10
10
  });
11
- export const startApp = (options) => ({
12
- type: START_APP,
13
- payload: options
14
- });
@@ -1,19 +1,13 @@
1
- import { FinishedSlidesState } from '../../reducers/ui/finished-slides';
1
+ import { FinishedSlides, IconValue } from '../../types/common';
2
2
  export declare const UPDATE_STEP_ITEMS_ON_VALIDATION = "@@step-items/UPDATE_STEP_ITEMS_ON_VALIDATION";
3
3
  export declare const UPDATE_STEP_ITEMS_ON_NEXT = "@@step-items/UPDATE_STEP_ITEMS_ON_NEXT";
4
- declare const ICON_VALUES: {
5
- readonly right: "right";
6
- readonly wrong: "wrong";
7
- readonly 'no-answer': "no-answer";
8
- };
9
- export declare type IconValue = keyof typeof ICON_VALUES;
10
4
  declare type UpdateStepItemsOnValidationClickPayload = {
11
5
  stepNumber: number;
12
6
  icon: IconValue;
13
7
  };
14
8
  declare type UpdateStepItemsOnNextClickPayload = {
15
9
  stepNumber: number;
16
- finishedSlides: FinishedSlidesState;
10
+ finishedSlides: FinishedSlides;
17
11
  current: boolean;
18
12
  };
19
13
  export declare type UpdateStepItemsOnValidation = {
@@ -1,11 +1,5 @@
1
- // -----------------------------------------------------------------------------
2
1
  export const UPDATE_STEP_ITEMS_ON_VALIDATION = '@@step-items/UPDATE_STEP_ITEMS_ON_VALIDATION';
3
2
  export const UPDATE_STEP_ITEMS_ON_NEXT = '@@step-items/UPDATE_STEP_ITEMS_ON_NEXT';
4
- const ICON_VALUES = {
5
- right: 'right',
6
- wrong: 'wrong',
7
- 'no-answer': 'no-answer'
8
- };
9
3
  // -----------------------------------------------------------------------------
10
4
  export const updateStepItemsOnValidation = (payload) => ({
11
5
  type: UPDATE_STEP_ITEMS_ON_VALIDATION,
@@ -1,27 +1,4 @@
1
1
  import { AnyAction, Store } from 'redux';
2
- import { SkillsState } from './reducers/data/skills';
3
- import { SlidesState } from './reducers/data/slides';
4
- import { TokenState } from './reducers/data/token';
5
- import { NavigationState } from './reducers/ui/navigation';
6
- import { ReviewStatusState } from './reducers/ui/review-status';
7
- import { StepItemsState } from './reducers/ui/step-items';
8
- import { FinishedSlidesState } from './reducers/ui/finished-slides';
9
- import { ProgressionState } from './reducers/data/progression';
10
- declare type DataState = {
11
- isFetching?: boolean;
12
- progression?: ProgressionState;
13
- skills: SkillsState;
14
- slides: SlidesState;
15
- token?: TokenState;
16
- };
17
- export declare type StoreState = {
18
- ui: {
19
- navigation: NavigationState;
20
- stepItems: StepItemsState;
21
- finishedSlides: FinishedSlidesState;
22
- reviewStatus: ReviewStatusState;
23
- };
24
- data: DataState;
25
- };
26
- export default function configureStore(): Store<StoreState, AnyAction>;
27
- export {};
2
+ import { StoreState } from './reducers';
3
+ import { AppOptions } from './types/common';
4
+ export default function configureStore(options: AppOptions): Store<StoreState, AnyAction>;
@@ -1,10 +1,8 @@
1
1
  import { applyMiddleware, compose, createStore } from 'redux';
2
2
  import thunk from 'redux-thunk';
3
3
  import rootReducer from './reducers';
4
- import onStartApp from './middlewares/on-start-app';
5
- import onReceiveProgression from './middlewares/on-receive-progression';
6
- // -----------------------------------------------------------------------------
7
- export default function configureStore() {
4
+ import { getServices } from './services';
5
+ export default function configureStore(options) {
8
6
  const _compose = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
9
7
  ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
10
8
  name: 'app-review',
@@ -12,7 +10,8 @@ export default function configureStore() {
12
10
  traceLimit: 25
13
11
  })
14
12
  : compose;
15
- const enhancer = _compose(applyMiddleware(thunk, onStartApp, onReceiveProgression));
13
+ const thunkMiddleware = thunk.withExtraArgument({ services: options.services || getServices() });
14
+ const enhancer = _compose(applyMiddleware(thunkMiddleware));
16
15
  const store = createStore(rootReducer, undefined, enhancer);
17
16
  return store;
18
17
  }
@@ -1,2 +1,2 @@
1
- import { Slide } from '../types/slides';
2
- export declare const slide: Slide;
1
+ import { UISlide } from '../types/slides';
2
+ export declare const slide: UISlide;
package/es/index.d.ts CHANGED
@@ -4,7 +4,7 @@ declare const AppReview: ({ options }: {
4
4
  }) => JSX.Element | null;
5
5
  declare global {
6
6
  interface Window {
7
- __REDUX_DEVTOOLS_EXTENSION__?: boolean;
7
+ __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: Function;
8
8
  }
9
9
  }
10
10
  export default AppReview;
package/es/index.js CHANGED
@@ -5,11 +5,14 @@ import { TemplateContext } from '@coorpacademy/components/es/template/app-review
5
5
  import configureStore from './configure-store';
6
6
  import { congratsProps, correctionPopinProps } from './fixtures/temp-fixture';
7
7
  import { updateSlidesOnNext, updateSlidesOnValidation, validateSlide } from './actions/data/slides';
8
- import { navigateTo, navigateBack, startApp } from './actions/ui/navigation';
8
+ import { navigateTo, navigateBack } from './actions/ui/navigation';
9
+ import { storeToken } from './actions/data/token';
9
10
  import { updateFinishedSlides } from './actions/ui/finished-slides';
10
11
  import { updateReviewStatus } from './actions/ui/review-status';
11
12
  import { updateStepItemsOnValidation, updateStepItemsOnNext } from './actions/ui/step-items';
12
- // -----------------------------------------------------------------------------
13
+ import { fetchSkills } from './actions/api/fetch-skills';
14
+ import { postProgression } from './actions/api/post-progression';
15
+ import { VIEWS } from './common';
13
16
  const mapDispatchToProps = {
14
17
  navigateTo,
15
18
  navigateBack,
@@ -22,7 +25,6 @@ const mapDispatchToProps = {
22
25
  updateFinishedSlides
23
26
  };
24
27
  const getCurrentViewName = (storeState) => storeState.ui.navigation[storeState.ui.navigation.length - 1];
25
- // -----------------------------------------------------------------------------
26
28
  const mapStateToSkillsProps = (state) => {
27
29
  if (!state.data.skills) {
28
30
  return null;
@@ -48,7 +50,6 @@ const mapStateToSkillsProps = (state) => {
48
50
  }))
49
51
  };
50
52
  };
51
- // -----------------------------------------------------------------------------
52
53
  const mapStateToSlidesProps = (state) => {
53
54
  if (!state.data.slides) {
54
55
  return null;
@@ -76,37 +77,50 @@ const mapStateToSlidesProps = (state) => {
76
77
  progression: state.data.progression
77
78
  };
78
79
  };
79
- // -----------------------------------------------------------------------------
80
- const mapStateToProps = (state) => ({
81
- viewName: getCurrentViewName(state),
82
- slides: mapStateToSlidesProps(state),
83
- skills: mapStateToSkillsProps(state)
84
- });
85
- // Props = StaticProps && Dispatchers
80
+ const mapStateToProps = (state) => {
81
+ return {
82
+ viewName: getCurrentViewName(state),
83
+ slides: mapStateToSlidesProps(state),
84
+ skills: mapStateToSkillsProps(state)
85
+ };
86
+ };
86
87
  const App = connect(mapStateToProps, mapDispatchToProps)(AppReviewTemplate);
87
- // -----------------------------------------------------------------------------
88
88
  const AppReview = ({ options }) => {
89
89
  const [store, setStore] = useState(null);
90
- const [appStarted, setAppStarted] = useState(false);
91
90
  useEffect(() => {
92
- if (store) {
93
- store.dispatch(startApp(options));
94
- setAppStarted(true);
95
- }
96
- else {
97
- const _configure = async () => {
98
- const newStore = await configureStore();
99
- setStore(newStore);
100
- };
101
- _configure();
102
- }
91
+ if (store)
92
+ return;
93
+ const newStore = configureStore(options);
94
+ setStore(newStore);
95
+ }, [options, store]);
96
+ useEffect(() => {
97
+ if (store === null)
98
+ return;
99
+ const { skillRef } = options;
100
+ const initialView = skillRef ? VIEWS.slides : VIEWS.skills;
101
+ store.dispatch(navigateTo(initialView));
102
+ }, [options, store]);
103
+ useEffect(() => {
104
+ if (store === null)
105
+ return;
106
+ const { token } = options;
107
+ store.dispatch(storeToken(token));
108
+ }, [options, store]);
109
+ useEffect(() => {
110
+ if (store === null)
111
+ return;
112
+ const { skillRef, token } = options;
113
+ // ThunkAction is not assignable to parameter of type 'AnyAction'
114
+ // ts problem describre here = https://github.com/reduxjs/redux-thunk/issues/333
115
+ skillRef
116
+ ? store.dispatch(postProgression(skillRef, token))
117
+ : store.dispatch(fetchSkills(token));
103
118
  }, [options, store]);
104
- if (!store || !appStarted)
119
+ if (!store)
105
120
  return null;
106
121
  const { templateContext: values } = options;
107
122
  return (React.createElement(Provider, { store: store },
108
123
  React.createElement(TemplateContext, { values: values },
109
124
  React.createElement(App, null))));
110
125
  };
111
- // -----------------------------------------------------------------------------
112
126
  export default AppReview;
@@ -1,7 +1,18 @@
1
+ import { ProgressionState } from './progression';
2
+ import { SkillsState } from './skills';
3
+ import { SlidesState } from './slides';
4
+ import { TokenState } from './token';
5
+ export declare type DataState = {
6
+ isFetching?: boolean;
7
+ progression?: ProgressionState;
8
+ skills: SkillsState;
9
+ slides: SlidesState;
10
+ token?: TokenState;
11
+ };
1
12
  declare const _default: import("redux").Reducer<import("redux").CombinedState<{
2
- progression: import("./progression").ProgressionState;
3
- skills: import("../../types/skills").Skills;
4
- slides: import("./slides").SlidesState;
5
- token: import("./token").TokenState;
6
- }>, import("../../actions/data/progression").ReceiveProgression | import("../../actions/data/slides").ValidateSlide | import("../../actions/data/slides").SlidesAction | import("../../actions/data/skills").ReceivedSkills | import("../../actions/data/token").StoreToken>;
13
+ progression: ProgressionState;
14
+ skills: SkillsState;
15
+ slides: SlidesState;
16
+ token: TokenState;
17
+ }>, import("../../actions/data/slides").ValidateSlide | import("../../actions/data/slides").SlidesAction | import("../../actions/api/post-progression").ReceiveProgression | import("../../actions/api/fetch-skills").ReceivedSkills | import("../../actions/data/token").StoreToken>;
7
18
  export default _default;
@@ -1,5 +1,5 @@
1
- import { ReceiveProgression } from '../../actions/data/progression';
2
1
  import { ValidateSlide } from '../../actions/data/slides';
2
+ import { ReceiveProgression } from '../../actions/api/post-progression';
3
3
  export declare type ProgressionState = {
4
4
  _id?: string;
5
5
  state: {
@@ -15,6 +15,5 @@ export declare type ProgressionState = {
15
15
  };
16
16
  slideNumber?: number;
17
17
  } | null;
18
- export declare const initialState: ProgressionState;
19
18
  declare const reducer: (state: ProgressionState | undefined, action: ValidateSlide | ReceiveProgression) => ProgressionState;
20
19
  export default reducer;
@@ -1,12 +1,9 @@
1
1
  import { getOr } from 'lodash/fp';
2
- import { RECEIVE_PROGRESSION } from '../../actions/data/progression';
3
2
  import { VALIDATE_SLIDE } from '../../actions/data/slides';
4
- // -----------------------------------------------------------------------------
5
- export const initialState = null;
6
- // -----------------------------------------------------------------------------
3
+ import { POST_PROGRESSION_SUCCESS } from '../../actions/api/post-progression';
7
4
  const reducer = (
8
5
  // eslint-disable-next-line default-param-last
9
- state = initialState, action) => {
6
+ state = null, action) => {
10
7
  switch (action.type) {
11
8
  case VALIDATE_SLIDE: {
12
9
  const previousSlideNumber = getOr(-1, 'slideNumber', state);
@@ -29,8 +26,8 @@ state = initialState, action) => {
29
26
  }
30
27
  };
31
28
  }
32
- case RECEIVE_PROGRESSION: {
33
- const { progression } = action.payload;
29
+ case POST_PROGRESSION_SUCCESS: {
30
+ const progression = action.payload;
34
31
  return progression;
35
32
  }
36
33
  default:
@@ -1,6 +1,5 @@
1
- import { ReceivedSkills } from '../../actions/data/skills';
2
- import { Skills } from '../../types/skills';
3
- export declare type SkillsState = Skills;
4
- export declare const initialState: SkillsState;
5
- declare const reducer: (state: Skills | undefined, action: ReceivedSkills) => Skills;
1
+ import { Skill } from '../../types/common';
2
+ import { ReceivedSkills } from '../../actions/api/fetch-skills';
3
+ export declare type SkillsState = Skill[];
4
+ declare const reducer: (state: SkillsState | undefined, action: ReceivedSkills) => SkillsState;
6
5
  export default reducer;
@@ -1,14 +1,11 @@
1
- import { RECEIVED_SKILLS } from '../../actions/data/skills';
2
- export const initialState = [];
3
- // -----------------------------------------------------------------------------
1
+ import { SKILLS_FETCH_SUCCESS } from '../../actions/api/fetch-skills';
4
2
  // eslint-disable-next-line default-param-last
5
- const reducer = (state = initialState, action) => {
3
+ const reducer = (state = [], action) => {
6
4
  switch (action.type) {
7
- case RECEIVED_SKILLS:
5
+ case SKILLS_FETCH_SUCCESS:
8
6
  return action.payload;
9
7
  default:
10
8
  return state;
11
9
  }
12
10
  };
13
- // -----------------------------------------------------------------------------
14
11
  export default reducer;
@@ -1,4 +1,5 @@
1
- import { Slide, SlidesAction } from '../../actions/data/slides';
1
+ import { SlidesAction } from '../../actions/data/slides';
2
+ import { Slide } from '../../types/common';
2
3
  export declare type SlidesState = {
3
4
  slideNumbers: number[];
4
5
  [key: number]: Slide;
@@ -1,8 +1,8 @@
1
1
  import map from 'lodash/fp/map';
2
- import { STORE_FIRST_SLIDE, UPDATE_SLIDES_ON_NEXT, UPDATE_SLIDES_ON_VALIDATION } from '../../actions/data/slides';
2
+ import { UPDATE_SLIDES_ON_NEXT, UPDATE_SLIDES_ON_VALIDATION } from '../../actions/data/slides';
3
3
  import { HIGHEST_INDEX, slideNumbers, TOTAL_SLIDES_STACK } from '../../common';
4
4
  import { slide as qcmSlide } from '../../fixtures/qcm-slide';
5
- // -----------------------------------------------------------------------------
5
+ import { SLIDE_FETCH_SUCCESS } from '../../actions/api/fetch-slide';
6
6
  const getInitialState = () => {
7
7
  const state = {
8
8
  slideNumbers
@@ -97,7 +97,7 @@ const stateUpdateOnNext = (state, payload) => {
97
97
  // eslint-disable-next-line default-param-last
98
98
  const reducer = (state = initialState, action) => {
99
99
  switch (action.type) {
100
- case STORE_FIRST_SLIDE: {
100
+ case SLIDE_FETCH_SUCCESS: {
101
101
  // TODO: An intermediate slide transform is needed here (or in fetchSlide)
102
102
  // const apiSlide = action.payload;
103
103
  // apiSlide adapt to uiSlide
@@ -1,5 +1,4 @@
1
1
  import { StoreToken } from '../../actions/data/token';
2
2
  export declare type TokenState = string | null;
3
- export declare const initialState: TokenState;
4
3
  declare const reducer: (state: TokenState | undefined, action: StoreToken) => TokenState;
5
4
  export default reducer;
@@ -1,9 +1,6 @@
1
1
  import { STORE_TOKEN } from '../../actions/data/token';
2
- // -----------------------------------------------------------------------------
3
- export const initialState = null;
4
- // -----------------------------------------------------------------------------
5
2
  // eslint-disable-next-line default-param-last
6
- const reducer = (state = initialState, action) => {
3
+ const reducer = (state = null, action) => {
7
4
  switch (action.type) {
8
5
  case STORE_TOKEN:
9
6
  return action.payload;
@@ -11,5 +8,4 @@ const reducer = (state = initialState, action) => {
11
8
  return state;
12
9
  }
13
10
  };
14
- // -----------------------------------------------------------------------------
15
11
  export default reducer;
@@ -1,7 +1,13 @@
1
+ import { DataState } from './data';
2
+ import { UIState } from './ui';
3
+ export declare type StoreState = {
4
+ ui: UIState;
5
+ data: DataState;
6
+ };
1
7
  declare const _default: import("redux").Reducer<import("redux").CombinedState<{
2
8
  data: import("redux").CombinedState<{
3
9
  progression: import("./data/progression").ProgressionState;
4
- skills: import("../types/skills").Skills;
10
+ skills: import("./data/skills").SkillsState;
5
11
  slides: import("./data/slides").SlidesState;
6
12
  token: import("./data/token").TokenState;
7
13
  }>;
@@ -9,7 +15,7 @@ declare const _default: import("redux").Reducer<import("redux").CombinedState<{
9
15
  finishedSlides: import("./ui/finished-slides").FinishedSlidesState;
10
16
  navigation: import("./ui/navigation").NavigationState;
11
17
  reviewStatus: import("./ui/review-status").ReviewStatusState;
12
- stepItems: import("./ui/step-items").StepItems;
18
+ stepItems: import("./ui/step-items").StepItemsState;
13
19
  }>;
14
- }>, import("../actions/data/progression").ReceiveProgression | import("../actions/data/slides").ValidateSlide | import("../actions/data/slides").SlidesAction | import("../actions/data/skills").ReceivedSkills | import("../actions/data/token").StoreToken | import("../actions/ui/finished-slides").UpdateFinishedSlides | import("../actions/ui/navigation").NavigateTo | import("../actions/ui/navigation").NavigateBack | import("../actions/ui/review-status").UpdateReviewStatus | import("../actions/ui/step-items").StepItemsAction>;
20
+ }>, import("../actions/data/slides").ValidateSlide | import("../actions/data/slides").SlidesAction | import("../actions/api/post-progression").ReceiveProgression | import("../actions/api/fetch-skills").ReceivedSkills | import("../actions/data/token").StoreToken | import("../actions/ui/finished-slides").UpdateFinishedSlides | import("../actions/ui/navigation").NavigateTo | import("../actions/ui/navigation").NavigateBack | import("../actions/ui/review-status").UpdateReviewStatus | import("../actions/ui/step-items").StepItemsAction>;
15
21
  export default _default;
@@ -3,6 +3,5 @@ export declare type FinishedSlidesState = {
3
3
  slideNumbers: number[];
4
4
  [key: number]: true;
5
5
  };
6
- export declare const initialState: FinishedSlidesState;
7
6
  declare const reducer: (state: FinishedSlidesState | undefined, action: UpdateFinishedSlides) => FinishedSlidesState;
8
7
  export default reducer;
@@ -1,11 +1,9 @@
1
1
  import forEach from 'lodash/fp/forEach';
2
2
  import { UPDATE_FINISHED_SLIDES } from '../../actions/ui/finished-slides';
3
3
  import { slideNumbers } from '../../common';
4
- // -----------------------------------------------------------------------------
5
- export const initialState = {
4
+ const initialState = {
6
5
  slideNumbers
7
6
  };
8
- // -----------------------------------------------------------------------------
9
7
  const _forEach = forEach.convert({
10
8
  cap: false
11
9
  });
@@ -1,7 +1,17 @@
1
+ import { FinishedSlidesState } from './finished-slides';
2
+ import { NavigationState } from './navigation';
3
+ import { ReviewStatusState } from './review-status';
4
+ import { StepItemsState } from './step-items';
5
+ export declare type UIState = {
6
+ navigation: NavigationState;
7
+ stepItems: StepItemsState;
8
+ finishedSlides: FinishedSlidesState;
9
+ reviewStatus: ReviewStatusState;
10
+ };
1
11
  declare const _default: import("redux").Reducer<import("redux").CombinedState<{
2
- finishedSlides: import("./finished-slides").FinishedSlidesState;
3
- navigation: import("./navigation").NavigationState;
4
- reviewStatus: import("./review-status").ReviewStatusState;
5
- stepItems: import("./step-items").StepItems;
12
+ finishedSlides: FinishedSlidesState;
13
+ navigation: NavigationState;
14
+ reviewStatus: ReviewStatusState;
15
+ stepItems: StepItemsState;
6
16
  }>, import("../../actions/ui/finished-slides").UpdateFinishedSlides | import("../../actions/ui/navigation").NavigateTo | import("../../actions/ui/navigation").NavigateBack | import("../../actions/ui/review-status").UpdateReviewStatus | import("../../actions/ui/step-items").StepItemsAction>;
7
17
  export default _default;