@coorpacademy/components 11.32.24 → 11.32.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/es/atom/chip/index.d.ts +1 -0
  2. package/es/atom/chip/index.d.ts.map +1 -1
  3. package/es/atom/chip/index.js +8 -1
  4. package/es/atom/chip/index.js.map +1 -1
  5. package/es/atom/chip/style.css +10 -3
  6. package/es/molecule/playlist-detail-cover/index.d.ts +14 -0
  7. package/es/molecule/playlist-detail-cover/index.d.ts.map +1 -0
  8. package/es/molecule/playlist-detail-cover/index.js +52 -0
  9. package/es/molecule/playlist-detail-cover/index.js.map +1 -0
  10. package/es/molecule/playlist-detail-cover/style.css +17 -0
  11. package/es/molecule/skill-picker-modal/index.d.ts +3 -0
  12. package/es/molecule/skill-picker-modal/index.d.ts.map +1 -1
  13. package/es/molecule/skill-picker-modal/index.js +45 -13
  14. package/es/molecule/skill-picker-modal/index.js.map +1 -1
  15. package/es/molecule/skill-picker-modal/style.css +14 -0
  16. package/es/template/my-learning/index.d.ts.map +1 -1
  17. package/es/template/my-learning/index.js +2 -0
  18. package/es/template/my-learning/index.js.map +1 -1
  19. package/es/template/playlist-detail/index.d.ts +96 -0
  20. package/es/template/playlist-detail/index.d.ts.map +1 -0
  21. package/es/template/playlist-detail/index.js +109 -0
  22. package/es/template/playlist-detail/index.js.map +1 -0
  23. package/es/template/playlist-detail/style.css +108 -0
  24. package/es/template/skill-detail/all-courses.d.ts +1 -1
  25. package/es/template/skill-detail/all-courses.js +3 -3
  26. package/es/template/skill-detail/all-courses.js.map +1 -1
  27. package/es/template/skill-detail/index.d.ts +39 -4
  28. package/es/template/skill-detail/index.d.ts.map +1 -1
  29. package/es/template/skill-detail/index.js +2 -4
  30. package/es/template/skill-detail/index.js.map +1 -1
  31. package/es/util/external-content.d.ts +1 -0
  32. package/es/util/external-content.d.ts.map +1 -1
  33. package/es/util/external-content.js +1 -0
  34. package/es/util/external-content.js.map +1 -1
  35. package/lib/atom/chip/index.d.ts +1 -0
  36. package/lib/atom/chip/index.d.ts.map +1 -1
  37. package/lib/atom/chip/index.js +8 -1
  38. package/lib/atom/chip/index.js.map +1 -1
  39. package/lib/atom/chip/style.css +10 -3
  40. package/lib/molecule/playlist-detail-cover/index.d.ts +14 -0
  41. package/lib/molecule/playlist-detail-cover/index.d.ts.map +1 -0
  42. package/lib/molecule/playlist-detail-cover/index.js +68 -0
  43. package/lib/molecule/playlist-detail-cover/index.js.map +1 -0
  44. package/lib/molecule/playlist-detail-cover/style.css +17 -0
  45. package/lib/molecule/skill-picker-modal/index.d.ts +3 -0
  46. package/lib/molecule/skill-picker-modal/index.d.ts.map +1 -1
  47. package/lib/molecule/skill-picker-modal/index.js +47 -15
  48. package/lib/molecule/skill-picker-modal/index.js.map +1 -1
  49. package/lib/molecule/skill-picker-modal/style.css +14 -0
  50. package/lib/template/my-learning/index.d.ts.map +1 -1
  51. package/lib/template/my-learning/index.js +2 -0
  52. package/lib/template/my-learning/index.js.map +1 -1
  53. package/lib/template/playlist-detail/index.d.ts +96 -0
  54. package/lib/template/playlist-detail/index.d.ts.map +1 -0
  55. package/lib/template/playlist-detail/index.js +134 -0
  56. package/lib/template/playlist-detail/index.js.map +1 -0
  57. package/lib/template/playlist-detail/style.css +108 -0
  58. package/lib/template/skill-detail/all-courses.d.ts +1 -1
  59. package/lib/template/skill-detail/all-courses.js +3 -3
  60. package/lib/template/skill-detail/all-courses.js.map +1 -1
  61. package/lib/template/skill-detail/index.d.ts +39 -4
  62. package/lib/template/skill-detail/index.d.ts.map +1 -1
  63. package/lib/template/skill-detail/index.js +3 -2
  64. package/lib/template/skill-detail/index.js.map +1 -1
  65. package/lib/util/external-content.d.ts +1 -0
  66. package/lib/util/external-content.d.ts.map +1 -1
  67. package/lib/util/external-content.js +3 -1
  68. package/lib/util/external-content.js.map +1 -1
  69. package/locales/bs/global.json +2 -0
  70. package/locales/cs/global.json +2 -0
  71. package/locales/de/global.json +2 -0
  72. package/locales/en/global.json +2 -0
  73. package/locales/es/global.json +2 -0
  74. package/locales/et/global.json +2 -0
  75. package/locales/fi/global.json +2 -0
  76. package/locales/fr/global.json +2 -0
  77. package/locales/hr/global.json +2 -0
  78. package/locales/hu/global.json +2 -0
  79. package/locales/hy/global.json +2 -0
  80. package/locales/it/global.json +2 -0
  81. package/locales/ja/global.json +2 -0
  82. package/locales/ko/global.json +2 -0
  83. package/locales/nl/global.json +2 -0
  84. package/locales/pl/global.json +2 -0
  85. package/locales/pt/global.json +2 -0
  86. package/locales/ro/global.json +2 -0
  87. package/locales/ru/global.json +2 -0
  88. package/locales/sk/global.json +2 -0
  89. package/locales/sl/global.json +2 -0
  90. package/locales/sv/global.json +2 -0
  91. package/locales/tl/global.json +2 -0
  92. package/locales/tr/global.json +2 -0
  93. package/locales/uk/global.json +2 -0
  94. package/locales/vi/global.json +2 -0
  95. package/locales/zh/global.json +2 -0
  96. package/locales/zh_TW/global.json +2 -0
  97. package/package.json +2 -2
