@coorpacademy/player-web 4.29.25 → 4.29.27

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/README.md CHANGED
@@ -8,3 +8,25 @@
8
8
 
9
9
  - npm install
10
10
  - npm start
11
+
12
+ ## End popin overrides
13
+
14
+ Pass `popinEnd` to `create` to replace the recommendation heading or the header CTA:
15
+
16
+ ```js
17
+ popinEnd: {
18
+ recommendationTitle: 'More to explore:',
19
+ headerCta: {title: 'Open my learning plan', onClick: openLearningPlan}
20
+ }
21
+ ```
22
+
23
+ `popinEnd` can also be a function. It receives `{recommendations, recommendationContext,
24
+ exitNode, recommendationTitle, headerCta}` and returns the same override object, or nothing to
25
+ keep the default behavior. `headerCta` can contain only `title` to keep the current
26
+ click action. Providing `onClick` or `href` replaces that action, while keeping the
27
+ current title unless another one is provided. Without overrides, the existing heading,
28
+ header CTA and footer behavior are unchanged.
29
+
30
+ `Recommendations.find` may return either an array of cards or `{cards, context}`. The
31
+ optional context is passed to `popinEnd` as `recommendationContext` and is never added
32
+ to individual cards. Existing integrations returning an array keep their behavior.
@@ -10,7 +10,7 @@ import _getOr from "lodash/fp/getOr";
10
10
  import _get from "lodash/fp/get";
11
11
  import _constant from "lodash/fp/constant";
12
12
  import _cond from "lodash/fp/cond";
13
- import { editComment, exit, getBestScore, getCurrentContent, getCurrentExitNode, getCurrentProgression, getCurrentProgressionId, getEndRank, getLives, getNextContent, getRecommendations, getStartRank, isCommentSent, isCurrentEngineLearner, isCurrentEngineMicrolearning, nextLevel, openRecommendation, postComment, retry, seeComment, getRedirectURLAfterEnd } from '@coorpacademy/player-store';
13
+ import { editComment, exit, getBestScore, getCurrentContent, getCurrentExitNode, getCurrentProgression, getCurrentProgressionId, getEndRank, getLives, getNextContent, getRecommendationContext, getRecommendations, getStartRank, isCommentSent, isCurrentEngineLearner, isCurrentEngineMicrolearning, nextLevel, openRecommendation, postComment, retry, seeComment, getRedirectURLAfterEnd } from '@coorpacademy/player-store';
14
14
  import headerProps from './header';
15
15
  import mapStateToErrorPopinProps from './error-popin';
16
16
  const extractRank = state => {
@@ -222,7 +222,45 @@ const popinEndStateToProps = (options, store) => {
222
222
  footer
223
223
  }
224
224
  };
225
- return props;
225
+ const popinEnd = options.popinEnd;
226
+ if (!popinEnd) {
227
+ return props;
228
+ }
229
+ const overrides = typeof popinEnd === 'function' ? popinEnd({
230
+ recommendations: getRecommendations(state),
231
+ recommendationContext: getRecommendationContext(state),
232
+ exitNode,
233
+ recommendationTitle: _get('summary.recommendation.title', props),
234
+ headerCta: _get('summary.header.cta', props)
235
+ }) : popinEnd;
236
+ if (!overrides) {
237
+ return props;
238
+ }
239
+ const hasRecommendationTitle = overrides.recommendationTitle !== undefined && props.summary.recommendation;
240
+ const hasHeaderCta = !!overrides.headerCta;
241
+ if (!hasRecommendationTitle && !hasHeaderCta) return props;
242
+ const currentHeaderCta = props.summary.header.cta || {};
243
+ const replacesAction = hasHeaderCta && (Object.prototype.hasOwnProperty.call(overrides.headerCta, 'onClick') || Object.prototype.hasOwnProperty.call(overrides.headerCta, 'href'));
244
+ const headerCta = hasHeaderCta ? {
245
+ ...(replacesAction ? {
246
+ title: currentHeaderCta.title
247
+ } : currentHeaderCta),
248
+ ...overrides.headerCta
249
+ } : currentHeaderCta;
250
+ return {
251
+ ...props,
252
+ summary: {
253
+ ...props.summary,
254
+ header: hasHeaderCta ? {
255
+ ...props.summary.header,
256
+ cta: headerCta
257
+ } : props.summary.header,
258
+ recommendation: hasRecommendationTitle ? {
259
+ ...props.summary.recommendation,
260
+ title: overrides.recommendationTitle
261
+ } : props.summary.recommendation
262
+ }
263
+ };
226
264
  };
227
265
  };
228
266
  export default popinEndStateToProps;
