@coorpacademy/components 11.40.1 → 11.40.2-alpha.11.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/molecule/certification-card/index.d.ts.map +1 -1
- package/es/molecule/certification-card/index.js +11 -2
- package/es/molecule/certification-card/index.js.map +1 -1
- package/es/molecule/certification-card/style.css +2 -2
- package/es/molecule/dashboard/cards-list/index.d.ts.map +1 -1
- package/es/molecule/dashboard/cards-list/index.js +15 -4
- package/es/molecule/dashboard/cards-list/index.js.map +1 -1
- package/es/molecule/learner-skill-card/index.d.ts.map +1 -1
- package/es/molecule/learner-skill-card/index.js +16 -3
- package/es/molecule/learner-skill-card/index.js.map +1 -1
- package/es/molecule/playlist-card/index.d.ts +30 -0
- package/es/molecule/playlist-card/index.d.ts.map +1 -0
- package/es/molecule/playlist-card/index.js +83 -0
- package/es/molecule/playlist-card/index.js.map +1 -0
- package/es/molecule/playlist-card/style.css +99 -0
- package/es/molecule/playlist-detail-cover/index.d.ts +3 -1
- package/es/molecule/playlist-detail-cover/index.d.ts.map +1 -1
- package/es/molecule/playlist-detail-cover/index.js +6 -3
- package/es/molecule/playlist-detail-cover/index.js.map +1 -1
- package/es/template/common/search-page/index.d.ts +116 -0
- package/es/template/common/search-page/index.d.ts.map +1 -1
- package/es/template/common/search-page/index.js +105 -5
- package/es/template/common/search-page/index.js.map +1 -1
- package/es/template/common/search-page/style.css +67 -0
- package/lib/molecule/certification-card/index.d.ts.map +1 -1
- package/lib/molecule/certification-card/index.js +11 -2
- package/lib/molecule/certification-card/index.js.map +1 -1
- package/lib/molecule/certification-card/style.css +2 -2
- package/lib/molecule/dashboard/cards-list/index.d.ts.map +1 -1
- package/lib/molecule/dashboard/cards-list/index.js +15 -4
- package/lib/molecule/dashboard/cards-list/index.js.map +1 -1
- package/lib/molecule/learner-skill-card/index.d.ts.map +1 -1
- package/lib/molecule/learner-skill-card/index.js +16 -3
- package/lib/molecule/learner-skill-card/index.js.map +1 -1
- package/lib/molecule/playlist-card/index.d.ts +30 -0
- package/lib/molecule/playlist-card/index.d.ts.map +1 -0
- package/lib/molecule/playlist-card/index.js +88 -0
- package/lib/molecule/playlist-card/index.js.map +1 -0
- package/lib/molecule/playlist-card/style.css +99 -0
- package/lib/molecule/playlist-detail-cover/index.d.ts +3 -1
- package/lib/molecule/playlist-detail-cover/index.d.ts.map +1 -1
- package/lib/molecule/playlist-detail-cover/index.js +6 -3
- package/lib/molecule/playlist-detail-cover/index.js.map +1 -1
- package/lib/template/common/search-page/index.d.ts +116 -0
- package/lib/template/common/search-page/index.d.ts.map +1 -1
- package/lib/template/common/search-page/index.js +105 -5
- package/lib/template/common/search-page/index.js.map +1 -1
- package/lib/template/common/search-page/style.css +67 -0
- package/locales/bs/global.json +6 -4
- package/locales/cs/global.json +6 -4
- package/locales/de/global.json +6 -4
- package/locales/en/global.json +4 -2
- package/locales/es/global.json +6 -4
- package/locales/et/global.json +6 -4
- package/locales/fi/global.json +6 -4
- package/locales/fr/global.json +4 -2
- package/locales/hr/global.json +6 -4
- package/locales/hu/global.json +6 -4
- package/locales/hy/global.json +6 -4
- package/locales/it/global.json +6 -4
- package/locales/ja/global.json +6 -4
- package/locales/ko/global.json +6 -4
- package/locales/lt/global.json +7 -5
- package/locales/nl/global.json +6 -4
- package/locales/pl/global.json +6 -4
- package/locales/pt/global.json +6 -4
- package/locales/ro/global.json +6 -4
- package/locales/ru/global.json +6 -4
- package/locales/sk/global.json +6 -4
- package/locales/sl/global.json +6 -4
- package/locales/sv/global.json +6 -4
- package/locales/th/global.json +6 -2
- package/locales/tl/global.json +6 -4
- package/locales/tr/global.json +6 -4
- package/locales/uk/global.json +6 -4
- package/locales/vi/global.json +6 -4
- package/locales/zh/global.json +6 -4
- package/locales/zh_TW/global.json +6 -4
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/certification-card/index.js"],"names":[],"mappings":";AAQA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/certification-card/index.js"],"names":[],"mappings":";AAQA,0EA+DC"}
|
|
@@ -38,6 +38,9 @@ const CertificationCard = (props, context) => {
|
|
|
38
38
|
padding: 0
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
|
+
const certificationIcon = {
|
|
42
|
+
iconName: 'wreath-laurel'
|
|
43
|
+
};
|
|
41
44
|
return /*#__PURE__*/React.createElement("div", {
|
|
42
45
|
className: style.container,
|
|
43
46
|
"data-name": `certification-card-${label}`,
|
|
@@ -63,13 +66,19 @@ const CertificationCard = (props, context) => {
|
|
|
63
66
|
className: style.titleWrapper
|
|
64
67
|
}, /*#__PURE__*/React.createElement(Tag, {
|
|
65
68
|
label: tag,
|
|
66
|
-
size: "S"
|
|
69
|
+
size: "S",
|
|
70
|
+
icon: certificationIcon
|
|
67
71
|
}), /*#__PURE__*/React.createElement("div", {
|
|
68
72
|
className: style.title,
|
|
69
73
|
"data-name": "certification-title"
|
|
70
74
|
}, title), /*#__PURE__*/React.createElement("div", {
|
|
71
75
|
className: style.moduleCount
|
|
72
|
-
|
|
76
|
+
// eslint-disable-next-line react/no-danger
|
|
77
|
+
,
|
|
78
|
+
dangerouslySetInnerHTML: {
|
|
79
|
+
__html: conditionDescriptionProgress
|
|
80
|
+
}
|
|
81
|
+
})), /*#__PURE__*/React.createElement(ProgressBar, {
|
|
73
82
|
className: style.customProgressBar,
|
|
74
83
|
style: {
|
|
75
84
|
backgroundColor: COLORS.cm_positive_500
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","PropTypes","COLORS","Provider","Tag","ProgressBar","style","CertificationCard","props","context","label","locales","conditionDescriptionProgress","tag","goal","title","progress","imgUrl","onClick","translate","isInprogress","progressLabel","progressTagType","progressIconProps","position","iconName","iconColor","backgroundColor","size","faSize","wrapperSize","customStyle","padding","createElement","className","container","type","top","right","icon","imageSection","imageContainer","src","detailWrapper","titleWrapper","moduleCount","customProgressBar","cm_positive_500","displayInfo","value","max","contextTypes","childContextTypes","propTypes","process","env","NODE_ENV","string","shape","condition","nbDone","number","func"],"sources":["../../../src/molecule/certification-card/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {COLORS} from '../../variables/colors';\nimport Provider from '../../atom/provider';\nimport Tag from '../../atom/tag';\nimport ProgressBar from '../progress-bar';\nimport style from './style.css';\n\nconst CertificationCard = (props, context) => {\n const {\n label,\n locales: {conditionDescriptionProgress, tag},\n goal: {title},\n progress,\n imgUrl,\n onClick\n } = props;\n const {translate} = context;\n const isInprogress = progress < 100;\n const progressLabel = isInprogress ? translate('in_progress') : translate('completed');\n const progressTagType = isInprogress ? 'progress' : 'success';\n\n const progressIconProps = {\n position: 'left',\n iconName: isInprogress ? 'clock' : 'circle-check',\n iconColor: isInprogress ? '#B87A00' : '#05944F',\n backgroundColor: isInprogress ? '#FFEECC' : '#D6F5E5',\n size: {\n faSize: 10,\n wrapperSize: 10\n },\n customStyle: {padding: 0}\n };\n
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","PropTypes","COLORS","Provider","Tag","ProgressBar","style","CertificationCard","props","context","label","locales","conditionDescriptionProgress","tag","goal","title","progress","imgUrl","onClick","translate","isInprogress","progressLabel","progressTagType","progressIconProps","position","iconName","iconColor","backgroundColor","size","faSize","wrapperSize","customStyle","padding","certificationIcon","createElement","className","container","type","top","right","icon","imageSection","imageContainer","src","detailWrapper","titleWrapper","moduleCount","dangerouslySetInnerHTML","__html","customProgressBar","cm_positive_500","displayInfo","value","max","contextTypes","childContextTypes","propTypes","process","env","NODE_ENV","string","shape","condition","nbDone","number","func"],"sources":["../../../src/molecule/certification-card/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {COLORS} from '../../variables/colors';\nimport Provider from '../../atom/provider';\nimport Tag from '../../atom/tag';\nimport ProgressBar from '../progress-bar';\nimport style from './style.css';\n\nconst CertificationCard = (props, context) => {\n const {\n label,\n locales: {conditionDescriptionProgress, tag},\n goal: {title},\n progress,\n imgUrl,\n onClick\n } = props;\n const {translate} = context;\n const isInprogress = progress < 100;\n const progressLabel = isInprogress ? translate('in_progress') : translate('completed');\n const progressTagType = isInprogress ? 'progress' : 'success';\n\n const progressIconProps = {\n position: 'left',\n iconName: isInprogress ? 'clock' : 'circle-check',\n iconColor: isInprogress ? '#B87A00' : '#05944F',\n backgroundColor: isInprogress ? '#FFEECC' : '#D6F5E5',\n size: {\n faSize: 10,\n wrapperSize: 10\n },\n customStyle: {padding: 0}\n };\n const certificationIcon = {iconName: 'wreath-laurel'};\n return (\n <div className={style.container} data-name={`certification-card-${label}`} onClick={onClick}>\n {progress > 0 ? (\n <Tag\n label={progressLabel}\n type={progressTagType}\n customStyle={{position: 'absolute', top: '12px', right: '12px'}}\n icon={progressIconProps}\n />\n ) : null}\n <div className={style.imageSection}>\n <div className={style.imageContainer}>\n <img src={imgUrl} />\n </div>\n </div>\n <div className={style.detailWrapper}>\n <div className={style.titleWrapper}>\n <Tag label={tag} size=\"S\" icon={certificationIcon} />\n <div className={style.title} data-name=\"certification-title\">\n {title}\n </div>\n <div\n className={style.moduleCount}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: conditionDescriptionProgress}}\n />\n </div>\n <ProgressBar\n className={style.customProgressBar}\n style={{backgroundColor: COLORS.cm_positive_500}}\n displayInfo={false}\n value={progress}\n max={100}\n />\n </div>\n </div>\n );\n};\n\nCertificationCard.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nCertificationCard.propTypes = {\n label: PropTypes.string,\n goal: PropTypes.shape({\n title: PropTypes.string,\n condition: PropTypes.shape({\n nbDone: PropTypes.number\n })\n }),\n progress: PropTypes.number,\n imgUrl: PropTypes.string,\n onClick: PropTypes.func,\n locales: PropTypes.shape({\n conditionDescriptionProgress: PropTypes.string,\n tag: PropTypes.string\n })\n};\n\nexport default CertificationCard;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
min-width: 288px;
|
|
15
15
|
background-color: #FFF;
|
|
16
16
|
border: 2px solid #FFF;
|
|
17
|
-
box-shadow: 0px 4px
|
|
17
|
+
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.04);
|
|
18
18
|
position: relative;
|
|
19
19
|
display: flex;
|
|
20
20
|
flex-direction: column;
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
.container:hover {
|
|
56
|
-
box-shadow: 0px 4px
|
|
56
|
+
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.10);
|
|
57
57
|
|
|
58
58
|
.imageContainer {
|
|
59
59
|
width: 244px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/molecule/dashboard/cards-list/index.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/molecule/dashboard/cards-list/index.js"],"names":[],"mappings":";AA0FA;IACE;;;OAGG;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2BE;IAEF;;;;;;;;;;;;;;;;;;;;;;;MAGE;IAEF,wBAkCC;IA/BC;;;;;;;;MAQC;IAED,0DAAgE;IAsHlE,qBAiBC;IAED,qBAGC;IAED,sBAGC;IAED,0BASC;IAvJC,uEAA6D;IAyJ/D,mCAIC;IA5DD,oCAMC;IAGD,sCAIC;IA5DD,qBAGC;IAnCD,0BAMC;IAED,2BAYC;IAED,6BAOC;IASD,wCAuCC;IAGC,kBAA2B;IA6D7B,sBA+GC;CACF"}
|
|
@@ -18,6 +18,9 @@ import { NovaSolidContentContentBook1 as LearnerIcon, NovaCompositionCoorpacadem
|
|
|
18
18
|
import Provider from '../../../atom/provider';
|
|
19
19
|
import Card, { cardPropTypes } from '../../card';
|
|
20
20
|
import LearningPriorityCard from '../../learning-priority-card';
|
|
21
|
+
import CertificationCard from '../../certification-card';
|
|
22
|
+
import LearnerSkillCard from '../../learner-skill-card';
|
|
23
|
+
import PlaylistCard from '../../playlist-card';
|
|
21
24
|
import Icon from '../../../atom/icon';
|
|
22
25
|
import style from './style.css';
|
|
23
26
|
const ShowMoreLink = props => {
|
|
@@ -283,12 +286,20 @@ class CardsList extends React.PureComponent {
|
|
|
283
286
|
const dark = _getOr('#90A4AE', 'common.dark', skin);
|
|
284
287
|
const titleStyle = onShowMore ? style.titleLink : style.title;
|
|
285
288
|
const cardsView = _pipe(_toPairs, _map(([key, card]) => {
|
|
289
|
+
let CardComponent = Card;
|
|
290
|
+
if (card && type === 'learningPrioritiesCards') {
|
|
291
|
+
CardComponent = LearningPriorityCard;
|
|
292
|
+
} else if (card && type === 'skills') {
|
|
293
|
+
CardComponent = LearnerSkillCard;
|
|
294
|
+
} else if (card && type === 'certifications') {
|
|
295
|
+
CardComponent = CertificationCard;
|
|
296
|
+
} else if (card && type === 'playlists') {
|
|
297
|
+
CardComponent = PlaylistCard;
|
|
298
|
+
}
|
|
286
299
|
return /*#__PURE__*/React.createElement("div", {
|
|
287
300
|
className: style.card,
|
|
288
301
|
key: key
|
|
289
|
-
},
|
|
290
|
-
dataName: `${dataName}-${key}`
|
|
291
|
-
})) : /*#__PURE__*/React.createElement(Card, _extends({}, card, {
|
|
302
|
+
}, /*#__PURE__*/React.createElement(CardComponent, _extends({}, card, {
|
|
292
303
|
dataName: `${dataName}-${key}`
|
|
293
304
|
})));
|
|
294
305
|
}))(cards);
|
|
@@ -365,7 +376,7 @@ CardsList.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
365
376
|
showMoreOnLeftAriaLabel: PropTypes.string,
|
|
366
377
|
showMoreOnRightAriaLabel: PropTypes.string
|
|
367
378
|
}),
|
|
368
|
-
type: PropTypes.oneOf(['cards', 'learningPrioritiesCards']),
|
|
379
|
+
type: PropTypes.oneOf(['cards', 'learningPrioritiesCards', 'skills', 'certifications', 'playlists']),
|
|
369
380
|
// eslint-disable-next-line react/forbid-prop-types
|
|
370
381
|
testingSizes: PropTypes.any
|
|
371
382
|
} : {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","PropTypes","NovaSolidContentContentBook1","LearnerIcon","NovaCompositionCoorpacademyTimer","TimerIcon","Provider","Card","cardPropTypes","LearningPriorityCard","Icon","style","ShowMoreLink","props","onShowMore","showMore","className","createElement","onClick","contextTypes","skin","childContextTypes","propTypes","process","env","NODE_ENV","func","string","IconView","context","contentType","ICONS","chapter","course","dark","_get","IconType","color","icon","computeWidth","card","type","nextPage","page","maxPages","CardsList","PureComponent","translate","constructor","state","actualPage","scrollLeft","offsetWidth","possiblePositions","possiblePages","cardsWidth","handleScroll_","_throttle","handleScroll","bind","handleOnLeft","handleOnRight","scrollTo","updateState","_debounce","updatePages","setCardsWrapper","getScrollWidth","handleResize","testingSizes","componentDidMount","cardsWrapper","addEventListener","window","componentDidUpdate","cards","newCardsWidth","_pipe","_map","_sum","updatePaginationState","setState","componentWillUnmount","removeEventListener","cancel","wrapperWidth","wrapperScrollLeft","cardWidths","_reduce","cardPositions","accWidth","cardWidth","_head","acc","pageIndex","accPageWidth","pageWidth","skip","_findIndex","position","_last","element","index","onScroll","leftBound","rightBound","leftIndex","rightIndex","_findLastIndex","limit","indexOfNextFirstCard","indexOf","nextPosition","render","title","customStyle","dataName","ariaLabel","_getOr","titleStyle","titleLink","cardsView","_toPairs","key","_extends","arrowIconProps","preset","borderRadius","showMoreOnLeftAriaLabel","arrows","arrowsWrapper","arrow","iconName","titleView","titleNode","hasPages","showMoreView","showMoreBar","switchPagesView","pagingWrapper","wrapper","list","header","ref","oneOfType","node","arrayOf","shape","objectOf","showMoreOnRightAriaLabel","oneOf","any"],"sources":["../../../../src/molecule/dashboard/cards-list/index.js"],"sourcesContent":["import React from 'react';\nimport {\n debounce,\n throttle,\n get,\n getOr,\n map,\n sum,\n last,\n pipe,\n toPairs,\n reduce,\n head,\n findIndex,\n findLastIndex\n} from 'lodash/fp';\nimport PropTypes from 'prop-types';\nimport {\n NovaSolidContentContentBook1 as LearnerIcon,\n NovaCompositionCoorpacademyTimer as TimerIcon\n} from '@coorpacademy/nova-icons';\nimport Provider from '../../../atom/provider';\nimport Card, {cardPropTypes} from '../../card';\nimport LearningPriorityCard from '../../learning-priority-card';\nimport Icon from '../../../atom/icon';\nimport style from './style.css';\n\nconst ShowMoreLink = props => {\n const {onShowMore, showMore, className} = props;\n return (\n <div className={className} onClick={onShowMore}>\n {showMore}\n </div>\n );\n};\n\nShowMoreLink.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nShowMoreLink.propTypes = {\n onShowMore: PropTypes.func,\n showMore: PropTypes.string,\n className: PropTypes.string\n};\n\nconst IconView = (props, context) => {\n const {skin} = context;\n const {contentType} = props;\n const ICONS = {\n chapter: TimerIcon,\n course: LearnerIcon\n };\n\n if (!contentType) {\n return null;\n }\n\n const dark = get('common.dark', skin);\n const IconType = ICONS[contentType];\n\n return (\n <div>\n <IconType style={{color: dark}} className={style.icon} data-contenttype={contentType} />\n </div>\n );\n};\n\nconst computeWidth = card => {\n switch (card && card.type) {\n case 'chapter':\n return 219;\n default:\n return 272;\n }\n};\n\nconst nextPage = (page, maxPages) => {\n if (page < 0) return maxPages;\n if (page > maxPages) return 0;\n return page;\n};\n\nIconView.propTypes = {\n contentType: PropTypes.string\n};\n\nclass CardsList extends React.PureComponent {\n /**\n * IMPORTANT: update prop-types.ts too, 1st a migration of tests\n * is intended, then, a TS + functional refactor is planned.\n */\n static propTypes = {\n contentType: PropTypes.string,\n dataName: PropTypes.string,\n title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n showMore: PropTypes.string,\n cards: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.shape(cardPropTypes),\n PropTypes.shape(LearningPriorityCard.propTypes)\n ])\n ),\n customStyle: PropTypes.objectOf(PropTypes.string),\n onScroll: PropTypes.func,\n onShowMore: PropTypes.func,\n 'arrows-aria-label': PropTypes.shape({\n showMoreOnLeftAriaLabel: PropTypes.string,\n showMoreOnRightAriaLabel: PropTypes.string\n }),\n type: PropTypes.oneOf(['cards', 'learningPrioritiesCards']),\n // eslint-disable-next-line react/forbid-prop-types\n testingSizes: PropTypes.any\n };\n\n static contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n actualPage: 0,\n maxPages: 0,\n scrollLeft: 0,\n offsetWidth: 0,\n possiblePositions: [],\n possiblePages: [],\n cardsWidth: 0\n };\n\n this.handleScroll_ = throttle(200, this.handleScroll.bind(this));\n this.handleScroll = this.handleScroll.bind(this);\n this.handleOnLeft = this.handleOnLeft.bind(this);\n this.handleOnRight = this.handleOnRight.bind(this);\n this.scrollTo = this.scrollTo.bind(this);\n this.updateState = debounce(200, this.updatePages.bind(this));\n this.updatePages = this.updatePages.bind(this);\n this.setCardsWrapper = this.setCardsWrapper.bind(this);\n this.getScrollWidth = this.getScrollWidth.bind(this);\n this.handleResize = this.handleResize.bind(this);\n\n // for testing purposes only - no other way to test this polluted component\n if (props.testingSizes) {\n const {offsetWidth, scrollLeft, maxPages, possiblePages, possiblePositions} =\n props.testingSizes;\n this.state.offsetWidth = offsetWidth;\n this.state.scrollLeft = scrollLeft;\n this.state.maxPages = maxPages;\n this.state.possiblePages = possiblePages;\n this.state.possiblePositions = possiblePositions;\n }\n }\n\n componentDidMount() {\n this.cardsWrapper.addEventListener('scroll', this.handleScroll_);\n\n if (window) {\n window.addEventListener('resize', this.handleResize);\n }\n }\n\n componentDidUpdate() {\n const {cards = []} = this.props;\n const {offsetWidth, cardsWidth} = this.state;\n const newCardsWidth = pipe(map(computeWidth), sum)(cards);\n\n if (newCardsWidth !== cardsWidth && offsetWidth !== 0) {\n this.updatePaginationState(cards);\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n cardsWidth: newCardsWidth\n });\n }\n }\n\n componentWillUnmount() {\n this.cardsWrapper.removeEventListener('scroll', this.handleScroll_);\n\n if (window) {\n window.removeEventListener('resize', this.handleResize);\n }\n this.updateState.cancel();\n }\n\n /* istanbul ignore next */\n handleResize() {\n const {cards = []} = this.props;\n this.updatePaginationState(cards);\n }\n\n /* istanbul ignore next */\n updatePaginationState(cards) {\n const {offsetWidth: wrapperWidth, scrollLeft: wrapperScrollLeft} = this.state;\n\n const cardWidths = map(computeWidth)(cards);\n\n const possiblePositions = pipe(\n reduce(\n ([cardPositions, accWidth], cardWidth) => [\n [...cardPositions, accWidth],\n cardWidth + accWidth\n ],\n [[], 0]\n ),\n head\n )(cardWidths);\n\n const possiblePages = pipe(\n reduce(\n ([acc, pageIndex, accPageWidth], cardWidth) => {\n const pageWidth = accPageWidth + cardWidth;\n if (pageWidth > wrapperWidth) {\n return [[...acc, pageIndex + 1], pageIndex + 1, cardWidth];\n }\n return [[...acc, pageIndex], pageIndex, pageWidth];\n },\n [[], 0, 0]\n ),\n head\n )(cardWidths);\n\n const skip = findIndex(position => position >= wrapperScrollLeft, possiblePositions);\n const actualPage = possiblePages[skip + 1];\n\n this.setState({\n possiblePositions,\n possiblePages,\n maxPages: last(possiblePages),\n actualPage\n });\n }\n\n setCardsWrapper(element) {\n this.cardsWrapper = element;\n this.setState({\n scrollLeft: this.cardsWrapper?.scrollLeft,\n offsetWidth: this.cardsWrapper?.offsetWidth\n });\n }\n\n /* istanbul ignore next */\n getScrollWidth(index) {\n const {cards = []} = this.props;\n const card = cards[index];\n return computeWidth(card);\n }\n\n /* istanbul ignore next */\n handleScroll() {\n const scrollLeft = this.cardsWrapper?.scrollLeft;\n this.setState({scrollLeft});\n\n const {possiblePositions, offsetWidth} = this.state;\n const {onScroll} = this.props;\n if (onScroll) {\n const leftBound = scrollLeft;\n const rightBound = scrollLeft + offsetWidth;\n\n const leftIndex = findIndex(position => position > leftBound, possiblePositions) - 1;\n const rightIndex = findLastIndex(position => position < rightBound, possiblePositions);\n const skip = leftIndex;\n const limit = rightIndex - skip + 1;\n\n onScroll(skip, limit);\n }\n }\n\n handleOnLeft() {\n const {actualPage, maxPages} = this.state;\n this.scrollTo(nextPage(actualPage - 1, maxPages));\n }\n\n handleOnRight() {\n const {actualPage, maxPages} = this.state;\n this.scrollTo(nextPage(actualPage + 1, maxPages));\n }\n\n scrollTo(page) {\n const {possiblePages, possiblePositions} = this.state;\n const indexOfNextFirstCard = possiblePages.indexOf(page);\n const nextPosition = possiblePositions[indexOfNextFirstCard];\n this.cardsWrapper.scrollLeft = nextPosition;\n this.updatePages(page);\n this.setState({\n scrollLeft: nextPosition\n });\n }\n\n updatePages(actualPage) {\n this.setState({\n actualPage\n });\n }\n\n render() {\n const {\n title,\n showMore,\n cards,\n customStyle = {},\n onShowMore,\n dataName,\n contentType,\n 'arrows-aria-label': ariaLabel = {},\n type\n } = this.props;\n const {skin} = this.context;\n const {maxPages} = this.state;\n const dark = getOr('#90A4AE', 'common.dark', skin);\n const titleStyle = onShowMore ? style.titleLink : style.title;\n const cardsView = pipe(\n toPairs,\n map(([key, card]) => {\n return (\n <div className={style.card} key={key}>\n {card && type === 'learningPrioritiesCards' ? (\n <LearningPriorityCard {...card} dataName={`${dataName}-${key}`} />\n ) : (\n <Card {...card} dataName={`${dataName}-${key}`} />\n )}\n </div>\n );\n })\n )(cards);\n\n const arrowIconProps = {\n color: dark,\n preset: 's',\n borderRadius: '8px',\n ariaLabel: ariaLabel.showMoreOnLeftAriaLabel\n };\n\n const arrows = (\n <div className={style.arrowsWrapper}>\n <div className={style.arrow} onClick={this.handleOnLeft} data-name=\"card-list-left-arrow\">\n <Icon {...arrowIconProps} iconName=\"arrow-left\" />\n </div>\n <div className={style.arrow} onClick={this.handleOnRight} data-name=\"card-list-right-arrow\">\n <Icon {...arrowIconProps} iconName=\"arrow-right\" />\n </div>\n </div>\n );\n\n const titleView =\n typeof title === 'string' ? (\n <span data-name=\"title\" className={titleStyle} onClick={onShowMore}>\n <IconView contentType={contentType} />\n <span>{title}</span>\n </span>\n ) : (\n <span className={style.titleNode}>{title}</span>\n );\n\n const hasPages = maxPages > 0;\n const showMoreView =\n hasPages && showMore && onShowMore ? (\n <ShowMoreLink\n className={hasPages ? style.showMoreBar : style.showMore}\n onShowMore={onShowMore}\n showMore={showMore}\n />\n ) : null;\n\n const switchPagesView = hasPages ? (\n <div className={style.pagingWrapper}>\n {showMoreView}\n {arrows}\n </div>\n ) : null;\n\n return (\n <div\n className={style.wrapper}\n style={customStyle}\n data-name=\"cardsList\"\n data-max-pages={`${maxPages}`}\n // eslint-disable-next-line react/destructuring-assignment\n data-actual-page={`${this.state.actualPage}`}\n data-scroll-left={this.cardsWrapper?.scrollLeft}\n >\n <div className={style.list}>\n <div>\n <div data-name=\"header\" className={style.header}>\n {titleView}\n {switchPagesView}\n </div>\n <div\n className={style.cards}\n data-testid=\"cards-view-wrapper\"\n ref={this.setCardsWrapper}\n >\n {cardsView}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CardsList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","PropTypes","NovaSolidContentContentBook1","LearnerIcon","NovaCompositionCoorpacademyTimer","TimerIcon","Provider","Card","cardPropTypes","LearningPriorityCard","CertificationCard","LearnerSkillCard","PlaylistCard","Icon","style","ShowMoreLink","props","onShowMore","showMore","className","createElement","onClick","contextTypes","skin","childContextTypes","propTypes","process","env","NODE_ENV","func","string","IconView","context","contentType","ICONS","chapter","course","dark","_get","IconType","color","icon","computeWidth","card","type","nextPage","page","maxPages","CardsList","PureComponent","translate","constructor","state","actualPage","scrollLeft","offsetWidth","possiblePositions","possiblePages","cardsWidth","handleScroll_","_throttle","handleScroll","bind","handleOnLeft","handleOnRight","scrollTo","updateState","_debounce","updatePages","setCardsWrapper","getScrollWidth","handleResize","testingSizes","componentDidMount","cardsWrapper","addEventListener","window","componentDidUpdate","cards","newCardsWidth","_pipe","_map","_sum","updatePaginationState","setState","componentWillUnmount","removeEventListener","cancel","wrapperWidth","wrapperScrollLeft","cardWidths","_reduce","cardPositions","accWidth","cardWidth","_head","acc","pageIndex","accPageWidth","pageWidth","skip","_findIndex","position","_last","element","index","onScroll","leftBound","rightBound","leftIndex","rightIndex","_findLastIndex","limit","indexOfNextFirstCard","indexOf","nextPosition","render","title","customStyle","dataName","ariaLabel","_getOr","titleStyle","titleLink","cardsView","_toPairs","key","CardComponent","_extends","arrowIconProps","preset","borderRadius","showMoreOnLeftAriaLabel","arrows","arrowsWrapper","arrow","iconName","titleView","titleNode","hasPages","showMoreView","showMoreBar","switchPagesView","pagingWrapper","wrapper","list","header","ref","oneOfType","node","arrayOf","shape","objectOf","showMoreOnRightAriaLabel","oneOf","any"],"sources":["../../../../src/molecule/dashboard/cards-list/index.js"],"sourcesContent":["import React from 'react';\nimport {\n debounce,\n throttle,\n get,\n getOr,\n map,\n sum,\n last,\n pipe,\n toPairs,\n reduce,\n head,\n findIndex,\n findLastIndex\n} from 'lodash/fp';\nimport PropTypes from 'prop-types';\nimport {\n NovaSolidContentContentBook1 as LearnerIcon,\n NovaCompositionCoorpacademyTimer as TimerIcon\n} from '@coorpacademy/nova-icons';\nimport Provider from '../../../atom/provider';\nimport Card, {cardPropTypes} from '../../card';\nimport LearningPriorityCard from '../../learning-priority-card';\nimport CertificationCard from '../../certification-card';\nimport LearnerSkillCard from '../../learner-skill-card';\nimport PlaylistCard from '../../playlist-card';\nimport Icon from '../../../atom/icon';\nimport style from './style.css';\n\nconst ShowMoreLink = props => {\n const {onShowMore, showMore, className} = props;\n return (\n <div className={className} onClick={onShowMore}>\n {showMore}\n </div>\n );\n};\n\nShowMoreLink.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nShowMoreLink.propTypes = {\n onShowMore: PropTypes.func,\n showMore: PropTypes.string,\n className: PropTypes.string\n};\n\nconst IconView = (props, context) => {\n const {skin} = context;\n const {contentType} = props;\n const ICONS = {\n chapter: TimerIcon,\n course: LearnerIcon\n };\n\n if (!contentType) {\n return null;\n }\n\n const dark = get('common.dark', skin);\n const IconType = ICONS[contentType];\n\n return (\n <div>\n <IconType style={{color: dark}} className={style.icon} data-contenttype={contentType} />\n </div>\n );\n};\n\nconst computeWidth = card => {\n switch (card && card.type) {\n case 'chapter':\n return 219;\n default:\n return 272;\n }\n};\n\nconst nextPage = (page, maxPages) => {\n if (page < 0) return maxPages;\n if (page > maxPages) return 0;\n return page;\n};\n\nIconView.propTypes = {\n contentType: PropTypes.string\n};\n\nclass CardsList extends React.PureComponent {\n /**\n * IMPORTANT: update prop-types.ts too, 1st a migration of tests\n * is intended, then, a TS + functional refactor is planned.\n */\n static propTypes = {\n contentType: PropTypes.string,\n dataName: PropTypes.string,\n title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n showMore: PropTypes.string,\n cards: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.shape(cardPropTypes),\n PropTypes.shape(LearningPriorityCard.propTypes)\n ])\n ),\n customStyle: PropTypes.objectOf(PropTypes.string),\n onScroll: PropTypes.func,\n onShowMore: PropTypes.func,\n 'arrows-aria-label': PropTypes.shape({\n showMoreOnLeftAriaLabel: PropTypes.string,\n showMoreOnRightAriaLabel: PropTypes.string\n }),\n type: PropTypes.oneOf([\n 'cards',\n 'learningPrioritiesCards',\n 'skills',\n 'certifications',\n 'playlists'\n ]),\n // eslint-disable-next-line react/forbid-prop-types\n testingSizes: PropTypes.any\n };\n\n static contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n actualPage: 0,\n maxPages: 0,\n scrollLeft: 0,\n offsetWidth: 0,\n possiblePositions: [],\n possiblePages: [],\n cardsWidth: 0\n };\n\n this.handleScroll_ = throttle(200, this.handleScroll.bind(this));\n this.handleScroll = this.handleScroll.bind(this);\n this.handleOnLeft = this.handleOnLeft.bind(this);\n this.handleOnRight = this.handleOnRight.bind(this);\n this.scrollTo = this.scrollTo.bind(this);\n this.updateState = debounce(200, this.updatePages.bind(this));\n this.updatePages = this.updatePages.bind(this);\n this.setCardsWrapper = this.setCardsWrapper.bind(this);\n this.getScrollWidth = this.getScrollWidth.bind(this);\n this.handleResize = this.handleResize.bind(this);\n\n // for testing purposes only - no other way to test this polluted component\n if (props.testingSizes) {\n const {offsetWidth, scrollLeft, maxPages, possiblePages, possiblePositions} =\n props.testingSizes;\n this.state.offsetWidth = offsetWidth;\n this.state.scrollLeft = scrollLeft;\n this.state.maxPages = maxPages;\n this.state.possiblePages = possiblePages;\n this.state.possiblePositions = possiblePositions;\n }\n }\n\n componentDidMount() {\n this.cardsWrapper.addEventListener('scroll', this.handleScroll_);\n\n if (window) {\n window.addEventListener('resize', this.handleResize);\n }\n }\n\n componentDidUpdate() {\n const {cards = []} = this.props;\n const {offsetWidth, cardsWidth} = this.state;\n const newCardsWidth = pipe(map(computeWidth), sum)(cards);\n\n if (newCardsWidth !== cardsWidth && offsetWidth !== 0) {\n this.updatePaginationState(cards);\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n cardsWidth: newCardsWidth\n });\n }\n }\n\n componentWillUnmount() {\n this.cardsWrapper.removeEventListener('scroll', this.handleScroll_);\n\n if (window) {\n window.removeEventListener('resize', this.handleResize);\n }\n this.updateState.cancel();\n }\n\n /* istanbul ignore next */\n handleResize() {\n const {cards = []} = this.props;\n this.updatePaginationState(cards);\n }\n\n /* istanbul ignore next */\n updatePaginationState(cards) {\n const {offsetWidth: wrapperWidth, scrollLeft: wrapperScrollLeft} = this.state;\n\n const cardWidths = map(computeWidth)(cards);\n\n const possiblePositions = pipe(\n reduce(\n ([cardPositions, accWidth], cardWidth) => [\n [...cardPositions, accWidth],\n cardWidth + accWidth\n ],\n [[], 0]\n ),\n head\n )(cardWidths);\n\n const possiblePages = pipe(\n reduce(\n ([acc, pageIndex, accPageWidth], cardWidth) => {\n const pageWidth = accPageWidth + cardWidth;\n if (pageWidth > wrapperWidth) {\n return [[...acc, pageIndex + 1], pageIndex + 1, cardWidth];\n }\n return [[...acc, pageIndex], pageIndex, pageWidth];\n },\n [[], 0, 0]\n ),\n head\n )(cardWidths);\n\n const skip = findIndex(position => position >= wrapperScrollLeft, possiblePositions);\n const actualPage = possiblePages[skip + 1];\n\n this.setState({\n possiblePositions,\n possiblePages,\n maxPages: last(possiblePages),\n actualPage\n });\n }\n\n setCardsWrapper(element) {\n this.cardsWrapper = element;\n this.setState({\n scrollLeft: this.cardsWrapper?.scrollLeft,\n offsetWidth: this.cardsWrapper?.offsetWidth\n });\n }\n\n /* istanbul ignore next */\n getScrollWidth(index) {\n const {cards = []} = this.props;\n const card = cards[index];\n return computeWidth(card);\n }\n\n /* istanbul ignore next */\n handleScroll() {\n const scrollLeft = this.cardsWrapper?.scrollLeft;\n this.setState({scrollLeft});\n\n const {possiblePositions, offsetWidth} = this.state;\n const {onScroll} = this.props;\n if (onScroll) {\n const leftBound = scrollLeft;\n const rightBound = scrollLeft + offsetWidth;\n\n const leftIndex = findIndex(position => position > leftBound, possiblePositions) - 1;\n const rightIndex = findLastIndex(position => position < rightBound, possiblePositions);\n const skip = leftIndex;\n const limit = rightIndex - skip + 1;\n\n onScroll(skip, limit);\n }\n }\n\n handleOnLeft() {\n const {actualPage, maxPages} = this.state;\n this.scrollTo(nextPage(actualPage - 1, maxPages));\n }\n\n handleOnRight() {\n const {actualPage, maxPages} = this.state;\n this.scrollTo(nextPage(actualPage + 1, maxPages));\n }\n\n scrollTo(page) {\n const {possiblePages, possiblePositions} = this.state;\n const indexOfNextFirstCard = possiblePages.indexOf(page);\n const nextPosition = possiblePositions[indexOfNextFirstCard];\n this.cardsWrapper.scrollLeft = nextPosition;\n this.updatePages(page);\n this.setState({\n scrollLeft: nextPosition\n });\n }\n\n updatePages(actualPage) {\n this.setState({\n actualPage\n });\n }\n\n render() {\n const {\n title,\n showMore,\n cards,\n customStyle = {},\n onShowMore,\n dataName,\n contentType,\n 'arrows-aria-label': ariaLabel = {},\n type\n } = this.props;\n const {skin} = this.context;\n const {maxPages} = this.state;\n const dark = getOr('#90A4AE', 'common.dark', skin);\n const titleStyle = onShowMore ? style.titleLink : style.title;\n const cardsView = pipe(\n toPairs,\n map(([key, card]) => {\n let CardComponent = Card;\n\n if (card && type === 'learningPrioritiesCards') {\n CardComponent = LearningPriorityCard;\n } else if (card && type === 'skills') {\n CardComponent = LearnerSkillCard;\n } else if (card && type === 'certifications') {\n CardComponent = CertificationCard;\n } else if (card && type === 'playlists') {\n CardComponent = PlaylistCard;\n }\n\n return (\n <div className={style.card} key={key}>\n <CardComponent {...card} dataName={`${dataName}-${key}`} />\n </div>\n );\n })\n )(cards);\n\n const arrowIconProps = {\n color: dark,\n preset: 's',\n borderRadius: '8px',\n ariaLabel: ariaLabel.showMoreOnLeftAriaLabel\n };\n\n const arrows = (\n <div className={style.arrowsWrapper}>\n <div className={style.arrow} onClick={this.handleOnLeft} data-name=\"card-list-left-arrow\">\n <Icon {...arrowIconProps} iconName=\"arrow-left\" />\n </div>\n <div className={style.arrow} onClick={this.handleOnRight} data-name=\"card-list-right-arrow\">\n <Icon {...arrowIconProps} iconName=\"arrow-right\" />\n </div>\n </div>\n );\n\n const titleView =\n typeof title === 'string' ? (\n <span data-name=\"title\" className={titleStyle} onClick={onShowMore}>\n <IconView contentType={contentType} />\n <span>{title}</span>\n </span>\n ) : (\n <span className={style.titleNode}>{title}</span>\n );\n\n const hasPages = maxPages > 0;\n const showMoreView =\n hasPages && showMore && onShowMore ? (\n <ShowMoreLink\n className={hasPages ? style.showMoreBar : style.showMore}\n onShowMore={onShowMore}\n showMore={showMore}\n />\n ) : null;\n\n const switchPagesView = hasPages ? (\n <div className={style.pagingWrapper}>\n {showMoreView}\n {arrows}\n </div>\n ) : null;\n\n return (\n <div\n className={style.wrapper}\n style={customStyle}\n data-name=\"cardsList\"\n data-max-pages={`${maxPages}`}\n // eslint-disable-next-line react/destructuring-assignment\n data-actual-page={`${this.state.actualPage}`}\n data-scroll-left={this.cardsWrapper?.scrollLeft}\n >\n <div className={style.list}>\n <div>\n <div data-name=\"header\" className={style.header}>\n {titleView}\n {switchPagesView}\n </div>\n <div\n className={style.cards}\n data-testid=\"cards-view-wrapper\"\n ref={this.setCardsWrapper}\n >\n {cardsView}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CardsList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/learner-skill-card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAKjE,OAAkB,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAK9D,eAAO,MAAM,qBAAqB,QAAS,MAAM,SAAS,CAAC,cAAc,CAAC,cAAc,MAAM,SAI7F,CAAC;AAEF,QAAA,MAAM,gBAAgB;YAAW,qBAAqB,WAAW,gBAAgB;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/learner-skill-card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAKjE,OAAkB,EAAC,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAK9D,eAAO,MAAM,qBAAqB,QAAS,MAAM,SAAS,CAAC,cAAc,CAAC,cAAc,MAAM,SAI7F,CAAC;AAEF,QAAA,MAAM,gBAAgB;YAAW,qBAAqB,WAAW,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAoIhF,CAAC;AAQF,eAAe,gBAAgB,CAAC"}
|
|
@@ -33,7 +33,6 @@ const LearnerSkillCard = (props, context) => {
|
|
|
33
33
|
color,
|
|
34
34
|
name
|
|
35
35
|
} = icon;
|
|
36
|
-
const questionsLocale = translate('skill_chart_side_panel_questions_to_review');
|
|
37
36
|
const [badgeIconName, badgeLocale, tagTextColor, tagBackgroundColor] = focus ? ['bullseye-arrow', translate('skill_focus'), COLORS.purple_700, COLORS.purple_100] : ['shapes', translate('skill'), COLORS.neutral_500, COLORS.cm_grey_100];
|
|
38
37
|
const headerBackgroundRef = useRef(null);
|
|
39
38
|
const defaultBackground = useMemo(() => createGradientBackground(color, '93%', '100%'), [color]);
|
|
@@ -105,7 +104,14 @@ const LearnerSkillCard = (props, context) => {
|
|
|
105
104
|
className: style.contentAndQuestionsWrapper
|
|
106
105
|
}, /*#__PURE__*/React.createElement("div", {
|
|
107
106
|
"data-name": "learner-skill-card-skill-content-number"
|
|
108
|
-
|
|
107
|
+
// eslint-disable-next-line react/no-danger
|
|
108
|
+
,
|
|
109
|
+
dangerouslySetInnerHTML: {
|
|
110
|
+
__html: translate('content', {
|
|
111
|
+
count: content
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
}), questionsToReview ? /*#__PURE__*/React.createElement("div", {
|
|
109
115
|
className: style.skillInformation,
|
|
110
116
|
"data-name": "learner-skill-card-skill-questions-wrapper"
|
|
111
117
|
}, /*#__PURE__*/React.createElement(FaIcon, {
|
|
@@ -118,7 +124,14 @@ const LearnerSkillCard = (props, context) => {
|
|
|
118
124
|
}
|
|
119
125
|
}), /*#__PURE__*/React.createElement("span", {
|
|
120
126
|
"data-name": "learner-skill-card-questions-to-review"
|
|
121
|
-
|
|
127
|
+
// eslint-disable-next-line react/no-danger
|
|
128
|
+
,
|
|
129
|
+
dangerouslySetInnerHTML: {
|
|
130
|
+
__html: translate('skill_chart_side_panel_questions_to_review', {
|
|
131
|
+
count: questionsToReview
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
})) : null)))), /*#__PURE__*/React.createElement("div", {
|
|
122
135
|
className: style.progressInformations
|
|
123
136
|
}, /*#__PURE__*/React.createElement(ProgressBar, {
|
|
124
137
|
value: score,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useCallback","useMemo","useRef","Provider","GetTranslateFromContext","ProgressBar","COLORS","createGradientBackground","FaIcon","propTypes","style","MAX_SCORE","updateBackgroundImage","ref","background","current","backgroundImage","LearnerSkillCard","props","context","ariaLabel","cardIndex","skillTitle","skillAriaLabel","focus","metrics","icon","onExploreClick","score","content","questionsToReview","translate","color","name","questionsLocale","badgeIconName","badgeLocale","tagTextColor","tagBackgroundColor","purple_700","purple_100","neutral_500","cm_grey_100","headerBackgroundRef","defaultBackground","focusBackground","handleMouseEnter","handleMouseLeave","createElement","onClick","className","learnerSkillCardContainer","onMouseEnter","onMouseLeave","iconHeaderWrapper","iconWrapper","iconName","iconColor","size","faSize","wrapperSize","borderRadius","gradientBackground","customStyle","border","learnerSkillCardContent","skillTitleWrapper","skillFocusBadge","backgroundColor","questionWrapper","contentAndQuestionsWrapper","skillInformation","cm_grey_400","progressInformations","value","displayInfo","max","progressWrapper","cm_positive_500","contextTypes","childContextTypes","process","env","NODE_ENV"],"sources":["../../../src/molecule/learner-skill-card/index.tsx"],"sourcesContent":["import React, {useCallback, useMemo, useRef} from 'react';\nimport Provider, {GetTranslateFromContext} from '../../atom/provider';\nimport {WebContextValues} from '../../atom/provider/web-context';\nimport ProgressBar from '../progress-bar';\nimport {COLORS} from '../../variables/colors';\nimport {createGradientBackground} from '../../util/get-background-gradient-color';\nimport FaIcon from '../../atom/icon';\nimport propTypes, {LearnerSkillCardProps} from './prop-types';\nimport style from './style.css';\n\nconst MAX_SCORE = 100;\n\nexport const updateBackgroundImage = (ref: React.RefObject<HTMLDivElement>, background: string) => {\n if (ref.current) {\n ref.current.style.backgroundImage = background;\n }\n};\n\nconst LearnerSkillCard = (props: LearnerSkillCardProps, context: WebContextValues) => {\n const {\n 'aria-label': ariaLabel,\n cardIndex,\n skillTitle,\n skillAriaLabel,\n focus,\n metrics,\n icon,\n onExploreClick\n } = props;\n const {score, content, questionsToReview = 0} = metrics;\n const translate = GetTranslateFromContext(context);\n const {color, name} = icon;\n const questionsLocale = translate('skill_chart_side_panel_questions_to_review') as string;\n const [badgeIconName, badgeLocale, tagTextColor, tagBackgroundColor] = focus\n ? ['bullseye-arrow', translate('skill_focus') as string, COLORS.purple_700, COLORS.purple_100]\n : ['shapes', translate('skill') as string, COLORS.neutral_500, COLORS.cm_grey_100];\n const headerBackgroundRef = useRef<HTMLDivElement | null>(null);\n const defaultBackground = useMemo(() => createGradientBackground(color, '93%', '100%'), [color]);\n const focusBackground = useMemo(() => createGradientBackground(color, '83%', '100%'), [color]);\n const handleMouseEnter = useCallback(() => {\n updateBackgroundImage(headerBackgroundRef, focusBackground);\n }, [focusBackground]);\n const handleMouseLeave = useCallback(() => {\n updateBackgroundImage(headerBackgroundRef, defaultBackground);\n }, [defaultBackground]);\n return (\n <div\n data-testid={`learner-skill-card-wrapper-${cardIndex}`}\n onClick={onExploreClick}\n className={style.learnerSkillCardContainer}\n aria-label={ariaLabel}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div\n data-testid=\"learner-skill-card-icon-header-wrapper\"\n ref={headerBackgroundRef}\n className={style.iconHeaderWrapper}\n style={{backgroundImage: defaultBackground, color: tagTextColor}}\n >\n <div className={style.iconWrapper} data-testid=\"learner-skill-card-icon-wrapper\">\n <FaIcon\n {...{\n iconName: name,\n iconColor: color,\n size: {\n faSize: 20,\n wrapperSize: 44\n },\n borderRadius: '12px',\n gradientBackground: true,\n customStyle: {border: '4px solid white'}\n }}\n />\n </div>\n </div>\n <div className={style.learnerSkillCardContent}>\n <div className={style.skillTitleWrapper}>\n <div\n className={style.skillFocusBadge}\n style={{\n backgroundColor: tagBackgroundColor,\n color: tagTextColor\n }}\n >\n <FaIcon\n {...{\n iconName: badgeIconName,\n backgroundColor: tagBackgroundColor,\n size: {\n faSize: 10,\n wrapperSize: 16\n }\n }}\n />\n <span style={{color: tagTextColor}}>{badgeLocale}</span>\n </div>\n\n <div className={style.questionWrapper}>\n <div\n data-name=\"skill-card-title\"\n className={style.skillTitle}\n aria-label={skillAriaLabel || skillTitle}\n >\n {skillTitle}\n </div>\n <div className={style.contentAndQuestionsWrapper}>\n <div data-name=\"learner-skill-card-skill-content-number\">\n {content} {translate('content')}\n </div>\n {questionsToReview ? (\n <div\n className={style.skillInformation}\n data-name=\"learner-skill-card-skill-questions-wrapper\"\n >\n <FaIcon\n {...{\n iconName: 'circle',\n iconColor: COLORS.cm_grey_400,\n backgroundColor: 'transparent',\n size: {faSize: 4, wrapperSize: 0}\n }}\n />\n <span data-name=\"learner-skill-card-questions-to-review\">\n {questionsToReview}\n </span>\n {questionsLocale}\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </div>\n <div className={style.progressInformations}>\n <ProgressBar\n value={score}\n displayInfo={false}\n max={MAX_SCORE}\n className={style.progressWrapper}\n style={{backgroundColor: COLORS.cm_positive_500}}\n />\n </div>\n </div>\n );\n};\n\nLearnerSkillCard.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nLearnerSkillCard.propTypes = propTypes;\n\nexport default LearnerSkillCard;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useCallback","useMemo","useRef","Provider","GetTranslateFromContext","ProgressBar","COLORS","createGradientBackground","FaIcon","propTypes","style","MAX_SCORE","updateBackgroundImage","ref","background","current","backgroundImage","LearnerSkillCard","props","context","ariaLabel","cardIndex","skillTitle","skillAriaLabel","focus","metrics","icon","onExploreClick","score","content","questionsToReview","translate","color","name","badgeIconName","badgeLocale","tagTextColor","tagBackgroundColor","purple_700","purple_100","neutral_500","cm_grey_100","headerBackgroundRef","defaultBackground","focusBackground","handleMouseEnter","handleMouseLeave","createElement","onClick","className","learnerSkillCardContainer","onMouseEnter","onMouseLeave","iconHeaderWrapper","iconWrapper","iconName","iconColor","size","faSize","wrapperSize","borderRadius","gradientBackground","customStyle","border","learnerSkillCardContent","skillTitleWrapper","skillFocusBadge","backgroundColor","questionWrapper","contentAndQuestionsWrapper","dangerouslySetInnerHTML","__html","count","skillInformation","cm_grey_400","progressInformations","value","displayInfo","max","progressWrapper","cm_positive_500","contextTypes","childContextTypes","process","env","NODE_ENV"],"sources":["../../../src/molecule/learner-skill-card/index.tsx"],"sourcesContent":["import React, {useCallback, useMemo, useRef} from 'react';\nimport Provider, {GetTranslateFromContext} from '../../atom/provider';\nimport {WebContextValues} from '../../atom/provider/web-context';\nimport ProgressBar from '../progress-bar';\nimport {COLORS} from '../../variables/colors';\nimport {createGradientBackground} from '../../util/get-background-gradient-color';\nimport FaIcon from '../../atom/icon';\nimport propTypes, {LearnerSkillCardProps} from './prop-types';\nimport style from './style.css';\n\nconst MAX_SCORE = 100;\n\nexport const updateBackgroundImage = (ref: React.RefObject<HTMLDivElement>, background: string) => {\n if (ref.current) {\n ref.current.style.backgroundImage = background;\n }\n};\n\nconst LearnerSkillCard = (props: LearnerSkillCardProps, context: WebContextValues) => {\n const {\n 'aria-label': ariaLabel,\n cardIndex,\n skillTitle,\n skillAriaLabel,\n focus,\n metrics,\n icon,\n onExploreClick\n } = props;\n const {score, content, questionsToReview = 0} = metrics;\n const translate = GetTranslateFromContext(context);\n const {color, name} = icon;\n const [badgeIconName, badgeLocale, tagTextColor, tagBackgroundColor] = focus\n ? ['bullseye-arrow', translate('skill_focus') as string, COLORS.purple_700, COLORS.purple_100]\n : ['shapes', translate('skill') as string, COLORS.neutral_500, COLORS.cm_grey_100];\n const headerBackgroundRef = useRef<HTMLDivElement | null>(null);\n const defaultBackground = useMemo(() => createGradientBackground(color, '93%', '100%'), [color]);\n const focusBackground = useMemo(() => createGradientBackground(color, '83%', '100%'), [color]);\n const handleMouseEnter = useCallback(() => {\n updateBackgroundImage(headerBackgroundRef, focusBackground);\n }, [focusBackground]);\n const handleMouseLeave = useCallback(() => {\n updateBackgroundImage(headerBackgroundRef, defaultBackground);\n }, [defaultBackground]);\n return (\n <div\n data-testid={`learner-skill-card-wrapper-${cardIndex}`}\n onClick={onExploreClick}\n className={style.learnerSkillCardContainer}\n aria-label={ariaLabel}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div\n data-testid=\"learner-skill-card-icon-header-wrapper\"\n ref={headerBackgroundRef}\n className={style.iconHeaderWrapper}\n style={{backgroundImage: defaultBackground, color: tagTextColor}}\n >\n <div className={style.iconWrapper} data-testid=\"learner-skill-card-icon-wrapper\">\n <FaIcon\n {...{\n iconName: name,\n iconColor: color,\n size: {\n faSize: 20,\n wrapperSize: 44\n },\n borderRadius: '12px',\n gradientBackground: true,\n customStyle: {border: '4px solid white'}\n }}\n />\n </div>\n </div>\n <div className={style.learnerSkillCardContent}>\n <div className={style.skillTitleWrapper}>\n <div\n className={style.skillFocusBadge}\n style={{\n backgroundColor: tagBackgroundColor,\n color: tagTextColor\n }}\n >\n <FaIcon\n {...{\n iconName: badgeIconName,\n backgroundColor: tagBackgroundColor,\n size: {\n faSize: 10,\n wrapperSize: 16\n }\n }}\n />\n <span style={{color: tagTextColor}}>{badgeLocale}</span>\n </div>\n\n <div className={style.questionWrapper}>\n <div\n data-name=\"skill-card-title\"\n className={style.skillTitle}\n aria-label={skillAriaLabel || skillTitle}\n >\n {skillTitle}\n </div>\n <div className={style.contentAndQuestionsWrapper}>\n <div\n data-name=\"learner-skill-card-skill-content-number\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: translate('content', {count: content})}}\n />\n {questionsToReview ? (\n <div\n className={style.skillInformation}\n data-name=\"learner-skill-card-skill-questions-wrapper\"\n >\n <FaIcon\n {...{\n iconName: 'circle',\n iconColor: COLORS.cm_grey_400,\n backgroundColor: 'transparent',\n size: {faSize: 4, wrapperSize: 0}\n }}\n />\n <span\n data-name=\"learner-skill-card-questions-to-review\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: translate('skill_chart_side_panel_questions_to_review', {\n count: questionsToReview\n })\n }}\n />\n </div>\n ) : null}\n </div>\n </div>\n </div>\n </div>\n <div className={style.progressInformations}>\n <ProgressBar\n value={score}\n displayInfo={false}\n max={MAX_SCORE}\n className={style.progressWrapper}\n style={{backgroundColor: COLORS.cm_positive_500}}\n />\n </div>\n </div>\n );\n};\n\nLearnerSkillCard.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nLearnerSkillCard.propTypes = propTypes;\n\nexport default LearnerSkillCard;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export default PlaylistCard;
|
|
2
|
+
declare function PlaylistCard(props: any, context: any): JSX.Element;
|
|
3
|
+
declare namespace PlaylistCard {
|
|
4
|
+
namespace contextTypes {
|
|
5
|
+
const translate: PropTypes.Requireable<(...args: any[]) => any>;
|
|
6
|
+
}
|
|
7
|
+
namespace propTypes {
|
|
8
|
+
const label: PropTypes.Requireable<string>;
|
|
9
|
+
const title: PropTypes.Validator<string>;
|
|
10
|
+
const progress: PropTypes.Requireable<number>;
|
|
11
|
+
const coverImages: PropTypes.Validator<(PropTypes.InferProps<{
|
|
12
|
+
type: PropTypes.Requireable<string>;
|
|
13
|
+
image: PropTypes.Requireable<string>;
|
|
14
|
+
}> | null | undefined)[]>;
|
|
15
|
+
const onClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
16
|
+
const locales: PropTypes.Requireable<PropTypes.InferProps<{
|
|
17
|
+
playlistTag: PropTypes.Requireable<string>;
|
|
18
|
+
coursesLabel: PropTypes.Requireable<string>;
|
|
19
|
+
}>>;
|
|
20
|
+
}
|
|
21
|
+
namespace defaultProps {
|
|
22
|
+
export namespace locales_1 {
|
|
23
|
+
const playlistTag: string;
|
|
24
|
+
const coursesLabel: string;
|
|
25
|
+
}
|
|
26
|
+
export { locales_1 as locales };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
import PropTypes from "prop-types";
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/playlist-card/index.js"],"names":[],"mappings":";AASA,qEAuCC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { COLORS } from '../../variables/colors';
|
|
4
|
+
import Provider from '../../atom/provider';
|
|
5
|
+
import Tag from '../../atom/tag';
|
|
6
|
+
import ProgressBar from '../progress-bar';
|
|
7
|
+
import PlaylistDetailCover from '../playlist-detail-cover';
|
|
8
|
+
import style from './style.css';
|
|
9
|
+
const PlaylistCard = (props, context) => {
|
|
10
|
+
const {
|
|
11
|
+
label,
|
|
12
|
+
title,
|
|
13
|
+
progress = 0,
|
|
14
|
+
coverImages,
|
|
15
|
+
onClick,
|
|
16
|
+
locales: {
|
|
17
|
+
playlistTag,
|
|
18
|
+
coursesLabel
|
|
19
|
+
}
|
|
20
|
+
} = props;
|
|
21
|
+
const cover = coverImages ? /*#__PURE__*/React.createElement(PlaylistDetailCover, {
|
|
22
|
+
className: style.cover,
|
|
23
|
+
images: coverImages
|
|
24
|
+
}) : null;
|
|
25
|
+
const icon = {
|
|
26
|
+
iconName: 'lines-leaning'
|
|
27
|
+
};
|
|
28
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
29
|
+
className: style.container,
|
|
30
|
+
"data-name": `playlist-card-${label}`,
|
|
31
|
+
onClick: onClick
|
|
32
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
33
|
+
className: style.imageContainer
|
|
34
|
+
}, cover), /*#__PURE__*/React.createElement("div", {
|
|
35
|
+
className: style.detailWrapper
|
|
36
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
37
|
+
className: style.titleWrapper
|
|
38
|
+
}, /*#__PURE__*/React.createElement(Tag, {
|
|
39
|
+
label: playlistTag,
|
|
40
|
+
size: "S",
|
|
41
|
+
icon: icon
|
|
42
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
43
|
+
className: style.title,
|
|
44
|
+
"data-name": "playlist-title"
|
|
45
|
+
}, title), /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
className: style.courseCount
|
|
47
|
+
// eslint-disable-next-line react/no-danger
|
|
48
|
+
,
|
|
49
|
+
dangerouslySetInnerHTML: {
|
|
50
|
+
__html: coursesLabel
|
|
51
|
+
}
|
|
52
|
+
})), /*#__PURE__*/React.createElement(ProgressBar, {
|
|
53
|
+
className: style.customProgressBar,
|
|
54
|
+
style: {
|
|
55
|
+
backgroundColor: COLORS.cm_positive_500
|
|
56
|
+
},
|
|
57
|
+
displayInfo: false,
|
|
58
|
+
value: progress,
|
|
59
|
+
max: 100
|
|
60
|
+
})));
|
|
61
|
+
};
|
|
62
|
+
PlaylistCard.contextTypes = {
|
|
63
|
+
translate: Provider.childContextTypes.translate
|
|
64
|
+
};
|
|
65
|
+
PlaylistCard.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
66
|
+
label: PropTypes.string,
|
|
67
|
+
title: PropTypes.string.isRequired,
|
|
68
|
+
progress: PropTypes.number,
|
|
69
|
+
coverImages: PlaylistDetailCover.propTypes.images,
|
|
70
|
+
onClick: PropTypes.func,
|
|
71
|
+
locales: PropTypes.shape({
|
|
72
|
+
playlistTag: PropTypes.string,
|
|
73
|
+
coursesLabel: PropTypes.string
|
|
74
|
+
})
|
|
75
|
+
} : {};
|
|
76
|
+
PlaylistCard.defaultProps = {
|
|
77
|
+
locales: {
|
|
78
|
+
playlistTag: 'Playlist',
|
|
79
|
+
coursesLabel: 'courses'
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
export default PlaylistCard;
|
|
83
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","PropTypes","COLORS","Provider","Tag","ProgressBar","PlaylistDetailCover","style","PlaylistCard","props","context","label","title","progress","coverImages","onClick","locales","playlistTag","coursesLabel","cover","createElement","className","images","icon","iconName","container","imageContainer","detailWrapper","titleWrapper","size","courseCount","dangerouslySetInnerHTML","__html","customProgressBar","backgroundColor","cm_positive_500","displayInfo","value","max","contextTypes","translate","childContextTypes","propTypes","process","env","NODE_ENV","string","isRequired","number","func","shape","defaultProps"],"sources":["../../../src/molecule/playlist-card/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {COLORS} from '../../variables/colors';\nimport Provider from '../../atom/provider';\nimport Tag from '../../atom/tag';\nimport ProgressBar from '../progress-bar';\nimport PlaylistDetailCover from '../playlist-detail-cover';\nimport style from './style.css';\n\nconst PlaylistCard = (props, context) => {\n const {\n label,\n title,\n progress = 0,\n coverImages,\n onClick,\n locales: {playlistTag, coursesLabel}\n } = props;\n\n const cover = coverImages ? (\n <PlaylistDetailCover className={style.cover} images={coverImages} />\n ) : null;\n const icon = {iconName: 'lines-leaning'};\n return (\n <div className={style.container} data-name={`playlist-card-${label}`} onClick={onClick}>\n <div className={style.imageContainer}>{cover}</div>\n <div className={style.detailWrapper}>\n <div className={style.titleWrapper}>\n <Tag label={playlistTag} size=\"S\" icon={icon} />\n <div className={style.title} data-name=\"playlist-title\">\n {title}\n </div>\n <div\n className={style.courseCount}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: coursesLabel}}\n />\n </div>\n <ProgressBar\n className={style.customProgressBar}\n style={{backgroundColor: COLORS.cm_positive_500}}\n displayInfo={false}\n value={progress}\n max={100}\n />\n </div>\n </div>\n );\n};\n\nPlaylistCard.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nPlaylistCard.propTypes = {\n label: PropTypes.string,\n title: PropTypes.string.isRequired,\n progress: PropTypes.number,\n coverImages: PlaylistDetailCover.propTypes.images,\n onClick: PropTypes.func,\n locales: PropTypes.shape({\n playlistTag: PropTypes.string,\n coursesLabel: PropTypes.string\n })\n};\n\nPlaylistCard.defaultProps = {\n locales: {\n playlistTag: 'Playlist',\n coursesLabel: 'courses'\n }\n};\n\nexport default PlaylistCard;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
@value colors: "../../variables/colors.css";
|
|
2
|
+
@value xtraLightGrey from colors;
|
|
3
|
+
@value cm_grey_100 from colors;
|
|
4
|
+
@value cm_grey_400 from colors;
|
|
5
|
+
@value cm_grey_500 from colors;
|
|
6
|
+
@value cm_grey_75 from colors;
|
|
7
|
+
|
|
8
|
+
.container {
|
|
9
|
+
font-family: "Gilroy";
|
|
10
|
+
font-style: normal;
|
|
11
|
+
border-radius: 12px;
|
|
12
|
+
width: 345px;
|
|
13
|
+
height: 309px;
|
|
14
|
+
min-width: 288px;
|
|
15
|
+
background-color: #FFF;
|
|
16
|
+
border: 2px solid #FFF;
|
|
17
|
+
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.04);
|
|
18
|
+
position: relative;
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
transition: all 0.5s ease-out;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.cover{
|
|
27
|
+
border-top-left-radius: 12px;
|
|
28
|
+
border-top-right-radius: 12px;
|
|
29
|
+
border-bottom-right-radius: 0px;
|
|
30
|
+
border-bottom-left-radius: 0px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.imageContainer {
|
|
34
|
+
display: flex;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
align-items: center;
|
|
37
|
+
height: 160px;
|
|
38
|
+
width: 100%;
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.imageContainer::after {
|
|
43
|
+
content: "";
|
|
44
|
+
position: absolute;
|
|
45
|
+
top: 0;
|
|
46
|
+
left: 0;
|
|
47
|
+
width: 100%;
|
|
48
|
+
height: 160px;
|
|
49
|
+
background: #1d1d2b80;
|
|
50
|
+
border-top-right-radius: 12px;
|
|
51
|
+
border-top-left-radius: 12px;
|
|
52
|
+
transition: all 0.5s ease-out;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.container:hover .imageContainer::after {
|
|
56
|
+
background: #1d1d2b00;
|
|
57
|
+
}
|
|
58
|
+
.container:hover {
|
|
59
|
+
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.10);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.detailWrapper {
|
|
63
|
+
padding: 16px;
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: space-between;
|
|
68
|
+
flex-grow: 1;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.titleWrapper {
|
|
72
|
+
width: 100%;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.title {
|
|
76
|
+
font-size: 16px;
|
|
77
|
+
font-weight: 600;
|
|
78
|
+
line-height: 22px;
|
|
79
|
+
margin-top: 4px;
|
|
80
|
+
color: #333;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.courseCount {
|
|
84
|
+
margin-top: 4px;
|
|
85
|
+
color: cm_grey_400;
|
|
86
|
+
font-size: 12px;
|
|
87
|
+
font-weight: 600;
|
|
88
|
+
line-height: 16px;
|
|
89
|
+
|
|
90
|
+
span {
|
|
91
|
+
color: cm_grey_500;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.customProgressBar {
|
|
96
|
+
width: 269px;
|
|
97
|
+
height: 4px;
|
|
98
|
+
background-color: cm_grey_100;
|
|
99
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export default PlaylistDetailCover;
|
|
2
|
-
declare function PlaylistDetailCover({ images }: {
|
|
2
|
+
declare function PlaylistDetailCover({ images, className }: {
|
|
3
3
|
images: any;
|
|
4
|
+
className: any;
|
|
4
5
|
}): JSX.Element;
|
|
5
6
|
declare namespace PlaylistDetailCover {
|
|
6
7
|
namespace propTypes {
|
|
@@ -8,6 +9,7 @@ declare namespace PlaylistDetailCover {
|
|
|
8
9
|
type: PropTypes.Requireable<string>;
|
|
9
10
|
image: PropTypes.Requireable<string>;
|
|
10
11
|
}> | null | undefined)[]>;
|
|
12
|
+
const className: PropTypes.Requireable<string>;
|
|
11
13
|
}
|
|
12
14
|
}
|
|
13
15
|
import PropTypes from "prop-types";
|