@@ -27,6 +27,7 @@ declare namespace Chip {
27
27
  }
28
28
  namespace propTypes {
29
29
  const text: PropTypes.Requireable<string>;
30
+ const subText: PropTypes.Requireable<string>;
30
31
  const selected: PropTypes.Requireable<boolean>;
31
32
  const customIcon: PropTypes.Requireable<string>;
32
33
  const backgroundColor: PropTypes.Requireable<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atom/chip/index.js"],"names":[],"mappings":"AAeO,qGAG0E;;AAGjF,6DAsDC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atom/chip/index.js"],"names":[],"mappings":"AAeO,qGAG0E;;AAGjF,6DA4DC"}
@@ -19,6 +19,7 @@ export const calculateHoveredSelectedBgColor = (selectedBgColor, luminosityDelta
19
19
  const Chip = (props, context) => {
20
20
  const {
21
21
  text,
22
+ subText,
22
23
  selected = false,
23
24
  customIcon,
24
25
  onClick,
@@ -60,7 +61,12 @@ const Chip = (props, context) => {
60
61
  style: selected ? {
61
62
  color: 'white'
62
63
  } : {}
63
- }, text)), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
64
+ }, text), subText ? /*#__PURE__*/React.createElement("span", {
65
+ className: style.subText,
66
+ style: selected ? {
67
+ color: 'white'
68
+ } : {}
69
+ }, subText) : null), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
64
70
  className: selected ? style.selectedIconWrapper : style.unselectedIconWrapper,
65
71
  icon: customIcon ? `fa-${customIcon}` : defaultIcon,
66
72
  fontSize: ICON_SIZE
@@ -72,6 +78,7 @@ Chip.contextTypes = {
72
78
  };