@@ -1 +1 @@
1
- {"version":3,"file":"popin-end.js","names":["editComment","exit","getBestScore","getCurrentContent","getCurrentExitNode","getCurrentProgression","getCurrentProgressionId","getEndRank","getLives","getNextContent","getRecommendations","getStartRank","isCommentSent","isCurrentEngineLearner","isCurrentEngineMicrolearning","nextLevel","openRecommendation","postComment","retry","seeComment","getRedirectURLAfterEnd","headerProps","mapStateToErrorPopinProps","extractRank","state","start","end","sign","diff","Math","abs","extractStars","progression","stars","_get","bestScore","comment","translate","dispatch","progressionId","content","message","isSent","confirmation","commentSectionTitle","confirmationLinkText","onClick","e","edition","title","value","postDisabled","_isEmpty","onChange","target","onPost","ctaForFail","redirection","href","summaryHeader","hide","count","lives","successCta","level","_nextLevel","showNextLevel","_cond","_pipe","_isEqual","type","_getOr","subtitle","failed","rank","cta","_constant","extractRecommendation","_recommendations","hasRecommendations","_isNull","_isArray","recommendations","_map","recommendation","cards","extractAction","nextContent","description","prefix","name","levelTranslation","button","currentContent","extractFeedback","_pick","_omit","popinEndStateToProps","options","store","headerProps_","summaryHeader_","extractAction_","extractRecommendation_","comment_","exitNode","canPostAComment","footer","props","header","mode","popinError","summary","action","feedback"],"sources":["../../src/map-state-to-props/popin-end.js"],"sourcesContent":["import {\n cond,\n constant,\n get,\n getOr,\n isArray,\n isEqual,\n isEmpty,\n map,\n pick,\n pipe,\n omit,\n isNull\n} from 'lodash/fp';\n\nimport {\n editComment,\n exit,\n getBestScore,\n getCurrentContent,\n getCurrentExitNode,\n getCurrentProgression,\n getCurrentProgressionId,\n getEndRank,\n getLives,\n getNextContent,\n getRecommendations,\n getStartRank,\n isCommentSent,\n isCurrentEngineLearner,\n isCurrentEngineMicrolearning,\n nextLevel,\n openRecommendation,\n postComment,\n retry,\n seeComment,\n getRedirectURLAfterEnd\n} from '@coorpacademy/player-store';\nimport headerProps from './header';\nimport mapStateToErrorPopinProps from './error-popin';\n\nconst extractRank = state => {\n const start = getStartRank(state);\n const end = getEndRank(state);\n\n if (start === end) {\n return null;\n } else {\n const sign = end - start > 0 ? '-' : '+';\n const diff = Math.abs(end - start);\n return `${sign}${diff}`;\n }\n};\n\nconst extractStars = state => {\n const progression = getCurrentProgression(state);\n const stars = get('state.stars')(progression);\n const bestScore = getBestScore(state);\n\n return stars > bestScore ? `+${stars - bestScore}` : '+0';\n};\n\nconst comment =\n ({translate}, {dispatch}) =>\n state => {\n const progressionId = getCurrentProgressionId(state);\n const content = getCurrentContent(state);\n const message = get('ui.comments.text', state);\n return {\n isSent: isCommentSent(state),\n confirmation: {\n commentSectionTitle: translate('Thank you for your review!'),\n confirmationLinkText: translate('See your comment and those of your peers'),\n onClick: e => dispatch(seeComment)\n },\n edition: {\n title: translate('Share your opinion on this course'),\n value: get('ui.comments.text', state),\n postDisabled: isEmpty(get('ui.comments.text', state)),\n onChange: e => dispatch(editComment(e.target.value)),\n onPost: e => dispatch(postComment(progressionId, content, message))\n }\n };\n };\n\nconst ctaForFail = (redirection, translate, dispatch, state) => {\n if (redirection) {\n return {\n href: redirection,\n title: translate('Click to continue')\n };\n }\n\n return {\n onClick: () => dispatch(retry),\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level')\n };\n};\n\nconst summaryHeader =\n ({translate}, {dispatch}) =>\n state => {\n const {hide, count} = getLives(state);\n const lives = hide ? null : count;\n\n let successCta = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const redirection = getRedirectURLAfterEnd(state);\n if (redirection) {\n successCta = {\n title: translate('Click to continue'),\n href: redirection\n };\n }\n\n if (isCurrentEngineLearner(state) && !redirection) {\n const level = get('level', getCurrentContent(state));\n if (level === 'advanced' || level === 'base') {\n const _nextLevel = getNextContent(state);\n if (_nextLevel) {\n successCta = {\n title: translate('Next level'),\n onClick: () => dispatch(nextLevel),\n showNextLevel: true\n };\n }\n }\n }\n\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => ({\n type: 'popinEnd',\n title: getOr('', 'name')(getCurrentContent(state)),\n subtitle: translate('Congratulations!'),\n failed: false,\n stars: extractStars(state),\n rank: extractRank(state),\n cta: successCta\n })\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => ({\n type: 'popinEnd',\n title: translate('Ooops'),\n subtitle: lives === 0 ? translate('You are out of lives!') : translate('Nice try!'),\n failed: true,\n lives,\n rank: extractRank(state),\n stars: null,\n cta: ctaForFail(redirection, translate, dispatch, state)\n })\n ],\n [constant(true), constant({type: 'popinEnd'})]\n ]);\n };\n\nconst extractRecommendation =\n ({translate}, {dispatch}) =>\n state => {\n const _recommendations = getRecommendations(state);\n const hasRecommendations = isNull(_recommendations) || isArray(_recommendations);\n\n if (!hasRecommendations) {\n return null;\n }\n\n const recommendations = map(\n recommendation => ({\n ...recommendation,\n onClick: () => dispatch(openRecommendation(recommendation))\n }),\n _recommendations\n );\n\n return {\n title: translate('Related subjects'),\n cards: recommendations\n };\n };\n\nconst extractAction =\n ({translate}, {dispatch}) =>\n state => {\n const nextContent = getNextContent(state);\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => {\n if (get('nextContentType', nextContent) === 'chapter') {\n return {\n type: 'nextCourse',\n description: translate('Check out the next chapter in this course!'),\n prefix: translate('Next chapter_'),\n ...nextContent\n };\n } else if (nextContent) {\n // then it is a level\n const {name, levelTranslation} = nextContent;\n return {\n type: 'simple',\n prefix: translate('Next level_'),\n title: `${name} - ${levelTranslation}`,\n button: {\n title: translate('Next level'),\n href: null,\n onClick: () => dispatch(nextLevel)\n }\n };\n }\n }\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => {\n const currentContent = getCurrentContent(state);\n let title = getOr('', 'name', currentContent);\n if (isCurrentEngineLearner(state)) {\n title = `${getOr('', 'name', currentContent)} - ${getOr(\n '',\n 'levelTranslation',\n currentContent\n )}`;\n }\n return {\n type: 'simple',\n prefix: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter_')\n : translate('Retry level_'),\n title,\n button: {\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level'),\n onClick: () => dispatch(retry)\n }\n };\n }\n ],\n [constant(true), constant(null)]\n ]);\n };\n\nconst extractFeedback = pipe(\n pick(['title', 'description', 'media', 'mediaDescription']),\n omit(['media.ref', 'media.subtitles', 'media.posters'])\n);\n\nconst popinEndStateToProps = (options, store) => {\n const headerProps_ = headerProps(options, store);\n const summaryHeader_ = summaryHeader(options, store);\n const extractAction_ = extractAction(options, store);\n const extractRecommendation_ = extractRecommendation(options, store);\n const comment_ = comment(options, store);\n\n return state => {\n const progression = getCurrentProgression(state);\n\n const {translate} = options;\n const {dispatch} = store;\n\n const exitNode = getCurrentExitNode(state);\n\n const canPostAComment =\n get('type', exitNode) === 'success' && get('engine.ref', progression) === 'learner';\n\n const footer = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const props = {\n header: headerProps_(state),\n mode: options.mode || 'default',\n popinError: mapStateToErrorPopinProps(dispatch)(state),\n summary: {\n header: summaryHeader_(state)(exitNode),\n action: extractAction_(state)(exitNode),\n feedback: extractFeedback(exitNode),\n recommendation: extractRecommendation_(state),\n comment: canPostAComment ? comment_(state) : null,\n footer\n }\n };\n\n return props;\n };\n};\n\nexport default popinEndStateToProps;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"popin-end.js","names":["editComment","exit","getBestScore","getCurrentContent","getCurrentExitNode","getCurrentProgression","getCurrentProgressionId","getEndRank","getLives","getNextContent","getRecommendationContext","getRecommendations","getStartRank","isCommentSent","isCurrentEngineLearner","isCurrentEngineMicrolearning","nextLevel","openRecommendation","postComment","retry","seeComment","getRedirectURLAfterEnd","headerProps","mapStateToErrorPopinProps","extractRank","state","start","end","sign","diff","Math","abs","extractStars","progression","stars","_get","bestScore","comment","translate","dispatch","progressionId","content","message","isSent","confirmation","commentSectionTitle","confirmationLinkText","onClick","e","edition","title","value","postDisabled","_isEmpty","onChange","target","onPost","ctaForFail","redirection","href","summaryHeader","hide","count","lives","successCta","level","_nextLevel","showNextLevel","_cond","_pipe","_isEqual","type","_getOr","subtitle","failed","rank","cta","_constant","extractRecommendation","_recommendations","hasRecommendations","_isNull","_isArray","recommendations","_map","recommendation","cards","extractAction","nextContent","description","prefix","name","levelTranslation","button","currentContent","extractFeedback","_pick","_omit","popinEndStateToProps","options","store","headerProps_","summaryHeader_","extractAction_","extractRecommendation_","comment_","exitNode","canPostAComment","footer","props","header","mode","popinError","summary","action","feedback","popinEnd","overrides","recommendationContext","recommendationTitle","headerCta","hasRecommendationTitle","undefined","hasHeaderCta","currentHeaderCta","replacesAction","Object","prototype","hasOwnProperty","call"],"sources":["../../src/map-state-to-props/popin-end.js"],"sourcesContent":["import {\n cond,\n constant,\n get,\n getOr,\n isArray,\n isEqual,\n isEmpty,\n map,\n pick,\n pipe,\n omit,\n isNull\n} from 'lodash/fp';\n\nimport {\n editComment,\n exit,\n getBestScore,\n getCurrentContent,\n getCurrentExitNode,\n getCurrentProgression,\n getCurrentProgressionId,\n getEndRank,\n getLives,\n getNextContent,\n getRecommendationContext,\n getRecommendations,\n getStartRank,\n isCommentSent,\n isCurrentEngineLearner,\n isCurrentEngineMicrolearning,\n nextLevel,\n openRecommendation,\n postComment,\n retry,\n seeComment,\n getRedirectURLAfterEnd\n} from '@coorpacademy/player-store';\nimport headerProps from './header';\nimport mapStateToErrorPopinProps from './error-popin';\n\nconst extractRank = state => {\n const start = getStartRank(state);\n const end = getEndRank(state);\n\n if (start === end) {\n return null;\n } else {\n const sign = end - start > 0 ? '-' : '+';\n const diff = Math.abs(end - start);\n return `${sign}${diff}`;\n }\n};\n\nconst extractStars = state => {\n const progression = getCurrentProgression(state);\n const stars = get('state.stars')(progression);\n const bestScore = getBestScore(state);\n\n return stars > bestScore ? `+${stars - bestScore}` : '+0';\n};\n\nconst comment =\n ({translate}, {dispatch}) =>\n state => {\n const progressionId = getCurrentProgressionId(state);\n const content = getCurrentContent(state);\n const message = get('ui.comments.text', state);\n return {\n isSent: isCommentSent(state),\n confirmation: {\n commentSectionTitle: translate('Thank you for your review!'),\n confirmationLinkText: translate('See your comment and those of your peers'),\n onClick: e => dispatch(seeComment)\n },\n edition: {\n title: translate('Share your opinion on this course'),\n value: get('ui.comments.text', state),\n postDisabled: isEmpty(get('ui.comments.text', state)),\n onChange: e => dispatch(editComment(e.target.value)),\n onPost: e => dispatch(postComment(progressionId, content, message))\n }\n };\n };\n\nconst ctaForFail = (redirection, translate, dispatch, state) => {\n if (redirection) {\n return {\n href: redirection,\n title: translate('Click to continue')\n };\n }\n\n return {\n onClick: () => dispatch(retry),\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level')\n };\n};\n\nconst summaryHeader =\n ({translate}, {dispatch}) =>\n state => {\n const {hide, count} = getLives(state);\n const lives = hide ? null : count;\n\n let successCta = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const redirection = getRedirectURLAfterEnd(state);\n if (redirection) {\n successCta = {\n title: translate('Click to continue'),\n href: redirection\n };\n }\n\n if (isCurrentEngineLearner(state) && !redirection) {\n const level = get('level', getCurrentContent(state));\n if (level === 'advanced' || level === 'base') {\n const _nextLevel = getNextContent(state);\n if (_nextLevel) {\n successCta = {\n title: translate('Next level'),\n onClick: () => dispatch(nextLevel),\n showNextLevel: true\n };\n }\n }\n }\n\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => ({\n type: 'popinEnd',\n title: getOr('', 'name')(getCurrentContent(state)),\n subtitle: translate('Congratulations!'),\n failed: false,\n stars: extractStars(state),\n rank: extractRank(state),\n cta: successCta\n })\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => ({\n type: 'popinEnd',\n title: translate('Ooops'),\n subtitle: lives === 0 ? translate('You are out of lives!') : translate('Nice try!'),\n failed: true,\n lives,\n rank: extractRank(state),\n stars: null,\n cta: ctaForFail(redirection, translate, dispatch, state)\n })\n ],\n [constant(true), constant({type: 'popinEnd'})]\n ]);\n };\n\nconst extractRecommendation =\n ({translate}, {dispatch}) =>\n state => {\n const _recommendations = getRecommendations(state);\n const hasRecommendations = isNull(_recommendations) || isArray(_recommendations);\n\n if (!hasRecommendations) {\n return null;\n }\n\n const recommendations = map(\n recommendation => ({\n ...recommendation,\n onClick: () => dispatch(openRecommendation(recommendation))\n }),\n _recommendations\n );\n\n return {\n title: translate('Related subjects'),\n cards: recommendations\n };\n };\n\nconst extractAction =\n ({translate}, {dispatch}) =>\n state => {\n const nextContent = getNextContent(state);\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => {\n if (get('nextContentType', nextContent) === 'chapter') {\n return {\n type: 'nextCourse',\n description: translate('Check out the next chapter in this course!'),\n prefix: translate('Next chapter_'),\n ...nextContent\n };\n } else if (nextContent) {\n // then it is a level\n const {name, levelTranslation} = nextContent;\n return {\n type: 'simple',\n prefix: translate('Next level_'),\n title: `${name} - ${levelTranslation}`,\n button: {\n title: translate('Next level'),\n href: null,\n onClick: () => dispatch(nextLevel)\n }\n };\n }\n }\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => {\n const currentContent = getCurrentContent(state);\n let title = getOr('', 'name', currentContent);\n if (isCurrentEngineLearner(state)) {\n title = `${getOr('', 'name', currentContent)} - ${getOr(\n '',\n 'levelTranslation',\n currentContent\n )}`;\n }\n return {\n type: 'simple',\n prefix: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter_')\n : translate('Retry level_'),\n title,\n button: {\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level'),\n onClick: () => dispatch(retry)\n }\n };\n }\n ],\n [constant(true), constant(null)]\n ]);\n };\n\nconst extractFeedback = pipe(\n pick(['title', 'description', 'media', 'mediaDescription']),\n omit(['media.ref', 'media.subtitles', 'media.posters'])\n);\n\nconst popinEndStateToProps = (options, store) => {\n const headerProps_ = headerProps(options, store);\n const summaryHeader_ = summaryHeader(options, store);\n const extractAction_ = extractAction(options, store);\n const extractRecommendation_ = extractRecommendation(options, store);\n const comment_ = comment(options, store);\n\n return state => {\n const progression = getCurrentProgression(state);\n\n const {translate} = options;\n const {dispatch} = store;\n\n const exitNode = getCurrentExitNode(state);\n\n const canPostAComment =\n get('type', exitNode) === 'success' && get('engine.ref', progression) === 'learner';\n\n const footer = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const props = {\n header: headerProps_(state),\n mode: options.mode || 'default',\n popinError: mapStateToErrorPopinProps(dispatch)(state),\n summary: {\n header: summaryHeader_(state)(exitNode),\n action: extractAction_(state)(exitNode),\n feedback: extractFeedback(exitNode),\n recommendation: extractRecommendation_(state),\n comment: canPostAComment ? comment_(state) : null,\n footer\n }\n };\n\n const popinEnd = options.popinEnd;\n if (!popinEnd) {\n return props;\n }\n\n const overrides =\n typeof popinEnd === 'function'\n ? popinEnd({\n recommendations: getRecommendations(state),\n recommendationContext: getRecommendationContext(state),\n exitNode,\n recommendationTitle: get('summary.recommendation.title', props),\n headerCta: get('summary.header.cta', props)\n })\n : popinEnd;\n if (!overrides) {\n return props;\n }\n\n const hasRecommendationTitle =\n overrides.recommendationTitle !== undefined && props.summary.recommendation;\n const hasHeaderCta = !!overrides.headerCta;\n if (!hasRecommendationTitle && !hasHeaderCta) return props;\n\n const currentHeaderCta = props.summary.header.cta || {};\n const replacesAction =\n hasHeaderCta &&\n (Object.prototype.hasOwnProperty.call(overrides.headerCta, 'onClick') ||\n Object.prototype.hasOwnProperty.call(overrides.headerCta, 'href'));\n const headerCta = hasHeaderCta\n ? {\n ...(replacesAction ? {title: currentHeaderCta.title} : currentHeaderCta),\n ...overrides.headerCta\n }\n : currentHeaderCta;\n\n return {\n ...props,\n summary: {\n ...props.summary,\n header: hasHeaderCta ? {...props.summary.header, cta: headerCta} : props.summary.header,\n recommendation: hasRecommendationTitle\n ? {...props.summary.recommendation, title: overrides.recommendationTitle}\n : props.summary.recommendation\n }\n };\n };\n};\n\nexport default popinEndStateToProps;\n"],"mappings":"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","ignoreList":[]}
@@ -68,6 +68,204 @@ test('should create a "Next Level" CTA after success on learner progression', as
68
68
  const comment = props.summary.comment;
69
69
  t.is(comment.edition.postDisabled, true);
70
70
  });
71
+ test('should use the usual popin labels without overrides', t => {
72
+ const state = _set('data.recommendations.entities.idProgression1234.0.source', 'another application', popinLearnerSuccess);
73
+ const props = popinEnd(options, {
74
+ dispatch: createDispatch(state)
75
+ })(state);
76
+ t.is(props.summary.header.cta.title, '__Next level');
77
+ t.is(props.summary.recommendation.title, '__Related subjects');
78
+ });
79
+ test('should expose recommendation context separately from cards to overrides', t => {
80
+ const cards = [{
81
+ title: 'A course'
82
+ }];
83
+ const context = {
84
+ destination: 'learning-plan'
85
+ };
86
+ const state = _set('data.recommendations.entities.idProgression1234', {
87
+ cards,
88
+ context
89
+ }, popinLearnerSuccess);
90
+ let received;
91
+ const props = popinEnd({
92
+ ...options,
93
+ popinEnd: current => {
94
+ received = current;
95
+ return {
96
+ recommendationTitle: 'Continue learning:'
97
+ };
98
+ }
99
+ }, {
100
+ dispatch: createDispatch(state)
101
+ })(state);
102
+ t.is(received.recommendationContext, context);
103
+ t.is(received.recommendations, cards);
104
+ t.is(props.summary.recommendation.cards[0].title, 'A course');
105
+ t.is(props.summary.recommendation.cards[0].destination, undefined);
106
+ t.is(props.summary.recommendation.title, 'Continue learning:');
107
+ });
108
+ test('should override the recommendation title alone', t => {
109
+ const props = popinEnd({
110
+ ...options,
111
+ popinEnd: {
112
+ recommendationTitle: 'More to explore:'
113
+ }
114
+ }, {
115
+ dispatch: createDispatch(popinLearnerSuccess)
116
+ })(popinLearnerSuccess);
117
+ t.is(props.summary.header.cta.title, '__Next level');
118
+ t.is(props.summary.recommendation.title, 'More to explore:');
119
+ });
120
+ test('should replace the header button label and click action alone', t => {
121
+ let clicked = false;
122
+ const props = popinEnd({
123
+ ...options,
124
+ popinEnd: {
125
+ headerCta: {
126
+ title: 'Open my learning plan',
127
+ onClick: () => {
128
+ clicked = true;
129
+ }
130
+ }
131
+ }
132
+ }, {
133
+ dispatch: createDispatch(popinLearnerSuccess)
134
+ })(popinLearnerSuccess);
135
+ t.is(props.summary.header.cta.title, 'Open my learning plan');
136
+ t.falsy(props.summary.header.cta.showNextLevel);
137
+ t.is(props.summary.recommendation.title, '__Related subjects');
138
+ t.is(props.summary.footer.title, '__Back to home');
139
+ props.summary.header.cta.onClick();
140
+ t.true(clicked);
141
+ });
142
+ test('should add a header button when the current popin has none', t => {
143
+ const state = _set('data.exitNodes.entities.successExitNode.type', 'pending', popinLearnerSuccess);
144
+ let clicked = false;
145
+ const props = popinEnd({
146
+ ...options,
147
+ popinEnd: {
148
+ headerCta: {
149
+ title: 'Open my learning plan',
150
+ onClick: () => {
151
+ clicked = true;
152
+ }
153
+ }
154
+ }
155
+ }, {
156
+ dispatch: createDispatch(state)
157
+ })(state);
158
+ t.is(props.summary.header.cta.title, 'Open my learning plan');
159
+ props.summary.header.cta.onClick();
160
+ t.true(clicked);
161
+ });
162
+ test('should allow a header button label override while keeping its click action', async t => {
163
+ const state = _set('data.nextContent.entities.idProgression1234', null, popinLearnerSuccess);
164
+ const props = popinEnd({
165
+ ...options,
166
+ popinEnd: {
167
+ headerCta: {
168
+ title: 'Return to my dashboard'
169
+ }
170
+ }
171
+ }, {
172
+ dispatch: createDispatch(state)
173
+ })(state);
174
+ t.is(props.summary.header.cta.title, 'Return to my dashboard');
175
+ t.deepEqual(_map('type')(await props.summary.header.cta.onClick()), ['@@location/EXIT_REQUEST', '@@location/EXIT_FAILURE']);
176
+ });
177
+ test('should allow a header button click override while keeping its label', t => {
178
+ const state = _set('data.nextContent.entities.idProgression1234', null, popinLearnerSuccess);
179
+ let clicked = false;
180
+ const props = popinEnd({
181
+ ...options,
182
+ popinEnd: {
183
+ headerCta: {
184
+ onClick: () => {
185
+ clicked = true;
186
+ }
187
+ }
188
+ }
189
+ }, {
190
+ dispatch: createDispatch(state)
191
+ })(state);
192
+ t.is(props.summary.header.cta.title, '__Back to home');
193
+ props.summary.header.cta.onClick();
194
+ t.true(clicked);
195
+ });
196
+ test('should resolve overrides from the current end popin context', t => {
197
+ const state = popinLearnerSuccess;
198
+ const props = popinEnd({
199
+ ...options,
200
+ popinEnd: ({
201
+ recommendations,
202
+ exitNode,
203
+ recommendationTitle,
204
+ headerCta
205
+ }) => {
206
+ t.is(exitNode.type, 'success');
207
+ t.is(recommendations.length, 3);
208
+ t.is(recommendationTitle, '__Related subjects');
209
+ t.is(headerCta.title, '__Next level');
210
+ return {
211
+ recommendationTitle: 'Suggested next steps:'
212
+ };
213
+ }
214
+ }, {
215
+ dispatch: createDispatch(state)
216
+ })(state);
217
+ t.is(props.summary.recommendation.title, 'Suggested next steps:');
218
+ t.is(props.summary.header.cta.title, '__Next level');
219
+ });
220
+ test('should keep the retry action when the override returns nothing', t => {
221
+ const props = popinEnd({
222
+ ...options,
223
+ popinEnd: () => undefined
224
+ }, {
225
+ dispatch: createDispatch(popinLearnerFailure)
226
+ })(popinLearnerFailure);
227
+ t.is(props.summary.header.cta.title, '__Retry level');
228
+ t.is(props.summary.recommendation, null);
229
+ });
230
+ test('should keep an explicit redirect when the override returns nothing', t => {
231
+ const props = popinEnd({
232
+ ...options,
233
+ popinEnd: () => undefined
234
+ }, {
235
+ dispatch: createDispatch(popinLearnerSuccessWithRedirection)
236
+ })(popinLearnerSuccessWithRedirection);
237
+ t.is(props.summary.header.cta.title, '__Click to continue');
238
+ t.is(props.summary.header.cta.href, 'http://www.google.com');
239
+ });
240
+ test('should allow the caller to keep a redirect while changing only the recommendation title', t => {
241
+ const props = popinEnd({
242
+ ...options,
243
+ popinEnd: ({
244
+ headerCta
245
+ }) => {
246
+ t.is(headerCta.href, 'http://www.google.com');
247
+ return {
248
+ recommendationTitle: 'Continue exploring:'
249
+ };
250
+ }
251
+ }, {
252
+ dispatch: createDispatch(popinLearnerSuccessWithRedirection)
253
+ })(popinLearnerSuccessWithRedirection);
254
+ t.is(props.summary.header.cta.href, 'http://www.google.com');
255
+ t.is(props.summary.recommendation.title, 'Continue exploring:');
256
+ });
257
+ test('should leave an absent recommendation unchanged', t => {
258
+ const state = _set(`data.recommendations.entities.${getCurrentProgressionId(popinLearnerFailure)}`, undefined, popinLearnerFailure);
259
+ const props = popinEnd({
260
+ ...options,
261
+ popinEnd: {
262
+ recommendationTitle: 'Other courses:'
263
+ }
264
+ }, {
265
+ dispatch: createDispatch(state)
266
+ })(state);
267
+ t.is(props.summary.recommendation, null);
268
+ });
71
269
  test('should write, send, and go see a comment after success on learner progression', async t => {
72
270
  const state = _pipe(_set('data.comments.entities.idProgression1234.isSent', true), _set('ui.comments.text', 'textToSend'))(popinLearnerSuccess);
73
271
  const dispatch = createDispatch(state);
@@ -1 +1 @@
1
- {"version":3,"file":"popin-end.js","names":["test","mockTranslate","getCurrentProgressionId","LOCATION_NEXT_CONTENT_REQUEST","LOCATION_NEXT_CONTENT_SUCCESS","LOCATION_OPEN_RECOMMENDATION_REQUEST","LOCATION_OPEN_RECOMMENDATION_SUCCESS","LOCATION_SEE_COMMENT_REQUEST","LOCATION_SEE_COMMENT_SUCCESS","SEND_POST_COMMENT_REQUEST","SEND_POST_COMMENT_SUCCESS","UI_EDIT_COMMENT","popinEnd","popinLearnerSuccess","popinLearnerSuccessWithRedirection","popinLearnerFailure","popinLearnerFailureWithRedirection","popinLearnerAdaptiveFailure","popinMicrolearningFailure","popinMicrolearningSuccess","services","Comments","post","_identity","Location","openRecommendation","nextLevel","seeComment","createDispatch","state","getState","action","dispatched","dispatch","maybeAction","_isFunction","push","actionTypes","actions","_map","type","options","translate","t","props","header","summary","is","rank","stars","cta","title","true","onClick","falsy","href","dispatchedHeaderCta","deepEqual","prefix","buttonCta","button","dispatchedActionCta","comment","edition","postDisabled","_pipe","_set","isSent","value","onChange","dispatchedOnChange","target","onPost","dispatchedOnPost","confirmation","dispatchedOnClick","subtitle","lives","_isUndefined","recommendations","recommendation","dispatchedOpenRecommmendation","cards","ref","progressionId","_id","description","mediaDescription","media","mediaUrl","mimeType","subtitles","posters","__v","_get","success","total"],"sources":["../../../src/map-state-to-props/test/popin-end.js"],"sourcesContent":["import test from 'ava';\nimport {get, map, set, pipe, identity, isFunction, isUndefined} from 'lodash/fp';\n\nimport {mockTranslate} from '@coorpacademy/translate';\nimport {\n getCurrentProgressionId,\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS,\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS,\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS,\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS,\n UI_EDIT_COMMENT\n} from '@coorpacademy/player-store';\nimport popinEnd from '../popin-end';\n\nimport popinLearnerSuccess from './fixtures/popin-end/learner-success';\nimport popinLearnerSuccessWithRedirection from './fixtures/popin-end/learner-success-with-redirection';\nimport popinLearnerFailure from './fixtures/popin-end/learner-failure';\nimport popinLearnerFailureWithRedirection from './fixtures/popin-end/learner-failure-with-redirection';\nimport popinLearnerAdaptiveFailure from './fixtures/popin-end/learner-adaptive-failure';\nimport popinMicrolearningFailure from './fixtures/popin-end/fail';\nimport popinMicrolearningSuccess from './fixtures/popin-end/success';\n\nconst services = {\n Comments: {\n post: identity\n },\n Location: {\n openRecommendation: identity,\n nextLevel: identity,\n seeComment: identity\n }\n};\n\nconst createDispatch = state => {\n const getState = () => state;\n\n return async action => {\n const dispatched = [];\n const dispatch = maybeAction =>\n isFunction(maybeAction)\n ? maybeAction(dispatch, getState, {services})\n : dispatched.push(maybeAction);\n\n await dispatch(action);\n\n return dispatched;\n };\n};\n\nconst actionTypes = actions => map(({type}) => type, actions);\nconst options = {translate: mockTranslate};\n\ntest('should create a \"Next Level\" CTA after success on learner progression', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Next level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n const dispatchedHeaderCta = await cta.onClick();\n t.deepEqual(actionTypes(dispatchedHeaderCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Next level_');\n t.is(action.title, 'La recherche en ligne - Avancé');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Next level');\n const dispatchedActionCta = await buttonCta.onClick();\n t.deepEqual(actionTypes(dispatchedActionCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const comment = props.summary.comment;\n t.is(comment.edition.postDisabled, true);\n});\n\ntest('should write, send, and go see a comment after success on learner progression', async t => {\n const state = pipe(\n set('data.comments.entities.idProgression1234.isSent', true),\n set('ui.comments.text', 'textToSend')\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const comment = props.summary.comment;\n t.is(comment.isSent, true);\n t.is(comment.edition.value, 'textToSend');\n t.is(comment.edition.postDisabled, false);\n\n const onChange = comment.edition.onChange;\n t.true(isFunction(onChange));\n const dispatchedOnChange = await onChange({target: {value: 'foo'}});\n\n t.deepEqual(actionTypes(dispatchedOnChange), [UI_EDIT_COMMENT]);\n\n const onPost = comment.edition.onPost;\n t.true(isFunction(onPost));\n const dispatchedOnPost = await onPost();\n\n t.deepEqual(actionTypes(dispatchedOnPost), [\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS\n ]);\n\n const onClick = comment.confirmation.onClick;\n t.true(isFunction(onClick));\n const dispatchedOnClick = await onClick();\n\n t.deepEqual(actionTypes(dispatchedOnClick), [\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS\n ]);\n});\n\ntest('should not see comment section after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n t.is(props.summary.comment, null);\n t.is(props.summary.header.subtitle, '__You are out of lives!');\n t.is(props.summary.header.lives, 0);\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for failure popin', t => {\n const dispatch = createDispatch(popinLearnerFailureWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerFailureWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for success popin', t => {\n const dispatch = createDispatch(popinLearnerSuccessWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccessWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should not see comment section after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningFailure);\n t.is(props.summary.comment, null);\n});\n\ntest('should not see comment section after success on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningSuccess);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningSuccess);\n t.is(props.summary.comment, null);\n});\n\ntest(\"livesDisabled == true ---> should not see lives and 'You are out of lives!' message\", t => {\n const dispatch = createDispatch(popinLearnerAdaptiveFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerAdaptiveFailure);\n\n t.is(props.summary.header.subtitle, '__Nice try!');\n t.is(props.summary.header.lives, null);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with coach content', async t => {\n const state = pipe(\n set(['data', 'contents', 'level', 'entities', '1.B', 'level'], 'coach'),\n set('data.nextContent.entities.idProgression1234', null)\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n\n t.falsy(props.summary.action);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with content with only base level', async t => {\n const state = set(\n ['data', 'nextContent', 'entities', 'idProgression1234'],\n null,\n popinLearnerSuccess\n );\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n});\n\ntest('should create a \"Retry Level\" CTA after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n\n const header = props.summary.header;\n t.is(header.rank, '-1');\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Retry level_');\n t.is(action.title, 'La recherche en ligne - Base');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Retry level');\n});\n\ntest('should open recommendation', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const recommendations = props.summary.recommendation;\n\n const dispatchedOpenRecommmendation = await recommendations.cards[0].onClick();\n t.deepEqual(actionTypes(dispatchedOpenRecommmendation), [\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS\n ]);\n});\n\ntest('should create a \"Retry Chapter\" CTA after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {dispatch})(popinMicrolearningFailure);\n\n const header = props.summary.header;\n t.falsy(header.rank);\n t.falsy(header.stars);\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry chapter');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n});\n\ntest('should extract feedback content from exit node', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref)\n )(popinMicrolearningFailure);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n\ntest('should extract feedback content from exit node and counters', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'title total: {{ success }}',\n description: 'description {{ success }}/{{ total }}',\n mediaDescription: 'mediaDescription {{ total }}',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref),\n set(`data.progressions.entities.${progressionId}.state.variables`, {success: 4, total: 10})\n )(popinMicrolearningFailure);\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'title total: 4',\n description: 'description 4/10',\n mediaDescription: 'mediaDescription 10',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"popin-end.js","names":["test","mockTranslate","getCurrentProgressionId","LOCATION_NEXT_CONTENT_REQUEST","LOCATION_NEXT_CONTENT_SUCCESS","LOCATION_OPEN_RECOMMENDATION_REQUEST","LOCATION_OPEN_RECOMMENDATION_SUCCESS","LOCATION_SEE_COMMENT_REQUEST","LOCATION_SEE_COMMENT_SUCCESS","SEND_POST_COMMENT_REQUEST","SEND_POST_COMMENT_SUCCESS","UI_EDIT_COMMENT","popinEnd","popinLearnerSuccess","popinLearnerSuccessWithRedirection","popinLearnerFailure","popinLearnerFailureWithRedirection","popinLearnerAdaptiveFailure","popinMicrolearningFailure","popinMicrolearningSuccess","services","Comments","post","_identity","Location","openRecommendation","nextLevel","seeComment","createDispatch","state","getState","action","dispatched","dispatch","maybeAction","_isFunction","push","actionTypes","actions","_map","type","options","translate","t","props","header","summary","is","rank","stars","cta","title","true","onClick","falsy","href","dispatchedHeaderCta","deepEqual","prefix","buttonCta","button","dispatchedActionCta","comment","edition","postDisabled","_set","recommendation","cards","context","destination","received","current","recommendationTitle","recommendationContext","recommendations","undefined","clicked","headerCta","showNextLevel","footer","exitNode","length","_pipe","isSent","value","onChange","dispatchedOnChange","target","onPost","dispatchedOnPost","confirmation","dispatchedOnClick","subtitle","lives","_isUndefined","dispatchedOpenRecommmendation","ref","progressionId","_id","description","mediaDescription","media","mediaUrl","mimeType","subtitles","posters","__v","_get","success","total"],"sources":["../../../src/map-state-to-props/test/popin-end.js"],"sourcesContent":["import test from 'ava';\nimport {get, map, set, pipe, identity, isFunction, isUndefined} from 'lodash/fp';\n\nimport {mockTranslate} from '@coorpacademy/translate';\nimport {\n getCurrentProgressionId,\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS,\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS,\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS,\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS,\n UI_EDIT_COMMENT\n} from '@coorpacademy/player-store';\nimport popinEnd from '../popin-end';\n\nimport popinLearnerSuccess from './fixtures/popin-end/learner-success';\nimport popinLearnerSuccessWithRedirection from './fixtures/popin-end/learner-success-with-redirection';\nimport popinLearnerFailure from './fixtures/popin-end/learner-failure';\nimport popinLearnerFailureWithRedirection from './fixtures/popin-end/learner-failure-with-redirection';\nimport popinLearnerAdaptiveFailure from './fixtures/popin-end/learner-adaptive-failure';\nimport popinMicrolearningFailure from './fixtures/popin-end/fail';\nimport popinMicrolearningSuccess from './fixtures/popin-end/success';\n\nconst services = {\n Comments: {\n post: identity\n },\n Location: {\n openRecommendation: identity,\n nextLevel: identity,\n seeComment: identity\n }\n};\n\nconst createDispatch = state => {\n const getState = () => state;\n\n return async action => {\n const dispatched = [];\n const dispatch = maybeAction =>\n isFunction(maybeAction)\n ? maybeAction(dispatch, getState, {services})\n : dispatched.push(maybeAction);\n\n await dispatch(action);\n\n return dispatched;\n };\n};\n\nconst actionTypes = actions => map(({type}) => type, actions);\nconst options = {translate: mockTranslate};\n\ntest('should create a \"Next Level\" CTA after success on learner progression', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Next level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n const dispatchedHeaderCta = await cta.onClick();\n t.deepEqual(actionTypes(dispatchedHeaderCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Next level_');\n t.is(action.title, 'La recherche en ligne - Avancé');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Next level');\n const dispatchedActionCta = await buttonCta.onClick();\n t.deepEqual(actionTypes(dispatchedActionCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const comment = props.summary.comment;\n t.is(comment.edition.postDisabled, true);\n});\n\ntest('should use the usual popin labels without overrides', t => {\n const state = set(\n 'data.recommendations.entities.idProgression1234.0.source',\n 'another application',\n popinLearnerSuccess\n );\n const props = popinEnd(options, {dispatch: createDispatch(state)})(state);\n\n t.is(props.summary.header.cta.title, '__Next level');\n t.is(props.summary.recommendation.title, '__Related subjects');\n});\n\ntest('should expose recommendation context separately from cards to overrides', t => {\n const cards = [{title: 'A course'}];\n const context = {destination: 'learning-plan'};\n const state = set(\n 'data.recommendations.entities.idProgression1234',\n {cards, context},\n popinLearnerSuccess\n );\n let received;\n const props = popinEnd(\n {\n ...options,\n popinEnd: current => {\n received = current;\n return {recommendationTitle: 'Continue learning:'};\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(received.recommendationContext, context);\n t.is(received.recommendations, cards);\n t.is(props.summary.recommendation.cards[0].title, 'A course');\n t.is(props.summary.recommendation.cards[0].destination, undefined);\n t.is(props.summary.recommendation.title, 'Continue learning:');\n});\n\ntest('should override the recommendation title alone', t => {\n const props = popinEnd(\n {...options, popinEnd: {recommendationTitle: 'More to explore:'}},\n {dispatch: createDispatch(popinLearnerSuccess)}\n )(popinLearnerSuccess);\n\n t.is(props.summary.header.cta.title, '__Next level');\n t.is(props.summary.recommendation.title, 'More to explore:');\n});\n\ntest('should replace the header button label and click action alone', t => {\n let clicked = false;\n const props = popinEnd(\n {\n ...options,\n popinEnd: {\n headerCta: {\n title: 'Open my learning plan',\n onClick: () => {\n clicked = true;\n }\n }\n }\n },\n {dispatch: createDispatch(popinLearnerSuccess)}\n )(popinLearnerSuccess);\n\n t.is(props.summary.header.cta.title, 'Open my learning plan');\n t.falsy(props.summary.header.cta.showNextLevel);\n t.is(props.summary.recommendation.title, '__Related subjects');\n t.is(props.summary.footer.title, '__Back to home');\n props.summary.header.cta.onClick();\n t.true(clicked);\n});\n\ntest('should add a header button when the current popin has none', t => {\n const state = set('data.exitNodes.entities.successExitNode.type', 'pending', popinLearnerSuccess);\n let clicked = false;\n const props = popinEnd(\n {\n ...options,\n popinEnd: {\n headerCta: {\n title: 'Open my learning plan',\n onClick: () => {\n clicked = true;\n }\n }\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.header.cta.title, 'Open my learning plan');\n props.summary.header.cta.onClick();\n t.true(clicked);\n});\n\ntest('should allow a header button label override while keeping its click action', async t => {\n const state = set('data.nextContent.entities.idProgression1234', null, popinLearnerSuccess);\n const props = popinEnd(\n {...options, popinEnd: {headerCta: {title: 'Return to my dashboard'}}},\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.header.cta.title, 'Return to my dashboard');\n t.deepEqual(map('type')(await props.summary.header.cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n});\n\ntest('should allow a header button click override while keeping its label', t => {\n const state = set('data.nextContent.entities.idProgression1234', null, popinLearnerSuccess);\n let clicked = false;\n const props = popinEnd(\n {\n ...options,\n popinEnd: {\n headerCta: {\n onClick: () => {\n clicked = true;\n }\n }\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.header.cta.title, '__Back to home');\n props.summary.header.cta.onClick();\n t.true(clicked);\n});\n\ntest('should resolve overrides from the current end popin context', t => {\n const state = popinLearnerSuccess;\n const props = popinEnd(\n {\n ...options,\n popinEnd: ({recommendations, exitNode, recommendationTitle, headerCta}) => {\n t.is(exitNode.type, 'success');\n t.is(recommendations.length, 3);\n t.is(recommendationTitle, '__Related subjects');\n t.is(headerCta.title, '__Next level');\n return {recommendationTitle: 'Suggested next steps:'};\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.recommendation.title, 'Suggested next steps:');\n t.is(props.summary.header.cta.title, '__Next level');\n});\n\ntest('should keep the retry action when the override returns nothing', t => {\n const props = popinEnd(\n {...options, popinEnd: () => undefined},\n {dispatch: createDispatch(popinLearnerFailure)}\n )(popinLearnerFailure);\n\n t.is(props.summary.header.cta.title, '__Retry level');\n t.is(props.summary.recommendation, null);\n});\n\ntest('should keep an explicit redirect when the override returns nothing', t => {\n const props = popinEnd(\n {...options, popinEnd: () => undefined},\n {dispatch: createDispatch(popinLearnerSuccessWithRedirection)}\n )(popinLearnerSuccessWithRedirection);\n\n t.is(props.summary.header.cta.title, '__Click to continue');\n t.is(props.summary.header.cta.href, 'http://www.google.com');\n});\n\ntest('should allow the caller to keep a redirect while changing only the recommendation title', t => {\n const props = popinEnd(\n {\n ...options,\n popinEnd: ({headerCta}) => {\n t.is(headerCta.href, 'http://www.google.com');\n return {recommendationTitle: 'Continue exploring:'};\n }\n },\n {dispatch: createDispatch(popinLearnerSuccessWithRedirection)}\n )(popinLearnerSuccessWithRedirection);\n\n t.is(props.summary.header.cta.href, 'http://www.google.com');\n t.is(props.summary.recommendation.title, 'Continue exploring:');\n});\n\ntest('should leave an absent recommendation unchanged', t => {\n const state = set(\n `data.recommendations.entities.${getCurrentProgressionId(popinLearnerFailure)}`,\n undefined,\n popinLearnerFailure\n );\n const props = popinEnd(\n {...options, popinEnd: {recommendationTitle: 'Other courses:'}},\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.recommendation, null);\n});\n\ntest('should write, send, and go see a comment after success on learner progression', async t => {\n const state = pipe(\n set('data.comments.entities.idProgression1234.isSent', true),\n set('ui.comments.text', 'textToSend')\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const comment = props.summary.comment;\n t.is(comment.isSent, true);\n t.is(comment.edition.value, 'textToSend');\n t.is(comment.edition.postDisabled, false);\n\n const onChange = comment.edition.onChange;\n t.true(isFunction(onChange));\n const dispatchedOnChange = await onChange({target: {value: 'foo'}});\n\n t.deepEqual(actionTypes(dispatchedOnChange), [UI_EDIT_COMMENT]);\n\n const onPost = comment.edition.onPost;\n t.true(isFunction(onPost));\n const dispatchedOnPost = await onPost();\n\n t.deepEqual(actionTypes(dispatchedOnPost), [\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS\n ]);\n\n const onClick = comment.confirmation.onClick;\n t.true(isFunction(onClick));\n const dispatchedOnClick = await onClick();\n\n t.deepEqual(actionTypes(dispatchedOnClick), [\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS\n ]);\n});\n\ntest('should not see comment section after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n t.is(props.summary.comment, null);\n t.is(props.summary.header.subtitle, '__You are out of lives!');\n t.is(props.summary.header.lives, 0);\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for failure popin', t => {\n const dispatch = createDispatch(popinLearnerFailureWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerFailureWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for success popin', t => {\n const dispatch = createDispatch(popinLearnerSuccessWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccessWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should not see comment section after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningFailure);\n t.is(props.summary.comment, null);\n});\n\ntest('should not see comment section after success on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningSuccess);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningSuccess);\n t.is(props.summary.comment, null);\n});\n\ntest(\"livesDisabled == true ---> should not see lives and 'You are out of lives!' message\", t => {\n const dispatch = createDispatch(popinLearnerAdaptiveFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerAdaptiveFailure);\n\n t.is(props.summary.header.subtitle, '__Nice try!');\n t.is(props.summary.header.lives, null);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with coach content', async t => {\n const state = pipe(\n set(['data', 'contents', 'level', 'entities', '1.B', 'level'], 'coach'),\n set('data.nextContent.entities.idProgression1234', null)\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n\n t.falsy(props.summary.action);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with content with only base level', async t => {\n const state = set(\n ['data', 'nextContent', 'entities', 'idProgression1234'],\n null,\n popinLearnerSuccess\n );\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n});\n\ntest('should create a \"Retry Level\" CTA after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n\n const header = props.summary.header;\n t.is(header.rank, '-1');\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Retry level_');\n t.is(action.title, 'La recherche en ligne - Base');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Retry level');\n});\n\ntest('should open recommendation', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const recommendations = props.summary.recommendation;\n\n const dispatchedOpenRecommmendation = await recommendations.cards[0].onClick();\n t.deepEqual(actionTypes(dispatchedOpenRecommmendation), [\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS\n ]);\n});\n\ntest('should create a \"Retry Chapter\" CTA after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {dispatch})(popinMicrolearningFailure);\n\n const header = props.summary.header;\n t.falsy(header.rank);\n t.falsy(header.stars);\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry chapter');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n});\n\ntest('should extract feedback content from exit node', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref)\n )(popinMicrolearningFailure);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n\ntest('should extract feedback content from exit node and counters', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'title total: {{ success }}',\n description: 'description {{ success }}/{{ total }}',\n mediaDescription: 'mediaDescription {{ total }}',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref),\n set(`data.progressions.entities.${progressionId}.state.variables`, {success: 4, total: 10})\n )(popinMicrolearningFailure);\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'title total: 4',\n description: 'description 4/10',\n mediaDescription: 'mediaDescription 10',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -227,7 +227,45 @@ const popinEndStateToProps = (options, store) => {
227
227
  footer
228
228
  }
229
229
  };
230
- return props;
230
+ const popinEnd = options.popinEnd;
231
+ if (!popinEnd) {
232
+ return props;
233
+ }
234
+ const overrides = typeof popinEnd === 'function' ? popinEnd({
235
+ recommendations: (0, _playerStore.getRecommendations)(state),
236
+ recommendationContext: (0, _playerStore.getRecommendationContext)(state),
237
+ exitNode,
238
+ recommendationTitle: (0, _get2.default)('summary.recommendation.title', props),
239
+ headerCta: (0, _get2.default)('summary.header.cta', props)
240
+ }) : popinEnd;
241
+ if (!overrides) {
242
+ return props;
243
+ }
244
+ const hasRecommendationTitle = overrides.recommendationTitle !== undefined && props.summary.recommendation;
245
+ const hasHeaderCta = !!overrides.headerCta;
246
+ if (!hasRecommendationTitle && !hasHeaderCta) return props;
247
+ const currentHeaderCta = props.summary.header.cta || {};
248
+ const replacesAction = hasHeaderCta && (Object.prototype.hasOwnProperty.call(overrides.headerCta, 'onClick') || Object.prototype.hasOwnProperty.call(overrides.headerCta, 'href'));
249
+ const headerCta = hasHeaderCta ? {
250
+ ...(replacesAction ? {
251
+ title: currentHeaderCta.title
252
+ } : currentHeaderCta),
253
+ ...overrides.headerCta
254
+ } : currentHeaderCta;
255
+ return {
256
+ ...props,
257
+ summary: {
258
+ ...props.summary,
259
+ header: hasHeaderCta ? {
260
+ ...props.summary.header,
261
+ cta: headerCta
262
+ } : props.summary.header,
263
+ recommendation: hasRecommendationTitle ? {
264
+ ...props.summary.recommendation,
265
+ title: overrides.recommendationTitle
266
+ } : props.summary.recommendation
267
+ }
268
+ };
231
269
  };
232
270
  };
233
271
  var _default = exports.default = popinEndStateToProps;
@@ -1 +1 @@
1
- {"version":3,"file":"popin-end.js","names":["_playerStore","require","_header","_interopRequireDefault","_errorPopin","e","__esModule","default","extractRank","state","start","getStartRank","end","getEndRank","sign","diff","Math","abs","extractStars","progression","getCurrentProgression","stars","_get2","bestScore","getBestScore","comment","translate","dispatch","progressionId","getCurrentProgressionId","content","getCurrentContent","message","isSent","isCommentSent","confirmation","commentSectionTitle","confirmationLinkText","onClick","seeComment","edition","title","value","postDisabled","_isEmpty2","onChange","editComment","target","onPost","postComment","ctaForFail","redirection","href","retry","isCurrentEngineMicrolearning","summaryHeader","hide","count","getLives","lives","successCta","exit","getRedirectURLAfterEnd","isCurrentEngineLearner","level","_nextLevel","getNextContent","nextLevel","showNextLevel","_cond2","_pipe2","_isEqual2","type","_getOr2","subtitle","failed","rank","cta","_constant2","extractRecommendation","_recommendations","getRecommendations","hasRecommendations","_isNull2","_isArray2","recommendations","_map2","recommendation","openRecommendation","cards","extractAction","nextContent","description","prefix","name","levelTranslation","button","currentContent","extractFeedback","_pick2","_omit2","popinEndStateToProps","options","store","headerProps_","headerProps","summaryHeader_","extractAction_","extractRecommendation_","comment_","exitNode","getCurrentExitNode","canPostAComment","footer","props","header","mode","popinError","mapStateToErrorPopinProps","summary","action","feedback","_default","exports"],"sources":["../../src/map-state-to-props/popin-end.js"],"sourcesContent":["import {\n cond,\n constant,\n get,\n getOr,\n isArray,\n isEqual,\n isEmpty,\n map,\n pick,\n pipe,\n omit,\n isNull\n} from 'lodash/fp';\n\nimport {\n editComment,\n exit,\n getBestScore,\n getCurrentContent,\n getCurrentExitNode,\n getCurrentProgression,\n getCurrentProgressionId,\n getEndRank,\n getLives,\n getNextContent,\n getRecommendations,\n getStartRank,\n isCommentSent,\n isCurrentEngineLearner,\n isCurrentEngineMicrolearning,\n nextLevel,\n openRecommendation,\n postComment,\n retry,\n seeComment,\n getRedirectURLAfterEnd\n} from '@coorpacademy/player-store';\nimport headerProps from './header';\nimport mapStateToErrorPopinProps from './error-popin';\n\nconst extractRank = state => {\n const start = getStartRank(state);\n const end = getEndRank(state);\n\n if (start === end) {\n return null;\n } else {\n const sign = end - start > 0 ? '-' : '+';\n const diff = Math.abs(end - start);\n return `${sign}${diff}`;\n }\n};\n\nconst extractStars = state => {\n const progression = getCurrentProgression(state);\n const stars = get('state.stars')(progression);\n const bestScore = getBestScore(state);\n\n return stars > bestScore ? `+${stars - bestScore}` : '+0';\n};\n\nconst comment =\n ({translate}, {dispatch}) =>\n state => {\n const progressionId = getCurrentProgressionId(state);\n const content = getCurrentContent(state);\n const message = get('ui.comments.text', state);\n return {\n isSent: isCommentSent(state),\n confirmation: {\n commentSectionTitle: translate('Thank you for your review!'),\n confirmationLinkText: translate('See your comment and those of your peers'),\n onClick: e => dispatch(seeComment)\n },\n edition: {\n title: translate('Share your opinion on this course'),\n value: get('ui.comments.text', state),\n postDisabled: isEmpty(get('ui.comments.text', state)),\n onChange: e => dispatch(editComment(e.target.value)),\n onPost: e => dispatch(postComment(progressionId, content, message))\n }\n };\n };\n\nconst ctaForFail = (redirection, translate, dispatch, state) => {\n if (redirection) {\n return {\n href: redirection,\n title: translate('Click to continue')\n };\n }\n\n return {\n onClick: () => dispatch(retry),\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level')\n };\n};\n\nconst summaryHeader =\n ({translate}, {dispatch}) =>\n state => {\n const {hide, count} = getLives(state);\n const lives = hide ? null : count;\n\n let successCta = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const redirection = getRedirectURLAfterEnd(state);\n if (redirection) {\n successCta = {\n title: translate('Click to continue'),\n href: redirection\n };\n }\n\n if (isCurrentEngineLearner(state) && !redirection) {\n const level = get('level', getCurrentContent(state));\n if (level === 'advanced' || level === 'base') {\n const _nextLevel = getNextContent(state);\n if (_nextLevel) {\n successCta = {\n title: translate('Next level'),\n onClick: () => dispatch(nextLevel),\n showNextLevel: true\n };\n }\n }\n }\n\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => ({\n type: 'popinEnd',\n title: getOr('', 'name')(getCurrentContent(state)),\n subtitle: translate('Congratulations!'),\n failed: false,\n stars: extractStars(state),\n rank: extractRank(state),\n cta: successCta\n })\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => ({\n type: 'popinEnd',\n title: translate('Ooops'),\n subtitle: lives === 0 ? translate('You are out of lives!') : translate('Nice try!'),\n failed: true,\n lives,\n rank: extractRank(state),\n stars: null,\n cta: ctaForFail(redirection, translate, dispatch, state)\n })\n ],\n [constant(true), constant({type: 'popinEnd'})]\n ]);\n };\n\nconst extractRecommendation =\n ({translate}, {dispatch}) =>\n state => {\n const _recommendations = getRecommendations(state);\n const hasRecommendations = isNull(_recommendations) || isArray(_recommendations);\n\n if (!hasRecommendations) {\n return null;\n }\n\n const recommendations = map(\n recommendation => ({\n ...recommendation,\n onClick: () => dispatch(openRecommendation(recommendation))\n }),\n _recommendations\n );\n\n return {\n title: translate('Related subjects'),\n cards: recommendations\n };\n };\n\nconst extractAction =\n ({translate}, {dispatch}) =>\n state => {\n const nextContent = getNextContent(state);\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => {\n if (get('nextContentType', nextContent) === 'chapter') {\n return {\n type: 'nextCourse',\n description: translate('Check out the next chapter in this course!'),\n prefix: translate('Next chapter_'),\n ...nextContent\n };\n } else if (nextContent) {\n // then it is a level\n const {name, levelTranslation} = nextContent;\n return {\n type: 'simple',\n prefix: translate('Next level_'),\n title: `${name} - ${levelTranslation}`,\n button: {\n title: translate('Next level'),\n href: null,\n onClick: () => dispatch(nextLevel)\n }\n };\n }\n }\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => {\n const currentContent = getCurrentContent(state);\n let title = getOr('', 'name', currentContent);\n if (isCurrentEngineLearner(state)) {\n title = `${getOr('', 'name', currentContent)} - ${getOr(\n '',\n 'levelTranslation',\n currentContent\n )}`;\n }\n return {\n type: 'simple',\n prefix: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter_')\n : translate('Retry level_'),\n title,\n button: {\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level'),\n onClick: () => dispatch(retry)\n }\n };\n }\n ],\n [constant(true), constant(null)]\n ]);\n };\n\nconst extractFeedback = pipe(\n pick(['title', 'description', 'media', 'mediaDescription']),\n omit(['media.ref', 'media.subtitles', 'media.posters'])\n);\n\nconst popinEndStateToProps = (options, store) => {\n const headerProps_ = headerProps(options, store);\n const summaryHeader_ = summaryHeader(options, store);\n const extractAction_ = extractAction(options, store);\n const extractRecommendation_ = extractRecommendation(options, store);\n const comment_ = comment(options, store);\n\n return state => {\n const progression = getCurrentProgression(state);\n\n const {translate} = options;\n const {dispatch} = store;\n\n const exitNode = getCurrentExitNode(state);\n\n const canPostAComment =\n get('type', exitNode) === 'success' && get('engine.ref', progression) === 'learner';\n\n const footer = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const props = {\n header: headerProps_(state),\n mode: options.mode || 'default',\n popinError: mapStateToErrorPopinProps(dispatch)(state),\n summary: {\n header: summaryHeader_(state)(exitNode),\n action: extractAction_(state)(exitNode),\n feedback: extractFeedback(exitNode),\n recommendation: extractRecommendation_(state),\n comment: canPostAComment ? comment_(state) : null,\n footer\n }\n };\n\n return props;\n };\n};\n\nexport default popinEndStateToProps;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"popin-end.js","names":["_playerStore","require","_header","_interopRequireDefault","_errorPopin","e","__esModule","default","extractRank","state","start","getStartRank","end","getEndRank","sign","diff","Math","abs","extractStars","progression","getCurrentProgression","stars","_get2","bestScore","getBestScore","comment","translate","dispatch","progressionId","getCurrentProgressionId","content","getCurrentContent","message","isSent","isCommentSent","confirmation","commentSectionTitle","confirmationLinkText","onClick","seeComment","edition","title","value","postDisabled","_isEmpty2","onChange","editComment","target","onPost","postComment","ctaForFail","redirection","href","retry","isCurrentEngineMicrolearning","summaryHeader","hide","count","getLives","lives","successCta","exit","getRedirectURLAfterEnd","isCurrentEngineLearner","level","_nextLevel","getNextContent","nextLevel","showNextLevel","_cond2","_pipe2","_isEqual2","type","_getOr2","subtitle","failed","rank","cta","_constant2","extractRecommendation","_recommendations","getRecommendations","hasRecommendations","_isNull2","_isArray2","recommendations","_map2","recommendation","openRecommendation","cards","extractAction","nextContent","description","prefix","name","levelTranslation","button","currentContent","extractFeedback","_pick2","_omit2","popinEndStateToProps","options","store","headerProps_","headerProps","summaryHeader_","extractAction_","extractRecommendation_","comment_","exitNode","getCurrentExitNode","canPostAComment","footer","props","header","mode","popinError","mapStateToErrorPopinProps","summary","action","feedback","popinEnd","overrides","recommendationContext","getRecommendationContext","recommendationTitle","headerCta","hasRecommendationTitle","undefined","hasHeaderCta","currentHeaderCta","replacesAction","Object","prototype","hasOwnProperty","call","_default","exports"],"sources":["../../src/map-state-to-props/popin-end.js"],"sourcesContent":["import {\n cond,\n constant,\n get,\n getOr,\n isArray,\n isEqual,\n isEmpty,\n map,\n pick,\n pipe,\n omit,\n isNull\n} from 'lodash/fp';\n\nimport {\n editComment,\n exit,\n getBestScore,\n getCurrentContent,\n getCurrentExitNode,\n getCurrentProgression,\n getCurrentProgressionId,\n getEndRank,\n getLives,\n getNextContent,\n getRecommendationContext,\n getRecommendations,\n getStartRank,\n isCommentSent,\n isCurrentEngineLearner,\n isCurrentEngineMicrolearning,\n nextLevel,\n openRecommendation,\n postComment,\n retry,\n seeComment,\n getRedirectURLAfterEnd\n} from '@coorpacademy/player-store';\nimport headerProps from './header';\nimport mapStateToErrorPopinProps from './error-popin';\n\nconst extractRank = state => {\n const start = getStartRank(state);\n const end = getEndRank(state);\n\n if (start === end) {\n return null;\n } else {\n const sign = end - start > 0 ? '-' : '+';\n const diff = Math.abs(end - start);\n return `${sign}${diff}`;\n }\n};\n\nconst extractStars = state => {\n const progression = getCurrentProgression(state);\n const stars = get('state.stars')(progression);\n const bestScore = getBestScore(state);\n\n return stars > bestScore ? `+${stars - bestScore}` : '+0';\n};\n\nconst comment =\n ({translate}, {dispatch}) =>\n state => {\n const progressionId = getCurrentProgressionId(state);\n const content = getCurrentContent(state);\n const message = get('ui.comments.text', state);\n return {\n isSent: isCommentSent(state),\n confirmation: {\n commentSectionTitle: translate('Thank you for your review!'),\n confirmationLinkText: translate('See your comment and those of your peers'),\n onClick: e => dispatch(seeComment)\n },\n edition: {\n title: translate('Share your opinion on this course'),\n value: get('ui.comments.text', state),\n postDisabled: isEmpty(get('ui.comments.text', state)),\n onChange: e => dispatch(editComment(e.target.value)),\n onPost: e => dispatch(postComment(progressionId, content, message))\n }\n };\n };\n\nconst ctaForFail = (redirection, translate, dispatch, state) => {\n if (redirection) {\n return {\n href: redirection,\n title: translate('Click to continue')\n };\n }\n\n return {\n onClick: () => dispatch(retry),\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level')\n };\n};\n\nconst summaryHeader =\n ({translate}, {dispatch}) =>\n state => {\n const {hide, count} = getLives(state);\n const lives = hide ? null : count;\n\n let successCta = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const redirection = getRedirectURLAfterEnd(state);\n if (redirection) {\n successCta = {\n title: translate('Click to continue'),\n href: redirection\n };\n }\n\n if (isCurrentEngineLearner(state) && !redirection) {\n const level = get('level', getCurrentContent(state));\n if (level === 'advanced' || level === 'base') {\n const _nextLevel = getNextContent(state);\n if (_nextLevel) {\n successCta = {\n title: translate('Next level'),\n onClick: () => dispatch(nextLevel),\n showNextLevel: true\n };\n }\n }\n }\n\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => ({\n type: 'popinEnd',\n title: getOr('', 'name')(getCurrentContent(state)),\n subtitle: translate('Congratulations!'),\n failed: false,\n stars: extractStars(state),\n rank: extractRank(state),\n cta: successCta\n })\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => ({\n type: 'popinEnd',\n title: translate('Ooops'),\n subtitle: lives === 0 ? translate('You are out of lives!') : translate('Nice try!'),\n failed: true,\n lives,\n rank: extractRank(state),\n stars: null,\n cta: ctaForFail(redirection, translate, dispatch, state)\n })\n ],\n [constant(true), constant({type: 'popinEnd'})]\n ]);\n };\n\nconst extractRecommendation =\n ({translate}, {dispatch}) =>\n state => {\n const _recommendations = getRecommendations(state);\n const hasRecommendations = isNull(_recommendations) || isArray(_recommendations);\n\n if (!hasRecommendations) {\n return null;\n }\n\n const recommendations = map(\n recommendation => ({\n ...recommendation,\n onClick: () => dispatch(openRecommendation(recommendation))\n }),\n _recommendations\n );\n\n return {\n title: translate('Related subjects'),\n cards: recommendations\n };\n };\n\nconst extractAction =\n ({translate}, {dispatch}) =>\n state => {\n const nextContent = getNextContent(state);\n return cond([\n [\n pipe(get('type'), isEqual('success')),\n () => {\n if (get('nextContentType', nextContent) === 'chapter') {\n return {\n type: 'nextCourse',\n description: translate('Check out the next chapter in this course!'),\n prefix: translate('Next chapter_'),\n ...nextContent\n };\n } else if (nextContent) {\n // then it is a level\n const {name, levelTranslation} = nextContent;\n return {\n type: 'simple',\n prefix: translate('Next level_'),\n title: `${name} - ${levelTranslation}`,\n button: {\n title: translate('Next level'),\n href: null,\n onClick: () => dispatch(nextLevel)\n }\n };\n }\n }\n ],\n [\n pipe(get('type'), isEqual('failure')),\n () => {\n const currentContent = getCurrentContent(state);\n let title = getOr('', 'name', currentContent);\n if (isCurrentEngineLearner(state)) {\n title = `${getOr('', 'name', currentContent)} - ${getOr(\n '',\n 'levelTranslation',\n currentContent\n )}`;\n }\n return {\n type: 'simple',\n prefix: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter_')\n : translate('Retry level_'),\n title,\n button: {\n title: isCurrentEngineMicrolearning(state)\n ? translate('Retry chapter')\n : translate('Retry level'),\n onClick: () => dispatch(retry)\n }\n };\n }\n ],\n [constant(true), constant(null)]\n ]);\n };\n\nconst extractFeedback = pipe(\n pick(['title', 'description', 'media', 'mediaDescription']),\n omit(['media.ref', 'media.subtitles', 'media.posters'])\n);\n\nconst popinEndStateToProps = (options, store) => {\n const headerProps_ = headerProps(options, store);\n const summaryHeader_ = summaryHeader(options, store);\n const extractAction_ = extractAction(options, store);\n const extractRecommendation_ = extractRecommendation(options, store);\n const comment_ = comment(options, store);\n\n return state => {\n const progression = getCurrentProgression(state);\n\n const {translate} = options;\n const {dispatch} = store;\n\n const exitNode = getCurrentExitNode(state);\n\n const canPostAComment =\n get('type', exitNode) === 'success' && get('engine.ref', progression) === 'learner';\n\n const footer = {\n title: translate('Back to home'),\n onClick: () => dispatch(exit)\n };\n\n const props = {\n header: headerProps_(state),\n mode: options.mode || 'default',\n popinError: mapStateToErrorPopinProps(dispatch)(state),\n summary: {\n header: summaryHeader_(state)(exitNode),\n action: extractAction_(state)(exitNode),\n feedback: extractFeedback(exitNode),\n recommendation: extractRecommendation_(state),\n comment: canPostAComment ? comment_(state) : null,\n footer\n }\n };\n\n const popinEnd = options.popinEnd;\n if (!popinEnd) {\n return props;\n }\n\n const overrides =\n typeof popinEnd === 'function'\n ? popinEnd({\n recommendations: getRecommendations(state),\n recommendationContext: getRecommendationContext(state),\n exitNode,\n recommendationTitle: get('summary.recommendation.title', props),\n headerCta: get('summary.header.cta', props)\n })\n : popinEnd;\n if (!overrides) {\n return props;\n }\n\n const hasRecommendationTitle =\n overrides.recommendationTitle !== undefined && props.summary.recommendation;\n const hasHeaderCta = !!overrides.headerCta;\n if (!hasRecommendationTitle && !hasHeaderCta) return props;\n\n const currentHeaderCta = props.summary.header.cta || {};\n const replacesAction =\n hasHeaderCta &&\n (Object.prototype.hasOwnProperty.call(overrides.headerCta, 'onClick') ||\n Object.prototype.hasOwnProperty.call(overrides.headerCta, 'href'));\n const headerCta = hasHeaderCta\n ? {\n ...(replacesAction ? {title: currentHeaderCta.title} : currentHeaderCta),\n ...overrides.headerCta\n }\n : currentHeaderCta;\n\n return {\n ...props,\n summary: {\n ...props.summary,\n header: hasHeaderCta ? {...props.summary.header, cta: headerCta} : props.summary.header,\n recommendation: hasRecommendationTitle\n ? {...props.summary.recommendation, title: overrides.recommendationTitle}\n : props.summary.recommendation\n }\n };\n };\n};\n\nexport default popinEndStateToProps;\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,IAAAA,YAAA,GAAAC,OAAA;AAwBA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAD,sBAAA,CAAAF,OAAA;AAAsD,SAAAE,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtD,MAAMG,WAAW,GAAGC,KAAK,IAAI;EAC3B,MAAMC,KAAK,GAAG,IAAAC,yBAAY,EAACF,KAAK,CAAC;EACjC,MAAMG,GAAG,GAAG,IAAAC,uBAAU,EAACJ,KAAK,CAAC;EAE7B,IAAIC,KAAK,KAAKE,GAAG,EAAE;IACjB,OAAO,IAAI;EACb,CAAC,MAAM;IACL,MAAME,IAAI,GAAGF,GAAG,GAAGF,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;IACxC,MAAMK,IAAI,GAAGC,IAAI,CAACC,GAAG,CAACL,GAAG,GAAGF,KAAK,CAAC;IAClC,OAAO,GAAGI,IAAI,GAAGC,IAAI,EAAE;EACzB;AACF,CAAC;AAED,MAAMG,YAAY,GAAGT,KAAK,IAAI;EAC5B,MAAMU,WAAW,GAAG,IAAAC,kCAAqB,EAACX,KAAK,CAAC;EAChD,MAAMY,KAAK,GAAG,IAAAC,KAAA,CAAAf,OAAA,EAAI,aAAa,CAAC,CAACY,WAAW,CAAC;EAC7C,MAAMI,SAAS,GAAG,IAAAC,yBAAY,EAACf,KAAK,CAAC;EAErC,OAAOY,KAAK,GAAGE,SAAS,GAAG,IAAIF,KAAK,GAAGE,SAAS,EAAE,GAAG,IAAI;AAC3D,CAAC;AAED,MAAME,OAAO,GACXA,CAAC;EAACC;AAAS,CAAC,EAAE;EAACC;AAAQ,CAAC,KACxBlB,KAAK,IAAI;EACP,MAAMmB,aAAa,GAAG,IAAAC,oCAAuB,EAACpB,KAAK,CAAC;EACpD,MAAMqB,OAAO,GAAG,IAAAC,8BAAiB,EAACtB,KAAK,CAAC;EACxC,MAAMuB,OAAO,GAAG,IAAAV,KAAA,CAAAf,OAAA,EAAI,kBAAkB,EAAEE,KAAK,CAAC;EAC9C,OAAO;IACLwB,MAAM,EAAE,IAAAC,0BAAa,EAACzB,KAAK,CAAC;IAC5B0B,YAAY,EAAE;MACZC,mBAAmB,EAAEV,SAAS,CAAC,4BAA4B,CAAC;MAC5DW,oBAAoB,EAAEX,SAAS,CAAC,0CAA0C,CAAC;MAC3EY,OAAO,EAAEjC,CAAC,IAAIsB,QAAQ,CAACY,uBAAU;IACnC,CAAC;IACDC,OAAO,EAAE;MACPC,KAAK,EAAEf,SAAS,CAAC,mCAAmC,CAAC;MACrDgB,KAAK,EAAE,IAAApB,KAAA,CAAAf,OAAA,EAAI,kBAAkB,EAAEE,KAAK,CAAC;MACrCkC,YAAY,EAAE,IAAAC,SAAA,CAAArC,OAAA,EAAQ,IAAAe,KAAA,CAAAf,OAAA,EAAI,kBAAkB,EAAEE,KAAK,CAAC,CAAC;MACrDoC,QAAQ,EAAExC,CAAC,IAAIsB,QAAQ,CAAC,IAAAmB,wBAAW,EAACzC,CAAC,CAAC0C,MAAM,CAACL,KAAK,CAAC,CAAC;MACpDM,MAAM,EAAE3C,CAAC,IAAIsB,QAAQ,CAAC,IAAAsB,wBAAW,EAACrB,aAAa,EAAEE,OAAO,EAAEE,OAAO,CAAC;IACpE;EACF,CAAC;AACH,CAAC;AAEH,MAAMkB,UAAU,GAAGA,CAACC,WAAW,EAAEzB,SAAS,EAAEC,QAAQ,EAAElB,KAAK,KAAK;EAC9D,IAAI0C,WAAW,EAAE;IACf,OAAO;MACLC,IAAI,EAAED,WAAW;MACjBV,KAAK,EAAEf,SAAS,CAAC,mBAAmB;IACtC,CAAC;EACH;EAEA,OAAO;IACLY,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAAC0B,kBAAK,CAAC;IAC9BZ,KAAK,EAAE,IAAAa,yCAA4B,EAAC7C,KAAK,CAAC,GACtCiB,SAAS,CAAC,eAAe,CAAC,GAC1BA,SAAS,CAAC,aAAa;EAC7B,CAAC;AACH,CAAC;AAED,MAAM6B,aAAa,GACjBA,CAAC;EAAC7B;AAAS,CAAC,EAAE;EAACC;AAAQ,CAAC,KACxBlB,KAAK,IAAI;EACP,MAAM;IAAC+C,IAAI;IAAEC;EAAK,CAAC,GAAG,IAAAC,qBAAQ,EAACjD,KAAK,CAAC;EACrC,MAAMkD,KAAK,GAAGH,IAAI,GAAG,IAAI,GAAGC,KAAK;EAEjC,IAAIG,UAAU,GAAG;IACfnB,KAAK,EAAEf,SAAS,CAAC,cAAc,CAAC;IAChCY,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAACkC,iBAAI;EAC9B,CAAC;EAED,MAAMV,WAAW,GAAG,IAAAW,mCAAsB,EAACrD,KAAK,CAAC;EACjD,IAAI0C,WAAW,EAAE;IACfS,UAAU,GAAG;MACXnB,KAAK,EAAEf,SAAS,CAAC,mBAAmB,CAAC;MACrC0B,IAAI,EAAED;IACR,CAAC;EACH;EAEA,IAAI,IAAAY,mCAAsB,EAACtD,KAAK,CAAC,IAAI,CAAC0C,WAAW,EAAE;IACjD,MAAMa,KAAK,GAAG,IAAA1C,KAAA,CAAAf,OAAA,EAAI,OAAO,EAAE,IAAAwB,8BAAiB,EAACtB,KAAK,CAAC,CAAC;IACpD,IAAIuD,KAAK,KAAK,UAAU,IAAIA,KAAK,KAAK,MAAM,EAAE;MAC5C,MAAMC,UAAU,GAAG,IAAAC,2BAAc,EAACzD,KAAK,CAAC;MACxC,IAAIwD,UAAU,EAAE;QACdL,UAAU,GAAG;UACXnB,KAAK,EAAEf,SAAS,CAAC,YAAY,CAAC;UAC9BY,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAACwC,sBAAS,CAAC;UAClCC,aAAa,EAAE;QACjB,CAAC;MACH;IACF;EACF;EAEA,OAAO,IAAAC,MAAA,CAAA9D,OAAA,EAAK,CACV,CACE,IAAA+D,MAAA,CAAA/D,OAAA,EAAK,IAAAe,KAAA,CAAAf,OAAA,EAAI,MAAM,CAAC,EAAE,IAAAgE,SAAA,CAAAhE,OAAA,EAAQ,SAAS,CAAC,CAAC,EACrC,OAAO;IACLiE,IAAI,EAAE,UAAU;IAChB/B,KAAK,EAAE,IAAAgC,OAAA,CAAAlE,OAAA,EAAM,EAAE,EAAE,MAAM,CAAC,CAAC,IAAAwB,8BAAiB,EAACtB,KAAK,CAAC,CAAC;IAClDiE,QAAQ,EAAEhD,SAAS,CAAC,kBAAkB,CAAC;IACvCiD,MAAM,EAAE,KAAK;IACbtD,KAAK,EAAEH,YAAY,CAACT,KAAK,CAAC;IAC1BmE,IAAI,EAAEpE,WAAW,CAACC,KAAK,CAAC;IACxBoE,GAAG,EAAEjB;EACP,CAAC,CAAC,CACH,EACD,CACE,IAAAU,MAAA,CAAA/D,OAAA,EAAK,IAAAe,KAAA,CAAAf,OAAA,EAAI,MAAM,CAAC,EAAE,IAAAgE,SAAA,CAAAhE,OAAA,EAAQ,SAAS,CAAC,CAAC,EACrC,OAAO;IACLiE,IAAI,EAAE,UAAU;IAChB/B,KAAK,EAAEf,SAAS,CAAC,OAAO,CAAC;IACzBgD,QAAQ,EAAEf,KAAK,KAAK,CAAC,GAAGjC,SAAS,CAAC,uBAAuB,CAAC,GAAGA,SAAS,CAAC,WAAW,CAAC;IACnFiD,MAAM,EAAE,IAAI;IACZhB,KAAK;IACLiB,IAAI,EAAEpE,WAAW,CAACC,KAAK,CAAC;IACxBY,KAAK,EAAE,IAAI;IACXwD,GAAG,EAAE3B,UAAU,CAACC,WAAW,EAAEzB,SAAS,EAAEC,QAAQ,EAAElB,KAAK;EACzD,CAAC,CAAC,CACH,EACD,CAAC,IAAAqE,UAAA,CAAAvE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAAuE,UAAA,CAAAvE,OAAA,EAAS;IAACiE,IAAI,EAAE;EAAU,CAAC,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC;AAEH,MAAMO,qBAAqB,GACzBA,CAAC;EAACrD;AAAS,CAAC,EAAE;EAACC;AAAQ,CAAC,KACxBlB,KAAK,IAAI;EACP,MAAMuE,gBAAgB,GAAG,IAAAC,+BAAkB,EAACxE,KAAK,CAAC;EAClD,MAAMyE,kBAAkB,GAAG,IAAAC,QAAA,CAAA5E,OAAA,EAAOyE,gBAAgB,CAAC,IAAI,IAAAI,SAAA,CAAA7E,OAAA,EAAQyE,gBAAgB,CAAC;EAEhF,IAAI,CAACE,kBAAkB,EAAE;IACvB,OAAO,IAAI;EACb;EAEA,MAAMG,eAAe,GAAG,IAAAC,KAAA,CAAA/E,OAAA,EACtBgF,cAAc,KAAK;IACjB,GAAGA,cAAc;IACjBjD,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAAC,IAAA6D,+BAAkB,EAACD,cAAc,CAAC;EAC5D,CAAC,CAAC,EACFP,gBACF,CAAC;EAED,OAAO;IACLvC,KAAK,EAAEf,SAAS,CAAC,kBAAkB,CAAC;IACpC+D,KAAK,EAAEJ;EACT,CAAC;AACH,CAAC;AAEH,MAAMK,aAAa,GACjBA,CAAC;EAAChE;AAAS,CAAC,EAAE;EAACC;AAAQ,CAAC,KACxBlB,KAAK,IAAI;EACP,MAAMkF,WAAW,GAAG,IAAAzB,2BAAc,EAACzD,KAAK,CAAC;EACzC,OAAO,IAAA4D,MAAA,CAAA9D,OAAA,EAAK,CACV,CACE,IAAA+D,MAAA,CAAA/D,OAAA,EAAK,IAAAe,KAAA,CAAAf,OAAA,EAAI,MAAM,CAAC,EAAE,IAAAgE,SAAA,CAAAhE,OAAA,EAAQ,SAAS,CAAC,CAAC,EACrC,MAAM;IACJ,IAAI,IAAAe,KAAA,CAAAf,OAAA,EAAI,iBAAiB,EAAEoF,WAAW,CAAC,KAAK,SAAS,EAAE;MACrD,OAAO;QACLnB,IAAI,EAAE,YAAY;QAClBoB,WAAW,EAAElE,SAAS,CAAC,4CAA4C,CAAC;QACpEmE,MAAM,EAAEnE,SAAS,CAAC,eAAe,CAAC;QAClC,GAAGiE;MACL,CAAC;IACH,CAAC,MAAM,IAAIA,WAAW,EAAE;MACtB;MACA,MAAM;QAACG,IAAI;QAAEC;MAAgB,CAAC,GAAGJ,WAAW;MAC5C,OAAO;QACLnB,IAAI,EAAE,QAAQ;QACdqB,MAAM,EAAEnE,SAAS,CAAC,aAAa,CAAC;QAChCe,KAAK,EAAE,GAAGqD,IAAI,MAAMC,gBAAgB,EAAE;QACtCC,MAAM,EAAE;UACNvD,KAAK,EAAEf,SAAS,CAAC,YAAY,CAAC;UAC9B0B,IAAI,EAAE,IAAI;UACVd,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAACwC,sBAAS;QACnC;MACF,CAAC;IACH;EACF,CAAC,CACF,EACD,CACE,IAAAG,MAAA,CAAA/D,OAAA,EAAK,IAAAe,KAAA,CAAAf,OAAA,EAAI,MAAM,CAAC,EAAE,IAAAgE,SAAA,CAAAhE,OAAA,EAAQ,SAAS,CAAC,CAAC,EACrC,MAAM;IACJ,MAAM0F,cAAc,GAAG,IAAAlE,8BAAiB,EAACtB,KAAK,CAAC;IAC/C,IAAIgC,KAAK,GAAG,IAAAgC,OAAA,CAAAlE,OAAA,EAAM,EAAE,EAAE,MAAM,EAAE0F,cAAc,CAAC;IAC7C,IAAI,IAAAlC,mCAAsB,EAACtD,KAAK,CAAC,EAAE;MACjCgC,KAAK,GAAG,GAAG,IAAAgC,OAAA,CAAAlE,OAAA,EAAM,EAAE,EAAE,MAAM,EAAE0F,cAAc,CAAC,MAAM,IAAAxB,OAAA,CAAAlE,OAAA,EAChD,EAAE,EACF,kBAAkB,EAClB0F,cACF,CAAC,EAAE;IACL;IACA,OAAO;MACLzB,IAAI,EAAE,QAAQ;MACdqB,MAAM,EAAE,IAAAvC,yCAA4B,EAAC7C,KAAK,CAAC,GACvCiB,SAAS,CAAC,gBAAgB,CAAC,GAC3BA,SAAS,CAAC,cAAc,CAAC;MAC7Be,KAAK;MACLuD,MAAM,EAAE;QACNvD,KAAK,EAAE,IAAAa,yCAA4B,EAAC7C,KAAK,CAAC,GACtCiB,SAAS,CAAC,eAAe,CAAC,GAC1BA,SAAS,CAAC,aAAa,CAAC;QAC5BY,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAAC0B,kBAAK;MAC/B;IACF,CAAC;EACH,CAAC,CACF,EACD,CAAC,IAAAyB,UAAA,CAAAvE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAAuE,UAAA,CAAAvE,OAAA,EAAS,IAAI,CAAC,CAAC,CACjC,CAAC;AACJ,CAAC;AAEH,MAAM2F,eAAe,GAAG,IAAA5B,MAAA,CAAA/D,OAAA,EACtB,IAAA4F,MAAA,CAAA5F,OAAA,EAAK,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAC3D,IAAA6F,MAAA,CAAA7F,OAAA,EAAK,CAAC,WAAW,EAAE,iBAAiB,EAAE,eAAe,CAAC,CACxD,CAAC;AAED,MAAM8F,oBAAoB,GAAGA,CAACC,OAAO,EAAEC,KAAK,KAAK;EAC/C,MAAMC,YAAY,GAAG,IAAAC,eAAW,EAACH,OAAO,EAAEC,KAAK,CAAC;EAChD,MAAMG,cAAc,GAAGnD,aAAa,CAAC+C,OAAO,EAAEC,KAAK,CAAC;EACpD,MAAMI,cAAc,GAAGjB,aAAa,CAACY,OAAO,EAAEC,KAAK,CAAC;EACpD,MAAMK,sBAAsB,GAAG7B,qBAAqB,CAACuB,OAAO,EAAEC,KAAK,CAAC;EACpE,MAAMM,QAAQ,GAAGpF,OAAO,CAAC6E,OAAO,EAAEC,KAAK,CAAC;EAExC,OAAO9F,KAAK,IAAI;IACd,MAAMU,WAAW,GAAG,IAAAC,kCAAqB,EAACX,KAAK,CAAC;IAEhD,MAAM;MAACiB;IAAS,CAAC,GAAG4E,OAAO;IAC3B,MAAM;MAAC3E;IAAQ,CAAC,GAAG4E,KAAK;IAExB,MAAMO,QAAQ,GAAG,IAAAC,+BAAkB,EAACtG,KAAK,CAAC;IAE1C,MAAMuG,eAAe,GACnB,IAAA1F,KAAA,CAAAf,OAAA,EAAI,MAAM,EAAEuG,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAAxF,KAAA,CAAAf,OAAA,EAAI,YAAY,EAAEY,WAAW,CAAC,KAAK,SAAS;IAErF,MAAM8F,MAAM,GAAG;MACbxE,KAAK,EAAEf,SAAS,CAAC,cAAc,CAAC;MAChCY,OAAO,EAAEA,CAAA,KAAMX,QAAQ,CAACkC,iBAAI;IAC9B,CAAC;IAED,MAAMqD,KAAK,GAAG;MACZC,MAAM,EAAEX,YAAY,CAAC/F,KAAK,CAAC;MAC3B2G,IAAI,EAAEd,OAAO,CAACc,IAAI,IAAI,SAAS;MAC/BC,UAAU,EAAE,IAAAC,mBAAyB,EAAC3F,QAAQ,CAAC,CAAClB,KAAK,CAAC;MACtD8G,OAAO,EAAE;QACPJ,MAAM,EAAET,cAAc,CAACjG,KAAK,CAAC,CAACqG,QAAQ,CAAC;QACvCU,MAAM,EAAEb,cAAc,CAAClG,KAAK,CAAC,CAACqG,QAAQ,CAAC;QACvCW,QAAQ,EAAEvB,eAAe,CAACY,QAAQ,CAAC;QACnCvB,cAAc,EAAEqB,sBAAsB,CAACnG,KAAK,CAAC;QAC7CgB,OAAO,EAAEuF,eAAe,GAAGH,QAAQ,CAACpG,KAAK,CAAC,GAAG,IAAI;QACjDwG;MACF;IACF,CAAC;IAED,MAAMS,QAAQ,GAAGpB,OAAO,CAACoB,QAAQ;IACjC,IAAI,CAACA,QAAQ,EAAE;MACb,OAAOR,KAAK;IACd;IAEA,MAAMS,SAAS,GACb,OAAOD,QAAQ,KAAK,UAAU,GAC1BA,QAAQ,CAAC;MACPrC,eAAe,EAAE,IAAAJ,+BAAkB,EAACxE,KAAK,CAAC;MAC1CmH,qBAAqB,EAAE,IAAAC,qCAAwB,EAACpH,KAAK,CAAC;MACtDqG,QAAQ;MACRgB,mBAAmB,EAAE,IAAAxG,KAAA,CAAAf,OAAA,EAAI,8BAA8B,EAAE2G,KAAK,CAAC;MAC/Da,SAAS,EAAE,IAAAzG,KAAA,CAAAf,OAAA,EAAI,oBAAoB,EAAE2G,KAAK;IAC5C,CAAC,CAAC,GACFQ,QAAQ;IACd,IAAI,CAACC,SAAS,EAAE;MACd,OAAOT,KAAK;IACd;IAEA,MAAMc,sBAAsB,GAC1BL,SAAS,CAACG,mBAAmB,KAAKG,SAAS,IAAIf,KAAK,CAACK,OAAO,CAAChC,cAAc;IAC7E,MAAM2C,YAAY,GAAG,CAAC,CAACP,SAAS,CAACI,SAAS;IAC1C,IAAI,CAACC,sBAAsB,IAAI,CAACE,YAAY,EAAE,OAAOhB,KAAK;IAE1D,MAAMiB,gBAAgB,GAAGjB,KAAK,CAACK,OAAO,CAACJ,MAAM,CAACtC,GAAG,IAAI,CAAC,CAAC;IACvD,MAAMuD,cAAc,GAClBF,YAAY,KACXG,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACb,SAAS,CAACI,SAAS,EAAE,SAAS,CAAC,IACnEM,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACb,SAAS,CAACI,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,MAAMA,SAAS,GAAGG,YAAY,GAC1B;MACE,IAAIE,cAAc,GAAG;QAAC3F,KAAK,EAAE0F,gBAAgB,CAAC1F;MAAK,CAAC,GAAG0F,gBAAgB,CAAC;MACxE,GAAGR,SAAS,CAACI;IACf,CAAC,GACDI,gBAAgB;IAEpB,OAAO;MACL,GAAGjB,KAAK;MACRK,OAAO,EAAE;QACP,GAAGL,KAAK,CAACK,OAAO;QAChBJ,MAAM,EAAEe,YAAY,GAAG;UAAC,GAAGhB,KAAK,CAACK,OAAO,CAACJ,MAAM;UAAEtC,GAAG,EAAEkD;QAAS,CAAC,GAAGb,KAAK,CAACK,OAAO,CAACJ,MAAM;QACvF5B,cAAc,EAAEyC,sBAAsB,GAClC;UAAC,GAAGd,KAAK,CAACK,OAAO,CAAChC,cAAc;UAAE9C,KAAK,EAAEkF,SAAS,CAACG;QAAmB,CAAC,GACvEZ,KAAK,CAACK,OAAO,CAAChC;MACpB;IACF,CAAC;EACH,CAAC;AACH,CAAC;AAAC,IAAAkD,QAAA,GAAAC,OAAA,CAAAnI,OAAA,GAEa8F,oBAAoB","ignoreList":[]}
@@ -71,6 +71,204 @@ const options = {
71
71
  const comment = props.summary.comment;
72
72
  t.is(comment.edition.postDisabled, true);
73
73
  });
74
+ (0, _ava.default)('should use the usual popin labels without overrides', t => {
75
+ const state = (0, _set2.default)('data.recommendations.entities.idProgression1234.0.source', 'another application', _learnerSuccess.default);
76
+ const props = (0, _popinEnd.default)(options, {
77
+ dispatch: createDispatch(state)
78
+ })(state);
79
+ t.is(props.summary.header.cta.title, '__Next level');
80
+ t.is(props.summary.recommendation.title, '__Related subjects');
81
+ });
82
+ (0, _ava.default)('should expose recommendation context separately from cards to overrides', t => {
83
+ const cards = [{
84
+ title: 'A course'
85
+ }];
86
+ const context = {
87
+ destination: 'learning-plan'
88
+ };
89
+ const state = (0, _set2.default)('data.recommendations.entities.idProgression1234', {
90
+ cards,
91
+ context
92
+ }, _learnerSuccess.default);
93
+ let received;
94
+ const props = (0, _popinEnd.default)({
95
+ ...options,
96
+ popinEnd: current => {
97
+ received = current;
98
+ return {
99
+ recommendationTitle: 'Continue learning:'
100
+ };
101
+ }
102
+ }, {
103
+ dispatch: createDispatch(state)
104
+ })(state);
105
+ t.is(received.recommendationContext, context);
106
+ t.is(received.recommendations, cards);
107
+ t.is(props.summary.recommendation.cards[0].title, 'A course');
108
+ t.is(props.summary.recommendation.cards[0].destination, undefined);
109
+ t.is(props.summary.recommendation.title, 'Continue learning:');
110
+ });
111
+ (0, _ava.default)('should override the recommendation title alone', t => {
112
+ const props = (0, _popinEnd.default)({
113
+ ...options,
114
+ popinEnd: {
115
+ recommendationTitle: 'More to explore:'
116
+ }
117
+ }, {
118
+ dispatch: createDispatch(_learnerSuccess.default)
119
+ })(_learnerSuccess.default);
120
+ t.is(props.summary.header.cta.title, '__Next level');
121
+ t.is(props.summary.recommendation.title, 'More to explore:');
122
+ });
123
+ (0, _ava.default)('should replace the header button label and click action alone', t => {
124
+ let clicked = false;
125
+ const props = (0, _popinEnd.default)({
126
+ ...options,
127
+ popinEnd: {
128
+ headerCta: {
129
+ title: 'Open my learning plan',
130
+ onClick: () => {
131
+ clicked = true;
132
+ }
133
+ }
134
+ }
135
+ }, {
136
+ dispatch: createDispatch(_learnerSuccess.default)
137
+ })(_learnerSuccess.default);
138
+ t.is(props.summary.header.cta.title, 'Open my learning plan');
139
+ t.falsy(props.summary.header.cta.showNextLevel);
140
+ t.is(props.summary.recommendation.title, '__Related subjects');
141
+ t.is(props.summary.footer.title, '__Back to home');
142
+ props.summary.header.cta.onClick();
143
+ t.true(clicked);
144
+ });
145
+ (0, _ava.default)('should add a header button when the current popin has none', t => {
146
+ const state = (0, _set2.default)('data.exitNodes.entities.successExitNode.type', 'pending', _learnerSuccess.default);
147
+ let clicked = false;
148
+ const props = (0, _popinEnd.default)({
149
+ ...options,
150
+ popinEnd: {
151
+ headerCta: {
152
+ title: 'Open my learning plan',
153
+ onClick: () => {
154
+ clicked = true;
155
+ }
156
+ }
157
+ }
158
+ }, {
159
+ dispatch: createDispatch(state)
160
+ })(state);
161
+ t.is(props.summary.header.cta.title, 'Open my learning plan');
162
+ props.summary.header.cta.onClick();
163
+ t.true(clicked);
164
+ });
165
+ (0, _ava.default)('should allow a header button label override while keeping its click action', async t => {
166
+ const state = (0, _set2.default)('data.nextContent.entities.idProgression1234', null, _learnerSuccess.default);
167
+ const props = (0, _popinEnd.default)({
168
+ ...options,
169
+ popinEnd: {
170
+ headerCta: {
171
+ title: 'Return to my dashboard'
172
+ }
173
+ }
174
+ }, {
175
+ dispatch: createDispatch(state)
176
+ })(state);
177
+ t.is(props.summary.header.cta.title, 'Return to my dashboard');
178
+ t.deepEqual((0, _map2.default)('type')(await props.summary.header.cta.onClick()), ['@@location/EXIT_REQUEST', '@@location/EXIT_FAILURE']);
179
+ });
180
+ (0, _ava.default)('should allow a header button click override while keeping its label', t => {
181
+ const state = (0, _set2.default)('data.nextContent.entities.idProgression1234', null, _learnerSuccess.default);
182
+ let clicked = false;
183
+ const props = (0, _popinEnd.default)({
184
+ ...options,
185
+ popinEnd: {
186
+ headerCta: {
187
+ onClick: () => {
188
+ clicked = true;
189
+ }
190
+ }
191
+ }
192
+ }, {
193
+ dispatch: createDispatch(state)
194
+ })(state);
195
+ t.is(props.summary.header.cta.title, '__Back to home');
196
+ props.summary.header.cta.onClick();
197
+ t.true(clicked);
198
+ });
199
+ (0, _ava.default)('should resolve overrides from the current end popin context', t => {
200
+ const state = _learnerSuccess.default;
201
+ const props = (0, _popinEnd.default)({
202
+ ...options,
203
+ popinEnd: ({
204
+ recommendations,
205
+ exitNode,
206
+ recommendationTitle,
207
+ headerCta
208
+ }) => {
209
+ t.is(exitNode.type, 'success');
210
+ t.is(recommendations.length, 3);
211
+ t.is(recommendationTitle, '__Related subjects');
212
+ t.is(headerCta.title, '__Next level');
213
+ return {
214
+ recommendationTitle: 'Suggested next steps:'
215
+ };
216
+ }
217
+ }, {
218
+ dispatch: createDispatch(state)
219
+ })(state);
220
+ t.is(props.summary.recommendation.title, 'Suggested next steps:');
221
+ t.is(props.summary.header.cta.title, '__Next level');
222
+ });
223
+ (0, _ava.default)('should keep the retry action when the override returns nothing', t => {
224
+ const props = (0, _popinEnd.default)({
225
+ ...options,
226
+ popinEnd: () => undefined
227
+ }, {
228
+ dispatch: createDispatch(_learnerFailure.default)
229
+ })(_learnerFailure.default);
230
+ t.is(props.summary.header.cta.title, '__Retry level');
231
+ t.is(props.summary.recommendation, null);
232
+ });
233
+ (0, _ava.default)('should keep an explicit redirect when the override returns nothing', t => {
234
+ const props = (0, _popinEnd.default)({
235
+ ...options,
236
+ popinEnd: () => undefined
237
+ }, {
238
+ dispatch: createDispatch(_learnerSuccessWithRedirection.default)
239
+ })(_learnerSuccessWithRedirection.default);
240
+ t.is(props.summary.header.cta.title, '__Click to continue');
241
+ t.is(props.summary.header.cta.href, 'http://www.google.com');
242
+ });
243
+ (0, _ava.default)('should allow the caller to keep a redirect while changing only the recommendation title', t => {
244
+ const props = (0, _popinEnd.default)({
245
+ ...options,
246
+ popinEnd: ({
247
+ headerCta
248
+ }) => {
249
+ t.is(headerCta.href, 'http://www.google.com');
250
+ return {
251
+ recommendationTitle: 'Continue exploring:'
252
+ };
253
+ }
254
+ }, {
255
+ dispatch: createDispatch(_learnerSuccessWithRedirection.default)
256
+ })(_learnerSuccessWithRedirection.default);
257
+ t.is(props.summary.header.cta.href, 'http://www.google.com');
258
+ t.is(props.summary.recommendation.title, 'Continue exploring:');
259
+ });
260
+ (0, _ava.default)('should leave an absent recommendation unchanged', t => {
261
+ const state = (0, _set2.default)(`data.recommendations.entities.${(0, _playerStore.getCurrentProgressionId)(_learnerFailure.default)}`, undefined, _learnerFailure.default);
262
+ const props = (0, _popinEnd.default)({
263
+ ...options,
264
+ popinEnd: {
265
+ recommendationTitle: 'Other courses:'
266
+ }
267
+ }, {
268
+ dispatch: createDispatch(state)
269
+ })(state);
270
+ t.is(props.summary.recommendation, null);
271
+ });
74
272
  (0, _ava.default)('should write, send, and go see a comment after success on learner progression', async t => {
75
273
  const state = (0, _pipe2.default)((0, _set2.default)('data.comments.entities.idProgression1234.isSent', true), (0, _set2.default)('ui.comments.text', 'textToSend'))(_learnerSuccess.default);
76
274
  const dispatch = createDispatch(state);
@@ -1 +1 @@
1
- {"version":3,"file":"popin-end.js","names":["_ava","_interopRequireDefault","require","_translate","_playerStore","_popinEnd","_learnerSuccess","_learnerSuccessWithRedirection","_learnerFailure","_learnerFailureWithRedirection","_learnerAdaptiveFailure","_fail","_success","e","__esModule","default","services","Comments","post","_identity2","Location","openRecommendation","nextLevel","seeComment","createDispatch","state","getState","action","dispatched","dispatch","maybeAction","_isFunction2","push","actionTypes","actions","_map2","type","options","translate","mockTranslate","test","t","popinLearnerSuccess","props","popinEnd","header","summary","is","rank","stars","cta","title","true","onClick","falsy","href","dispatchedHeaderCta","deepEqual","LOCATION_NEXT_CONTENT_REQUEST","LOCATION_NEXT_CONTENT_SUCCESS","prefix","buttonCta","button","dispatchedActionCta","comment","edition","postDisabled","_pipe2","_set2","isSent","value","onChange","dispatchedOnChange","target","UI_EDIT_COMMENT","onPost","dispatchedOnPost","SEND_POST_COMMENT_REQUEST","SEND_POST_COMMENT_SUCCESS","confirmation","dispatchedOnClick","LOCATION_SEE_COMMENT_REQUEST","LOCATION_SEE_COMMENT_SUCCESS","popinLearnerFailure","subtitle","lives","popinLearnerFailureWithRedirection","_isUndefined2","popinLearnerSuccessWithRedirection","popinMicrolearningFailure","popinMicrolearningSuccess","popinLearnerAdaptiveFailure","recommendations","recommendation","dispatchedOpenRecommmendation","cards","LOCATION_OPEN_RECOMMENDATION_REQUEST","LOCATION_OPEN_RECOMMENDATION_SUCCESS","ref","progressionId","getCurrentProgressionId","_id","description","mediaDescription","media","mediaUrl","mimeType","subtitles","posters","__v","_get2","success","total"],"sources":["../../../src/map-state-to-props/test/popin-end.js"],"sourcesContent":["import test from 'ava';\nimport {get, map, set, pipe, identity, isFunction, isUndefined} from 'lodash/fp';\n\nimport {mockTranslate} from '@coorpacademy/translate';\nimport {\n getCurrentProgressionId,\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS,\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS,\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS,\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS,\n UI_EDIT_COMMENT\n} from '@coorpacademy/player-store';\nimport popinEnd from '../popin-end';\n\nimport popinLearnerSuccess from './fixtures/popin-end/learner-success';\nimport popinLearnerSuccessWithRedirection from './fixtures/popin-end/learner-success-with-redirection';\nimport popinLearnerFailure from './fixtures/popin-end/learner-failure';\nimport popinLearnerFailureWithRedirection from './fixtures/popin-end/learner-failure-with-redirection';\nimport popinLearnerAdaptiveFailure from './fixtures/popin-end/learner-adaptive-failure';\nimport popinMicrolearningFailure from './fixtures/popin-end/fail';\nimport popinMicrolearningSuccess from './fixtures/popin-end/success';\n\nconst services = {\n Comments: {\n post: identity\n },\n Location: {\n openRecommendation: identity,\n nextLevel: identity,\n seeComment: identity\n }\n};\n\nconst createDispatch = state => {\n const getState = () => state;\n\n return async action => {\n const dispatched = [];\n const dispatch = maybeAction =>\n isFunction(maybeAction)\n ? maybeAction(dispatch, getState, {services})\n : dispatched.push(maybeAction);\n\n await dispatch(action);\n\n return dispatched;\n };\n};\n\nconst actionTypes = actions => map(({type}) => type, actions);\nconst options = {translate: mockTranslate};\n\ntest('should create a \"Next Level\" CTA after success on learner progression', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Next level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n const dispatchedHeaderCta = await cta.onClick();\n t.deepEqual(actionTypes(dispatchedHeaderCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Next level_');\n t.is(action.title, 'La recherche en ligne - Avancé');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Next level');\n const dispatchedActionCta = await buttonCta.onClick();\n t.deepEqual(actionTypes(dispatchedActionCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const comment = props.summary.comment;\n t.is(comment.edition.postDisabled, true);\n});\n\ntest('should write, send, and go see a comment after success on learner progression', async t => {\n const state = pipe(\n set('data.comments.entities.idProgression1234.isSent', true),\n set('ui.comments.text', 'textToSend')\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const comment = props.summary.comment;\n t.is(comment.isSent, true);\n t.is(comment.edition.value, 'textToSend');\n t.is(comment.edition.postDisabled, false);\n\n const onChange = comment.edition.onChange;\n t.true(isFunction(onChange));\n const dispatchedOnChange = await onChange({target: {value: 'foo'}});\n\n t.deepEqual(actionTypes(dispatchedOnChange), [UI_EDIT_COMMENT]);\n\n const onPost = comment.edition.onPost;\n t.true(isFunction(onPost));\n const dispatchedOnPost = await onPost();\n\n t.deepEqual(actionTypes(dispatchedOnPost), [\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS\n ]);\n\n const onClick = comment.confirmation.onClick;\n t.true(isFunction(onClick));\n const dispatchedOnClick = await onClick();\n\n t.deepEqual(actionTypes(dispatchedOnClick), [\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS\n ]);\n});\n\ntest('should not see comment section after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n t.is(props.summary.comment, null);\n t.is(props.summary.header.subtitle, '__You are out of lives!');\n t.is(props.summary.header.lives, 0);\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for failure popin', t => {\n const dispatch = createDispatch(popinLearnerFailureWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerFailureWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for success popin', t => {\n const dispatch = createDispatch(popinLearnerSuccessWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccessWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should not see comment section after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningFailure);\n t.is(props.summary.comment, null);\n});\n\ntest('should not see comment section after success on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningSuccess);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningSuccess);\n t.is(props.summary.comment, null);\n});\n\ntest(\"livesDisabled == true ---> should not see lives and 'You are out of lives!' message\", t => {\n const dispatch = createDispatch(popinLearnerAdaptiveFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerAdaptiveFailure);\n\n t.is(props.summary.header.subtitle, '__Nice try!');\n t.is(props.summary.header.lives, null);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with coach content', async t => {\n const state = pipe(\n set(['data', 'contents', 'level', 'entities', '1.B', 'level'], 'coach'),\n set('data.nextContent.entities.idProgression1234', null)\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n\n t.falsy(props.summary.action);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with content with only base level', async t => {\n const state = set(\n ['data', 'nextContent', 'entities', 'idProgression1234'],\n null,\n popinLearnerSuccess\n );\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n});\n\ntest('should create a \"Retry Level\" CTA after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n\n const header = props.summary.header;\n t.is(header.rank, '-1');\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Retry level_');\n t.is(action.title, 'La recherche en ligne - Base');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Retry level');\n});\n\ntest('should open recommendation', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const recommendations = props.summary.recommendation;\n\n const dispatchedOpenRecommmendation = await recommendations.cards[0].onClick();\n t.deepEqual(actionTypes(dispatchedOpenRecommmendation), [\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS\n ]);\n});\n\ntest('should create a \"Retry Chapter\" CTA after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {dispatch})(popinMicrolearningFailure);\n\n const header = props.summary.header;\n t.falsy(header.rank);\n t.falsy(header.stars);\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry chapter');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n});\n\ntest('should extract feedback content from exit node', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref)\n )(popinMicrolearningFailure);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n\ntest('should extract feedback content from exit node and counters', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'title total: {{ success }}',\n description: 'description {{ success }}/{{ total }}',\n mediaDescription: 'mediaDescription {{ total }}',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref),\n set(`data.progressions.entities.${progressionId}.state.variables`, {success: 4, total: 10})\n )(popinMicrolearningFailure);\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'title total: 4',\n description: 'description 4/10',\n mediaDescription: 'mediaDescription 10',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"popin-end.js","names":["_ava","_interopRequireDefault","require","_translate","_playerStore","_popinEnd","_learnerSuccess","_learnerSuccessWithRedirection","_learnerFailure","_learnerFailureWithRedirection","_learnerAdaptiveFailure","_fail","_success","e","__esModule","default","services","Comments","post","_identity2","Location","openRecommendation","nextLevel","seeComment","createDispatch","state","getState","action","dispatched","dispatch","maybeAction","_isFunction2","push","actionTypes","actions","_map2","type","options","translate","mockTranslate","test","t","popinLearnerSuccess","props","popinEnd","header","summary","is","rank","stars","cta","title","true","onClick","falsy","href","dispatchedHeaderCta","deepEqual","LOCATION_NEXT_CONTENT_REQUEST","LOCATION_NEXT_CONTENT_SUCCESS","prefix","buttonCta","button","dispatchedActionCta","comment","edition","postDisabled","_set2","recommendation","cards","context","destination","received","current","recommendationTitle","recommendationContext","recommendations","undefined","clicked","headerCta","showNextLevel","footer","exitNode","length","popinLearnerFailure","popinLearnerSuccessWithRedirection","getCurrentProgressionId","_pipe2","isSent","value","onChange","dispatchedOnChange","target","UI_EDIT_COMMENT","onPost","dispatchedOnPost","SEND_POST_COMMENT_REQUEST","SEND_POST_COMMENT_SUCCESS","confirmation","dispatchedOnClick","LOCATION_SEE_COMMENT_REQUEST","LOCATION_SEE_COMMENT_SUCCESS","subtitle","lives","popinLearnerFailureWithRedirection","_isUndefined2","popinMicrolearningFailure","popinMicrolearningSuccess","popinLearnerAdaptiveFailure","dispatchedOpenRecommmendation","LOCATION_OPEN_RECOMMENDATION_REQUEST","LOCATION_OPEN_RECOMMENDATION_SUCCESS","ref","progressionId","_id","description","mediaDescription","media","mediaUrl","mimeType","subtitles","posters","__v","_get2","success","total"],"sources":["../../../src/map-state-to-props/test/popin-end.js"],"sourcesContent":["import test from 'ava';\nimport {get, map, set, pipe, identity, isFunction, isUndefined} from 'lodash/fp';\n\nimport {mockTranslate} from '@coorpacademy/translate';\nimport {\n getCurrentProgressionId,\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS,\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS,\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS,\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS,\n UI_EDIT_COMMENT\n} from '@coorpacademy/player-store';\nimport popinEnd from '../popin-end';\n\nimport popinLearnerSuccess from './fixtures/popin-end/learner-success';\nimport popinLearnerSuccessWithRedirection from './fixtures/popin-end/learner-success-with-redirection';\nimport popinLearnerFailure from './fixtures/popin-end/learner-failure';\nimport popinLearnerFailureWithRedirection from './fixtures/popin-end/learner-failure-with-redirection';\nimport popinLearnerAdaptiveFailure from './fixtures/popin-end/learner-adaptive-failure';\nimport popinMicrolearningFailure from './fixtures/popin-end/fail';\nimport popinMicrolearningSuccess from './fixtures/popin-end/success';\n\nconst services = {\n Comments: {\n post: identity\n },\n Location: {\n openRecommendation: identity,\n nextLevel: identity,\n seeComment: identity\n }\n};\n\nconst createDispatch = state => {\n const getState = () => state;\n\n return async action => {\n const dispatched = [];\n const dispatch = maybeAction =>\n isFunction(maybeAction)\n ? maybeAction(dispatch, getState, {services})\n : dispatched.push(maybeAction);\n\n await dispatch(action);\n\n return dispatched;\n };\n};\n\nconst actionTypes = actions => map(({type}) => type, actions);\nconst options = {translate: mockTranslate};\n\ntest('should create a \"Next Level\" CTA after success on learner progression', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Next level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n const dispatchedHeaderCta = await cta.onClick();\n t.deepEqual(actionTypes(dispatchedHeaderCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Next level_');\n t.is(action.title, 'La recherche en ligne - Avancé');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Next level');\n const dispatchedActionCta = await buttonCta.onClick();\n t.deepEqual(actionTypes(dispatchedActionCta), [\n LOCATION_NEXT_CONTENT_REQUEST,\n LOCATION_NEXT_CONTENT_SUCCESS\n ]);\n\n const comment = props.summary.comment;\n t.is(comment.edition.postDisabled, true);\n});\n\ntest('should use the usual popin labels without overrides', t => {\n const state = set(\n 'data.recommendations.entities.idProgression1234.0.source',\n 'another application',\n popinLearnerSuccess\n );\n const props = popinEnd(options, {dispatch: createDispatch(state)})(state);\n\n t.is(props.summary.header.cta.title, '__Next level');\n t.is(props.summary.recommendation.title, '__Related subjects');\n});\n\ntest('should expose recommendation context separately from cards to overrides', t => {\n const cards = [{title: 'A course'}];\n const context = {destination: 'learning-plan'};\n const state = set(\n 'data.recommendations.entities.idProgression1234',\n {cards, context},\n popinLearnerSuccess\n );\n let received;\n const props = popinEnd(\n {\n ...options,\n popinEnd: current => {\n received = current;\n return {recommendationTitle: 'Continue learning:'};\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(received.recommendationContext, context);\n t.is(received.recommendations, cards);\n t.is(props.summary.recommendation.cards[0].title, 'A course');\n t.is(props.summary.recommendation.cards[0].destination, undefined);\n t.is(props.summary.recommendation.title, 'Continue learning:');\n});\n\ntest('should override the recommendation title alone', t => {\n const props = popinEnd(\n {...options, popinEnd: {recommendationTitle: 'More to explore:'}},\n {dispatch: createDispatch(popinLearnerSuccess)}\n )(popinLearnerSuccess);\n\n t.is(props.summary.header.cta.title, '__Next level');\n t.is(props.summary.recommendation.title, 'More to explore:');\n});\n\ntest('should replace the header button label and click action alone', t => {\n let clicked = false;\n const props = popinEnd(\n {\n ...options,\n popinEnd: {\n headerCta: {\n title: 'Open my learning plan',\n onClick: () => {\n clicked = true;\n }\n }\n }\n },\n {dispatch: createDispatch(popinLearnerSuccess)}\n )(popinLearnerSuccess);\n\n t.is(props.summary.header.cta.title, 'Open my learning plan');\n t.falsy(props.summary.header.cta.showNextLevel);\n t.is(props.summary.recommendation.title, '__Related subjects');\n t.is(props.summary.footer.title, '__Back to home');\n props.summary.header.cta.onClick();\n t.true(clicked);\n});\n\ntest('should add a header button when the current popin has none', t => {\n const state = set('data.exitNodes.entities.successExitNode.type', 'pending', popinLearnerSuccess);\n let clicked = false;\n const props = popinEnd(\n {\n ...options,\n popinEnd: {\n headerCta: {\n title: 'Open my learning plan',\n onClick: () => {\n clicked = true;\n }\n }\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.header.cta.title, 'Open my learning plan');\n props.summary.header.cta.onClick();\n t.true(clicked);\n});\n\ntest('should allow a header button label override while keeping its click action', async t => {\n const state = set('data.nextContent.entities.idProgression1234', null, popinLearnerSuccess);\n const props = popinEnd(\n {...options, popinEnd: {headerCta: {title: 'Return to my dashboard'}}},\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.header.cta.title, 'Return to my dashboard');\n t.deepEqual(map('type')(await props.summary.header.cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n});\n\ntest('should allow a header button click override while keeping its label', t => {\n const state = set('data.nextContent.entities.idProgression1234', null, popinLearnerSuccess);\n let clicked = false;\n const props = popinEnd(\n {\n ...options,\n popinEnd: {\n headerCta: {\n onClick: () => {\n clicked = true;\n }\n }\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.header.cta.title, '__Back to home');\n props.summary.header.cta.onClick();\n t.true(clicked);\n});\n\ntest('should resolve overrides from the current end popin context', t => {\n const state = popinLearnerSuccess;\n const props = popinEnd(\n {\n ...options,\n popinEnd: ({recommendations, exitNode, recommendationTitle, headerCta}) => {\n t.is(exitNode.type, 'success');\n t.is(recommendations.length, 3);\n t.is(recommendationTitle, '__Related subjects');\n t.is(headerCta.title, '__Next level');\n return {recommendationTitle: 'Suggested next steps:'};\n }\n },\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.recommendation.title, 'Suggested next steps:');\n t.is(props.summary.header.cta.title, '__Next level');\n});\n\ntest('should keep the retry action when the override returns nothing', t => {\n const props = popinEnd(\n {...options, popinEnd: () => undefined},\n {dispatch: createDispatch(popinLearnerFailure)}\n )(popinLearnerFailure);\n\n t.is(props.summary.header.cta.title, '__Retry level');\n t.is(props.summary.recommendation, null);\n});\n\ntest('should keep an explicit redirect when the override returns nothing', t => {\n const props = popinEnd(\n {...options, popinEnd: () => undefined},\n {dispatch: createDispatch(popinLearnerSuccessWithRedirection)}\n )(popinLearnerSuccessWithRedirection);\n\n t.is(props.summary.header.cta.title, '__Click to continue');\n t.is(props.summary.header.cta.href, 'http://www.google.com');\n});\n\ntest('should allow the caller to keep a redirect while changing only the recommendation title', t => {\n const props = popinEnd(\n {\n ...options,\n popinEnd: ({headerCta}) => {\n t.is(headerCta.href, 'http://www.google.com');\n return {recommendationTitle: 'Continue exploring:'};\n }\n },\n {dispatch: createDispatch(popinLearnerSuccessWithRedirection)}\n )(popinLearnerSuccessWithRedirection);\n\n t.is(props.summary.header.cta.href, 'http://www.google.com');\n t.is(props.summary.recommendation.title, 'Continue exploring:');\n});\n\ntest('should leave an absent recommendation unchanged', t => {\n const state = set(\n `data.recommendations.entities.${getCurrentProgressionId(popinLearnerFailure)}`,\n undefined,\n popinLearnerFailure\n );\n const props = popinEnd(\n {...options, popinEnd: {recommendationTitle: 'Other courses:'}},\n {dispatch: createDispatch(state)}\n )(state);\n\n t.is(props.summary.recommendation, null);\n});\n\ntest('should write, send, and go see a comment after success on learner progression', async t => {\n const state = pipe(\n set('data.comments.entities.idProgression1234.isSent', true),\n set('ui.comments.text', 'textToSend')\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const comment = props.summary.comment;\n t.is(comment.isSent, true);\n t.is(comment.edition.value, 'textToSend');\n t.is(comment.edition.postDisabled, false);\n\n const onChange = comment.edition.onChange;\n t.true(isFunction(onChange));\n const dispatchedOnChange = await onChange({target: {value: 'foo'}});\n\n t.deepEqual(actionTypes(dispatchedOnChange), [UI_EDIT_COMMENT]);\n\n const onPost = comment.edition.onPost;\n t.true(isFunction(onPost));\n const dispatchedOnPost = await onPost();\n\n t.deepEqual(actionTypes(dispatchedOnPost), [\n SEND_POST_COMMENT_REQUEST,\n SEND_POST_COMMENT_SUCCESS\n ]);\n\n const onClick = comment.confirmation.onClick;\n t.true(isFunction(onClick));\n const dispatchedOnClick = await onClick();\n\n t.deepEqual(actionTypes(dispatchedOnClick), [\n LOCATION_SEE_COMMENT_REQUEST,\n LOCATION_SEE_COMMENT_SUCCESS\n ]);\n});\n\ntest('should not see comment section after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n t.is(props.summary.comment, null);\n t.is(props.summary.header.subtitle, '__You are out of lives!');\n t.is(props.summary.header.lives, 0);\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for failure popin', t => {\n const dispatch = createDispatch(popinLearnerFailureWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerFailureWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should verify that cta should redirect if redirectURLAfterEnd is set on state for success popin', t => {\n const dispatch = createDispatch(popinLearnerSuccessWithRedirection);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccessWithRedirection);\n\n const header = props.summary.header;\n const cta = header.cta;\n t.is(cta.title, '__Click to continue');\n t.true(isUndefined(cta.onClick));\n t.is(cta.href, 'http://www.google.com');\n});\n\ntest('should not see comment section after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningFailure);\n t.is(props.summary.comment, null);\n});\n\ntest('should not see comment section after success on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningSuccess);\n const props = popinEnd(options, {\n dispatch\n })(popinMicrolearningSuccess);\n t.is(props.summary.comment, null);\n});\n\ntest(\"livesDisabled == true ---> should not see lives and 'You are out of lives!' message\", t => {\n const dispatch = createDispatch(popinLearnerAdaptiveFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerAdaptiveFailure);\n\n t.is(props.summary.header.subtitle, '__Nice try!');\n t.is(props.summary.header.lives, null);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with coach content', async t => {\n const state = pipe(\n set(['data', 'contents', 'level', 'entities', '1.B', 'level'], 'coach'),\n set('data.nextContent.entities.idProgression1234', null)\n )(popinLearnerSuccess);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n\n t.falsy(props.summary.action);\n});\n\ntest('should create a \"Back to Home\" CTA after success on learner progression with content with only base level', async t => {\n const state = set(\n ['data', 'nextContent', 'entities', 'idProgression1234'],\n null,\n popinLearnerSuccess\n );\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n const header = props.summary.header;\n t.is(header.rank, '+1');\n t.is(header.stars, '+2');\n t.is(header.type, 'popinEnd');\n\n const cta = header.cta;\n t.is(cta.title, '__Back to home');\n t.deepEqual(map('type')(await cta.onClick()), [\n '@@location/EXIT_REQUEST',\n '@@location/EXIT_FAILURE'\n ]);\n t.falsy(cta.href);\n});\n\ntest('should create a \"Retry Level\" CTA after failure on learner progression', t => {\n const dispatch = createDispatch(popinLearnerFailure);\n const props = popinEnd(options, {dispatch})(popinLearnerFailure);\n\n const header = props.summary.header;\n t.is(header.rank, '-1');\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry level');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n\n const action = props.summary.action;\n t.is(action.prefix, '__Retry level_');\n t.is(action.title, 'La recherche en ligne - Base');\n\n const buttonCta = action.button;\n t.is(buttonCta.title, '__Retry level');\n});\n\ntest('should open recommendation', async t => {\n const dispatch = createDispatch(popinLearnerSuccess);\n const props = popinEnd(options, {dispatch})(popinLearnerSuccess);\n\n const recommendations = props.summary.recommendation;\n\n const dispatchedOpenRecommmendation = await recommendations.cards[0].onClick();\n t.deepEqual(actionTypes(dispatchedOpenRecommmendation), [\n LOCATION_OPEN_RECOMMENDATION_REQUEST,\n LOCATION_OPEN_RECOMMENDATION_SUCCESS\n ]);\n});\n\ntest('should create a \"Retry Chapter\" CTA after failure on microlearning progression', t => {\n const dispatch = createDispatch(popinMicrolearningFailure);\n const props = popinEnd(options, {dispatch})(popinMicrolearningFailure);\n\n const header = props.summary.header;\n t.falsy(header.rank);\n t.falsy(header.stars);\n t.is(header.type, 'popinEnd');\n\n const cta = props.summary.header.cta;\n t.is(cta.title, '__Retry chapter');\n t.true(isFunction(cta.onClick));\n t.falsy(cta.href);\n});\n\ntest('should extract feedback content from exit node', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref)\n )(popinMicrolearningFailure);\n\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'biba_exit_node_A.title',\n description: 'biba_exit_node_A.description',\n mediaDescription: 'biba_exit_node_A.media.description',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n\ntest('should extract feedback content from exit node and counters', t => {\n const ref = 'biba-exit-node-A';\n const progressionId = getCurrentProgressionId(popinMicrolearningFailure);\n const state = pipe(\n set(`data.exitNodes.entities.${ref}`, {\n ref,\n _id: '5a4e2adbd56b8b7ddab06532',\n type: 'success',\n title: 'title total: {{ success }}',\n description: 'description {{ success }}/{{ total }}',\n mediaDescription: 'mediaDescription {{ total }}',\n media: {\n ref: 'biba_exit_node_A-media',\n type: 'pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl',\n mimeType: 'application/pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n subtitles: 'biba_exit_node_A.media.pdf.subtitles',\n posters: []\n },\n __v: 0\n }),\n set(`data.progressions.entities.${progressionId}.state.nextContent.ref`, ref),\n set(`data.progressions.entities.${progressionId}.state.variables`, {success: 4, total: 10})\n )(popinMicrolearningFailure);\n const dispatch = createDispatch(state);\n const props = popinEnd(options, {dispatch})(state);\n\n t.deepEqual(get('summary.feedback', props), {\n title: 'title total: 4',\n description: 'description 4/10',\n mediaDescription: 'mediaDescription 10',\n media: {\n type: 'pdf',\n description: 'biba_exit_node_A.media.pdf.description',\n mimeType: 'application/pdf',\n mediaUrl: 'biba_exit_node_A.media.pdf.mediaUrl'\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coorpacademy/player-web",
3
- "version": "4.29.25",
3
+ "version": "4.29.27",
4
4
  "description": "CoorpAcademy web slide-player",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -60,14 +60,14 @@
60
60
  "react-dom": "^17.0.2"
61
61
  },
62
62
  "dependencies": {
63
- "@coorpacademy/components": "11.40.24",
63
+ "@coorpacademy/components": "11.40.25",
64
64
  "@coorpacademy/player-services": "5.3.2",
65
- "@coorpacademy/player-store": "4.3.5",
65
+ "@coorpacademy/player-store": "4.3.6",
66
66
  "@coorpacademy/progression-engine": "11.8.2",
67
67
  "@coorpacademy/redux-task": "1.2.0",
68
68
  "@coorpacademy/translate": "6.3.0",
69
69
  "eslint": "^8.24.0",
70
70
  "lodash": "^4.17.21"
71
71
  },
72
- "gitHead": "66dc76cffa26a6a3ed89a398ef0013f5a52ecb8b"
72
+ "gitHead": "cfbbca21b9cec556f610212127dc48eb0f3a3012"
73
73
  }