@coorpacademy/components 11.32.34 → 11.32.35-alpha.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/es/molecule/progress-wrapper/index.d.ts +4 -5
- package/es/molecule/progress-wrapper/index.d.ts.map +1 -1
- package/es/molecule/progress-wrapper/index.js +34 -45
- package/es/molecule/progress-wrapper/index.js.map +1 -1
- package/es/molecule/progress-wrapper/style.css +3 -25
- package/es/template/certification-detail/index.d.ts +5 -47
- package/es/template/certification-detail/index.d.ts.map +1 -1
- package/es/template/certification-detail/index.js +22 -43
- package/es/template/certification-detail/index.js.map +1 -1
- package/es/template/certification-detail/style.css +1 -12
- package/es/template/skill-detail/all-courses.d.ts +1 -2
- package/es/template/skill-detail/all-courses.d.ts.map +1 -1
- package/es/template/skill-detail/all-courses.js +38 -45
- package/es/template/skill-detail/all-courses.js.map +1 -1
- package/lib/molecule/progress-wrapper/index.d.ts +4 -5
- package/lib/molecule/progress-wrapper/index.d.ts.map +1 -1
- package/lib/molecule/progress-wrapper/index.js +34 -46
- package/lib/molecule/progress-wrapper/index.js.map +1 -1
- package/lib/molecule/progress-wrapper/style.css +3 -25
- package/lib/template/certification-detail/index.d.ts +5 -47
- package/lib/template/certification-detail/index.d.ts.map +1 -1
- package/lib/template/certification-detail/index.js +21 -43
- package/lib/template/certification-detail/index.js.map +1 -1
- package/lib/template/certification-detail/style.css +1 -12
- package/lib/template/skill-detail/all-courses.d.ts +1 -2
- package/lib/template/skill-detail/all-courses.d.ts.map +1 -1
- package/lib/template/skill-detail/all-courses.js +38 -44
- package/lib/template/skill-detail/all-courses.js.map +1 -1
- package/locales/en/global.json +2 -0
- package/package.json +2 -2
|
@@ -17,7 +17,7 @@ var _provider = _interopRequireDefault(require("../../atom/provider"));
|
|
|
17
17
|
|
|
18
18
|
var _tag = _interopRequireDefault(require("../../atom/tag"));
|
|
19
19
|
|
|
20
|
-
var _select =
|
|
20
|
+
var _select = require("../../atom/select");
|
|
21
21
|
|
|
22
22
|
var _buttonLinkIcon = _interopRequireDefault(require("../../atom/button-link-icon"));
|
|
23
23
|
|
|
@@ -27,8 +27,6 @@ var _cardsGrid = _interopRequireDefault(require("../../organism/cards-grid"));
|
|
|
27
27
|
|
|
28
28
|
var _allCourses = _interopRequireDefault(require("../skill-detail/all-courses"));
|
|
29
29
|
|
|
30
|
-
var _continueLearning = _interopRequireDefault(require("../skill-detail/continue-learning"));
|
|
31
|
-
|
|
32
30
|
var _skillDetail = require("../skill-detail");
|
|
33
31
|
|
|
34
32
|
var _progressWrapper = _interopRequireDefault(require("../../molecule/progress-wrapper"));
|
|
@@ -49,31 +47,24 @@ const CertificationDetail = (props, context) => {
|
|
|
49
47
|
title,
|
|
50
48
|
description,
|
|
51
49
|
certificationCourses,
|
|
52
|
-
|
|
53
|
-
totalCourses,
|
|
54
|
-
totalModules,
|
|
50
|
+
ongoingCoursesAvailable,
|
|
55
51
|
filters,
|
|
56
|
-
sorting,
|
|
57
52
|
onBackClick,
|
|
58
53
|
onContinueLearningClick,
|
|
59
54
|
metrics,
|
|
60
55
|
logoUrl,
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
diplomaUrl,
|
|
57
|
+
badgeUrl
|
|
63
58
|
} = props;
|
|
64
59
|
const {
|
|
65
60
|
translate
|
|
66
61
|
} = context;
|
|
67
62
|
const {
|
|
68
63
|
progression,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
mandatoryModules,
|
|
65
|
+
stars,
|
|
66
|
+
totalModules
|
|
72
67
|
} = metrics;
|
|
73
|
-
const {
|
|
74
|
-
badgeUrl = false,
|
|
75
|
-
onDownloadBadge
|
|
76
|
-
} = badge;
|
|
77
68
|
const [showMore, setShowMore] = (0, _react.useState)(false);
|
|
78
69
|
const handleShowMore = (0, _react.useCallback)(() => setShowMore(!showMore), [setShowMore, showMore]);
|
|
79
70
|
const Description = (0, _react.useCallback)(() => {
|
|
@@ -81,6 +72,7 @@ const CertificationDetail = (props, context) => {
|
|
|
81
72
|
className: (0, _classnames.default)(_style.default.description, !showMore && _style.default.truncate)
|
|
82
73
|
}, description);
|
|
83
74
|
}, [showMore, description]);
|
|
75
|
+
const completedModules = (0, _react.useMemo)(() => mandatoryModules * progression / 100, [mandatoryModules, progression]);
|
|
84
76
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
85
77
|
className: _style.default.backgroundContainer
|
|
86
78
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -115,37 +107,29 @@ const CertificationDetail = (props, context) => {
|
|
|
115
107
|
}
|
|
116
108
|
})) : null) : null, /*#__PURE__*/_react.default.createElement("div", {
|
|
117
109
|
className: _style.default.contentStats
|
|
118
|
-
}, /*#__PURE__*/_react.default.createElement("span", null, `${
|
|
119
|
-
|
|
120
|
-
}), /*#__PURE__*/_react.default.createElement("span", null, `${totalModules} ${(0, _lowerCase2.default)(translate('modules'))}`)), /*#__PURE__*/_react.default.createElement(_skillDetail.ContinueLearningButton, {
|
|
121
|
-
ongoingCoursesAvailable: !!ongoingCourses.list.length,
|
|
110
|
+
}, /*#__PURE__*/_react.default.createElement("span", null, `${totalModules} ${(0, _lowerCase2.default)(translate('modules'))}`)), /*#__PURE__*/_react.default.createElement(_skillDetail.ContinueLearningButton, {
|
|
111
|
+
ongoingCoursesAvailable: ongoingCoursesAvailable,
|
|
122
112
|
onClick: onContinueLearningClick
|
|
123
|
-
}))), /*#__PURE__*/_react.default.createElement(
|
|
124
|
-
className: _style.default.continueLearningSection
|
|
125
|
-
}, /*#__PURE__*/_react.default.createElement(_continueLearning.default, {
|
|
126
|
-
ongoingCourses: ongoingCourses
|
|
127
|
-
})), /*#__PURE__*/_react.default.createElement(_progressWrapper.default, {
|
|
113
|
+
}))), /*#__PURE__*/_react.default.createElement(_progressWrapper.default, {
|
|
128
114
|
title: translate('your_progress'),
|
|
129
115
|
subtitle: translate('certification_progress_wrapper_subtitle'),
|
|
130
116
|
progression: progression,
|
|
131
|
-
completedCourses: completedCourses,
|
|
132
117
|
completedModules: completedModules,
|
|
118
|
+
mandatoryModules: mandatoryModules,
|
|
133
119
|
sections: (0, _compact2.default)([{
|
|
134
120
|
type: 'diploma',
|
|
135
|
-
|
|
121
|
+
downloadUrl: diplomaUrl
|
|
136
122
|
}, badgeUrl && {
|
|
137
123
|
type: 'badge',
|
|
138
|
-
badgeUrl
|
|
139
|
-
onDownload: () => onDownloadBadge
|
|
124
|
+
downloadUrl: badgeUrl
|
|
140
125
|
}, {
|
|
141
126
|
type: 'stars',
|
|
142
127
|
stars
|
|
143
128
|
}])
|
|
144
129
|
}), /*#__PURE__*/_react.default.createElement(_allCourses.default, {
|
|
145
|
-
|
|
146
|
-
totalCourses: totalCourses,
|
|
130
|
+
content: certificationCourses,
|
|
147
131
|
filters: filters,
|
|
148
|
-
|
|
132
|
+
"data-name": "certification-courses"
|
|
149
133
|
})));
|
|
150
134
|
};
|
|
151
135
|
|
|
@@ -161,23 +145,17 @@ CertificationDetail.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
161
145
|
metrics: _propTypes.default.shape({
|
|
162
146
|
progression: _propTypes.default.number,
|
|
163
147
|
stars: _propTypes.default.number,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}),
|
|
167
|
-
onDownloadDiploma: _propTypes.default.func,
|
|
168
|
-
badge: _propTypes.default.shape({
|
|
169
|
-
badgeUrl: _propTypes.default.string,
|
|
170
|
-
onDownloadBadge: _propTypes.default.func
|
|
148
|
+
mandatoryModules: _propTypes.default.number,
|
|
149
|
+
totalModules: _propTypes.default.number
|
|
171
150
|
}),
|
|
172
|
-
|
|
151
|
+
diplomaUrl: _propTypes.default.string,
|
|
152
|
+
badgeUrl: _propTypes.default.string,
|
|
153
|
+
ongoingCoursesAvailable: _propTypes.default.bool,
|
|
173
154
|
certificationCourses: _propTypes.default.shape(_cardsGrid.default.propTypes),
|
|
174
|
-
totalCourses: _propTypes.default.number,
|
|
175
|
-
totalModules: _propTypes.default.number,
|
|
176
155
|
filters: _propTypes.default.shape({
|
|
177
156
|
onChange: _propTypes.default.func,
|
|
178
157
|
options: _propTypes.default.arrayOf(_propTypes.default.shape(_select.SelectOptionPropTypes))
|
|
179
158
|
}),
|
|
180
|
-
sorting: _propTypes.default.shape(_select.default.propTypes),
|
|
181
159
|
onBackClick: _propTypes.default.func,
|
|
182
160
|
onContinueLearningClick: _propTypes.default.func
|
|
183
161
|
} : {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DESCRIPTION_BREAKPOINT","CertificationDetail","props","context","certificationRef","title","description","certificationCourses","ongoingCourses","totalCourses","totalModules","filters","sorting","onBackClick","onContinueLearningClick","metrics","logoUrl","onDownloadDiploma","badge","translate","progression","completedCourses","completedModules","stars","badgeUrl","onDownloadBadge","showMore","setShowMore","useState","handleShowMore","useCallback","Description","classnames","style","truncate","backgroundContainer","container","backButton","ctaContainer","logoContainer","logo","length","showMoreWrapper","faSize","wrapperSize","contentStats","divider","list","continueLearningSection","type","onDownload","contextTypes","skin","Provider","childContextTypes","propTypes","PropTypes","string","isRequired","shape","number","func","CardsGrid","onChange","options","arrayOf","SelectOptionPropTypes","Select"],"sources":["../../../src/template/certification-detail/index.js"],"sourcesContent":["import React, {useCallback, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {compact, lowerCase} from 'lodash/fp';\nimport Provider from '../../atom/provider';\nimport Tag from '../../atom/tag';\nimport Select, {SelectOptionPropTypes} from '../../atom/select';\nimport ButtonLinkIcon from '../../atom/button-link-icon';\nimport Icon from '../../atom/icon';\nimport CardsGrid from '../../organism/cards-grid';\nimport AllCourses from '../skill-detail/all-courses';\nimport ContinueLearning from '../skill-detail/continue-learning';\nimport {ContinueLearningButton} from '../skill-detail';\nimport ProgressWrapper from '../../molecule/progress-wrapper';\nimport style from './style.css';\n\nconst DESCRIPTION_BREAKPOINT = 382;\n\nconst CertificationDetail = (props, context) => {\n const {\n certificationRef,\n title,\n description,\n certificationCourses,\n ongoingCourses,\n totalCourses,\n totalModules,\n filters,\n sorting,\n onBackClick,\n onContinueLearningClick,\n metrics,\n logoUrl,\n onDownloadDiploma,\n badge = {}\n } = props;\n const {translate} = context;\n const {progression, completedCourses, completedModules, stars} = metrics;\n const {badgeUrl = false, onDownloadBadge} = badge;\n\n const [showMore, setShowMore] = useState(false);\n const handleShowMore = useCallback(() => setShowMore(!showMore), [setShowMore, showMore]);\n\n const Description = useCallback(() => {\n return (\n <div className={classnames(style.description, !showMore && style.truncate)}>\n {description}\n </div>\n );\n }, [showMore, description]);\n\n return (\n <div className={style.backgroundContainer}>\n <div className={style.container} data-name={certificationRef}>\n <ButtonLinkIcon\n faIcon=\"arrow-left\"\n data-name=\"back-button\"\n aria-label=\"Back\"\n onClick={onBackClick}\n className={style.backButton}\n tooltipPlacement=\"right\"\n />\n <div className={style.ctaContainer}>\n <div className={style.logoContainer}>\n <img className={style.logo} src={logoUrl} />\n </div>\n <div>\n <Tag label={translate('certification')} />\n <div className={style.title}>{title}</div>\n {description ? (\n <>\n <Description />\n {description.length >= DESCRIPTION_BREAKPOINT ? (\n <div className={style.showMoreWrapper} onClick={handleShowMore}>\n {translate(showMore ? 'Show less' : 'Show more')}\n <Icon\n iconName={showMore ? 'chevron-up' : 'chevron-down'}\n size={{faSize: 14, wrapperSize: 16}}\n />\n </div>\n ) : null}\n </>\n ) : null}\n <div className={style.contentStats}>\n <span>{`${totalCourses} ${lowerCase(translate('courses'))}`}</span>\n <div className={style.divider} />\n <span>{`${totalModules} ${lowerCase(translate('modules'))}`}</span>\n </div>\n <ContinueLearningButton\n ongoingCoursesAvailable={!!ongoingCourses.list.length}\n onClick={onContinueLearningClick}\n />\n </div>\n </div>\n <div className={style.continueLearningSection}>\n <ContinueLearning ongoingCourses={ongoingCourses} />\n </div>\n <ProgressWrapper\n title={translate('your_progress')}\n subtitle={translate('certification_progress_wrapper_subtitle')}\n progression={progression}\n completedCourses={completedCourses}\n completedModules={completedModules}\n sections={compact([\n {\n type: 'diploma',\n onDownload: () => onDownloadDiploma\n },\n badgeUrl && {\n type: 'badge',\n badgeUrl,\n onDownload: () => onDownloadBadge\n },\n {\n type: 'stars',\n stars\n }\n ])}\n />\n <AllCourses\n courses={certificationCourses}\n totalCourses={totalCourses}\n filters={filters}\n sorting={sorting}\n />\n </div>\n </div>\n );\n};\n\nCertificationDetail.contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n};\n\nCertificationDetail.propTypes = {\n title: PropTypes.string.isRequired,\n certificationRef: PropTypes.string.isRequired,\n description: PropTypes.string,\n logoUrl: PropTypes.string,\n metrics: PropTypes.shape({\n progression: PropTypes.number,\n stars: PropTypes.number,\n completedCourses: PropTypes.number,\n completedModules: PropTypes.number\n }),\n onDownloadDiploma: PropTypes.func,\n badge: PropTypes.shape({\n badgeUrl: PropTypes.string,\n onDownloadBadge: PropTypes.func\n }),\n ongoingCourses: PropTypes.shape(CardsGrid.propTypes),\n certificationCourses: PropTypes.shape(CardsGrid.propTypes),\n totalCourses: PropTypes.number,\n totalModules: PropTypes.number,\n filters: PropTypes.shape({\n onChange: PropTypes.func,\n options: PropTypes.arrayOf(PropTypes.shape(SelectOptionPropTypes))\n }),\n sorting: PropTypes.shape(Select.propTypes),\n onBackClick: PropTypes.func,\n onContinueLearningClick: PropTypes.func\n};\n\nexport default CertificationDetail;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["DESCRIPTION_BREAKPOINT","CertificationDetail","props","context","certificationRef","title","description","certificationCourses","ongoingCoursesAvailable","filters","onBackClick","onContinueLearningClick","metrics","logoUrl","diplomaUrl","badgeUrl","translate","progression","mandatoryModules","stars","totalModules","showMore","setShowMore","useState","handleShowMore","useCallback","Description","classnames","style","truncate","completedModules","useMemo","backgroundContainer","container","backButton","ctaContainer","logoContainer","logo","length","showMoreWrapper","faSize","wrapperSize","contentStats","type","downloadUrl","contextTypes","skin","Provider","childContextTypes","propTypes","PropTypes","string","isRequired","shape","number","bool","CardsGrid","onChange","func","options","arrayOf","SelectOptionPropTypes"],"sources":["../../../src/template/certification-detail/index.js"],"sourcesContent":["import React, {useCallback, useState, useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {compact, lowerCase, pipe, get, size} from 'lodash/fp';\nimport Provider from '../../atom/provider';\nimport Tag from '../../atom/tag';\nimport {SelectOptionPropTypes} from '../../atom/select';\nimport ButtonLinkIcon from '../../atom/button-link-icon';\nimport Icon from '../../atom/icon';\nimport CardsGrid from '../../organism/cards-grid';\nimport AllCourses from '../skill-detail/all-courses';\nimport {ContinueLearningButton} from '../skill-detail';\nimport ProgressWrapper from '../../molecule/progress-wrapper';\nimport style from './style.css';\n\nconst DESCRIPTION_BREAKPOINT = 382;\n\nconst CertificationDetail = (props, context) => {\n const {\n certificationRef,\n title,\n description,\n certificationCourses,\n ongoingCoursesAvailable,\n filters,\n onBackClick,\n onContinueLearningClick,\n metrics,\n logoUrl,\n diplomaUrl,\n badgeUrl\n } = props;\n const {translate} = context;\n const {progression, mandatoryModules, stars, totalModules} = metrics;\n\n const [showMore, setShowMore] = useState(false);\n const handleShowMore = useCallback(() => setShowMore(!showMore), [setShowMore, showMore]);\n\n const Description = useCallback(() => {\n return (\n <div className={classnames(style.description, !showMore && style.truncate)}>\n {description}\n </div>\n );\n }, [showMore, description]);\n\n const completedModules = useMemo(\n () => (mandatoryModules * progression) / 100,\n [mandatoryModules, progression]\n );\n\n return (\n <div className={style.backgroundContainer}>\n <div className={style.container} data-name={certificationRef}>\n <ButtonLinkIcon\n faIcon=\"arrow-left\"\n data-name=\"back-button\"\n aria-label=\"Back\"\n onClick={onBackClick}\n className={style.backButton}\n tooltipPlacement=\"right\"\n />\n <div className={style.ctaContainer}>\n <div className={style.logoContainer}>\n <img className={style.logo} src={logoUrl} />\n </div>\n <div>\n <Tag label={translate('certification')} />\n <div className={style.title}>{title}</div>\n {description ? (\n <>\n <Description />\n {description.length >= DESCRIPTION_BREAKPOINT ? (\n <div className={style.showMoreWrapper} onClick={handleShowMore}>\n {translate(showMore ? 'Show less' : 'Show more')}\n <Icon\n iconName={showMore ? 'chevron-up' : 'chevron-down'}\n size={{faSize: 14, wrapperSize: 16}}\n />\n </div>\n ) : null}\n </>\n ) : null}\n <div className={style.contentStats}>\n <span>{`${totalModules} ${lowerCase(translate('modules'))}`}</span>\n </div>\n <ContinueLearningButton\n ongoingCoursesAvailable={ongoingCoursesAvailable}\n onClick={onContinueLearningClick}\n />\n </div>\n </div>\n <ProgressWrapper\n title={translate('your_progress')}\n subtitle={translate('certification_progress_wrapper_subtitle')}\n progression={progression}\n completedModules={completedModules}\n mandatoryModules={mandatoryModules}\n sections={compact([\n {\n type: 'diploma',\n downloadUrl: diplomaUrl\n },\n badgeUrl && {\n type: 'badge',\n downloadUrl: badgeUrl\n },\n {\n type: 'stars',\n stars\n }\n ])}\n />\n <AllCourses\n content={certificationCourses}\n filters={filters}\n data-name=\"certification-courses\"\n />\n </div>\n </div>\n );\n};\n\nCertificationDetail.contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n};\n\nCertificationDetail.propTypes = {\n title: PropTypes.string.isRequired,\n certificationRef: PropTypes.string.isRequired,\n description: PropTypes.string,\n logoUrl: PropTypes.string,\n metrics: PropTypes.shape({\n progression: PropTypes.number,\n stars: PropTypes.number,\n mandatoryModules: PropTypes.number,\n totalModules: PropTypes.number\n }),\n diplomaUrl: PropTypes.string,\n badgeUrl: PropTypes.string,\n ongoingCoursesAvailable: PropTypes.bool,\n certificationCourses: PropTypes.shape(CardsGrid.propTypes),\n filters: PropTypes.shape({\n onChange: PropTypes.func,\n options: PropTypes.arrayOf(PropTypes.shape(SelectOptionPropTypes))\n }),\n onBackClick: PropTypes.func,\n onContinueLearningClick: PropTypes.func\n};\n\nexport default CertificationDetail;\n"],"mappings":"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"}
|
|
@@ -8,14 +8,6 @@
|
|
|
8
8
|
@value cm_grey_200 from colors;
|
|
9
9
|
@value cm_grey_400 from colors;
|
|
10
10
|
|
|
11
|
-
.divider {
|
|
12
|
-
width: 4px;
|
|
13
|
-
height: 4px;
|
|
14
|
-
background-color: cm_grey_400;
|
|
15
|
-
border: solid cm_grey_400 1px;
|
|
16
|
-
border-radius: 4px;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
11
|
.textBase {
|
|
20
12
|
font-family: "Gilroy";
|
|
21
13
|
font-style: normal;
|
|
@@ -53,6 +45,7 @@
|
|
|
53
45
|
align-items: center;
|
|
54
46
|
width: 100%;
|
|
55
47
|
gap: 40px;
|
|
48
|
+
margin-bottom: 40px;
|
|
56
49
|
}
|
|
57
50
|
|
|
58
51
|
.logoContainer {
|
|
@@ -112,10 +105,6 @@
|
|
|
112
105
|
color: cm_grey_400;
|
|
113
106
|
}
|
|
114
107
|
|
|
115
|
-
.continueLearningSection {
|
|
116
|
-
padding: 24px 0 32px 0;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
108
|
@media tablet {
|
|
120
109
|
.ctaContainer {
|
|
121
110
|
flex-direction: column;
|
|
@@ -26,14 +26,13 @@ declare namespace AllCourses {
|
|
|
26
26
|
const translate: PropTypes.Requireable<(...args: any[]) => any>;
|
|
27
27
|
}
|
|
28
28
|
namespace propTypes {
|
|
29
|
-
const
|
|
29
|
+
const content: PropTypes.Requireable<PropTypes.InferProps<{
|
|
30
30
|
list: PropTypes.Requireable<(PropTypes.InferProps<any> | null | undefined)[]>;
|
|
31
31
|
customStyle: PropTypes.Requireable<{
|
|
32
32
|
[x: string]: string | null | undefined;
|
|
33
33
|
}>;
|
|
34
34
|
loading: PropTypes.Requireable<boolean>;
|
|
35
35
|
}>>;
|
|
36
|
-
const totalCourses: PropTypes.Requireable<number>;
|
|
37
36
|
const filters: PropTypes.Requireable<PropTypes.InferProps<{
|
|
38
37
|
onChange: PropTypes.Requireable<(...args: any[]) => any>;
|
|
39
38
|
options: PropTypes.Requireable<(PropTypes.InferProps<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-courses.d.ts","sourceRoot":"","sources":["../../../src/template/skill-detail/all-courses.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"all-courses.d.ts","sourceRoot":"","sources":["../../../src/template/skill-detail/all-courses.js"],"names":[],"mappings":";AA6CA,mEAsHC"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _size2 = _interopRequireDefault(require("lodash/fp/size"));
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _map2 = _interopRequireDefault(require("lodash/fp/map"));
|
|
9
|
+
|
|
10
|
+
var _filter2 = _interopRequireDefault(require("lodash/fp/filter"));
|
|
9
11
|
|
|
10
12
|
var _get2 = _interopRequireDefault(require("lodash/fp/get"));
|
|
11
13
|
|
|
@@ -37,10 +39,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
37
39
|
|
|
38
40
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
|
|
39
41
|
|
|
42
|
+
const uncappedMap = _map2.default.convert({
|
|
43
|
+
cap: false
|
|
44
|
+
});
|
|
45
|
+
|
|
40
46
|
const FilterButton = (props, context) => {
|
|
41
47
|
const {
|
|
42
48
|
selected,
|
|
43
|
-
|
|
49
|
+
label,
|
|
44
50
|
onClick
|
|
45
51
|
} = props;
|
|
46
52
|
const {
|
|
@@ -54,7 +60,7 @@ const FilterButton = (props, context) => {
|
|
|
54
60
|
transition: 'background-color 0.15s ease-in-out, color 0.15s ease-in-out',
|
|
55
61
|
width: 'fit-content'
|
|
56
62
|
},
|
|
57
|
-
label
|
|
63
|
+
label,
|
|
58
64
|
onClick,
|
|
59
65
|
'data-name': 'filter-type-course-button'
|
|
60
66
|
};
|
|
@@ -67,14 +73,13 @@ FilterButton.contextTypes = {
|
|
|
67
73
|
};
|
|
68
74
|
FilterButton.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
69
75
|
selected: _propTypes.default.bool,
|
|
70
|
-
|
|
76
|
+
label: _propTypes.default.string,
|
|
71
77
|
onClick: _propTypes.default.func
|
|
72
78
|
} : {};
|
|
73
79
|
|
|
74
80
|
const AllCourses = (props, context) => {
|
|
75
81
|
const {
|
|
76
|
-
|
|
77
|
-
totalCourses,
|
|
82
|
+
content,
|
|
78
83
|
filters,
|
|
79
84
|
sorting
|
|
80
85
|
} = props;
|
|
@@ -85,47 +90,43 @@ const AllCourses = (props, context) => {
|
|
|
85
90
|
const {
|
|
86
91
|
list,
|
|
87
92
|
loading
|
|
88
|
-
} =
|
|
93
|
+
} = content;
|
|
89
94
|
const {
|
|
90
95
|
translate
|
|
91
96
|
} = context;
|
|
92
97
|
const [showCompleted, setShowCompleted] = (0, _react.useState)(true);
|
|
93
98
|
const [searchValue, setSearchValue] = (0, _react.useState)('');
|
|
94
|
-
const [searchResults, setSearchResults] = (0, _react.useState)((0, _sortBy2.default)(course => -(0, _getOr2.default)(0, ['progress'], course), list));
|
|
95
99
|
const sortView = sorting !== undefined ? /*#__PURE__*/_react.default.createElement("div", {
|
|
96
100
|
"data-name": "choice"
|
|
97
101
|
}, /*#__PURE__*/_react.default.createElement(_select.default, _extends({}, sorting, {
|
|
98
102
|
"aria-label": "All courses sort"
|
|
99
103
|
}))) : null;
|
|
100
|
-
(0, _react.
|
|
101
|
-
|
|
102
|
-
}, [list]);
|
|
104
|
+
const filteredContent = (0, _react.useMemo)(() => {
|
|
105
|
+
return showCompleted ? list : (0, _filter2.default)(course => course.progress < 1, list);
|
|
106
|
+
}, [list, showCompleted]);
|
|
107
|
+
const contentResult = (0, _react.useMemo)(() => {
|
|
108
|
+
return (0, _filter2.default)(skill => (0, _searchValueIncluded.default)(skill.title, searchValue), filteredContent);
|
|
109
|
+
}, [filteredContent, searchValue]);
|
|
103
110
|
const handleSearch = (0, _react.useCallback)(value => {
|
|
104
111
|
setSearchValue(value);
|
|
105
|
-
|
|
106
|
-
}, [list, setSearchValue, setSearchResults]);
|
|
112
|
+
}, [setSearchValue]);
|
|
107
113
|
const handleSearchReset = (0, _react.useCallback)(() => {
|
|
108
114
|
setSearchValue('');
|
|
109
|
-
|
|
110
|
-
}, [list, setSearchValue, setSearchResults]);
|
|
115
|
+
}, [setSearchValue]);
|
|
111
116
|
const handleShowCompletedToggle = (0, _react.useCallback)(() => {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
} else {
|
|
119
|
-
setSearchResults(searchResults.filter(skill => skill.progress < 100));
|
|
120
|
-
}
|
|
121
|
-
}, [list, searchResults, showCompleted, setShowCompleted, setSearchResults, handleSearchReset]);
|
|
117
|
+
setShowCompleted(prevShowCompleted => !prevShowCompleted);
|
|
118
|
+
}, []);
|
|
119
|
+
const handleFilterChange = (0, _react.useCallback)(value => {
|
|
120
|
+
onChange(value);
|
|
121
|
+
handleSearchReset();
|
|
122
|
+
}, [onChange, handleSearchReset]);
|
|
122
123
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
123
124
|
className: _allCourses.default.continueLearningWrapper
|
|
124
125
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
125
126
|
className: _allCourses.default.continueLearningTitle
|
|
126
|
-
}, translate('
|
|
127
|
+
}, translate('all_content')), /*#__PURE__*/_react.default.createElement("span", {
|
|
127
128
|
className: _allCourses.default.continueLearningNumber
|
|
128
|
-
},
|
|
129
|
+
}, (0, _size2.default)(contentResult))), /*#__PURE__*/_react.default.createElement("div", {
|
|
129
130
|
className: _allCourses.default.searchAndSortSection
|
|
130
131
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
131
132
|
className: _allCourses.default.searchWrapper
|
|
@@ -146,34 +147,28 @@ const AllCourses = (props, context) => {
|
|
|
146
147
|
"aria-label": 'Show completed courses aria label',
|
|
147
148
|
value: showCompleted,
|
|
148
149
|
onChange: handleShowCompletedToggle
|
|
149
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
150
|
+
}), sortView ? /*#__PURE__*/_react.default.createElement("div", {
|
|
150
151
|
className: _allCourses.default.sortWrapper
|
|
151
|
-
}, translate('sort_by'), sortView))), /*#__PURE__*/_react.default.createElement("div", {
|
|
152
|
+
}, translate('sort_by'), sortView) : null)), /*#__PURE__*/_react.default.createElement("div", {
|
|
152
153
|
className: _allCourses.default.filterWrapper
|
|
153
|
-
}, options
|
|
154
|
+
}, (0, _size2.default)(options) > 2 && (0, _size2.default)(contentResult) ? uncappedMap((filterProps, index) => {
|
|
154
155
|
const {
|
|
155
156
|
name,
|
|
156
157
|
value,
|
|
157
158
|
selected
|
|
158
|
-
} =
|
|
159
|
-
|
|
160
|
-
function handleChange() {
|
|
161
|
-
onChange(value);
|
|
162
|
-
handleSearchReset();
|
|
163
|
-
}
|
|
164
|
-
|
|
159
|
+
} = filterProps;
|
|
165
160
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
166
161
|
key: index,
|
|
167
162
|
className: _allCourses.default.filterButtonWrapper
|
|
168
163
|
}, /*#__PURE__*/_react.default.createElement(FilterButton, {
|
|
169
164
|
selected: selected,
|
|
170
|
-
|
|
171
|
-
onClick:
|
|
165
|
+
label: name,
|
|
166
|
+
onClick: handleFilterChange
|
|
172
167
|
}), value === 'ALL' ? /*#__PURE__*/_react.default.createElement("div", {
|
|
173
168
|
className: _allCourses.default.divider
|
|
174
169
|
}) : null);
|
|
175
|
-
}) : null), /*#__PURE__*/_react.default.createElement("div", null,
|
|
176
|
-
list:
|
|
170
|
+
}, options) : null), /*#__PURE__*/_react.default.createElement("div", null, (0, _size2.default)(contentResult) ? /*#__PURE__*/_react.default.createElement(_cardsGrid.default, {
|
|
171
|
+
list: contentResult,
|
|
177
172
|
loading: loading,
|
|
178
173
|
customStyle: {
|
|
179
174
|
justifyContent: 'left'
|
|
@@ -197,8 +192,7 @@ AllCourses.contextTypes = {
|
|
|
197
192
|
translate: _provider.default.childContextTypes.translate
|
|
198
193
|
};
|
|
199
194
|
AllCourses.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
200
|
-
|
|
201
|
-
totalCourses: _propTypes.default.number,
|
|
195
|
+
content: _propTypes.default.shape(_cardsGrid.default.propTypes),
|
|
202
196
|
filters: _propTypes.default.shape({
|
|
203
197
|
onChange: _propTypes.default.func,
|
|
204
198
|
options: _propTypes.default.arrayOf(_propTypes.default.shape(_select.SelectOptionPropTypes))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-courses.js","names":["FilterButton","props","context","selected","filter","onClick","skin","primarySkinColor","buttonProps","customStyle","backgroundColor","color","transition","width","label","contextTypes","Provider","childContextTypes","translate","propTypes","PropTypes","bool","string","func","AllCourses","courses","totalCourses","filters","sorting","options","onChange","list","loading","showCompleted","setShowCompleted","useState","searchValue","setSearchValue","searchResults","setSearchResults","course","sortView","undefined","useEffect","handleSearch","useCallback","value","skill","searchValueIncluded","title","handleSearchReset","handleShowCompletedToggle","toggledShowCompleted","progress","style","continueLearningWrapper","continueLearningTitle","continueLearningNumber","searchAndSortSection","searchWrapper","placeholder","sortSection","sortWrapper","filterWrapper","length","map","index","name","handleChange","filterButtonWrapper","divider","justifyContent","emptySearchResultContainer","emptySearchResultTitle","emptySearchResultDescription","emptySearchResultClearSearch","shape","CardsGrid","number","arrayOf","SelectOptionPropTypes","Select"],"sources":["../../../src/template/skill-detail/all-courses.js"],"sourcesContent":["import React, {useState, useCallback, useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {get, getOr, sortBy} from 'lodash/fp';\nimport Provider from '../../atom/provider';\nimport Select, {SelectOptionPropTypes} from '../../atom/select';\nimport ButtonLink from '../../atom/button-link';\nimport SearchForm from '../../molecule/search-form';\nimport CardsGrid from '../../organism/cards-grid';\nimport searchValueIncluded from '../../util/search-value-included';\nimport InputSwitch from '../../atom/input-switch';\nimport style from './all-courses.css';\n\nconst FilterButton = (props, context) => {\n const {selected, filter, onClick} = props;\n const {skin} = context;\n const primarySkinColor = get('common.primary', skin);\n\n const buttonProps = {\n customStyle: {\n backgroundColor: selected ? primarySkinColor : '#E1E1E3',\n color: selected ? '#FFFFFF' : '#515161',\n transition: 'background-color 0.15s ease-in-out, color 0.15s ease-in-out',\n width: 'fit-content'\n },\n label: filter,\n onClick,\n 'data-name': 'filter-type-course-button'\n };\n\n return <ButtonLink {...buttonProps} />;\n};\n\nFilterButton.contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n};\n\nFilterButton.propTypes = {\n selected: PropTypes.bool,\n filter: PropTypes.string,\n onClick: PropTypes.func\n};\n\nconst AllCourses = (props, context) => {\n const {courses, totalCourses, filters, sorting} = props;\n const {options, onChange} = filters;\n const {list, loading} = courses;\n const {translate} = context;\n const [showCompleted, setShowCompleted] = useState(true);\n const [searchValue, setSearchValue] = useState('');\n const [searchResults, setSearchResults] = useState(\n sortBy(course => -getOr(0, ['progress'], course), list)\n );\n\n const sortView =\n sorting !== undefined ? (\n <div data-name=\"choice\">\n <Select {...sorting} aria-label=\"All courses sort\" />\n </div>\n ) : null;\n\n useEffect(() => {\n setSearchResults(sortBy(course => -getOr(0, ['progress'], course), list));\n }, [list]);\n\n const handleSearch = useCallback(\n value => {\n setSearchValue(value);\n setSearchResults(list.filter(skill => searchValueIncluded(skill.title, value)));\n },\n [list, setSearchValue, setSearchResults]\n );\n\n const handleSearchReset = useCallback(() => {\n setSearchValue('');\n setSearchResults(list);\n }, [list, setSearchValue, setSearchResults]);\n\n const handleShowCompletedToggle = useCallback(() => {\n const toggledShowCompleted = !showCompleted;\n setShowCompleted(toggledShowCompleted);\n if (toggledShowCompleted) {\n setSearchResults(list);\n handleSearchReset();\n } else {\n setSearchResults(searchResults.filter(skill => skill.progress < 100));\n }\n }, [list, searchResults, showCompleted, setShowCompleted, setSearchResults, handleSearchReset]);\n\n return (\n <>\n <div className={style.continueLearningWrapper}>\n <span className={style.continueLearningTitle}>{translate('all_courses')}</span>\n <span className={style.continueLearningNumber}>{totalCourses}</span>\n </div>\n <div className={style.searchAndSortSection}>\n <div className={style.searchWrapper}>\n <SearchForm\n search={{\n placeholder: translate('search_place_holder'),\n value: searchValue,\n onChange: handleSearch\n }}\n onReset={handleSearchReset}\n />\n </div>\n <div className={style.sortSection}>\n <InputSwitch\n id={'show-completed-courses-switch'}\n type=\"switch\"\n name={translate('show_completed')}\n title={translate('show_completed')}\n aria-label={'Show completed courses aria label'}\n value={showCompleted}\n onChange={handleShowCompletedToggle}\n />\n <div className={style.sortWrapper}>\n {translate('sort_by')}\n {sortView}\n </div>\n </div>\n </div>\n <div className={style.filterWrapper}>\n {options.length > 2 && searchResults.length > 0\n ? options.map((filter, index) => {\n const {name, value, selected} = filter;\n\n function handleChange() {\n onChange(value);\n handleSearchReset();\n }\n return (\n <div key={index} className={style.filterButtonWrapper}>\n <FilterButton selected={selected} filter={name} onClick={handleChange} />\n {value === 'ALL' ? <div className={style.divider} /> : null}\n </div>\n );\n })\n : null}\n </div>\n <div>\n {searchResults.length > 0 ? (\n <CardsGrid\n list={searchResults}\n loading={loading}\n customStyle={{justifyContent: 'left'}}\n />\n ) : (\n <div className={style.emptySearchResultContainer}>\n <div className={style.emptySearchResultTitle}>\n {translate('empty_search_result_title', {searchValue})}\n </div>\n <div className={style.emptySearchResultDescription}>\n {translate('empty_search_result_description')}\n </div>\n <div className={style.emptySearchResultClearSearch} onClick={handleSearchReset}>\n {translate('empty_search_result_clear_search')}\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nAllCourses.contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n};\n\nAllCourses.propTypes = {\n courses: PropTypes.shape(CardsGrid.propTypes),\n totalCourses: PropTypes.number,\n filters: PropTypes.shape({\n onChange: PropTypes.func,\n options: PropTypes.arrayOf(PropTypes.shape(SelectOptionPropTypes))\n }),\n sorting: PropTypes.shape(Select.propTypes)\n};\n\nexport default AllCourses;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,MAAMA,YAAY,GAAG,CAACC,KAAD,EAAQC,OAAR,KAAoB;EACvC,MAAM;IAACC,QAAD;IAAWC,MAAX;IAAmBC;EAAnB,IAA8BJ,KAApC;EACA,MAAM;IAACK;EAAD,IAASJ,OAAf;EACA,MAAMK,gBAAgB,GAAG,mBAAI,gBAAJ,EAAsBD,IAAtB,CAAzB;EAEA,MAAME,WAAW,GAAG;IAClBC,WAAW,EAAE;MACXC,eAAe,EAAEP,QAAQ,GAAGI,gBAAH,GAAsB,SADpC;MAEXI,KAAK,EAAER,QAAQ,GAAG,SAAH,GAAe,SAFnB;MAGXS,UAAU,EAAE,6DAHD;MAIXC,KAAK,EAAE;IAJI,CADK;IAOlBC,KAAK,EAAEV,MAPW;IAQlBC,OARkB;IASlB,aAAa;EATK,CAApB;EAYA,oBAAO,6BAAC,mBAAD,EAAgBG,WAAhB,CAAP;AACD,CAlBD;;AAoBAR,YAAY,CAACe,YAAb,GAA4B;EAC1BT,IAAI,EAAEU,iBAAA,CAASC,iBAAT,CAA2BX,IADP;EAE1BY,SAAS,EAAEF,iBAAA,CAASC,iBAAT,CAA2BC;AAFZ,CAA5B;AAKAlB,YAAY,CAACmB,SAAb,2CAAyB;EACvBhB,QAAQ,EAAEiB,kBAAA,CAAUC,IADG;EAEvBjB,MAAM,EAAEgB,kBAAA,CAAUE,MAFK;EAGvBjB,OAAO,EAAEe,kBAAA,CAAUG;AAHI,CAAzB;;AAMA,MAAMC,UAAU,GAAG,CAACvB,KAAD,EAAQC,OAAR,KAAoB;EACrC,MAAM;IAACuB,OAAD;IAAUC,YAAV;IAAwBC,OAAxB;IAAiCC;EAAjC,IAA4C3B,KAAlD;EACA,MAAM;IAAC4B,OAAD;IAAUC;EAAV,IAAsBH,OAA5B;EACA,MAAM;IAACI,IAAD;IAAOC;EAAP,IAAkBP,OAAxB;EACA,MAAM;IAACP;EAAD,IAAchB,OAApB;EACA,MAAM,CAAC+B,aAAD,EAAgBC,gBAAhB,IAAoC,IAAAC,eAAA,EAAS,IAAT,CAA1C;EACA,MAAM,CAACC,WAAD,EAAcC,cAAd,IAAgC,IAAAF,eAAA,EAAS,EAAT,CAAtC;EACA,MAAM,CAACG,aAAD,EAAgBC,gBAAhB,IAAoC,IAAAJ,eAAA,EACxC,sBAAOK,MAAM,IAAI,CAAC,qBAAM,CAAN,EAAS,CAAC,UAAD,CAAT,EAAuBA,MAAvB,CAAlB,EAAkDT,IAAlD,CADwC,CAA1C;EAIA,MAAMU,QAAQ,GACZb,OAAO,KAAKc,SAAZ,gBACE;IAAK,aAAU;EAAf,gBACE,6BAAC,eAAD,eAAYd,OAAZ;IAAqB,cAAW;EAAhC,GADF,CADF,GAII,IALN;EAOA,IAAAe,gBAAA,EAAU,MAAM;IACdJ,gBAAgB,CAAC,sBAAOC,MAAM,IAAI,CAAC,qBAAM,CAAN,EAAS,CAAC,UAAD,CAAT,EAAuBA,MAAvB,CAAlB,EAAkDT,IAAlD,CAAD,CAAhB;EACD,CAFD,EAEG,CAACA,IAAD,CAFH;EAIA,MAAMa,YAAY,GAAG,IAAAC,kBAAA,EACnBC,KAAK,IAAI;IACPT,cAAc,CAACS,KAAD,CAAd;IACAP,gBAAgB,CAACR,IAAI,CAAC3B,MAAL,CAAY2C,KAAK,IAAI,IAAAC,4BAAA,EAAoBD,KAAK,CAACE,KAA1B,EAAiCH,KAAjC,CAArB,CAAD,CAAhB;EACD,CAJkB,EAKnB,CAACf,IAAD,EAAOM,cAAP,EAAuBE,gBAAvB,CALmB,CAArB;EAQA,MAAMW,iBAAiB,GAAG,IAAAL,kBAAA,EAAY,MAAM;IAC1CR,cAAc,CAAC,EAAD,CAAd;IACAE,gBAAgB,CAACR,IAAD,CAAhB;EACD,CAHyB,EAGvB,CAACA,IAAD,EAAOM,cAAP,EAAuBE,gBAAvB,CAHuB,CAA1B;EAKA,MAAMY,yBAAyB,GAAG,IAAAN,kBAAA,EAAY,MAAM;IAClD,MAAMO,oBAAoB,GAAG,CAACnB,aAA9B;IACAC,gBAAgB,CAACkB,oBAAD,CAAhB;;IACA,IAAIA,oBAAJ,EAA0B;MACxBb,gBAAgB,CAACR,IAAD,CAAhB;MACAmB,iBAAiB;IAClB,CAHD,MAGO;MACLX,gBAAgB,CAACD,aAAa,CAAClC,MAAd,CAAqB2C,KAAK,IAAIA,KAAK,CAACM,QAAN,GAAiB,GAA/C,CAAD,CAAhB;IACD;EACF,CATiC,EAS/B,CAACtB,IAAD,EAAOO,aAAP,EAAsBL,aAAtB,EAAqCC,gBAArC,EAAuDK,gBAAvD,EAAyEW,iBAAzE,CAT+B,CAAlC;EAWA,oBACE,yEACE;IAAK,SAAS,EAAEI,mBAAA,CAAMC;EAAtB,gBACE;IAAM,SAAS,EAAED,mBAAA,CAAME;EAAvB,GAA+CtC,SAAS,CAAC,aAAD,CAAxD,CADF,eAEE;IAAM,SAAS,EAAEoC,mBAAA,CAAMG;EAAvB,GAAgD/B,YAAhD,CAFF,CADF,eAKE;IAAK,SAAS,EAAE4B,mBAAA,CAAMI;EAAtB,gBACE;IAAK,SAAS,EAAEJ,mBAAA,CAAMK;EAAtB,gBACE,6BAAC,mBAAD;IACE,MAAM,EAAE;MACNC,WAAW,EAAE1C,SAAS,CAAC,qBAAD,CADhB;MAEN4B,KAAK,EAAEV,WAFD;MAGNN,QAAQ,EAAEc;IAHJ,CADV;IAME,OAAO,EAAEM;EANX,EADF,CADF,eAWE;IAAK,SAAS,EAAEI,mBAAA,CAAMO;EAAtB,gBACE,6BAAC,oBAAD;IACE,EAAE,EAAE,+BADN;IAEE,IAAI,EAAC,QAFP;IAGE,IAAI,EAAE3C,SAAS,CAAC,gBAAD,CAHjB;IAIE,KAAK,EAAEA,SAAS,CAAC,gBAAD,CAJlB;IAKE,cAAY,mCALd;IAME,KAAK,EAAEe,aANT;IAOE,QAAQ,EAAEkB;EAPZ,EADF,eAUE;IAAK,SAAS,EAAEG,mBAAA,CAAMQ;EAAtB,GACG5C,SAAS,CAAC,SAAD,CADZ,EAEGuB,QAFH,CAVF,CAXF,CALF,eAgCE;IAAK,SAAS,EAAEa,mBAAA,CAAMS;EAAtB,GACGlC,OAAO,CAACmC,MAAR,GAAiB,CAAjB,IAAsB1B,aAAa,CAAC0B,MAAd,GAAuB,CAA7C,GACGnC,OAAO,CAACoC,GAAR,CAAY,CAAC7D,MAAD,EAAS8D,KAAT,KAAmB;IAC7B,MAAM;MAACC,IAAD;MAAOrB,KAAP;MAAc3C;IAAd,IAA0BC,MAAhC;;IAEA,SAASgE,YAAT,GAAwB;MACtBtC,QAAQ,CAACgB,KAAD,CAAR;MACAI,iBAAiB;IAClB;;IACD,oBACE;MAAK,GAAG,EAAEgB,KAAV;MAAiB,SAAS,EAAEZ,mBAAA,CAAMe;IAAlC,gBACE,6BAAC,YAAD;MAAc,QAAQ,EAAElE,QAAxB;MAAkC,MAAM,EAAEgE,IAA1C;MAAgD,OAAO,EAAEC;IAAzD,EADF,EAEGtB,KAAK,KAAK,KAAV,gBAAkB;MAAK,SAAS,EAAEQ,mBAAA,CAAMgB;IAAtB,EAAlB,GAAsD,IAFzD,CADF;EAMD,CAbD,CADH,GAeG,IAhBN,CAhCF,eAkDE,0CACGhC,aAAa,CAAC0B,MAAd,GAAuB,CAAvB,gBACC,6BAAC,kBAAD;IACE,IAAI,EAAE1B,aADR;IAEE,OAAO,EAAEN,OAFX;IAGE,WAAW,EAAE;MAACuC,cAAc,EAAE;IAAjB;EAHf,EADD,gBAOC;IAAK,SAAS,EAAEjB,mBAAA,CAAMkB;EAAtB,gBACE;IAAK,SAAS,EAAElB,mBAAA,CAAMmB;EAAtB,GACGvD,SAAS,CAAC,2BAAD,EAA8B;IAACkB;EAAD,CAA9B,CADZ,CADF,eAIE;IAAK,SAAS,EAAEkB,mBAAA,CAAMoB;EAAtB,GACGxD,SAAS,CAAC,iCAAD,CADZ,CAJF,eAOE;IAAK,SAAS,EAAEoC,mBAAA,CAAMqB,4BAAtB;IAAoD,OAAO,EAAEzB;EAA7D,GACGhC,SAAS,CAAC,kCAAD,CADZ,CAPF,CARJ,CAlDF,CADF;AA0ED,CAxHD;;AA0HAM,UAAU,CAACT,YAAX,GAA0B;EACxBT,IAAI,EAAEU,iBAAA,CAASC,iBAAT,CAA2BX,IADT;EAExBY,SAAS,EAAEF,iBAAA,CAASC,iBAAT,CAA2BC;AAFd,CAA1B;AAKAM,UAAU,CAACL,SAAX,2CAAuB;EACrBM,OAAO,EAAEL,kBAAA,CAAUwD,KAAV,CAAgBC,kBAAA,CAAU1D,SAA1B,CADY;EAErBO,YAAY,EAAEN,kBAAA,CAAU0D,MAFH;EAGrBnD,OAAO,EAAEP,kBAAA,CAAUwD,KAAV,CAAgB;IACvB9C,QAAQ,EAAEV,kBAAA,CAAUG,IADG;IAEvBM,OAAO,EAAET,kBAAA,CAAU2D,OAAV,CAAkB3D,kBAAA,CAAUwD,KAAV,CAAgBI,6BAAhB,CAAlB;EAFc,CAAhB,CAHY;EAOrBpD,OAAO,EAAER,kBAAA,CAAUwD,KAAV,CAAgBK,eAAA,CAAO9D,SAAvB;AAPY,CAAvB;eAUeK,U"}
|
|
1
|
+
{"version":3,"file":"all-courses.js","names":["uncappedMap","convert","cap","FilterButton","props","context","selected","label","onClick","skin","primarySkinColor","buttonProps","customStyle","backgroundColor","color","transition","width","contextTypes","Provider","childContextTypes","translate","propTypes","PropTypes","bool","string","func","AllCourses","content","filters","sorting","options","onChange","list","loading","showCompleted","setShowCompleted","useState","searchValue","setSearchValue","sortView","undefined","filteredContent","useMemo","course","progress","contentResult","skill","searchValueIncluded","title","handleSearch","useCallback","value","handleSearchReset","handleShowCompletedToggle","prevShowCompleted","handleFilterChange","style","continueLearningWrapper","continueLearningTitle","continueLearningNumber","searchAndSortSection","searchWrapper","placeholder","sortSection","sortWrapper","filterWrapper","filterProps","index","name","filterButtonWrapper","divider","justifyContent","emptySearchResultContainer","emptySearchResultTitle","emptySearchResultDescription","emptySearchResultClearSearch","shape","CardsGrid","arrayOf","SelectOptionPropTypes","Select"],"sources":["../../../src/template/skill-detail/all-courses.js"],"sourcesContent":["import React, {useState, useCallback, useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport {get, filter, map, size} from 'lodash/fp';\nimport Provider from '../../atom/provider';\nimport Select, {SelectOptionPropTypes} from '../../atom/select';\nimport ButtonLink from '../../atom/button-link';\nimport SearchForm from '../../molecule/search-form';\nimport CardsGrid from '../../organism/cards-grid';\nimport searchValueIncluded from '../../util/search-value-included';\nimport InputSwitch from '../../atom/input-switch';\nimport style from './all-courses.css';\n\nconst uncappedMap = map.convert({cap: false});\n\nconst FilterButton = (props, context) => {\n const {selected, label, onClick} = props;\n const {skin} = context;\n const primarySkinColor = get('common.primary', skin);\n\n const buttonProps = {\n customStyle: {\n backgroundColor: selected ? primarySkinColor : '#E1E1E3',\n color: selected ? '#FFFFFF' : '#515161',\n transition: 'background-color 0.15s ease-in-out, color 0.15s ease-in-out',\n width: 'fit-content'\n },\n label,\n onClick,\n 'data-name': 'filter-type-course-button'\n };\n\n return <ButtonLink {...buttonProps} />;\n};\n\nFilterButton.contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n};\n\nFilterButton.propTypes = {\n selected: PropTypes.bool,\n label: PropTypes.string,\n onClick: PropTypes.func\n};\n\nconst AllCourses = (props, context) => {\n const {content, filters, sorting} = props;\n const {options, onChange} = filters;\n const {list, loading} = content;\n const {translate} = context;\n const [showCompleted, setShowCompleted] = useState(true);\n const [searchValue, setSearchValue] = useState('');\n\n const sortView =\n sorting !== undefined ? (\n <div data-name=\"choice\">\n <Select {...sorting} aria-label=\"All courses sort\" />\n </div>\n ) : null;\n\n const filteredContent = useMemo(() => {\n return showCompleted ? list : filter(course => course.progress < 1, list);\n }, [list, showCompleted]);\n\n const contentResult = useMemo(() => {\n return filter(skill => searchValueIncluded(skill.title, searchValue), filteredContent);\n }, [filteredContent, searchValue]);\n\n const handleSearch = useCallback(\n value => {\n setSearchValue(value);\n },\n [setSearchValue]\n );\n\n const handleSearchReset = useCallback(() => {\n setSearchValue('');\n }, [setSearchValue]);\n\n const handleShowCompletedToggle = useCallback(() => {\n setShowCompleted(prevShowCompleted => !prevShowCompleted);\n }, []);\n\n const handleFilterChange = useCallback(\n value => {\n onChange(value);\n handleSearchReset();\n },\n [onChange, handleSearchReset]\n );\n\n return (\n <>\n <div className={style.continueLearningWrapper}>\n <span className={style.continueLearningTitle}>{translate('all_content')}</span>\n <span className={style.continueLearningNumber}>{size(contentResult)}</span>\n </div>\n <div className={style.searchAndSortSection}>\n <div className={style.searchWrapper}>\n <SearchForm\n search={{\n placeholder: translate('search_place_holder'),\n value: searchValue,\n onChange: handleSearch\n }}\n onReset={handleSearchReset}\n />\n </div>\n <div className={style.sortSection}>\n <InputSwitch\n id={'show-completed-courses-switch'}\n type=\"switch\"\n name={translate('show_completed')}\n title={translate('show_completed')}\n aria-label={'Show completed courses aria label'}\n value={showCompleted}\n onChange={handleShowCompletedToggle}\n />\n {sortView ? (\n <div className={style.sortWrapper}>\n {translate('sort_by')}\n {sortView}\n </div>\n ) : null}\n </div>\n </div>\n <div className={style.filterWrapper}>\n {size(options) > 2 && size(contentResult)\n ? uncappedMap((filterProps, index) => {\n const {name, value, selected} = filterProps;\n\n return (\n <div key={index} className={style.filterButtonWrapper}>\n <FilterButton selected={selected} label={name} onClick={handleFilterChange} />\n {value === 'ALL' ? <div className={style.divider} /> : null}\n </div>\n );\n }, options)\n : null}\n </div>\n <div>\n {size(contentResult) ? (\n <CardsGrid\n list={contentResult}\n loading={loading}\n customStyle={{justifyContent: 'left'}}\n />\n ) : (\n <div className={style.emptySearchResultContainer}>\n <div className={style.emptySearchResultTitle}>\n {translate('empty_search_result_title', {searchValue})}\n </div>\n <div className={style.emptySearchResultDescription}>\n {translate('empty_search_result_description')}\n </div>\n <div className={style.emptySearchResultClearSearch} onClick={handleSearchReset}>\n {translate('empty_search_result_clear_search')}\n </div>\n </div>\n )}\n </div>\n </>\n );\n};\n\nAllCourses.contextTypes = {\n skin: Provider.childContextTypes.skin,\n translate: Provider.childContextTypes.translate\n};\n\nAllCourses.propTypes = {\n content: PropTypes.shape(CardsGrid.propTypes),\n filters: PropTypes.shape({\n onChange: PropTypes.func,\n options: PropTypes.arrayOf(PropTypes.shape(SelectOptionPropTypes))\n }),\n sorting: PropTypes.shape(Select.propTypes)\n};\n\nexport default AllCourses;\n"],"mappings":"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"}
|
package/locales/en/global.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"all": "All",
|
|
3
3
|
"all_courses": "All courses",
|
|
4
|
+
"all_content": "All content",
|
|
4
5
|
"alphabetical": "Alphabetical",
|
|
5
6
|
"add_learning_priority": "Add learning priority",
|
|
6
7
|
"accepted_cards": "Credit or debit card",
|
|
@@ -67,6 +68,7 @@
|
|
|
67
68
|
"media_stars_to_win": "Win {{count}} additional star in this chapter the first time you view a lesson!",
|
|
68
69
|
"modules": "Modules",
|
|
69
70
|
"modules_completed": "modules completed",
|
|
71
|
+
"modules_completed_mandatory": "mandatory modules completed",
|
|
70
72
|
"More": "More",
|
|
71
73
|
"More details": "More details",
|
|
72
74
|
"New media": "New lesson",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coorpacademy/components",
|
|
3
|
-
"version": "11.32.
|
|
3
|
+
"version": "11.32.35-alpha.11+5dab2fab6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -177,5 +177,5 @@
|
|
|
177
177
|
"last 2 versions",
|
|
178
178
|
"IE 11"
|
|
179
179
|
],
|
|
180
|
-
"gitHead": "
|
|
180
|
+
"gitHead": "5dab2fab63a77ed12849a26d3445d45d6ed38337"
|
|
181
181
|
}
|