@coorpacademy/components 10.22.8 → 10.22.11
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 +1 -0
- package/es/atom/choice/index.native.js +6 -3
- package/es/atom/choice/index.native.js.map +1 -1
- package/es/molecule/cm-popin/index.js +4 -2
- package/es/molecule/cm-popin/index.js.map +1 -1
- package/es/molecule/questions/mobile/draggable/index.native.js +144 -0
- package/es/molecule/questions/mobile/draggable/index.native.js.map +1 -0
- package/es/molecule/questions/mobile/slide/index.native.js +119 -0
- package/es/molecule/questions/mobile/slide/index.native.js.map +1 -0
- package/es/molecule/review-correction-popin/prop-types.js +0 -1
- package/es/molecule/review-correction-popin/prop-types.js.map +1 -1
- package/es/organism/review-congrats/style.css +1 -1
- package/es/organism/review-slide/index.js +194 -0
- package/es/organism/review-slide/index.js.map +1 -0
- package/es/organism/review-slide/prop-types.js +39 -0
- package/es/organism/review-slide/prop-types.js.map +1 -0
- package/es/organism/review-slide/style.css +173 -0
- package/es/organism/review-stacked-slides/index.js +74 -0
- package/es/organism/review-stacked-slides/index.js.map +1 -0
- package/es/organism/review-stacked-slides/prop-types.js +15 -0
- package/es/organism/review-stacked-slides/prop-types.js.map +1 -0
- package/es/organism/review-stacked-slides/style.css +174 -0
- package/es/template/app-review/index.js +7 -8
- package/es/template/app-review/index.js.map +1 -1
- package/es/template/app-review/index.native.js +6 -10
- package/es/template/app-review/index.native.js.map +1 -1
- package/es/template/app-review/player/index.js +36 -0
- package/es/template/app-review/player/index.js.map +1 -0
- package/es/template/app-review/{slides → player}/index.native.js +15 -13
- package/es/template/app-review/player/index.native.js.map +1 -0
- package/es/template/app-review/player/prop-types.js +12 -0
- package/es/template/app-review/player/prop-types.js.map +1 -0
- package/es/template/app-review/player/style.css +41 -0
- package/es/template/app-review/prop-types.js +3 -3
- package/es/template/app-review/prop-types.js.map +1 -1
- package/es/types/styles.d.js +2 -0
- package/es/types/styles.d.js.map +1 -0
- package/es/variables/shadow.js +13 -0
- package/es/variables/shadow.js.map +1 -0
- package/lib/atom/choice/index.native.js +6 -3
- package/lib/atom/choice/index.native.js.map +1 -1
- package/lib/molecule/cm-popin/index.js +4 -2
- package/lib/molecule/cm-popin/index.js.map +1 -1
- package/lib/molecule/questions/mobile/draggable/index.native.js +161 -0
- package/lib/molecule/questions/mobile/draggable/index.native.js.map +1 -0
- package/lib/molecule/questions/mobile/slide/index.native.js +136 -0
- package/lib/molecule/questions/mobile/slide/index.native.js.map +1 -0
- package/lib/molecule/review-correction-popin/prop-types.js +0 -1
- package/lib/molecule/review-correction-popin/prop-types.js.map +1 -1
- package/lib/organism/review-congrats/style.css +1 -1
- package/lib/organism/review-slide/index.js +217 -0
- package/lib/organism/review-slide/index.js.map +1 -0
- package/lib/organism/review-slide/prop-types.js +52 -0
- package/lib/organism/review-slide/prop-types.js.map +1 -0
- package/lib/organism/review-slide/style.css +173 -0
- package/lib/organism/review-stacked-slides/index.js +90 -0
- package/lib/organism/review-stacked-slides/index.js.map +1 -0
- package/lib/organism/review-stacked-slides/prop-types.js +29 -0
- package/lib/organism/review-stacked-slides/prop-types.js.map +1 -0
- package/lib/organism/review-stacked-slides/style.css +174 -0
- package/lib/template/app-review/index.js +6 -8
- package/lib/template/app-review/index.js.map +1 -1
- package/lib/template/app-review/index.native.js +6 -11
- package/lib/template/app-review/index.native.js.map +1 -1
- package/lib/template/app-review/player/index.js +51 -0
- package/lib/template/app-review/player/index.js.map +1 -0
- package/lib/template/app-review/{slides → player}/index.native.js +14 -12
- package/lib/template/app-review/player/index.native.js.map +1 -0
- package/lib/template/app-review/player/prop-types.js +25 -0
- package/lib/template/app-review/player/prop-types.js.map +1 -0
- package/lib/template/app-review/player/style.css +41 -0
- package/lib/template/app-review/prop-types.js +3 -3
- package/lib/template/app-review/prop-types.js.map +1 -1
- package/lib/types/styles.d.js +2 -0
- package/lib/types/styles.d.js.map +1 -0
- package/lib/variables/shadow.js +18 -0
- package/lib/variables/shadow.js.map +1 -0
- package/package.json +3 -2
- package/es/template/app-review/slides/index.js +0 -352
- package/es/template/app-review/slides/index.js.map +0 -1
- package/es/template/app-review/slides/index.native.js.map +0 -1
- package/es/template/app-review/slides/prop-types.js +0 -111
- package/es/template/app-review/slides/prop-types.js.map +0 -1
- package/es/template/app-review/slides/style.css +0 -409
- package/lib/template/app-review/slides/index.js +0 -385
- package/lib/template/app-review/slides/index.js.map +0 -1
- package/lib/template/app-review/slides/index.native.js.map +0 -1
- package/lib/template/app-review/slides/prop-types.js +0 -131
- package/lib/template/app-review/slides/prop-types.js.map +0 -1
- package/lib/template/app-review/slides/style.css +0 -409
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import classnames from 'classnames';
|
|
6
|
+
import get from 'lodash/fp/get';
|
|
7
|
+
import getOr from 'lodash/fp/getOr';
|
|
8
|
+
import Answer from '../../molecule/answer';
|
|
9
|
+
import ButtonLink from '../../atom/button-link';
|
|
10
|
+
import Loader from '../../atom/loader';
|
|
11
|
+
import Provider from '../../atom/provider';
|
|
12
|
+
import ReviewCorrectionPopin from '../../molecule/review-correction-popin';
|
|
13
|
+
import propTypes from './prop-types';
|
|
14
|
+
import style from './style.css';
|
|
15
|
+
|
|
16
|
+
const CorrectionPopin = ({
|
|
17
|
+
correctionPopinProps,
|
|
18
|
+
slideIndex,
|
|
19
|
+
showCorrectionPopin,
|
|
20
|
+
animateCorrectionPopin
|
|
21
|
+
}) => {
|
|
22
|
+
if (!showCorrectionPopin) return null;
|
|
23
|
+
const klf = getOr({}, 'klf', correctionPopinProps);
|
|
24
|
+
const information = getOr({
|
|
25
|
+
label: '',
|
|
26
|
+
message: ''
|
|
27
|
+
}, 'information', correctionPopinProps);
|
|
28
|
+
const next = get('next', correctionPopinProps);
|
|
29
|
+
const _correctionPopinProps = {
|
|
30
|
+
next: {
|
|
31
|
+
onClick: () => {
|
|
32
|
+
// eslint-disable-next-line no-console
|
|
33
|
+
console.log('Next Slide');
|
|
34
|
+
},
|
|
35
|
+
label: next && next.label,
|
|
36
|
+
'data-name': `next-question-button-${slideIndex}`,
|
|
37
|
+
'aria-label': next && next['aria-label']
|
|
38
|
+
},
|
|
39
|
+
klf,
|
|
40
|
+
information,
|
|
41
|
+
type: correctionPopinProps.type,
|
|
42
|
+
resultLabel: correctionPopinProps.resultLabel
|
|
43
|
+
};
|
|
44
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
45
|
+
className: classnames(style.correctionPopinWrapper, animateCorrectionPopin ? style.popinAnimation : null)
|
|
46
|
+
}, /*#__PURE__*/React.createElement(ReviewCorrectionPopin, _correctionPopinProps));
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
CorrectionPopin.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
50
|
+
slideIndex: PropTypes.string,
|
|
51
|
+
showCorrectionPopin: PropTypes.bool,
|
|
52
|
+
animateCorrectionPopin: PropTypes.bool,
|
|
53
|
+
correctionPopinProps: propTypes.correctionPopinProps
|
|
54
|
+
} : {};
|
|
55
|
+
|
|
56
|
+
const ValidateButton = ({
|
|
57
|
+
slideIndex,
|
|
58
|
+
validateButton,
|
|
59
|
+
primarySkinColor
|
|
60
|
+
}) => {
|
|
61
|
+
const {
|
|
62
|
+
label,
|
|
63
|
+
onClick,
|
|
64
|
+
disabled
|
|
65
|
+
} = validateButton;
|
|
66
|
+
const validateButtonProps = {
|
|
67
|
+
type: 'primary',
|
|
68
|
+
label,
|
|
69
|
+
'aria-label': label,
|
|
70
|
+
'data-name': `slide-validate-button-${slideIndex}`,
|
|
71
|
+
onClick,
|
|
72
|
+
disabled,
|
|
73
|
+
className: style.validateButton,
|
|
74
|
+
customStyle: {
|
|
75
|
+
backgroundColor: primarySkinColor
|
|
76
|
+
}
|
|
77
|
+
/*
|
|
78
|
+
slide validation action, this will trigger the correction popin
|
|
79
|
+
(with the useEffect that fires the dispatchers, if there is a nextContent content,
|
|
80
|
+
it will be loaded here) but will not trigger any animations unless the endReview
|
|
81
|
+
signal is received (all slide will disappear, also fired in a useEffect),
|
|
82
|
+
if it is the last slide and the content needs to be different, then that update will
|
|
83
|
+
be handled on the next slide logic but the content will be carried from here.
|
|
84
|
+
onClick: async () => {
|
|
85
|
+
// endReview based on nextContent ref exit node values: 'successExitNode' : 'failExitNode'
|
|
86
|
+
await validateSlide();
|
|
87
|
+
},
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
};
|
|
91
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
92
|
+
key: "button-wrapper",
|
|
93
|
+
className: style.validateButtonWrapper
|
|
94
|
+
}, /*#__PURE__*/React.createElement(ButtonLink, validateButtonProps));
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
ValidateButton.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
98
|
+
slideIndex: PropTypes.string,
|
|
99
|
+
validateButton: propTypes.validateButton,
|
|
100
|
+
primarySkinColor: PropTypes.string
|
|
101
|
+
} : {};
|
|
102
|
+
|
|
103
|
+
const QuestionContainer = props => {
|
|
104
|
+
const {
|
|
105
|
+
answerUI,
|
|
106
|
+
questionText,
|
|
107
|
+
questionOrigin
|
|
108
|
+
} = props;
|
|
109
|
+
if (!answerUI || !questionText) return null;
|
|
110
|
+
const answerProps = get(['model', 'choices'], answerUI) ?
|
|
111
|
+
/* istanbul ignore next */
|
|
112
|
+
_extends(_extends({}, answerUI), {}, {
|
|
113
|
+
model: _extends(_extends({}, answerUI.model), {}, {
|
|
114
|
+
answers: answerUI.model.choices
|
|
115
|
+
})
|
|
116
|
+
}) : answerUI;
|
|
117
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
118
|
+
key: "content-container",
|
|
119
|
+
className: style.slideContentContainer
|
|
120
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
121
|
+
key: "from-course",
|
|
122
|
+
className: style.questionOrigin
|
|
123
|
+
}, questionOrigin), /*#__PURE__*/React.createElement("div", {
|
|
124
|
+
key: "title",
|
|
125
|
+
className: style.question
|
|
126
|
+
}, questionText), /*#__PURE__*/React.createElement("div", {
|
|
127
|
+
key: "help",
|
|
128
|
+
className: style.help
|
|
129
|
+
}, get('help', answerUI)), /*#__PURE__*/React.createElement("div", {
|
|
130
|
+
key: "answer-container",
|
|
131
|
+
className: style.answerContainer
|
|
132
|
+
}, /*#__PURE__*/React.createElement(Answer, _extends({}, answerProps, {
|
|
133
|
+
key: "answer"
|
|
134
|
+
}))));
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
QuestionContainer.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
138
|
+
answerUI: PropTypes.shape(propTypes.slide.answerUI),
|
|
139
|
+
questionText: PropTypes.string,
|
|
140
|
+
questionOrigin: PropTypes.string
|
|
141
|
+
} : {};
|
|
142
|
+
|
|
143
|
+
const Slide = (props, context) => {
|
|
144
|
+
const {
|
|
145
|
+
slide,
|
|
146
|
+
validateButton,
|
|
147
|
+
correctionPopinProps,
|
|
148
|
+
slideIndex = '0'
|
|
149
|
+
} = props;
|
|
150
|
+
const {
|
|
151
|
+
skin
|
|
152
|
+
} = context;
|
|
153
|
+
const primarySkinColor = useMemo(() => getOr('#00B0FF', 'common.primary', skin), [skin]);
|
|
154
|
+
const {
|
|
155
|
+
loading,
|
|
156
|
+
loadingAriaLabel,
|
|
157
|
+
parentContentTitle,
|
|
158
|
+
questionText,
|
|
159
|
+
answerUI,
|
|
160
|
+
showCorrectionPopin,
|
|
161
|
+
animateCorrectionPopin
|
|
162
|
+
} = slide;
|
|
163
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
164
|
+
"data-name": `slide-container`,
|
|
165
|
+
className: style.slide
|
|
166
|
+
}, loading ? /*#__PURE__*/React.createElement(Loader, {
|
|
167
|
+
className: style.loader,
|
|
168
|
+
theme: "default",
|
|
169
|
+
"aria-label": loadingAriaLabel
|
|
170
|
+
}) : [/*#__PURE__*/React.createElement(QuestionContainer, {
|
|
171
|
+
questionOrigin: parentContentTitle,
|
|
172
|
+
questionText: questionText,
|
|
173
|
+
answerUI: answerUI,
|
|
174
|
+
key: "question-container"
|
|
175
|
+
}), /*#__PURE__*/React.createElement(ValidateButton, {
|
|
176
|
+
slideIndex: slideIndex,
|
|
177
|
+
validateButton: validateButton,
|
|
178
|
+
primarySkinColor: primarySkinColor,
|
|
179
|
+
key: "validate-button"
|
|
180
|
+
}), /*#__PURE__*/React.createElement(CorrectionPopin, {
|
|
181
|
+
correctionPopinProps: correctionPopinProps,
|
|
182
|
+
slideIndex: slideIndex,
|
|
183
|
+
showCorrectionPopin: showCorrectionPopin,
|
|
184
|
+
animateCorrectionPopin: animateCorrectionPopin,
|
|
185
|
+
key: "correction-popin"
|
|
186
|
+
})]);
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
Slide.propTypes = process.env.NODE_ENV !== "production" ? propTypes : {};
|
|
190
|
+
Slide.contextTypes = {
|
|
191
|
+
skin: Provider.childContextTypes.skin
|
|
192
|
+
};
|
|
193
|
+
export default Slide;
|
|
194
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/organism/review-slide/index.js"],"names":["React","useMemo","PropTypes","classnames","get","getOr","Answer","ButtonLink","Loader","Provider","ReviewCorrectionPopin","propTypes","style","CorrectionPopin","correctionPopinProps","slideIndex","showCorrectionPopin","animateCorrectionPopin","klf","information","label","message","next","_correctionPopinProps","onClick","console","log","type","resultLabel","correctionPopinWrapper","popinAnimation","string","bool","ValidateButton","validateButton","primarySkinColor","disabled","validateButtonProps","className","customStyle","backgroundColor","validateButtonWrapper","QuestionContainer","props","answerUI","questionText","questionOrigin","answerProps","model","answers","choices","slideContentContainer","question","help","answerContainer","shape","slide","Slide","context","skin","loading","loadingAriaLabel","parentContentTitle","loader","contextTypes","childContextTypes"],"mappings":";;AAAA,OAAOA,KAAP,IAAeC,OAAf,QAA6B,OAA7B;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,GAAP,MAAgB,eAAhB;AACA,OAAOC,KAAP,MAAkB,iBAAlB;AACA,OAAOC,MAAP,MAAmB,uBAAnB;AACA,OAAOC,UAAP,MAAuB,wBAAvB;AACA,OAAOC,MAAP,MAAmB,mBAAnB;AACA,OAAOC,QAAP,MAAqB,qBAArB;AACA,OAAOC,qBAAP,MAAkC,wCAAlC;AACA,OAAOC,SAAP,MAAsB,cAAtB;AACA,OAAOC,KAAP,MAAkB,aAAlB;;AAEA,MAAMC,eAAe,GAAG,CAAC;AACvBC,EAAAA,oBADuB;AAEvBC,EAAAA,UAFuB;AAGvBC,EAAAA,mBAHuB;AAIvBC,EAAAA;AAJuB,CAAD,KAKlB;AACJ,MAAI,CAACD,mBAAL,EAA0B,OAAO,IAAP;AAE1B,QAAME,GAAG,GAAGb,KAAK,CAAC,EAAD,EAAK,KAAL,EAAYS,oBAAZ,CAAjB;AACA,QAAMK,WAAW,GAAGd,KAAK,CAAC;AAACe,IAAAA,KAAK,EAAE,EAAR;AAAYC,IAAAA,OAAO,EAAE;AAArB,GAAD,EAA2B,aAA3B,EAA0CP,oBAA1C,CAAzB;AACA,QAAMQ,IAAI,GAAGlB,GAAG,CAAC,MAAD,EAASU,oBAAT,CAAhB;AAEA,QAAMS,qBAAqB,GAAG;AAC5BD,IAAAA,IAAI,EAAE;AACJE,MAAAA,OAAO,EAAE,MAAM;AACb;AACAC,QAAAA,OAAO,CAACC,GAAR,CAAY,YAAZ;AACD,OAJG;AAKJN,MAAAA,KAAK,EAAEE,IAAI,IAAIA,IAAI,CAACF,KALhB;AAMJ,mBAAc,wBAAuBL,UAAW,EAN5C;AAOJ,oBAAcO,IAAI,IAAIA,IAAI,CAAC,YAAD;AAPtB,KADsB;AAU5BJ,IAAAA,GAV4B;AAW5BC,IAAAA,WAX4B;AAY5BQ,IAAAA,IAAI,EAAEb,oBAAoB,CAACa,IAZC;AAa5BC,IAAAA,WAAW,EAAEd,oBAAoB,CAACc;AAbN,GAA9B;AAgBA,sBACE;AACE,IAAA,SAAS,EAAEzB,UAAU,CACnBS,KAAK,CAACiB,sBADa,EAEnBZ,sBAAsB,GAAGL,KAAK,CAACkB,cAAT,GAA0B,IAF7B;AADvB,kBAME,oBAAC,qBAAD,EAA2BP,qBAA3B,CANF,CADF;AAUD,CAtCD;;AAwCAV,eAAe,CAACF,SAAhB,2CAA4B;AAC1BI,EAAAA,UAAU,EAAEb,SAAS,CAAC6B,MADI;AAE1Bf,EAAAA,mBAAmB,EAAEd,SAAS,CAAC8B,IAFL;AAG1Bf,EAAAA,sBAAsB,EAAEf,SAAS,CAAC8B,IAHR;AAI1BlB,EAAAA,oBAAoB,EAAEH,SAAS,CAACG;AAJN,CAA5B;;AAOA,MAAMmB,cAAc,GAAG,CAAC;AAAClB,EAAAA,UAAD;AAAamB,EAAAA,cAAb;AAA6BC,EAAAA;AAA7B,CAAD,KAAoD;AACzE,QAAM;AAACf,IAAAA,KAAD;AAAQI,IAAAA,OAAR;AAAiBY,IAAAA;AAAjB,MAA6BF,cAAnC;AACA,QAAMG,mBAAmB,GAAG;AAC1BV,IAAAA,IAAI,EAAE,SADoB;AAE1BP,IAAAA,KAF0B;AAG1B,kBAAcA,KAHY;AAI1B,iBAAc,yBAAwBL,UAAW,EAJvB;AAK1BS,IAAAA,OAL0B;AAM1BY,IAAAA,QAN0B;AAO1BE,IAAAA,SAAS,EAAE1B,KAAK,CAACsB,cAPS;AAQ1BK,IAAAA,WAAW,EAAE;AACXC,MAAAA,eAAe,EAAEL;AADN;AAGb;;;;;;;;;;;;;AAX0B,GAA5B;AA0BA,sBACE;AAAK,IAAA,GAAG,EAAC,gBAAT;AAA0B,IAAA,SAAS,EAAEvB,KAAK,CAAC6B;AAA3C,kBACE,oBAAC,UAAD,EAAgBJ,mBAAhB,CADF,CADF;AAKD,CAjCD;;AAmCAJ,cAAc,CAACtB,SAAf,2CAA2B;AACzBI,EAAAA,UAAU,EAAEb,SAAS,CAAC6B,MADG;AAEzBG,EAAAA,cAAc,EAAEvB,SAAS,CAACuB,cAFD;AAGzBC,EAAAA,gBAAgB,EAAEjC,SAAS,CAAC6B;AAHH,CAA3B;;AAMA,MAAMW,iBAAiB,GAAGC,KAAK,IAAI;AACjC,QAAM;AAACC,IAAAA,QAAD;AAAWC,IAAAA,YAAX;AAAyBC,IAAAA;AAAzB,MAA2CH,KAAjD;AACA,MAAI,CAACC,QAAD,IAAa,CAACC,YAAlB,EAAgC,OAAO,IAAP;AAEhC,QAAME,WAAW,GAAG3C,GAAG,CAAC,CAAC,OAAD,EAAU,SAAV,CAAD,EAAuBwC,QAAvB,CAAH;AAChB;AADgB,wBAEXA,QAFW;AAGdI,IAAAA,KAAK,wBACAJ,QAAQ,CAACI,KADT;AAEHC,MAAAA,OAAO,EAAEL,QAAQ,CAACI,KAAT,CAAeE;AAFrB;AAHS,OAQhBN,QARJ;AAUA,sBACE;AAAK,IAAA,GAAG,EAAC,mBAAT;AAA6B,IAAA,SAAS,EAAEhC,KAAK,CAACuC;AAA9C,kBACE;AAAK,IAAA,GAAG,EAAC,aAAT;AAAuB,IAAA,SAAS,EAAEvC,KAAK,CAACkC;AAAxC,KACGA,cADH,CADF,eAIE;AAAK,IAAA,GAAG,EAAC,OAAT;AAAiB,IAAA,SAAS,EAAElC,KAAK,CAACwC;AAAlC,KACGP,YADH,CAJF,eAOE;AAAK,IAAA,GAAG,EAAC,MAAT;AAAgB,IAAA,SAAS,EAAEjC,KAAK,CAACyC;AAAjC,KACGjD,GAAG,CAAC,MAAD,EAASwC,QAAT,CADN,CAPF,eAUE;AAAK,IAAA,GAAG,EAAC,kBAAT;AAA4B,IAAA,SAAS,EAAEhC,KAAK,CAAC0C;AAA7C,kBACE,oBAAC,MAAD,eAAYP,WAAZ;AAAyB,IAAA,GAAG,EAAC;AAA7B,KADF,CAVF,CADF;AAgBD,CA9BD;;AAgCAL,iBAAiB,CAAC/B,SAAlB,2CAA8B;AAC5BiC,EAAAA,QAAQ,EAAE1C,SAAS,CAACqD,KAAV,CAAgB5C,SAAS,CAAC6C,KAAV,CAAgBZ,QAAhC,CADkB;AAE5BC,EAAAA,YAAY,EAAE3C,SAAS,CAAC6B,MAFI;AAG5Be,EAAAA,cAAc,EAAE5C,SAAS,CAAC6B;AAHE,CAA9B;;AAMA,MAAM0B,KAAK,GAAG,CAACd,KAAD,EAAQe,OAAR,KAAoB;AAChC,QAAM;AAACF,IAAAA,KAAD;AAAQtB,IAAAA,cAAR;AAAwBpB,IAAAA,oBAAxB;AAA8CC,IAAAA,UAAU,GAAG;AAA3D,MAAkE4B,KAAxE;AAEA,QAAM;AAACgB,IAAAA;AAAD,MAASD,OAAf;AACA,QAAMvB,gBAAgB,GAAGlC,OAAO,CAAC,MAAMI,KAAK,CAAC,SAAD,EAAY,gBAAZ,EAA8BsD,IAA9B,CAAZ,EAAiD,CAACA,IAAD,CAAjD,CAAhC;AACA,QAAM;AACJC,IAAAA,OADI;AAEJC,IAAAA,gBAFI;AAGJC,IAAAA,kBAHI;AAIJjB,IAAAA,YAJI;AAKJD,IAAAA,QALI;AAMJ5B,IAAAA,mBANI;AAOJC,IAAAA;AAPI,MAQFuC,KARJ;AAUA,sBACE;AAAK,iBAAY,iBAAjB;AAAmC,IAAA,SAAS,EAAE5C,KAAK,CAAC4C;AAApD,KACGI,OAAO,gBACN,oBAAC,MAAD;AAAQ,IAAA,SAAS,EAAEhD,KAAK,CAACmD,MAAzB;AAAiC,IAAA,KAAK,EAAC,SAAvC;AAAiD,kBAAYF;AAA7D,IADM,GAGN,cACE,oBAAC,iBAAD;AACE,IAAA,cAAc,EAAEC,kBADlB;AAEE,IAAA,YAAY,EAAEjB,YAFhB;AAGE,IAAA,QAAQ,EAAED,QAHZ;AAIE,IAAA,GAAG,EAAC;AAJN,IADF,eAOE,oBAAC,cAAD;AACE,IAAA,UAAU,EAAE7B,UADd;AAEE,IAAA,cAAc,EAAEmB,cAFlB;AAGE,IAAA,gBAAgB,EAAEC,gBAHpB;AAIE,IAAA,GAAG,EAAC;AAJN,IAPF,eAaE,oBAAC,eAAD;AACE,IAAA,oBAAoB,EAAErB,oBADxB;AAEE,IAAA,UAAU,EAAEC,UAFd;AAGE,IAAA,mBAAmB,EAAEC,mBAHvB;AAIE,IAAA,sBAAsB,EAAEC,sBAJ1B;AAKE,IAAA,GAAG,EAAC;AALN,IAbF,CAJJ,CADF;AA6BD,CA5CD;;AA8CAwC,KAAK,CAAC9C,SAAN,2CAAkBA,SAAlB;AAEA8C,KAAK,CAACO,YAAN,GAAqB;AACnBL,EAAAA,IAAI,EAAElD,QAAQ,CAACwD,iBAAT,CAA2BN;AADd,CAArB;AAIA,eAAeF,KAAf","sourcesContent":["import React, {useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport get from 'lodash/fp/get';\nimport getOr from 'lodash/fp/getOr';\nimport Answer from '../../molecule/answer';\nimport ButtonLink from '../../atom/button-link';\nimport Loader from '../../atom/loader';\nimport Provider from '../../atom/provider';\nimport ReviewCorrectionPopin from '../../molecule/review-correction-popin';\nimport propTypes from './prop-types';\nimport style from './style.css';\n\nconst CorrectionPopin = ({\n correctionPopinProps,\n slideIndex,\n showCorrectionPopin,\n animateCorrectionPopin\n}) => {\n if (!showCorrectionPopin) return null;\n\n const klf = getOr({}, 'klf', correctionPopinProps);\n const information = getOr({label: '', message: ''}, 'information', correctionPopinProps);\n const next = get('next', correctionPopinProps);\n\n const _correctionPopinProps = {\n next: {\n onClick: () => {\n // eslint-disable-next-line no-console\n console.log('Next Slide');\n },\n label: next && next.label,\n 'data-name': `next-question-button-${slideIndex}`,\n 'aria-label': next && next['aria-label']\n },\n klf,\n information,\n type: correctionPopinProps.type,\n resultLabel: correctionPopinProps.resultLabel\n };\n\n return (\n <div\n className={classnames(\n style.correctionPopinWrapper,\n animateCorrectionPopin ? style.popinAnimation : null\n )}\n >\n <ReviewCorrectionPopin {..._correctionPopinProps} />\n </div>\n );\n};\n\nCorrectionPopin.propTypes = {\n slideIndex: PropTypes.string,\n showCorrectionPopin: PropTypes.bool,\n animateCorrectionPopin: PropTypes.bool,\n correctionPopinProps: propTypes.correctionPopinProps\n};\n\nconst ValidateButton = ({slideIndex, validateButton, primarySkinColor}) => {\n const {label, onClick, disabled} = validateButton;\n const validateButtonProps = {\n type: 'primary',\n label,\n 'aria-label': label,\n 'data-name': `slide-validate-button-${slideIndex}`,\n onClick,\n disabled,\n className: style.validateButton,\n customStyle: {\n backgroundColor: primarySkinColor\n }\n /*\n slide validation action, this will trigger the correction popin\n (with the useEffect that fires the dispatchers, if there is a nextContent content,\n it will be loaded here) but will not trigger any animations unless the endReview\n signal is received (all slide will disappear, also fired in a useEffect),\n\n if it is the last slide and the content needs to be different, then that update will\n be handled on the next slide logic but the content will be carried from here.\n onClick: async () => {\n // endReview based on nextContent ref exit node values: 'successExitNode' : 'failExitNode'\n await validateSlide();\n },\n */\n };\n\n return (\n <div key=\"button-wrapper\" className={style.validateButtonWrapper}>\n <ButtonLink {...validateButtonProps} />\n </div>\n );\n};\n\nValidateButton.propTypes = {\n slideIndex: PropTypes.string,\n validateButton: propTypes.validateButton,\n primarySkinColor: PropTypes.string\n};\n\nconst QuestionContainer = props => {\n const {answerUI, questionText, questionOrigin} = props;\n if (!answerUI || !questionText) return null;\n\n const answerProps = get(['model', 'choices'], answerUI)\n ? /* istanbul ignore next */ {\n ...answerUI,\n model: {\n ...answerUI.model,\n answers: answerUI.model.choices\n }\n }\n : answerUI;\n\n return (\n <div key=\"content-container\" className={style.slideContentContainer}>\n <div key=\"from-course\" className={style.questionOrigin}>\n {questionOrigin}\n </div>\n <div key=\"title\" className={style.question}>\n {questionText}\n </div>\n <div key=\"help\" className={style.help}>\n {get('help', answerUI)}\n </div>\n <div key=\"answer-container\" className={style.answerContainer}>\n <Answer {...answerProps} key=\"answer\" />\n </div>\n </div>\n );\n};\n\nQuestionContainer.propTypes = {\n answerUI: PropTypes.shape(propTypes.slide.answerUI),\n questionText: PropTypes.string,\n questionOrigin: PropTypes.string\n};\n\nconst Slide = (props, context) => {\n const {slide, validateButton, correctionPopinProps, slideIndex = '0'} = props;\n\n const {skin} = context;\n const primarySkinColor = useMemo(() => getOr('#00B0FF', 'common.primary', skin), [skin]);\n const {\n loading,\n loadingAriaLabel,\n parentContentTitle,\n questionText,\n answerUI,\n showCorrectionPopin,\n animateCorrectionPopin\n } = slide;\n\n return (\n <div data-name={`slide-container`} className={style.slide}>\n {loading ? (\n <Loader className={style.loader} theme=\"default\" aria-label={loadingAriaLabel} />\n ) : (\n [\n <QuestionContainer\n questionOrigin={parentContentTitle}\n questionText={questionText}\n answerUI={answerUI}\n key=\"question-container\"\n />,\n <ValidateButton\n slideIndex={slideIndex}\n validateButton={validateButton}\n primarySkinColor={primarySkinColor}\n key=\"validate-button\"\n />,\n <CorrectionPopin\n correctionPopinProps={correctionPopinProps}\n slideIndex={slideIndex}\n showCorrectionPopin={showCorrectionPopin}\n animateCorrectionPopin={animateCorrectionPopin}\n key=\"correction-popin\"\n />\n ]\n )}\n </div>\n );\n};\n\nSlide.propTypes = propTypes;\n\nSlide.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nexport default Slide;\n"],"file":"index.js"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import ReviewCorrectionPopinPropTypes from '../../molecule/review-correction-popin/prop-types';
|
|
3
|
+
import AnswerPropTypes from '../../molecule/answer/prop-types';
|
|
4
|
+
export const SlideProp = PropTypes.shape({
|
|
5
|
+
hidden: PropTypes.bool,
|
|
6
|
+
position: PropTypes.number,
|
|
7
|
+
loading: PropTypes.bool,
|
|
8
|
+
loadingAriaLabel: PropTypes.string,
|
|
9
|
+
animationType: PropTypes.string,
|
|
10
|
+
// 'unstack' | 'restack'
|
|
11
|
+
isCorrect: PropTypes.bool,
|
|
12
|
+
animateCorrectionPopin: PropTypes.bool,
|
|
13
|
+
showCorrectionPopin: PropTypes.bool,
|
|
14
|
+
parentContentTitle: PropTypes.string,
|
|
15
|
+
questionText: PropTypes.string,
|
|
16
|
+
answerUI: PropTypes.shape(AnswerPropTypes)
|
|
17
|
+
});
|
|
18
|
+
export default {
|
|
19
|
+
slideIndex: PropTypes.string,
|
|
20
|
+
slide: SlideProp,
|
|
21
|
+
validateButton: PropTypes.shape({
|
|
22
|
+
label: PropTypes.string.isRequired,
|
|
23
|
+
onClick: PropTypes.func.isRequired,
|
|
24
|
+
disabled: PropTypes.bool
|
|
25
|
+
}),
|
|
26
|
+
correctionPopinProps: PropTypes.shape({
|
|
27
|
+
klf: ReviewCorrectionPopinPropTypes.klf,
|
|
28
|
+
information: ReviewCorrectionPopinPropTypes.information,
|
|
29
|
+
next: PropTypes.shape({
|
|
30
|
+
label: PropTypes.string,
|
|
31
|
+
'aria-label': PropTypes.string // Pourquoi le onClick du next n'est pas ici !
|
|
32
|
+
// updateSlidesOnNext: PropTypes.func.isRequired ???
|
|
33
|
+
|
|
34
|
+
}),
|
|
35
|
+
resultLabel: ReviewCorrectionPopinPropTypes.resultLabel,
|
|
36
|
+
type: ReviewCorrectionPopinPropTypes.type
|
|
37
|
+
})
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=prop-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/organism/review-slide/prop-types.js"],"names":["PropTypes","ReviewCorrectionPopinPropTypes","AnswerPropTypes","SlideProp","shape","hidden","bool","position","number","loading","loadingAriaLabel","string","animationType","isCorrect","animateCorrectionPopin","showCorrectionPopin","parentContentTitle","questionText","answerUI","slideIndex","slide","validateButton","label","isRequired","onClick","func","disabled","correctionPopinProps","klf","information","next","resultLabel","type"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,OAAOC,8BAAP,MAA2C,mDAA3C;AACA,OAAOC,eAAP,MAA4B,kCAA5B;AAEA,OAAO,MAAMC,SAAS,GAAGH,SAAS,CAACI,KAAV,CAAgB;AACvCC,EAAAA,MAAM,EAAEL,SAAS,CAACM,IADqB;AAEvCC,EAAAA,QAAQ,EAAEP,SAAS,CAACQ,MAFmB;AAGvCC,EAAAA,OAAO,EAAET,SAAS,CAACM,IAHoB;AAIvCI,EAAAA,gBAAgB,EAAEV,SAAS,CAACW,MAJW;AAKvCC,EAAAA,aAAa,EAAEZ,SAAS,CAACW,MALc;AAKN;AACjCE,EAAAA,SAAS,EAAEb,SAAS,CAACM,IANkB;AAOvCQ,EAAAA,sBAAsB,EAAEd,SAAS,CAACM,IAPK;AAQvCS,EAAAA,mBAAmB,EAAEf,SAAS,CAACM,IARQ;AASvCU,EAAAA,kBAAkB,EAAEhB,SAAS,CAACW,MATS;AAUvCM,EAAAA,YAAY,EAAEjB,SAAS,CAACW,MAVe;AAWvCO,EAAAA,QAAQ,EAAElB,SAAS,CAACI,KAAV,CAAgBF,eAAhB;AAX6B,CAAhB,CAAlB;AAcP,eAAe;AACbiB,EAAAA,UAAU,EAAEnB,SAAS,CAACW,MADT;AAEbS,EAAAA,KAAK,EAAEjB,SAFM;AAGbkB,EAAAA,cAAc,EAAErB,SAAS,CAACI,KAAV,CAAgB;AAC9BkB,IAAAA,KAAK,EAAEtB,SAAS,CAACW,MAAV,CAAiBY,UADM;AAE9BC,IAAAA,OAAO,EAAExB,SAAS,CAACyB,IAAV,CAAeF,UAFM;AAG9BG,IAAAA,QAAQ,EAAE1B,SAAS,CAACM;AAHU,GAAhB,CAHH;AAQbqB,EAAAA,oBAAoB,EAAE3B,SAAS,CAACI,KAAV,CAAgB;AACpCwB,IAAAA,GAAG,EAAE3B,8BAA8B,CAAC2B,GADA;AAEpCC,IAAAA,WAAW,EAAE5B,8BAA8B,CAAC4B,WAFR;AAGpCC,IAAAA,IAAI,EAAE9B,SAAS,CAACI,KAAV,CAAgB;AACpBkB,MAAAA,KAAK,EAAEtB,SAAS,CAACW,MADG;AAEpB,oBAAcX,SAAS,CAACW,MAFJ,CAEW;AAC/B;;AAHoB,KAAhB,CAH8B;AAQpCoB,IAAAA,WAAW,EAAE9B,8BAA8B,CAAC8B,WARR;AASpCC,IAAAA,IAAI,EAAE/B,8BAA8B,CAAC+B;AATD,GAAhB;AART,CAAf","sourcesContent":["import PropTypes from 'prop-types';\nimport ReviewCorrectionPopinPropTypes from '../../molecule/review-correction-popin/prop-types';\nimport AnswerPropTypes from '../../molecule/answer/prop-types';\n\nexport const SlideProp = PropTypes.shape({\n hidden: PropTypes.bool,\n position: PropTypes.number,\n loading: PropTypes.bool,\n loadingAriaLabel: PropTypes.string,\n animationType: PropTypes.string, // 'unstack' | 'restack'\n isCorrect: PropTypes.bool,\n animateCorrectionPopin: PropTypes.bool,\n showCorrectionPopin: PropTypes.bool,\n parentContentTitle: PropTypes.string,\n questionText: PropTypes.string,\n answerUI: PropTypes.shape(AnswerPropTypes)\n});\n\nexport default {\n slideIndex: PropTypes.string,\n slide: SlideProp,\n validateButton: PropTypes.shape({\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n disabled: PropTypes.bool\n }),\n correctionPopinProps: PropTypes.shape({\n klf: ReviewCorrectionPopinPropTypes.klf,\n information: ReviewCorrectionPopinPropTypes.information,\n next: PropTypes.shape({\n label: PropTypes.string,\n 'aria-label': PropTypes.string // Pourquoi le onClick du next n'est pas ici !\n // updateSlidesOnNext: PropTypes.func.isRequired ???\n }),\n resultLabel: ReviewCorrectionPopinPropTypes.resultLabel,\n type: ReviewCorrectionPopinPropTypes.type\n })\n};\n"],"file":"prop-types.js"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
@value colors: "../../variables/colors.css";
|
|
2
|
+
@value black from colors;
|
|
3
|
+
@value white from colors;
|
|
4
|
+
@value cm_blue_900 from colors;
|
|
5
|
+
@value cm_grey_400 from colors;
|
|
6
|
+
@value breakpoints: "../../variables/breakpoints.css";
|
|
7
|
+
@value mobile from breakpoints;
|
|
8
|
+
@value tablet from breakpoints;
|
|
9
|
+
|
|
10
|
+
.fontBase {
|
|
11
|
+
font-family: "Gilroy";
|
|
12
|
+
user-select: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.slide{
|
|
16
|
+
align-items: center;
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
justify-content: flex-start;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.slideContentContainer {
|
|
23
|
+
margin-top: 15px;
|
|
24
|
+
height: 563px;
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-items: center;
|
|
27
|
+
align-items: center;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
overflow-y: auto;
|
|
30
|
+
position: relative;
|
|
31
|
+
width: 100%;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.validateButtonWrapper {
|
|
35
|
+
position: absolute;
|
|
36
|
+
bottom: 64px;
|
|
37
|
+
background-color: black;
|
|
38
|
+
border-radius: 7px;
|
|
39
|
+
min-width: 250px;
|
|
40
|
+
width: min-content;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ie fallback */
|
|
44
|
+
_:-ms-fullscreen, :root .validateButtonWrapper {
|
|
45
|
+
width: 300px;
|
|
46
|
+
left: 40%;
|
|
47
|
+
right: 40%;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.answerContainer {
|
|
51
|
+
max-width: 95%;
|
|
52
|
+
display: flex;
|
|
53
|
+
justify-content: center;
|
|
54
|
+
height: 100%;
|
|
55
|
+
/*
|
|
56
|
+
To break wrappers layout (to enclose large answers in the scroll bar), works like
|
|
57
|
+
display: contents for this use case but w ie11 support
|
|
58
|
+
*/
|
|
59
|
+
display: grid;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.question {
|
|
63
|
+
composes: fontBase;
|
|
64
|
+
font-size: 20px;
|
|
65
|
+
font-weight: bold;
|
|
66
|
+
color: cm_blue_900;
|
|
67
|
+
text-align: center;
|
|
68
|
+
margin: 24px 0 4px;
|
|
69
|
+
max-width: 85%;
|
|
70
|
+
box-sizing: border-box;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.questionOrigin {
|
|
74
|
+
composes: fontBase;
|
|
75
|
+
font-size: 15px;
|
|
76
|
+
color: cm_blue_900;
|
|
77
|
+
margin-top: 49px;
|
|
78
|
+
text-align: center;
|
|
79
|
+
max-width: 95%;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.questionOrigin:empty:after {
|
|
83
|
+
content: "\a0";
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.help {
|
|
87
|
+
composes: fontBase;
|
|
88
|
+
font-size: 15px;
|
|
89
|
+
color: cm_grey_400;
|
|
90
|
+
flex-grow: 0.1;
|
|
91
|
+
margin: 4px 0 10px;
|
|
92
|
+
text-align: center;
|
|
93
|
+
max-width: 95%;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* to keep the content space even if the help label is empty */
|
|
97
|
+
.help:empty:after {
|
|
98
|
+
content: "\a0";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@keyframes popInAnimation {
|
|
102
|
+
from {
|
|
103
|
+
transform: translate3d(0, 200px, 0);
|
|
104
|
+
}
|
|
105
|
+
to {
|
|
106
|
+
transform: translate3d(0, 0, 0);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.correctionPopinWrapper {
|
|
111
|
+
position: absolute;
|
|
112
|
+
bottom: 0px;
|
|
113
|
+
border-radius: 7px;
|
|
114
|
+
margin: 0 15px 40px;
|
|
115
|
+
width: 95%;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.popinAnimation {
|
|
119
|
+
animation: popInAnimation 0.5s ease-out forwards;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* ie fallback */
|
|
123
|
+
_:-ms-fullscreen, :root .correctionPopinWrapper {
|
|
124
|
+
left: 15px;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.validateButton {
|
|
128
|
+
color: white;
|
|
129
|
+
transition: opacity 0.25s ease-in;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.validateButton:hover {
|
|
133
|
+
opacity: 0.8;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.loader {
|
|
137
|
+
height: 60px;
|
|
138
|
+
width: 60px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@media tablet {
|
|
142
|
+
.slideContentContainer {
|
|
143
|
+
height: 473px;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@keyframes popInAnimation {
|
|
147
|
+
from {
|
|
148
|
+
transform: translate3d(0, 400px, 0);
|
|
149
|
+
}
|
|
150
|
+
to {
|
|
151
|
+
transform: translate3d(0, 0, 0);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@media mobile {
|
|
157
|
+
.slideContentContainer {
|
|
158
|
+
height: 511px;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.questionOrigin, .question, .help, .answerContainer {
|
|
162
|
+
max-width: 90%;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@keyframes popInAnimation {
|
|
166
|
+
from {
|
|
167
|
+
transform: translate3d(0, 500px, 0);
|
|
168
|
+
}
|
|
169
|
+
to {
|
|
170
|
+
transform: translate3d(0, 0, 0);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import classnames from 'classnames';
|
|
5
|
+
import _toString from 'lodash/fp/toString';
|
|
6
|
+
import ReviewSlide from '../review-slide';
|
|
7
|
+
import propTypes from './prop-types';
|
|
8
|
+
import style from './style.css';
|
|
9
|
+
export const TOTAL_SLIDES_STACK = 5;
|
|
10
|
+
const stylesByPosition = {
|
|
11
|
+
0: style.position0,
|
|
12
|
+
1: style.position1,
|
|
13
|
+
2: style.position2,
|
|
14
|
+
3: style.position3,
|
|
15
|
+
4: style.position4
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const getSlideAnimation = (action, position, hidden) => {
|
|
19
|
+
switch (action) {
|
|
20
|
+
case 'unstack':
|
|
21
|
+
return style.slideOutHideAndIn;
|
|
22
|
+
|
|
23
|
+
case 'restack':
|
|
24
|
+
return style.slideOutAndIn;
|
|
25
|
+
|
|
26
|
+
default:
|
|
27
|
+
return hidden ? style.hiddenSlide : stylesByPosition[position];
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const StackedSlides = ({
|
|
32
|
+
slides,
|
|
33
|
+
endReview,
|
|
34
|
+
validateButton,
|
|
35
|
+
correctionPopinProps
|
|
36
|
+
}) => {
|
|
37
|
+
const stackedSlides = []; // eslint-disable-next-line fp/no-loops
|
|
38
|
+
|
|
39
|
+
for (let slideIndex = 0; slideIndex < TOTAL_SLIDES_STACK; slideIndex++) {
|
|
40
|
+
const slide = slides[_toString(slideIndex)];
|
|
41
|
+
|
|
42
|
+
const {
|
|
43
|
+
animationType,
|
|
44
|
+
hidden,
|
|
45
|
+
position
|
|
46
|
+
} = slide;
|
|
47
|
+
const slideView = /*#__PURE__*/React.createElement("div", {
|
|
48
|
+
key: `slide-${slideIndex}`,
|
|
49
|
+
"data-name": `slide-${slideIndex}`,
|
|
50
|
+
className: classnames(style.slideBase, getSlideAnimation(animationType, position, hidden), endReview ? style.endReview : null)
|
|
51
|
+
}, /*#__PURE__*/React.createElement(ReviewSlide, _extends({
|
|
52
|
+
slideIndex: _toString(slideIndex),
|
|
53
|
+
slide,
|
|
54
|
+
validateButton,
|
|
55
|
+
correctionPopinProps
|
|
56
|
+
}, {
|
|
57
|
+
key: slideIndex
|
|
58
|
+
})));
|
|
59
|
+
stackedSlides.push(slideView);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
63
|
+
key: "stacked-slides-container-y-overflow",
|
|
64
|
+
className: style.stackedSlidesYAxisOverflowContainer
|
|
65
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
66
|
+
key: "stacked-slides-container",
|
|
67
|
+
"data-name": "stacked-slides-container",
|
|
68
|
+
className: style.stackedSlidesContainer
|
|
69
|
+
}, stackedSlides));
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
StackedSlides.propTypes = process.env.NODE_ENV !== "production" ? propTypes : {};
|
|
73
|
+
export default StackedSlides;
|
|
74
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/organism/review-stacked-slides/index.js"],"names":["React","classnames","_toString","ReviewSlide","propTypes","style","TOTAL_SLIDES_STACK","stylesByPosition","position0","position1","position2","position3","position4","getSlideAnimation","action","position","hidden","slideOutHideAndIn","slideOutAndIn","hiddenSlide","StackedSlides","slides","endReview","validateButton","correctionPopinProps","stackedSlides","slideIndex","slide","animationType","slideView","slideBase","push","stackedSlidesYAxisOverflowContainer","stackedSlidesContainer"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,oBAAtB;AACA,OAAOC,WAAP,MAAwB,iBAAxB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AACA,OAAOC,KAAP,MAAkB,aAAlB;AAEA,OAAO,MAAMC,kBAAkB,GAAG,CAA3B;AAEP,MAAMC,gBAAgB,GAAG;AACvB,KAAGF,KAAK,CAACG,SADc;AAEvB,KAAGH,KAAK,CAACI,SAFc;AAGvB,KAAGJ,KAAK,CAACK,SAHc;AAIvB,KAAGL,KAAK,CAACM,SAJc;AAKvB,KAAGN,KAAK,CAACO;AALc,CAAzB;;AAQA,MAAMC,iBAAiB,GAAG,CAACC,MAAD,EAASC,QAAT,EAAmBC,MAAnB,KAA8B;AACtD,UAAQF,MAAR;AACE,SAAK,SAAL;AACE,aAAOT,KAAK,CAACY,iBAAb;;AACF,SAAK,SAAL;AACE,aAAOZ,KAAK,CAACa,aAAb;;AACF;AACE,aAAOF,MAAM,GAAGX,KAAK,CAACc,WAAT,GAAuBZ,gBAAgB,CAACQ,QAAD,CAApD;AANJ;AAQD,CATD;;AAWA,MAAMK,aAAa,GAAG,CAAC;AAACC,EAAAA,MAAD;AAASC,EAAAA,SAAT;AAAoBC,EAAAA,cAApB;AAAoCC,EAAAA;AAApC,CAAD,KAA+D;AACnF,QAAMC,aAAa,GAAG,EAAtB,CADmF,CAEnF;;AACA,OAAK,IAAIC,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGpB,kBAAtC,EAA0DoB,UAAU,EAApE,EAAwE;AACtE,UAAMC,KAAK,GAAGN,MAAM,CAACnB,SAAS,CAACwB,UAAD,CAAV,CAApB;;AACA,UAAM;AAACE,MAAAA,aAAD;AAAgBZ,MAAAA,MAAhB;AAAwBD,MAAAA;AAAxB,QAAoCY,KAA1C;AAEA,UAAME,SAAS,gBACb;AACE,MAAA,GAAG,EAAG,SAAQH,UAAW,EAD3B;AAEE,mBAAY,SAAQA,UAAW,EAFjC;AAGE,MAAA,SAAS,EAAEzB,UAAU,CACnBI,KAAK,CAACyB,SADa,EAEnBjB,iBAAiB,CAACe,aAAD,EAAgBb,QAAhB,EAA0BC,MAA1B,CAFE,EAGnBM,SAAS,GAAGjB,KAAK,CAACiB,SAAT,GAAqB,IAHX;AAHvB,oBASE,oBAAC,WAAD,WACM;AACFI,MAAAA,UAAU,EAAExB,SAAS,CAACwB,UAAD,CADnB;AAEFC,MAAAA,KAFE;AAGFJ,MAAAA,cAHE;AAIFC,MAAAA;AAJE,KADN;AAOE,MAAA,GAAG,EAAEE;AAPP,OATF,CADF;AAqBAD,IAAAA,aAAa,CAACM,IAAd,CAAmBF,SAAnB;AACD;;AAED,sBACE;AACE,IAAA,GAAG,EAAC,qCADN;AAEE,IAAA,SAAS,EAAExB,KAAK,CAAC2B;AAFnB,kBAIE;AACE,IAAA,GAAG,EAAC,0BADN;AAEE,iBAAU,0BAFZ;AAGE,IAAA,SAAS,EAAE3B,KAAK,CAAC4B;AAHnB,KAKGR,aALH,CAJF,CADF;AAcD,CA7CD;;AA+CAL,aAAa,CAAChB,SAAd,2CAA0BA,SAA1B;AAEA,eAAegB,aAAf","sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport _toString from 'lodash/fp/toString';\nimport ReviewSlide from '../review-slide';\nimport propTypes from './prop-types';\nimport style from './style.css';\n\nexport const TOTAL_SLIDES_STACK = 5;\n\nconst stylesByPosition = {\n 0: style.position0,\n 1: style.position1,\n 2: style.position2,\n 3: style.position3,\n 4: style.position4\n};\n\nconst getSlideAnimation = (action, position, hidden) => {\n switch (action) {\n case 'unstack':\n return style.slideOutHideAndIn;\n case 'restack':\n return style.slideOutAndIn;\n default:\n return hidden ? style.hiddenSlide : stylesByPosition[position];\n }\n};\n\nconst StackedSlides = ({slides, endReview, validateButton, correctionPopinProps}) => {\n const stackedSlides = [];\n // eslint-disable-next-line fp/no-loops\n for (let slideIndex = 0; slideIndex < TOTAL_SLIDES_STACK; slideIndex++) {\n const slide = slides[_toString(slideIndex)];\n const {animationType, hidden, position} = slide;\n\n const slideView = (\n <div\n key={`slide-${slideIndex}`}\n data-name={`slide-${slideIndex}`}\n className={classnames(\n style.slideBase,\n getSlideAnimation(animationType, position, hidden),\n endReview ? style.endReview : null\n )}\n >\n <ReviewSlide\n {...{\n slideIndex: _toString(slideIndex),\n slide,\n validateButton,\n correctionPopinProps\n }}\n key={slideIndex}\n />\n </div>\n );\n stackedSlides.push(slideView);\n }\n\n return (\n <div\n key=\"stacked-slides-container-y-overflow\"\n className={style.stackedSlidesYAxisOverflowContainer}\n >\n <div\n key=\"stacked-slides-container\"\n data-name=\"stacked-slides-container\"\n className={style.stackedSlidesContainer}\n >\n {stackedSlides}\n </div>\n </div>\n );\n};\n\nStackedSlides.propTypes = propTypes;\n\nexport default StackedSlides;\n"],"file":"index.js"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import ReviewSlideProps, { SlideProp } from '../review-slide/prop-types';
|
|
3
|
+
export default {
|
|
4
|
+
validateButton: ReviewSlideProps.validateButton,
|
|
5
|
+
correctionPopinProps: ReviewSlideProps.correctionPopinProps,
|
|
6
|
+
slides: PropTypes.shape({
|
|
7
|
+
'0': SlideProp,
|
|
8
|
+
'1': SlideProp,
|
|
9
|
+
'2': SlideProp,
|
|
10
|
+
'3': SlideProp,
|
|
11
|
+
'4': SlideProp
|
|
12
|
+
}),
|
|
13
|
+
endReview: PropTypes.bool
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=prop-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/organism/review-stacked-slides/prop-types.js"],"names":["PropTypes","ReviewSlideProps","SlideProp","validateButton","correctionPopinProps","slides","shape","endReview","bool"],"mappings":"AAAA,OAAOA,SAAP,MAAsB,YAAtB;AACA,OAAOC,gBAAP,IAA0BC,SAA1B,QAA0C,4BAA1C;AAEA,eAAe;AACbC,EAAAA,cAAc,EAAEF,gBAAgB,CAACE,cADpB;AAEbC,EAAAA,oBAAoB,EAAEH,gBAAgB,CAACG,oBAF1B;AAGbC,EAAAA,MAAM,EAAEL,SAAS,CAACM,KAAV,CAAgB;AACtB,SAAKJ,SADiB;AAEtB,SAAKA,SAFiB;AAGtB,SAAKA,SAHiB;AAItB,SAAKA,SAJiB;AAKtB,SAAKA;AALiB,GAAhB,CAHK;AAUbK,EAAAA,SAAS,EAAEP,SAAS,CAACQ;AAVR,CAAf","sourcesContent":["import PropTypes from 'prop-types';\nimport ReviewSlideProps, {SlideProp} from '../review-slide/prop-types';\n\nexport default {\n validateButton: ReviewSlideProps.validateButton,\n correctionPopinProps: ReviewSlideProps.correctionPopinProps,\n slides: PropTypes.shape({\n '0': SlideProp,\n '1': SlideProp,\n '2': SlideProp,\n '3': SlideProp,\n '4': SlideProp\n }),\n endReview: PropTypes.bool\n};\n"],"file":"prop-types.js"}
|