73
79
  Chip.propTypes = process.env.NODE_ENV !== "production" ? {
74
80
  text: PropTypes.string,
81
+ subText: PropTypes.string,
75
82
  selected: PropTypes.bool,
76
83
  customIcon: PropTypes.string,
77
84
  backgroundColor: PropTypes.string,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useMemo","useState","useCallback","PropTypes","classnames","get","convert","FontAwesomeIcon","Provider","COLORS","style","LUMINOSITY_DELTA","cm_primary_blue","DEFAULT_BACKGROUND_COLOR","ICON_SIZE","calculateHoveredSelectedBgColor","selectedBgColor","luminosityDelta","Chip","props","context","text","selected","customIcon","onClick","backgroundColor","skin","skinColor","hoveredSelectedBgColor","isHovered","setIsHovered","handleClick","handleMouseEnter","handleMouseLeave","hoverStyle","defaultIcon","container","unselected","textZone","color","selectedIconWrapper","unselectedIconWrapper","contextTypes","childContextTypes","propTypes","string","bool","func"],"sources":["../../../src/atom/chip/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport get from 'lodash/fp/get';\nimport {convert} from 'css-color-function';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport Provider from '../provider';\nimport {COLORS} from '../../variables/colors';\nimport style from './style.css';\n\nconst LUMINOSITY_DELTA = 0.08;\nconst {cm_primary_blue: DEFAULT_BACKGROUND_COLOR} = COLORS;\nconst ICON_SIZE = '12px';\n\nexport const calculateHoveredSelectedBgColor = (\n selectedBgColor,\n luminosityDelta = LUMINOSITY_DELTA\n) => convert(`hsl(from ${selectedBgColor} h s calc(l*(1 - ${luminosityDelta})))`);\n// note: luminosity decrease is relative to the selected color\n\nconst Chip = (props, context) => {\n const {\n text,\n selected = false,\n customIcon,\n onClick,\n backgroundColor = DEFAULT_BACKGROUND_COLOR\n } = props;\n const {skin} = context;\n const skinColor = get('common.primary', skin);\n const selectedBgColor = backgroundColor === 'skin' && skinColor ? skinColor : backgroundColor;\n const hoveredSelectedBgColor = calculateHoveredSelectedBgColor(selectedBgColor);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleClick = useMemo(() => onClick, [onClick]);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const hoverStyle = isHovered ? {backgroundColor: hoveredSelectedBgColor} : {};\n\n const defaultIcon = selected ? 'fa-check' : 'fa-plus';\n\n return (\n <div\n className={classnames(style.container, !selected && style.unselected)}\n style={{\n ...(selected && selectedBgColor ? {backgroundColor: selectedBgColor} : {}),\n ...(selected && hoverStyle)\n }}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label={text}\n data-name={text}\n >\n <div className={style.textZone} title={text}>\n <span className={style.text} style={selected ? {color: 'white'} : {}}>\n {text}\n </span>\n </div>\n <FontAwesomeIcon\n className={selected ? style.selectedIconWrapper : style.unselectedIconWrapper}\n icon={customIcon ? `fa-${customIcon}` : defaultIcon}\n fontSize={ICON_SIZE}\n />\n </div>\n );\n};\n\nChip.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nChip.propTypes = {\n text: PropTypes.string,\n selected: PropTypes.bool,\n customIcon: PropTypes.string,\n backgroundColor: PropTypes.string,\n onClick: PropTypes.func\n};\n\nexport default Chip;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["React","useMemo","useState","useCallback","PropTypes","classnames","get","convert","FontAwesomeIcon","Provider","COLORS","style","LUMINOSITY_DELTA","cm_primary_blue","DEFAULT_BACKGROUND_COLOR","ICON_SIZE","calculateHoveredSelectedBgColor","selectedBgColor","luminosityDelta","Chip","props","context","text","subText","selected","customIcon","onClick","backgroundColor","skin","skinColor","hoveredSelectedBgColor","isHovered","setIsHovered","handleClick","handleMouseEnter","handleMouseLeave","hoverStyle","defaultIcon","container","unselected","textZone","color","selectedIconWrapper","unselectedIconWrapper","contextTypes","childContextTypes","propTypes","string","bool","func"],"sources":["../../../src/atom/chip/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport get from 'lodash/fp/get';\nimport {convert} from 'css-color-function';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport Provider from '../provider';\nimport {COLORS} from '../../variables/colors';\nimport style from './style.css';\n\nconst LUMINOSITY_DELTA = 0.08;\nconst {cm_primary_blue: DEFAULT_BACKGROUND_COLOR} = COLORS;\nconst ICON_SIZE = '12px';\n\nexport const calculateHoveredSelectedBgColor = (\n selectedBgColor,\n luminosityDelta = LUMINOSITY_DELTA\n) => convert(`hsl(from ${selectedBgColor} h s calc(l*(1 - ${luminosityDelta})))`);\n// note: luminosity decrease is relative to the selected color\n\nconst Chip = (props, context) => {\n const {\n text,\n subText,\n selected = false,\n customIcon,\n onClick,\n backgroundColor = DEFAULT_BACKGROUND_COLOR\n } = props;\n const {skin} = context;\n const skinColor = get('common.primary', skin);\n const selectedBgColor = backgroundColor === 'skin' && skinColor ? skinColor : backgroundColor;\n const hoveredSelectedBgColor = calculateHoveredSelectedBgColor(selectedBgColor);\n\n const [isHovered, setIsHovered] = useState(false);\n\n const handleClick = useMemo(() => onClick, [onClick]);\n\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n }, []);\n\n const hoverStyle = isHovered ? {backgroundColor: hoveredSelectedBgColor} : {};\n\n const defaultIcon = selected ? 'fa-check' : 'fa-plus';\n\n return (\n <div\n className={classnames(style.container, !selected && style.unselected)}\n style={{\n ...(selected && selectedBgColor ? {backgroundColor: selectedBgColor} : {}),\n ...(selected && hoverStyle)\n }}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n aria-label={text}\n data-name={text}\n >\n <div className={style.textZone} title={text}>\n <span className={style.text} style={selected ? {color: 'white'} : {}}>\n {text}\n </span>\n {subText ? (\n <span className={style.subText} style={selected ? {color: 'white'} : {}}>\n {subText}\n </span>\n ) : null}\n </div>\n <FontAwesomeIcon\n className={selected ? style.selectedIconWrapper : style.unselectedIconWrapper}\n icon={customIcon ? `fa-${customIcon}` : defaultIcon}\n fontSize={ICON_SIZE}\n />\n </div>\n );\n};\n\nChip.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nChip.propTypes = {\n text: PropTypes.string,\n subText: PropTypes.string,\n selected: PropTypes.bool,\n customIcon: PropTypes.string,\n backgroundColor: PropTypes.string,\n onClick: PropTypes.func\n};\n\nexport default Chip;\n"],"mappings":"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"}
@@ -8,9 +8,8 @@
8
8
 
9
9
  .container {
10
10
  width: fit-content;
11
- height: 44px;
12
11
  border-radius: 10px;
13
- padding: 10px 16px;
12
+ padding: 12px 16px;
14
13
  position: relative;
15
14
  display: flex;
16
15
  align-items: center;
@@ -38,17 +37,25 @@
38
37
  width: calc(100% - 32px);
39
38
  }
40
39
 
41
- .text {
40
+ .text,
41
+ .subText {
42
42
  font-family: 'Gilroy';
43
43
  font-style: normal;
44
44
  font-weight: 600;
45
45
  font-size: 14px;
46
+ line-height: 20px;
46
47
  text-overflow: ellipsis;
47
48
  white-space: nowrap;
48
49
  overflow: hidden;
49
50
  display: block;
50
51
  }
51
52
 
53
+ .subText {
54
+ font-weight: 500;
55
+ font-size: 10px;
56
+ line-height: 12px;
57
+ }
58
+
52
59
  .icon{
53
60
  position: absolute;
54
61
  right: 18px;
@@ -0,0 +1,14 @@
1
+ export default PlaylistDetailCover;
2
+ declare function PlaylistDetailCover({ images }: {
3
+ images: any;
4
+ }): JSX.Element;
5
+ declare namespace PlaylistDetailCover {
6
+ namespace propTypes {
7
+ const images: PropTypes.Validator<(PropTypes.InferProps<{
8
+ type: PropTypes.Requireable<string>;
9
+ image: PropTypes.Requireable<string>;
10
+ }> | null | undefined)[]>;
11
+ }
12
+ }
13
+ import PropTypes from "prop-types";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/playlist-detail-cover/index.js"],"names":[],"mappings":";AAQA;;gBAoCC"}
@@ -0,0 +1,52 @@
1
+ import React, { useMemo, useCallback } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { EXTERNAL_COURSE_TYPES } from '../../util/external-content';
4
+ import style from './style.css';
5
+ const FALLBACK_PATH = 'https://s3.eu-west-1.amazonaws.com/static.coorpacademy.com/assets/images/cover-fallback-external-$TYPE.png';
6
+
7
+ const PlaylistDetailCover = ({
8
+ images
9
+ }) => {
10
+ const [firstColumnImages, secondColumnImages] = useMemo(() => {
11
+ const imagesClone = [...images];
12
+ return [imagesClone.splice(0, imagesClone.length / 2), imagesClone];
13
+ }, [images]);
14
+ const buildImageStyle = useCallback(({
15
+ type,
16
+ image
17
+ }) => {
18
+ const imageUrl = image || FALLBACK_PATH.replace('$TYPE', type);
19
+ return {
20
+ backgroundImage: `url(${imageUrl})`,
21
+ backgroundSize: 'cover',
22
+ backgroundPosition: 'center'
23
+ };
24
+ });
25
+ return /*#__PURE__*/React.createElement("div", {
26
+ className: style.container
27
+ }, images.length === 1 ? /*#__PURE__*/React.createElement("img", {
28
+ className: style.image,
29
+ style: buildImageStyle(images[0])
30
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
31
+ className: style.imagesWrapper
32
+ }, firstColumnImages.map((image, index) => /*#__PURE__*/React.createElement("img", {
33
+ key: index,
34
+ className: style.image,
35
+ style: buildImageStyle(image)
36
+ }))), /*#__PURE__*/React.createElement("div", {
37
+ className: style.imagesWrapper
38
+ }, secondColumnImages.map((image, index) => /*#__PURE__*/React.createElement("img", {
39
+ key: index,
40
+ className: style.image,
41
+ style: buildImageStyle(image)
42
+ })))));
43
+ };
44
+
45
+ PlaylistDetailCover.propTypes = process.env.NODE_ENV !== "production" ? {
46
+ images: PropTypes.arrayOf(PropTypes.shape({
47
+ type: PropTypes.oneOf(EXTERNAL_COURSE_TYPES),
48
+ image: PropTypes.string
49
+ })).isRequired
50
+ } : {};
51
+ export default PlaylistDetailCover;
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","useMemo","useCallback","PropTypes","EXTERNAL_COURSE_TYPES","style","FALLBACK_PATH","PlaylistDetailCover","images","firstColumnImages","secondColumnImages","imagesClone","splice","length","buildImageStyle","type","image","imageUrl","replace","backgroundImage","backgroundSize","backgroundPosition","container","imagesWrapper","map","index","propTypes","arrayOf","shape","oneOf","string","isRequired"],"sources":["../../../src/molecule/playlist-detail-cover/index.js"],"sourcesContent":["import React, {useMemo, useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport {EXTERNAL_COURSE_TYPES} from '../../util/external-content';\nimport style from './style.css';\n\nconst FALLBACK_PATH =\n 'https://s3.eu-west-1.amazonaws.com/static.coorpacademy.com/assets/images/cover-fallback-external-$TYPE.png';\n\nconst PlaylistDetailCover = ({images}) => {\n const [firstColumnImages, secondColumnImages] = useMemo(() => {\n const imagesClone = [...images];\n return [imagesClone.splice(0, imagesClone.length / 2), imagesClone];\n }, [images]);\n\n const buildImageStyle = useCallback(({type, image}) => {\n const imageUrl = image || FALLBACK_PATH.replace('$TYPE', type);\n\n return {\n backgroundImage: `url(${imageUrl})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center'\n };\n });\n\n return (\n <div className={style.container}>\n {images.length === 1 ? (\n <img className={style.image} style={buildImageStyle(images[0])} />\n ) : (\n <>\n <div className={style.imagesWrapper}>\n {firstColumnImages.map((image, index) => (\n <img key={index} className={style.image} style={buildImageStyle(image)} />\n ))}\n </div>\n <div className={style.imagesWrapper}>\n {secondColumnImages.map((image, index) => (\n <img key={index} className={style.image} style={buildImageStyle(image)} />\n ))}\n </div>\n </>\n )}\n </div>\n );\n};\n\nPlaylistDetailCover.propTypes = {\n images: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.oneOf(EXTERNAL_COURSE_TYPES),\n image: PropTypes.string\n })\n ).isRequired\n};\n\nexport default PlaylistDetailCover;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAeC,OAAf,EAAwBC,WAAxB,QAA0C,OAA1C;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAAQC,qBAAR,QAAoC,6BAApC;AACA,OAAOC,KAAP,MAAkB,aAAlB;AAEA,MAAMC,aAAa,GACjB,4GADF;;AAGA,MAAMC,mBAAmB,GAAG,CAAC;EAACC;AAAD,CAAD,KAAc;EACxC,MAAM,CAACC,iBAAD,EAAoBC,kBAApB,IAA0CT,OAAO,CAAC,MAAM;IAC5D,MAAMU,WAAW,GAAG,CAAC,GAAGH,MAAJ,CAApB;IACA,OAAO,CAACG,WAAW,CAACC,MAAZ,CAAmB,CAAnB,EAAsBD,WAAW,CAACE,MAAZ,GAAqB,CAA3C,CAAD,EAAgDF,WAAhD,CAAP;EACD,CAHsD,EAGpD,CAACH,MAAD,CAHoD,CAAvD;EAKA,MAAMM,eAAe,GAAGZ,WAAW,CAAC,CAAC;IAACa,IAAD;IAAOC;EAAP,CAAD,KAAmB;IACrD,MAAMC,QAAQ,GAAGD,KAAK,IAAIV,aAAa,CAACY,OAAd,CAAsB,OAAtB,EAA+BH,IAA/B,CAA1B;IAEA,OAAO;MACLI,eAAe,EAAG,OAAMF,QAAS,GAD5B;MAELG,cAAc,EAAE,OAFX;MAGLC,kBAAkB,EAAE;IAHf,CAAP;EAKD,CARkC,CAAnC;EAUA,oBACE;IAAK,SAAS,EAAEhB,KAAK,CAACiB;EAAtB,GACGd,MAAM,CAACK,MAAP,KAAkB,CAAlB,gBACC;IAAK,SAAS,EAAER,KAAK,CAACW,KAAtB;IAA6B,KAAK,EAAEF,eAAe,CAACN,MAAM,CAAC,CAAD,CAAP;EAAnD,EADD,gBAGC,uDACE;IAAK,SAAS,EAAEH,KAAK,CAACkB;EAAtB,GACGd,iBAAiB,CAACe,GAAlB,CAAsB,CAACR,KAAD,EAAQS,KAAR,kBACrB;IAAK,GAAG,EAAEA,KAAV;IAAiB,SAAS,EAAEpB,KAAK,CAACW,KAAlC;IAAyC,KAAK,EAAEF,eAAe,CAACE,KAAD;EAA/D,EADD,CADH,CADF,eAME;IAAK,SAAS,EAAEX,KAAK,CAACkB;EAAtB,GACGb,kBAAkB,CAACc,GAAnB,CAAuB,CAACR,KAAD,EAAQS,KAAR,kBACtB;IAAK,GAAG,EAAEA,KAAV;IAAiB,SAAS,EAAEpB,KAAK,CAACW,KAAlC;IAAyC,KAAK,EAAEF,eAAe,CAACE,KAAD;EAA/D,EADD,CADH,CANF,CAJJ,CADF;AAoBD,CApCD;;AAsCAT,mBAAmB,CAACmB,SAApB,2CAAgC;EAC9BlB,MAAM,EAAEL,SAAS,CAACwB,OAAV,CACNxB,SAAS,CAACyB,KAAV,CAAgB;IACdb,IAAI,EAAEZ,SAAS,CAAC0B,KAAV,CAAgBzB,qBAAhB,CADQ;IAEdY,KAAK,EAAEb,SAAS,CAAC2B;EAFH,CAAhB,CADM,EAKNC;AAN4B,CAAhC;AASA,eAAexB,mBAAf"}
@@ -0,0 +1,17 @@
1
+ .container {
2
+ width: 100%;
3
+ height: 100%;
4
+ display: flex;
5
+ border-radius: 12px;
6
+ overflow: hidden;
7
+ }
8
+
9
+ .imagesWrapper {
10
+ width: 100%;
11
+ display: flex;
12
+ flex-direction: column;
13
+ }
14
+
15
+ .image {
16
+ flex: 1;
17
+ }
@@ -10,6 +10,9 @@ declare namespace SkillPickerModal {
10
10
  const skillsLocales: PropTypes.Requireable<{
11
11
  [x: string]: string | null | undefined;
12
12
  }>;
13
+ const skillsScore: PropTypes.Requireable<{
14
+ [x: string]: number | null | undefined;
15
+ }>;
13
16
  const isOpen: PropTypes.Requireable<boolean>;
14
17
  const isLoading: PropTypes.Requireable<boolean>;
15
18
  const minSelectedSkills: PropTypes.Requireable<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/skill-picker-modal/index.js"],"names":[],"mappings":";AASA,gFAgIC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/skill-picker-modal/index.js"],"names":[],"mappings":";AAUA,gFAoKC"}
@@ -1,9 +1,15 @@
1
- import React, { useMemo, useState, useCallback } from 'react';
1
+ import _sortBy from "lodash/fp/sortBy";
2
+ import _some from "lodash/fp/some";
3
+ import _filter from "lodash/fp/filter";
4
+
5
+ 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); }
6
+
7
+ import React, { useMemo, useState, useCallback, useEffect } from 'react';
2
8
  import PropTypes from 'prop-types';
3
- import filter from 'lodash/fp/filter';
4
9
  import BaseModal from '../base-modal';
5
10
  import Chip from '../../atom/chip';
6
11
  import Loader from '../../atom/loader';
12
+ import Select from '../../atom/select';
7
13
  import Provider from '../../atom/provider';
8
14
  import style from './style.css';
9
15
 
@@ -12,6 +18,7 @@ const SkillPickerModal = (props, context) => {
12
18
  skills,
13
19
  selectedSkills,
14
20
  skillsLocales,
21
+ skillsScore,
15
22
  isOpen,
16
23
  isLoading,
17
24
  maxSelectedSkills = 6,
@@ -23,6 +30,8 @@ const SkillPickerModal = (props, context) => {
23
30
  const {
24
31
  translate
25
32
  } = context;
33
+ const [sortedSkills, setSortedSkills] = useState(_sortBy(skill => skillsLocales[skill], skills));
34
+ const [currentSort, setCurrentSort] = useState('alphabetical');
26
35
  const [selectedSkillList, setSelectedSkillList] = useState(selectedSkills);
27
36
  const handleCancel = useCallback(() => {
28
37
  setSelectedSkillList(selectedSkills);
@@ -32,15 +41,19 @@ const SkillPickerModal = (props, context) => {
32
41
  setSelectedSkillList(selectedSkills);
33
42
  onClose();
34
43
  }, [setSelectedSkillList, selectedSkills, onClose]);
44
+
45
+ const skillProgressAvailable = _some(skill => skillsScore[skill] > 0, skills);
46
+
35
47
  const skillList = useMemo(() => {
36
- return skills.map(skill => {
48
+ return sortedSkills.map(skill => {
37
49
  return {
38
50
  skillTitle: skillsLocales[skill],
39
51
  skillRef: skill,
40
- focus: selectedSkillList.includes(skill)
52
+ focus: selectedSkillList.includes(skill),
53
+ score: skillsScore[skill]
41
54
  };
42
55
  });
43
- }, [skills, selectedSkillList, skillsLocales]);
56
+ }, [sortedSkills, selectedSkillList, skillsLocales, skillsScore]);
44
57
  const isError = useMemo(() => selectedSkillList.length > maxSelectedSkills || selectedSkillList.length < minSelectedSkills, [selectedSkillList, maxSelectedSkills, minSelectedSkills]);
45
58
  const footer = useMemo(() => {
46
59
  const footerDescription = selectedSkillList.length > maxSelectedSkills ? translate('skill_focus_footer_error_description', {
@@ -64,6 +77,19 @@ const SkillPickerModal = (props, context) => {
64
77
  }
65
78
  };
66
79
  }, [isError, handleCancel, onConfirm, translate, selectedSkillList, isLoading, maxSelectedSkills, minSelectedSkills]);
80
+ const sorting = useMemo(() => ({
81
+ theme: 'skillDetail',
82
+ options: ['alphabetical', 'progress'].map(value => ({
83
+ name: value === 'progress' ? translate('progress') : translate('alphabetical'),
84
+ value,
85
+ selected: currentSort === value
86
+ })),
87
+ onChange: value => setCurrentSort(value)
88
+ }), [currentSort, translate]);
89
+ useEffect(() => {
90
+ // eslint-disable-next-line lodash-fp/no-extraneous-function-wrapping
91
+ setSortedSkills(prev => _sortBy(skill => currentSort === 'progress' ? -skillsScore[skill] : skillsLocales[skill], prev));
92
+ }, [currentSort, skillsScore, skillsLocales, setSortedSkills]);
67
93
  if (!isLoading && !skills || !isOpen) return null;
68
94
  return /*#__PURE__*/React.createElement(BaseModal, {
69
95
  title: translate('skill_focus'),
@@ -83,10 +109,12 @@ const SkillPickerModal = (props, context) => {
83
109
  className: style.loader,
84
110
  theme: "coorpmanager"
85
111
  })) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
86
- style: {
87
- marginBottom: '16px'
88
- }
89
- }, `${selectedSkillList.length} ${translate('selected')}`), /*#__PURE__*/React.createElement("div", {
112
+ className: style.ctaWrapper
113
+ }, /*#__PURE__*/React.createElement("div", null, `${selectedSkillList.length} ${translate('selected')}`), skillProgressAvailable ? /*#__PURE__*/React.createElement("div", {
114
+ className: style.sortWrapper
115
+ }, translate('sort_by'), /*#__PURE__*/React.createElement(Select, _extends({}, sorting, {
116
+ "aria-label": "All courses sort"
117
+ }))) : null), /*#__PURE__*/React.createElement("div", {
90
118
  style: {
91
119
  display: 'flex',
92
120
  gap: '16px',
@@ -96,21 +124,24 @@ const SkillPickerModal = (props, context) => {
96
124
  const {
97
125
  skillTitle,
98
126
  skillRef,
99
- focus
127
+ focus,
128
+ score
100
129
  } = skill;
101
130
 
102
131
  function handleChipClick() {
103
- const newSelectedSkillList = focus ? filter(selectedSkill => selectedSkill !== skillRef, selectedSkillList) : [...selectedSkillList, skill.skillRef];
132
+ const newSelectedSkillList = focus ? _filter(selectedSkill => selectedSkill !== skillRef, selectedSkillList) : [...selectedSkillList, skill.skillRef];
104
133
  setSelectedSkillList(newSelectedSkillList);
105
134
  }
106
135
 
107
- return /*#__PURE__*/React.createElement(Chip, {
136
+ return /*#__PURE__*/React.createElement(Chip, _extends({}, skillProgressAvailable ? {
137
+ subText: `${score.toFixed(1)}%`
138
+ } : {}, {
108
139
  text: skillTitle,
109
140
  selected: focus,
110
141
  onClick: handleChipClick,
111
142
  key: index,
112
143
  backgroundColor: "skin"
113
- });
144
+ }));
114
145
  })))));
115
146
  };
116
147
 
@@ -121,6 +152,7 @@ SkillPickerModal.propTypes = process.env.NODE_ENV !== "production" ? {
121
152
  skills: PropTypes.arrayOf(PropTypes.string),
122
153
  selectedSkills: PropTypes.arrayOf(PropTypes.string),
123
154
  skillsLocales: PropTypes.objectOf(PropTypes.string),
155
+ skillsScore: PropTypes.objectOf(PropTypes.number),
124
156
  isOpen: PropTypes.bool,
125
157
  isLoading: PropTypes.bool,
126
158
  minSelectedSkills: PropTypes.number,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useMemo","useState","useCallback","PropTypes","filter","BaseModal","Chip","Loader","Provider","style","SkillPickerModal","props","context","skills","selectedSkills","skillsLocales","isOpen","isLoading","maxSelectedSkills","minSelectedSkills","onCancel","onConfirm","onClose","translate","selectedSkillList","setSelectedSkillList","handleCancel","handleClose","skillList","map","skill","skillTitle","skillRef","focus","includes","isError","length","footer","footerDescription","skillNumber","text","cancelButton","label","disabled","confirmButton","iconName","name","backgroundColor","skillPickerContainer","loaderContainer","loader","marginBottom","display","gap","flexWrap","index","handleChipClick","newSelectedSkillList","selectedSkill","contextTypes","childContextTypes","propTypes","arrayOf","string","objectOf","bool","number","func"],"sources":["../../../src/molecule/skill-picker-modal/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback} from 'react';\nimport PropTypes from 'prop-types';\nimport filter from 'lodash/fp/filter';\nimport BaseModal from '../base-modal';\nimport Chip from '../../atom/chip';\nimport Loader from '../../atom/loader';\nimport Provider from '../../atom/provider';\nimport style from './style.css';\n\nconst SkillPickerModal = (props, context) => {\n const {\n skills,\n selectedSkills,\n skillsLocales,\n isOpen,\n isLoading,\n maxSelectedSkills = 6,\n minSelectedSkills = 3,\n onCancel,\n onConfirm,\n onClose\n } = props;\n const {translate} = context;\n\n const [selectedSkillList, setSelectedSkillList] = useState(selectedSkills);\n\n const handleCancel = useCallback(() => {\n setSelectedSkillList(selectedSkills);\n onCancel();\n }, [setSelectedSkillList, selectedSkills, onCancel]);\n\n const handleClose = useCallback(() => {\n setSelectedSkillList(selectedSkills);\n onClose();\n }, [setSelectedSkillList, selectedSkills, onClose]);\n\n const skillList = useMemo(() => {\n return skills.map(skill => {\n return {\n skillTitle: skillsLocales[skill],\n skillRef: skill,\n focus: selectedSkillList.includes(skill)\n };\n });\n }, [skills, selectedSkillList, skillsLocales]);\n\n const isError = useMemo(\n () =>\n selectedSkillList.length > maxSelectedSkills || selectedSkillList.length < minSelectedSkills,\n [selectedSkillList, maxSelectedSkills, minSelectedSkills]\n );\n\n const footer = useMemo(() => {\n const footerDescription =\n selectedSkillList.length > maxSelectedSkills\n ? translate('skill_focus_footer_error_description', {\n skillNumber: selectedSkillList.length - maxSelectedSkills\n })\n : translate('skill_focus_footer_description', {\n skillNumber: minSelectedSkills - selectedSkillList.length\n });\n return {\n text: isLoading || !isError ? '' : footerDescription,\n isError,\n cancelButton: {\n onCancel: handleCancel,\n label: translate('cancel'),\n disabled: isLoading || isError\n },\n confirmButton: {\n onConfirm: () => onConfirm(selectedSkillList),\n label: translate('confirm'),\n iconName: 'circle-check',\n disabled: isLoading || isError\n }\n };\n }, [\n isError,\n handleCancel,\n onConfirm,\n translate,\n selectedSkillList,\n isLoading,\n maxSelectedSkills,\n minSelectedSkills\n ]);\n\n if ((!isLoading && !skills) || !isOpen) return null;\n\n return (\n <BaseModal\n title={translate('skill_focus')}\n description={translate('skill_focus_description')}\n isOpen={isOpen}\n onClose={handleClose}\n footer={footer}\n headerIcon={{\n name: 'bullseye-arrow',\n backgroundColor: '#DDD1FF'\n }}\n >\n <div className={style.skillPickerContainer}>\n {isLoading ? (\n <div className={style.loaderContainer}>\n <Loader className={style.loader} theme=\"coorpmanager\" />\n </div>\n ) : (\n <>\n <div style={{marginBottom: '16px'}}>\n {`${selectedSkillList.length} ${translate('selected')}`}\n </div>\n <div style={{display: 'flex', gap: '16px', flexWrap: 'wrap'}}>\n {skillList.map((skill, index) => {\n const {skillTitle, skillRef, focus} = skill;\n function handleChipClick() {\n const newSelectedSkillList = focus\n ? filter(selectedSkill => selectedSkill !== skillRef, selectedSkillList)\n : [...selectedSkillList, skill.skillRef];\n setSelectedSkillList(newSelectedSkillList);\n }\n\n return (\n <Chip\n text={skillTitle}\n selected={focus}\n onClick={handleChipClick}\n key={index}\n backgroundColor=\"skin\"\n />\n );\n })}\n </div>\n </>\n )}\n </div>\n </BaseModal>\n );\n};\n\nSkillPickerModal.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nSkillPickerModal.propTypes = {\n skills: PropTypes.arrayOf(PropTypes.string),\n selectedSkills: PropTypes.arrayOf(PropTypes.string),\n skillsLocales: PropTypes.objectOf(PropTypes.string),\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n minSelectedSkills: PropTypes.number,\n maxSelectedSkills: PropTypes.number,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport default SkillPickerModal;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["React","useMemo","useState","useCallback","useEffect","PropTypes","BaseModal","Chip","Loader","Select","Provider","style","SkillPickerModal","props","context","skills","selectedSkills","skillsLocales","skillsScore","isOpen","isLoading","maxSelectedSkills","minSelectedSkills","onCancel","onConfirm","onClose","translate","sortedSkills","setSortedSkills","skill","currentSort","setCurrentSort","selectedSkillList","setSelectedSkillList","handleCancel","handleClose","skillProgressAvailable","skillList","map","skillTitle","skillRef","focus","includes","score","isError","length","footer","footerDescription","skillNumber","text","cancelButton","label","disabled","confirmButton","iconName","sorting","theme","options","value","name","selected","onChange","prev","backgroundColor","skillPickerContainer","loaderContainer","loader","ctaWrapper","sortWrapper","display","gap","flexWrap","index","handleChipClick","newSelectedSkillList","selectedSkill","subText","toFixed","contextTypes","childContextTypes","propTypes","arrayOf","string","objectOf","number","bool","func"],"sources":["../../../src/molecule/skill-picker-modal/index.js"],"sourcesContent":["import React, {useMemo, useState, useCallback, useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {filter, some, sortBy} from 'lodash/fp';\nimport BaseModal from '../base-modal';\nimport Chip from '../../atom/chip';\nimport Loader from '../../atom/loader';\nimport Select from '../../atom/select';\nimport Provider from '../../atom/provider';\nimport style from './style.css';\n\nconst SkillPickerModal = (props, context) => {\n const {\n skills,\n selectedSkills,\n skillsLocales,\n skillsScore,\n isOpen,\n isLoading,\n maxSelectedSkills = 6,\n minSelectedSkills = 3,\n onCancel,\n onConfirm,\n onClose\n } = props;\n const {translate} = context;\n\n const [sortedSkills, setSortedSkills] = useState(sortBy(skill => skillsLocales[skill], skills));\n const [currentSort, setCurrentSort] = useState('alphabetical');\n const [selectedSkillList, setSelectedSkillList] = useState(selectedSkills);\n\n const handleCancel = useCallback(() => {\n setSelectedSkillList(selectedSkills);\n onCancel();\n }, [setSelectedSkillList, selectedSkills, onCancel]);\n\n const handleClose = useCallback(() => {\n setSelectedSkillList(selectedSkills);\n onClose();\n }, [setSelectedSkillList, selectedSkills, onClose]);\n\n const skillProgressAvailable = some(skill => skillsScore[skill] > 0, skills);\n\n const skillList = useMemo(() => {\n return sortedSkills.map(skill => {\n return {\n skillTitle: skillsLocales[skill],\n skillRef: skill,\n focus: selectedSkillList.includes(skill),\n score: skillsScore[skill]\n };\n });\n }, [sortedSkills, selectedSkillList, skillsLocales, skillsScore]);\n\n const isError = useMemo(\n () =>\n selectedSkillList.length > maxSelectedSkills || selectedSkillList.length < minSelectedSkills,\n [selectedSkillList, maxSelectedSkills, minSelectedSkills]\n );\n\n const footer = useMemo(() => {\n const footerDescription =\n selectedSkillList.length > maxSelectedSkills\n ? translate('skill_focus_footer_error_description', {\n skillNumber: selectedSkillList.length - maxSelectedSkills\n })\n : translate('skill_focus_footer_description', {\n skillNumber: minSelectedSkills - selectedSkillList.length\n });\n return {\n text: isLoading || !isError ? '' : footerDescription,\n isError,\n cancelButton: {\n onCancel: handleCancel,\n label: translate('cancel'),\n disabled: isLoading || isError\n },\n confirmButton: {\n onConfirm: () => onConfirm(selectedSkillList),\n label: translate('confirm'),\n iconName: 'circle-check',\n disabled: isLoading || isError\n }\n };\n }, [\n isError,\n handleCancel,\n onConfirm,\n translate,\n selectedSkillList,\n isLoading,\n maxSelectedSkills,\n minSelectedSkills\n ]);\n\n const sorting = useMemo(\n () => ({\n theme: 'skillDetail',\n options: ['alphabetical', 'progress'].map(value => ({\n name: value === 'progress' ? translate('progress') : translate('alphabetical'),\n value,\n selected: currentSort === value\n })),\n onChange: value => setCurrentSort(value)\n }),\n [currentSort, translate]\n );\n\n useEffect(() => {\n // eslint-disable-next-line lodash-fp/no-extraneous-function-wrapping\n setSortedSkills(prev =>\n sortBy(\n skill => (currentSort === 'progress' ? -skillsScore[skill] : skillsLocales[skill]),\n prev\n )\n );\n }, [currentSort, skillsScore, skillsLocales, setSortedSkills]);\n\n if ((!isLoading && !skills) || !isOpen) return null;\n\n return (\n <BaseModal\n title={translate('skill_focus')}\n description={translate('skill_focus_description')}\n isOpen={isOpen}\n onClose={handleClose}\n footer={footer}\n headerIcon={{\n name: 'bullseye-arrow',\n backgroundColor: '#DDD1FF'\n }}\n >\n <div className={style.skillPickerContainer}>\n {isLoading ? (\n <div className={style.loaderContainer}>\n <Loader className={style.loader} theme=\"coorpmanager\" />\n </div>\n ) : (\n <>\n <div className={style.ctaWrapper}>\n <div>{`${selectedSkillList.length} ${translate('selected')}`}</div>\n {skillProgressAvailable ? (\n <div className={style.sortWrapper}>\n {translate('sort_by')}\n <Select {...sorting} aria-label=\"All courses sort\" />\n </div>\n ) : null}\n </div>\n <div style={{display: 'flex', gap: '16px', flexWrap: 'wrap'}}>\n {skillList.map((skill, index) => {\n const {skillTitle, skillRef, focus, score} = skill;\n function handleChipClick() {\n const newSelectedSkillList = focus\n ? filter(selectedSkill => selectedSkill !== skillRef, selectedSkillList)\n : [...selectedSkillList, skill.skillRef];\n setSelectedSkillList(newSelectedSkillList);\n }\n\n return (\n <Chip\n {...(skillProgressAvailable ? {subText: `${score.toFixed(1)}%`} : {})}\n text={skillTitle}\n selected={focus}\n onClick={handleChipClick}\n key={index}\n backgroundColor=\"skin\"\n />\n );\n })}\n </div>\n </>\n )}\n </div>\n </BaseModal>\n );\n};\n\nSkillPickerModal.contextTypes = {\n translate: Provider.childContextTypes.translate\n};\n\nSkillPickerModal.propTypes = {\n skills: PropTypes.arrayOf(PropTypes.string),\n selectedSkills: PropTypes.arrayOf(PropTypes.string),\n skillsLocales: PropTypes.objectOf(PropTypes.string),\n skillsScore: PropTypes.objectOf(PropTypes.number),\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n minSelectedSkills: PropTypes.number,\n maxSelectedSkills: PropTypes.number,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport default SkillPickerModal;\n"],"mappings":"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"}
@@ -21,6 +21,20 @@
21
21
  height: 40px;
22
22
  }
23
23
 
24
+ .ctaWrapper {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: center;
28
+ margin-bottom: 16px;
29
+ }
30
+
31
+ .sortWrapper {
32
+ display: flex;
33
+ align-items: center;
34
+ gap: 12px;
35
+ color: cm_grey_500;
36
+ }
37
+
24
38
  @media mobile {
25
39
  .skillPickerContainer {
26
40
  width: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/template/my-learning/index.js"],"names":[],"mappings":";AAgHA,mEAwZC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/template/my-learning/index.js"],"names":[],"mappings":";AAgHA,mEAkaC"}
@@ -193,6 +193,7 @@ const MyLearning = (props, context) => {
193
193
  backgroundColor: '#FFDCD1'
194
194
  }
195
195
  }];
196
+ const skillsScore = useMemo(() => _pipe(_map(skill => [skill, _getOr(0, [skill, 'stats', 'score'], skillsInformation)]), _fromPairs)(skills), [skills, skillsInformation]);
196
197
  const handleOnDotClick = useCallback(skillRef => {
197
198
  setSkillFocusSelectedOnChart(skillRef);
198
199
  }, [setSkillFocusSelectedOnChart]);
@@ -237,6 +238,7 @@ const MyLearning = (props, context) => {
237
238
  className: style.container
238
239
  }, /*#__PURE__*/React.createElement(SkillPickerModal, {
239
240
  skills: skills,
241
+ skillsScore: skillsScore,
240
242
  selectedSkills: selectedSkillsList,
241
243
  skillsLocales: skillsLocales,
242
244
  isOpen: open,