@coorpacademy/components 10.5.4 → 10.5.7-alpha.5

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 (133) hide show
  1. package/es/molecule/course-section/index.js +5 -3
  2. package/es/molecule/course-section/index.js.map +1 -1
  3. package/es/molecule/course-section/style.css +2 -1
  4. package/es/molecule/course-section/test/fixtures/chapter.js +2 -1
  5. package/es/molecule/course-section/test/fixtures/chapter.js.map +1 -1
  6. package/es/molecule/course-section/test/fixtures/course.js +2 -1
  7. package/es/molecule/course-section/test/fixtures/course.js.map +1 -1
  8. package/es/molecule/course-sections/index.js +40 -0
  9. package/es/molecule/course-sections/index.js.map +1 -0
  10. package/es/molecule/course-sections/style.css +3 -0
  11. package/es/molecule/course-sections/test/fixtures/default.js +149 -0
  12. package/es/molecule/course-sections/test/fixtures/default.js.map +1 -0
  13. package/es/molecule/course-sections/test/fixtures/loading.js +9 -0
  14. package/es/molecule/course-sections/test/fixtures/loading.js.map +1 -0
  15. package/es/molecule/course-sections/test/fixtures.js +15 -0
  16. package/es/molecule/course-sections/test/fixtures.js.map +1 -0
  17. package/es/molecule/draggable/index.js +1 -1
  18. package/es/molecule/draggable/index.js.map +1 -1
  19. package/es/molecule/draggable/style.css +1 -5
  20. package/es/molecule/draggable-list/index.js +56 -0
  21. package/es/molecule/draggable-list/index.js.map +1 -0
  22. package/es/molecule/draggable-list/test/fixtures/course-sections.js +20 -0
  23. package/es/molecule/draggable-list/test/fixtures/course-sections.js.map +1 -0
  24. package/es/molecule/draggable-list/test/fixtures/dashboard-sections.js +26 -0
  25. package/es/molecule/draggable-list/test/fixtures/dashboard-sections.js.map +1 -0
  26. package/es/molecule/draggable-list/test/fixtures.js +2 -0
  27. package/es/molecule/draggable-list/test/fixtures.js.map +1 -1
  28. package/es/molecule/{setup-sections → draggable-list}/test/on-drop.js +17 -17
  29. package/es/molecule/draggable-list/test/on-drop.js.map +1 -0
  30. package/es/molecule/questions/qcm/index.js +37 -25
  31. package/es/molecule/questions/qcm/index.js.map +1 -1
  32. package/es/molecule/questions/qcm/style.css +48 -14
  33. package/es/molecule/questions/qcm/test/fixtures/default.js +8 -0
  34. package/es/molecule/questions/qcm/test/fixtures/default.js.map +1 -1
  35. package/es/molecule/questions/qcm/test/qcm.js +103 -0
  36. package/es/molecule/questions/qcm/test/qcm.js.map +1 -0
  37. package/es/molecule/questions/qcm-graphic/index.js +35 -17
  38. package/es/molecule/questions/qcm-graphic/index.js.map +1 -1
  39. package/es/molecule/questions/qcm-graphic/style.css +64 -13
  40. package/es/molecule/questions/qcm-graphic/test/qcm-graphic.js +65 -0
  41. package/es/molecule/questions/qcm-graphic/test/qcm-graphic.js.map +1 -0
  42. package/es/molecule/setup-section/style.css +1 -0
  43. package/es/molecule/setup-sections/index.js +7 -33
  44. package/es/molecule/setup-sections/index.js.map +1 -1
  45. package/es/molecule/wizard-summary/test/fixtures/organize-courses.js +106 -0
  46. package/es/molecule/wizard-summary/test/fixtures/organize-courses.js.map +1 -0
  47. package/es/molecule/wizard-summary/test/fixtures.js +2 -0
  48. package/es/molecule/wizard-summary/test/fixtures.js.map +1 -1
  49. package/es/organism/wizard-contents/index.js +6 -0
  50. package/es/organism/wizard-contents/index.js.map +1 -1
  51. package/es/organism/wizard-contents/test/fixtures/playlist-organize-courses.js +45 -0
  52. package/es/organism/wizard-contents/test/fixtures/playlist-organize-courses.js.map +1 -0
  53. package/es/organism/wizard-contents/test/fixtures.js +2 -0
  54. package/es/organism/wizard-contents/test/fixtures.js.map +1 -1
  55. package/es/template/back-office/brand-update/test/fixtures/wizard-organize-courses-playlist.js +22 -0
  56. package/es/template/back-office/brand-update/test/fixtures/wizard-organize-courses-playlist.js.map +1 -0
  57. package/es/template/back-office/brand-update/test/fixtures.js +2 -0
  58. package/es/template/back-office/brand-update/test/fixtures.js.map +1 -1
  59. package/es/util/get-shadow-box-color-from-primary.js +4 -0
  60. package/es/util/get-shadow-box-color-from-primary.js.map +1 -0
  61. package/es/util/test/get-shadow-box-color-from-primary.js +33 -0
  62. package/es/util/test/get-shadow-box-color-from-primary.js.map +1 -0
  63. package/es/variables/colors.css +3 -0
  64. package/lib/molecule/course-section/index.js +5 -3
  65. package/lib/molecule/course-section/index.js.map +1 -1
  66. package/lib/molecule/course-section/style.css +2 -1
  67. package/lib/molecule/course-section/test/fixtures/chapter.js +2 -1
  68. package/lib/molecule/course-section/test/fixtures/chapter.js.map +1 -1
  69. package/lib/molecule/course-section/test/fixtures/course.js +2 -1
  70. package/lib/molecule/course-section/test/fixtures/course.js.map +1 -1
  71. package/lib/molecule/course-sections/index.js +54 -0
  72. package/lib/molecule/course-sections/index.js.map +1 -0
  73. package/lib/molecule/course-sections/style.css +3 -0
  74. package/lib/molecule/course-sections/test/fixtures/default.js +154 -0
  75. package/lib/molecule/course-sections/test/fixtures/default.js.map +1 -0
  76. package/lib/molecule/course-sections/test/fixtures/loading.js +14 -0
  77. package/lib/molecule/course-sections/test/fixtures/loading.js.map +1 -0
  78. package/lib/molecule/course-sections/test/fixtures.js +25 -0
  79. package/lib/molecule/course-sections/test/fixtures.js.map +1 -0
  80. package/lib/molecule/draggable/index.js +1 -1
  81. package/lib/molecule/draggable/index.js.map +1 -1
  82. package/lib/molecule/draggable/style.css +1 -5
  83. package/lib/molecule/draggable-list/index.js +73 -0
  84. package/lib/molecule/draggable-list/index.js.map +1 -0
  85. package/lib/molecule/draggable-list/test/fixtures/course-sections.js +29 -0
  86. package/lib/molecule/draggable-list/test/fixtures/course-sections.js.map +1 -0
  87. package/lib/molecule/draggable-list/test/fixtures/dashboard-sections.js +37 -0
  88. package/lib/molecule/draggable-list/test/fixtures/dashboard-sections.js.map +1 -0
  89. package/lib/molecule/draggable-list/test/fixtures.js +3 -0
  90. package/lib/molecule/draggable-list/test/fixtures.js.map +1 -1
  91. package/lib/molecule/{setup-sections → draggable-list}/test/on-drop.js +19 -19
  92. package/lib/molecule/draggable-list/test/on-drop.js.map +1 -0
  93. package/lib/molecule/questions/qcm/index.js +44 -23
  94. package/lib/molecule/questions/qcm/index.js.map +1 -1
  95. package/lib/molecule/questions/qcm/style.css +48 -14
  96. package/lib/molecule/questions/qcm/test/fixtures/default.js +8 -0
  97. package/lib/molecule/questions/qcm/test/fixtures/default.js.map +1 -1
  98. package/lib/molecule/questions/qcm/test/qcm.js +115 -0
  99. package/lib/molecule/questions/qcm/test/qcm.js.map +1 -0
  100. package/lib/molecule/questions/qcm-graphic/index.js +33 -15
  101. package/lib/molecule/questions/qcm-graphic/index.js.map +1 -1
  102. package/lib/molecule/questions/qcm-graphic/style.css +64 -13
  103. package/lib/molecule/questions/qcm-graphic/test/qcm-graphic.js +76 -0
  104. package/lib/molecule/questions/qcm-graphic/test/qcm-graphic.js.map +1 -0
  105. package/lib/molecule/setup-section/style.css +1 -0
  106. package/lib/molecule/setup-sections/index.js +7 -37
  107. package/lib/molecule/setup-sections/index.js.map +1 -1
  108. package/lib/molecule/wizard-summary/test/fixtures/organize-courses.js +111 -0
  109. package/lib/molecule/wizard-summary/test/fixtures/organize-courses.js.map +1 -0
  110. package/lib/molecule/wizard-summary/test/fixtures.js +3 -0
  111. package/lib/molecule/wizard-summary/test/fixtures.js.map +1 -1
  112. package/lib/organism/wizard-contents/index.js +7 -0
  113. package/lib/organism/wizard-contents/index.js.map +1 -1
  114. package/lib/organism/wizard-contents/test/fixtures/playlist-organize-courses.js +54 -0
  115. package/lib/organism/wizard-contents/test/fixtures/playlist-organize-courses.js.map +1 -0
  116. package/lib/organism/wizard-contents/test/fixtures.js +3 -0
  117. package/lib/organism/wizard-contents/test/fixtures.js.map +1 -1
  118. package/lib/template/back-office/brand-update/test/fixtures/wizard-organize-courses-playlist.js +32 -0
  119. package/lib/template/back-office/brand-update/test/fixtures/wizard-organize-courses-playlist.js.map +1 -0
  120. package/lib/template/back-office/brand-update/test/fixtures.js +3 -0
  121. package/lib/template/back-office/brand-update/test/fixtures.js.map +1 -1
  122. package/lib/util/get-shadow-box-color-from-primary.js +12 -0
  123. package/lib/util/get-shadow-box-color-from-primary.js.map +1 -0
  124. package/lib/util/test/get-shadow-box-color-from-primary.js +40 -0
  125. package/lib/util/test/get-shadow-box-color-from-primary.js.map +1 -0
  126. package/lib/variables/colors.css +3 -0
  127. package/package.json +2 -2
  128. package/es/molecule/search/test/fixtures.js +0 -15
  129. package/es/molecule/search/test/fixtures.js.map +0 -1
  130. package/es/molecule/setup-sections/test/on-drop.js.map +0 -1
  131. package/lib/molecule/search/test/fixtures.js +0 -25
  132. package/lib/molecule/search/test/fixtures.js.map +0 -1
  133. package/lib/molecule/setup-sections/test/on-drop.js.map +0 -1
@@ -11,15 +11,15 @@ import { wrappingComponent } from '../../../test/helpers/render-component';
11
11
  import SetupSections from '..'; // eslint-disable-next-line css-modules/no-unused-class
12
12
 
13
13
  import style from '../../draggable/style.css';
14
- import fixtures from './fixtures/default';
14
+ import fixtures from './fixtures/dashboard-sections';
15
15
  browserEnv();
16
16
  configure({
17
17
  adapter: new Adapter()
18
18
  });
19
19
  test('should trigger onDrop handler', t => {
20
20
  t.plan(7);
21
- const elementToDrag = fixtures.props.sections[0].id;
22
- const elementToDrop = fixtures.props.sections[2].id;
21
+ const elementToDrag = fixtures.props.items[0].id;
22
+ const elementToDrop = fixtures.props.items[2].id;
23
23
 
24
24
  const dropHandler = (dragged, dropped) => {
25
25
  t.is(dropped, elementToDrop);
@@ -43,12 +43,12 @@ test('should trigger onDrop handler', t => {
43
43
  const dropEvent = {
44
44
  preventDefault: () => t.pass()
45
45
  };
46
- wrapper.find(`.${style.section}`).at(0).simulate('dragStart', dragStartEvent);
47
- wrapper.find(`.${style.section}`).at(0).simulate('dragOver', dragOverEvent);
48
- wrapper.find(`.${style.section}`).at(0).simulate('dragOver', dragOverEvent);
49
- wrapper.find(`.${style.section}`).at(0).simulate('dragLeave', dragLeaveEvent);
50
- wrapper.find(`.${style.section}`).at(2).simulate('dragOver', dragOverEvent);
51
- wrapper.find(`.${style.section}`).at(2).simulate('drop', dropEvent);
46
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragStart', dragStartEvent);
47
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);
48
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);
49
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragLeave', dragLeaveEvent);
50
+ wrapper.find(`.${style.draggable}`).at(2).simulate('dragOver', dragOverEvent);
51
+ wrapper.find(`.${style.draggable}`).at(2).simulate('drop', dropEvent);
52
52
  });
53
53
  test('should skip drop event if dragStart is not called', t => {
54
54
  t.plan(1);
@@ -65,7 +65,7 @@ test('should skip drop event if dragStart is not called', t => {
65
65
  const dropEvent = {
66
66
  preventDefault: () => t.pass()
67
67
  };
68
- wrapper.find(`.${style.section}`).at(2).simulate('drop', dropEvent);
68
+ wrapper.find(`.${style.draggable}`).at(2).simulate('drop', dropEvent);
69
69
  });
70
70
  test('should skip dragStart event if section id is not defined', t => {
71
71
  t.plan(0);
@@ -74,7 +74,7 @@ test('should skip dragStart event if section id is not defined', t => {
74
74
  t.fail();
75
75
  };
76
76
 
77
- const wrapper = mount( /*#__PURE__*/React.createElement(SetupSections, _extends({}, _set('sections.0.id', '', fixtures.props), {
77
+ const wrapper = mount( /*#__PURE__*/React.createElement(SetupSections, _extends({}, _set('items.0.id', '', fixtures.props), {
78
78
  onDrop: dropHandler
79
79
  })), {
80
80
  wrappingComponent
@@ -91,11 +91,11 @@ test('should skip dragStart event if section id is not defined', t => {
91
91
  const dropEvent = {
92
92
  preventDefault: () => {}
93
93
  };
94
- wrapper.find(`.${style.section}`).at(0).simulate('dragStart', dragStartEvent);
95
- wrapper.find(`.${style.section}`).at(0).simulate('dragOver', dragOverEvent);
96
- wrapper.find(`.${style.section}`).at(0).simulate('dragOver', dragOverEvent);
97
- wrapper.find(`.${style.section}`).at(0).simulate('dragLeave', dragLeaveEvent);
98
- wrapper.find(`.${style.section}`).at(2).simulate('dragOver', dragOverEvent);
99
- wrapper.find(`.${style.section}`).at(2).simulate('drop', dropEvent);
94
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragStart', dragStartEvent);
95
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);
96
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);
97
+ wrapper.find(`.${style.draggable}`).at(0).simulate('dragLeave', dragLeaveEvent);
98
+ wrapper.find(`.${style.draggable}`).at(2).simulate('dragOver', dragOverEvent);
99
+ wrapper.find(`.${style.draggable}`).at(2).simulate('drop', dropEvent);
100
100
  });
101
101
  //# sourceMappingURL=on-drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/molecule/draggable-list/test/on-drop.js"],"names":["browserEnv","test","React","mount","configure","Adapter","wrappingComponent","SetupSections","style","fixtures","adapter","t","plan","elementToDrag","props","items","id","elementToDrop","dropHandler","dragged","dropped","is","wrapper","dragStartEvent","preventDefault","pass","dragOverEvent","dragLeaveEvent","dropEvent","find","draggable","at","simulate","fail"],"mappings":"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","sourcesContent":["import browserEnv from 'browser-env';\nimport test from 'ava';\nimport React from 'react';\nimport {mount, configure} from 'enzyme';\nimport {set} from 'lodash/fp';\nimport Adapter from 'enzyme-adapter-react-16';\nimport {wrappingComponent} from '../../../test/helpers/render-component';\nimport SetupSections from '..';\n// eslint-disable-next-line css-modules/no-unused-class\nimport style from '../../draggable/style.css';\nimport fixtures from './fixtures/dashboard-sections';\n\nbrowserEnv();\nconfigure({adapter: new Adapter()});\n\ntest('should trigger onDrop handler', t => {\n t.plan(7);\n\n const elementToDrag = fixtures.props.items[0].id;\n const elementToDrop = fixtures.props.items[2].id;\n\n const dropHandler = (dragged, dropped) => {\n t.is(dropped, elementToDrop);\n t.is(dragged, elementToDrag);\n };\n\n const wrapper = mount(<SetupSections {...fixtures.props} onDrop={dropHandler} />, {\n wrappingComponent\n });\n\n const dragStartEvent = {preventDefault: () => t.pass()};\n const dragOverEvent = {preventDefault: () => t.pass()};\n const dragLeaveEvent = {preventDefault: () => t.pass()};\n const dropEvent = {preventDefault: () => t.pass()};\n\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragStart', dragStartEvent);\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragLeave', dragLeaveEvent);\n wrapper.find(`.${style.draggable}`).at(2).simulate('dragOver', dragOverEvent);\n wrapper.find(`.${style.draggable}`).at(2).simulate('drop', dropEvent);\n});\n\ntest('should skip drop event if dragStart is not called', t => {\n t.plan(1);\n\n const dropHandler = (dragged, dropped) => {\n t.fail();\n };\n\n const wrapper = mount(<SetupSections {...fixtures.props} onDrop={dropHandler} />, {\n wrappingComponent\n });\n\n const dropEvent = {preventDefault: () => t.pass()};\n wrapper.find(`.${style.draggable}`).at(2).simulate('drop', dropEvent);\n});\n\ntest('should skip dragStart event if section id is not defined', t => {\n t.plan(0);\n\n const dropHandler = (dragged, dropped) => {\n t.fail();\n };\n\n const wrapper = mount(\n <SetupSections {...set('items.0.id', '', fixtures.props)} onDrop={dropHandler} />,\n {\n wrappingComponent\n }\n );\n\n const dragStartEvent = {preventDefault: () => {}};\n const dragOverEvent = {preventDefault: () => {}};\n const dragLeaveEvent = {preventDefault: () => {}};\n const dropEvent = {preventDefault: () => {}};\n\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragStart', dragStartEvent);\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragOver', dragOverEvent);\n wrapper.find(`.${style.draggable}`).at(0).simulate('dragLeave', dragLeaveEvent);\n wrapper.find(`.${style.draggable}`).at(2).simulate('dragOver', dragOverEvent);\n wrapper.find(`.${style.draggable}`).at(2).simulate('drop', dropEvent);\n});\n"],"file":"on-drop.js"}
@@ -1,51 +1,62 @@
1
- import _maxBy from "lodash/fp/maxBy";
2
- import _getOr from "lodash/fp/getOr";
3
- import React from 'react';
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import React, { useMemo } from 'react';
4
4
  import classnames from 'classnames';
5
5
  import PropTypes from 'prop-types';
6
+ import getOr from 'lodash/fp/getOr';
7
+ import maxBy from 'lodash/fp/maxBy';
6
8
  import Provider from '../../../atom/provider';
7
9
  import { innerHTML } from '../../../atom/label/style.css';
10
+ import { getShadowBoxColorFromPrimary } from '../../../util/get-shadow-box-color-from-primary';
8
11
  import style from './style.css';
9
12
 
10
13
  const QCM = (props, context) => {
11
14
  const {
12
15
  answers
13
16
  } = props;
14
-
15
- const longestAnswer = _maxBy(({
17
+ const longestAnswer = maxBy(({
16
18
  title
17
19
  }) => title.length, answers);
18
-
19
- const answersViews = answers.map((answer, key) => {
20
+ const {
21
+ skin
22
+ } = context;
23
+ const primarySkinColor = getOr('#00B0FF', 'common.primary', skin);
24
+ const answersViews = useMemo(() => answers.map((answer, key) => {
20
25
  const {
21
26
  onClick,
22
27
  title,
23
- selected
28
+ selected,
29
+ 'aria-label': ariaLabel
24
30
  } = answer;
25
- const {
26
- skin
27
- } = context;
28
-
29
- const primarySkinColor = _getOr('#00B0FF', 'common.primary', skin);
30
-
31
- const selectedStyle = selected ? {
32
- backgroundColor: primarySkinColor,
33
- borderColor: primarySkinColor
34
- } : null;
35
- const className = classnames(longestAnswer === answer ? style.longestAnswer : style.answer, selected ? style.selectedAnswer : style.unselectedAnswer);
31
+ const longAnswerClass = longestAnswer.title === title ? style.longestAnswer : style.answer;
32
+ const selectedAnswerClass = selected ? style.selectedAnswer : style.unselectedAnswer;
36
33
  return /*#__PURE__*/React.createElement("div", {
37
34
  "data-name": "answer",
38
- className: classnames(className, innerHTML),
35
+ "aria-label": ariaLabel || title,
36
+ className: classnames(longAnswerClass, innerHTML, selectedAnswerClass),
39
37
  onClick: onClick,
40
- style: selectedStyle,
38
+ style: _extends({}, selected && {
39
+ boxShadow: `0 4px 16px ${getShadowBoxColorFromPrimary(primarySkinColor)}`
40
+ }),
41
41
  "data-selected": selected,
42
- key: key // eslint-disable-next-line react/no-danger
42
+ key: key
43
+ }, /*#__PURE__*/React.createElement("div", {
44
+ "data-name": "answer-background",
45
+ style: {
46
+ backgroundColor: selected ? primarySkinColor : '#F4F4F5'
47
+ /* cm_grey_75 */
48
+
49
+ },
50
+ className: style.background
51
+ }), /*#__PURE__*/React.createElement("span", {
52
+ "data-name": "answer-label",
53
+ className: style.answerText // eslint-disable-next-line react/no-danger
43
54
  ,
44
55
  dangerouslySetInnerHTML: {
45
56
  __html: title
46
57
  }
47
- });
48
- });
58
+ }));
59
+ }), [answers, longestAnswer, primarySkinColor]);
49
60
  return /*#__PURE__*/React.createElement("div", {
50
61
  "data-name": "qcm",
51
62
  className: style.wrapper
@@ -59,7 +70,8 @@ QCM.propTypes = process.env.NODE_ENV !== "production" ? {
59
70
  answers: PropTypes.arrayOf(PropTypes.shape({
60
71
  title: PropTypes.string,
61
72
  selected: PropTypes.bool,
62
- onClick: PropTypes.func
73
+ onClick: PropTypes.func,
74
+ 'aria-label': PropTypes.string
63
75
  }))
64
76
  } : {};
65
77
  export default QCM;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/molecule/questions/qcm/index.js"],"names":["React","classnames","PropTypes","Provider","innerHTML","style","QCM","props","context","answers","longestAnswer","title","length","answersViews","map","answer","key","onClick","selected","skin","primarySkinColor","selectedStyle","backgroundColor","borderColor","className","selectedAnswer","unselectedAnswer","__html","wrapper","contextTypes","childContextTypes","propTypes","arrayOf","shape","string","bool","func"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA,OAAOC,QAAP,MAAqB,wBAArB;AACA,SAAQC,SAAR,QAAwB,+BAAxB;AACA,OAAOC,KAAP,MAAkB,aAAlB;;AAEA,MAAMC,GAAG,GAAG,CAACC,KAAD,EAAQC,OAAR,KAAoB;AAC9B,QAAM;AAACC,IAAAA;AAAD,MAAYF,KAAlB;;AACA,QAAMG,aAAa,GAAG,OAAM,CAAC;AAACC,IAAAA;AAAD,GAAD,KAAaA,KAAK,CAACC,MAAzB,EAAiCH,OAAjC,CAAtB;;AAEA,QAAMI,YAAY,GAAGJ,OAAO,CAACK,GAAR,CAAY,CAACC,MAAD,EAASC,GAAT,KAAiB;AAChD,UAAM;AAACC,MAAAA,OAAD;AAAUN,MAAAA,KAAV;AAAiBO,MAAAA;AAAjB,QAA6BH,MAAnC;AACA,UAAM;AAACI,MAAAA;AAAD,QAASX,OAAf;;AAEA,UAAMY,gBAAgB,GAAG,OAAM,SAAN,EAAiB,gBAAjB,EAAmCD,IAAnC,CAAzB;;AACA,UAAME,aAAa,GAAGH,QAAQ,GAC1B;AAACI,MAAAA,eAAe,EAAEF,gBAAlB;AAAoCG,MAAAA,WAAW,EAAEH;AAAjD,KAD0B,GAE1B,IAFJ;AAIA,UAAMI,SAAS,GAAGvB,UAAU,CAC1BS,aAAa,KAAKK,MAAlB,GAA2BV,KAAK,CAACK,aAAjC,GAAiDL,KAAK,CAACU,MAD7B,EAE1BG,QAAQ,GAAGb,KAAK,CAACoB,cAAT,GAA0BpB,KAAK,CAACqB,gBAFd,CAA5B;AAKA,wBACE;AACE,mBAAU,QADZ;AAEE,MAAA,SAAS,EAAEzB,UAAU,CAACuB,SAAD,EAAYpB,SAAZ,CAFvB;AAGE,MAAA,OAAO,EAAEa,OAHX;AAIE,MAAA,KAAK,EAAEI,aAJT;AAKE,uBAAeH,QALjB;AAME,MAAA,GAAG,EAAEF,GANP,CAOE;AAPF;AAQE,MAAA,uBAAuB,EAAE;AAACW,QAAAA,MAAM,EAAEhB;AAAT;AAR3B,MADF;AAYD,GA1BoB,CAArB;AA4BA,sBACE;AAAK,iBAAU,KAAf;AAAqB,IAAA,SAAS,EAAEN,KAAK,CAACuB;AAAtC,KACGf,YADH,CADF;AAKD,CArCD;;AAuCAP,GAAG,CAACuB,YAAJ,GAAmB;AACjBV,EAAAA,IAAI,EAAEhB,QAAQ,CAAC2B,iBAAT,CAA2BX;AADhB,CAAnB;AAIAb,GAAG,CAACyB,SAAJ,2CAAgB;AACdtB,EAAAA,OAAO,EAAEP,SAAS,CAAC8B,OAAV,CACP9B,SAAS,CAAC+B,KAAV,CAAgB;AACdtB,IAAAA,KAAK,EAAET,SAAS,CAACgC,MADH;AAEdhB,IAAAA,QAAQ,EAAEhB,SAAS,CAACiC,IAFN;AAGdlB,IAAAA,OAAO,EAAEf,SAAS,CAACkC;AAHL,GAAhB,CADO;AADK,CAAhB;AAUA,eAAe9B,GAAf","sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport {getOr, maxBy} from 'lodash/fp';\nimport Provider from '../../../atom/provider';\nimport {innerHTML} from '../../../atom/label/style.css';\nimport style from './style.css';\n\nconst QCM = (props, context) => {\n const {answers} = props;\n const longestAnswer = maxBy(({title}) => title.length, answers);\n\n const answersViews = answers.map((answer, key) => {\n const {onClick, title, selected} = answer;\n const {skin} = context;\n\n const primarySkinColor = getOr('#00B0FF', 'common.primary', skin);\n const selectedStyle = selected\n ? {backgroundColor: primarySkinColor, borderColor: primarySkinColor}\n : null;\n\n const className = classnames(\n longestAnswer === answer ? style.longestAnswer : style.answer,\n selected ? style.selectedAnswer : style.unselectedAnswer\n );\n\n return (\n <div\n data-name=\"answer\"\n className={classnames(className, innerHTML)}\n onClick={onClick}\n style={selectedStyle}\n data-selected={selected}\n key={key}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: title}}\n />\n );\n });\n\n return (\n <div data-name=\"qcm\" className={style.wrapper}>\n {answersViews}\n </div>\n );\n};\n\nQCM.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nQCM.propTypes = {\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string,\n selected: PropTypes.bool,\n onClick: PropTypes.func\n })\n )\n};\n\nexport default QCM;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/molecule/questions/qcm/index.js"],"names":["React","useMemo","classnames","PropTypes","getOr","maxBy","Provider","innerHTML","getShadowBoxColorFromPrimary","style","QCM","props","context","answers","longestAnswer","title","length","skin","primarySkinColor","answersViews","map","answer","key","onClick","selected","ariaLabel","longAnswerClass","selectedAnswerClass","selectedAnswer","unselectedAnswer","boxShadow","backgroundColor","background","answerText","__html","wrapper","contextTypes","childContextTypes","propTypes","arrayOf","shape","string","bool","func"],"mappings":"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","sourcesContent":["import React, {useMemo} from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport getOr from 'lodash/fp/getOr';\nimport maxBy from 'lodash/fp/maxBy';\nimport Provider from '../../../atom/provider';\nimport {innerHTML} from '../../../atom/label/style.css';\nimport {getShadowBoxColorFromPrimary} from '../../../util/get-shadow-box-color-from-primary';\nimport style from './style.css';\n\nconst QCM = (props, context) => {\n const {answers} = props;\n const longestAnswer = maxBy(({title}) => title.length, answers);\n const {skin} = context;\n const primarySkinColor = getOr('#00B0FF', 'common.primary', skin);\n\n const answersViews = useMemo(\n () =>\n answers.map((answer, key) => {\n const {onClick, title, selected, 'aria-label': ariaLabel} = answer;\n const longAnswerClass = longestAnswer.title === title ? style.longestAnswer : style.answer;\n const selectedAnswerClass = selected ? style.selectedAnswer : style.unselectedAnswer;\n\n return (\n <div\n data-name=\"answer\"\n aria-label={ariaLabel || title}\n className={classnames(longAnswerClass, innerHTML, selectedAnswerClass)}\n onClick={onClick}\n style={{\n ...(selected && {\n boxShadow: `0 4px 16px ${getShadowBoxColorFromPrimary(primarySkinColor)}`\n })\n }}\n data-selected={selected}\n key={key}\n >\n <div\n data-name=\"answer-background\"\n style={{backgroundColor: selected ? primarySkinColor : '#F4F4F5' /* cm_grey_75 */}}\n className={style.background}\n />\n <span\n data-name=\"answer-label\"\n className={style.answerText}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: title}}\n />\n </div>\n );\n }),\n [answers, longestAnswer, primarySkinColor]\n );\n\n return (\n <div data-name=\"qcm\" className={style.wrapper}>\n {answersViews}\n </div>\n );\n};\n\nQCM.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nQCM.propTypes = {\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string,\n selected: PropTypes.bool,\n onClick: PropTypes.func,\n 'aria-label': PropTypes.string\n })\n )\n};\n\nexport default QCM;\n"],"file":"index.js"}
@@ -3,7 +3,8 @@
3
3
  @value colors: "../../../variables/colors.css";
4
4
  @value white from colors;
5
5
  @value black from colors;
6
- @value light from colors;
6
+ @value box_shadow_light_dark from colors;
7
+ @value cm_blue_900 from colors;
7
8
 
8
9
  .wrapper {
9
10
  text-align: center;
@@ -18,14 +19,15 @@
18
19
  font-size: 15px;
19
20
  font-weight: 600;
20
21
  background-color: white;
21
- border: 1px solid color(black lightness(85%));
22
- border-radius: 3px;
22
+ border-radius: 8px;
23
23
  box-sizing: border-box;
24
24
  margin-bottom: 8px;
25
25
  cursor: pointer;
26
26
  padding: 11px 24px;
27
27
  line-height: 24px;
28
28
  white-space: normal;
29
+ overflow: hidden;
30
+ transition: all 0.25s linear;
29
31
  }
30
32
 
31
33
  .longestAnswer {
@@ -33,20 +35,56 @@
33
35
  width: auto;
34
36
  }
35
37
 
36
- .answer:last-child {
37
- margin-bottom: 0;
38
+
39
+ .background {
40
+ position: absolute;
41
+ width: 100%;
42
+ height: 100%;
43
+ top: 0;
44
+ left: 0;
45
+ transition: opacity 0.25s linear, background-color 0.25s linear;
46
+ }
47
+
48
+ .answerText {
49
+ position: relative;
50
+ color: cm_blue_900;
51
+ }
52
+
53
+ .selectedAnswer .answerText {
54
+ color: white;
55
+ }
56
+
57
+ .selectedAnswer:hover .background{
58
+ opacity: 0.8;
59
+ }
60
+
61
+ .selectedAnswer.answer:hover {
62
+ background-color: black;
38
63
  }
39
64
 
40
- .answer:hover {
41
- background-color: light;
65
+ .selectedAnswer .background{
66
+ opacity: 1;
42
67
  }
43
68
 
69
+ .selectedAnswer,
44
70
  .unselectedAnswer {
45
- color: black;
71
+ position: relative;
46
72
  }
47
73
 
48
- .selectedAnswer {
49
- color: white;
74
+ .unselectedAnswer {
75
+ box-shadow: 0px 4px 16px box_shadow_light_dark;
76
+ }
77
+
78
+ .unselectedAnswer .background {
79
+ opacity: 0;
80
+ }
81
+
82
+ .unselectedAnswer:hover .background{
83
+ opacity: 1;
84
+ }
85
+
86
+ .answer:last-child {
87
+ margin-bottom: 0;
50
88
  }
51
89
 
52
90
  @media mobile {
@@ -59,10 +97,6 @@
59
97
  width: 100%;
60
98
  }
61
99
 
62
- .answer:hover {
63
- background-color: white;
64
- }
65
-
66
100
  .answer {
67
101
  padding: 8px 24px;
68
102
  }
@@ -2,34 +2,42 @@ export default {
2
2
  props: {
3
3
  answers: [{
4
4
  title: 'There is no need for a password for this, you only need your ID to connect',
5
+ 'aria-label': 'aria Answer',
5
6
  onClick: () => {},
6
7
  selected: false
7
8
  }, {
8
9
  title: 'Lorem ipsum',
10
+ 'aria-label': 'aria Answer',
9
11
  onClick: () => {},
10
12
  selected: false
11
13
  }, {
12
14
  title: 'Lorem',
15
+ 'aria-label': 'aria Answer',
13
16
  onClick: () => {},
14
17
  selected: true
15
18
  }, {
16
19
  title: 'You need to have a password',
20
+ 'aria-label': 'aria Answer',
17
21
  onClick: () => {},
18
22
  selected: false
19
23
  }, {
20
24
  title: 'Pouet',
25
+ 'aria-label': 'aria Answer',
21
26
  onClick: () => {},
22
27
  selected: true
23
28
  }, {
24
29
  title: 'Alios autem dicere aiunt multo etiam inhumanius (quem locum breviter paulo ante perstrinxi) praesidii adiumentique causa, non benevolentiae neque caritatis, amicitias esse expetendas; itaque, ut quisque minimum firmitatis haberet minimumque virium',
30
+ 'aria-label': 'aria Answer',
25
31
  onClick: () => {},
26
32
  selected: false
27
33
  }, {
28
34
  title: 'Lorem ipsum dolor',
35
+ 'aria-label': 'aria Answer',
29
36
  onClick: () => {},
30
37
  selected: false
31
38
  }, {
32
39
  title: 'all your base are belong to us',
40
+ 'aria-label': 'aria Answer',
33
41
  onClick: () => {},
34
42
  selected: false
35
43
  }]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/molecule/questions/qcm/test/fixtures/default.js"],"names":["props","answers","title","onClick","selected"],"mappings":"AAAA,eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,OAAO,EAAE,CACP;AACEC,MAAAA,KAAK,EAAE,4EADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KADO,EAMP;AACEF,MAAAA,KAAK,EAAE,aADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KANO,EAWP;AACEF,MAAAA,KAAK,EAAE,OADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KAXO,EAgBP;AACEF,MAAAA,KAAK,EAAE,6BADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KAhBO,EAqBP;AACEF,MAAAA,KAAK,EAAE,OADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KArBO,EA0BP;AACEF,MAAAA,KAAK,EACH,yPAFJ;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KA1BO,EAgCP;AACEF,MAAAA,KAAK,EAAE,mBADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KAhCO,EAqCP;AACEF,MAAAA,KAAK,EAAE,gCADT;AAEEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAFnB;AAGEC,MAAAA,QAAQ,EAAE;AAHZ,KArCO;AADJ;AADM,CAAf","sourcesContent":["export default {\n props: {\n answers: [\n {\n title: 'There is no need for a password for this, you only need your ID to connect',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Lorem ipsum',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Lorem',\n onClick: () => {},\n selected: true\n },\n {\n title: 'You need to have a password',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Pouet',\n onClick: () => {},\n selected: true\n },\n {\n title:\n 'Alios autem dicere aiunt multo etiam inhumanius (quem locum breviter paulo ante perstrinxi) praesidii adiumentique causa, non benevolentiae neque caritatis, amicitias esse expetendas; itaque, ut quisque minimum firmitatis haberet minimumque virium',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Lorem ipsum dolor',\n onClick: () => {},\n selected: false\n },\n {\n title: 'all your base are belong to us',\n onClick: () => {},\n selected: false\n }\n ]\n }\n};\n"],"file":"default.js"}
1
+ {"version":3,"sources":["../../../../../../src/molecule/questions/qcm/test/fixtures/default.js"],"names":["props","answers","title","onClick","selected"],"mappings":"AAAA,eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,OAAO,EAAE,CACP;AACEC,MAAAA,KAAK,EAAE,4EADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KADO,EAOP;AACEF,MAAAA,KAAK,EAAE,aADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KAPO,EAaP;AACEF,MAAAA,KAAK,EAAE,OADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KAbO,EAmBP;AACEF,MAAAA,KAAK,EAAE,6BADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KAnBO,EAyBP;AACEF,MAAAA,KAAK,EAAE,OADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KAzBO,EA+BP;AACEF,MAAAA,KAAK,EACH,yPAFJ;AAGE,oBAAc,aAHhB;AAIEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAJnB;AAKEC,MAAAA,QAAQ,EAAE;AALZ,KA/BO,EAsCP;AACEF,MAAAA,KAAK,EAAE,mBADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KAtCO,EA4CP;AACEF,MAAAA,KAAK,EAAE,gCADT;AAEE,oBAAc,aAFhB;AAGEC,MAAAA,OAAO,EAAE,MAAM,CAAE,CAHnB;AAIEC,MAAAA,QAAQ,EAAE;AAJZ,KA5CO;AADJ;AADM,CAAf","sourcesContent":["export default {\n props: {\n answers: [\n {\n title: 'There is no need for a password for this, you only need your ID to connect',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Lorem ipsum',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Lorem',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: true\n },\n {\n title: 'You need to have a password',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Pouet',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: true\n },\n {\n title:\n 'Alios autem dicere aiunt multo etiam inhumanius (quem locum breviter paulo ante perstrinxi) praesidii adiumentique causa, non benevolentiae neque caritatis, amicitias esse expetendas; itaque, ut quisque minimum firmitatis haberet minimumque virium',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: false\n },\n {\n title: 'Lorem ipsum dolor',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: false\n },\n {\n title: 'all your base are belong to us',\n 'aria-label': 'aria Answer',\n onClick: () => {},\n selected: false\n }\n ]\n }\n};\n"],"file":"default.js"}
@@ -0,0 +1,103 @@
1
+ import _identity from "lodash/fp/identity";
2
+
3
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
5
+ import browserEnv from 'browser-env';
6
+ import test from 'ava';
7
+ import React from 'react';
8
+ import { shallow, mount, configure } from 'enzyme';
9
+ import Adapter from 'enzyme-adapter-react-16';
10
+ import Qcm from '..';
11
+ import defaultFixture from './fixtures/default';
12
+ import noAriaLabelFixture from './fixtures/no-selected';
13
+ browserEnv();
14
+ configure({
15
+ adapter: new Adapter()
16
+ });
17
+ const translate = _identity;
18
+ test('onClick should be reachable, should match given aria-label', t => {
19
+ let answerWasClicked = false;
20
+ defaultFixture.props.answers[1] = _extends(_extends({}, defaultFixture.props.answers[1]), {}, {
21
+ onClick: () => {
22
+ answerWasClicked = true;
23
+ }
24
+ });
25
+ const wrapper = shallow( /*#__PURE__*/React.createElement(Qcm, defaultFixture.props), {
26
+ context: {
27
+ translate
28
+ }
29
+ });
30
+ const answers = wrapper.find('[data-name="answer"]');
31
+ t.true(answers.at(1).exists());
32
+ t.is(answers.at(1).props()['aria-label'], 'aria Answer');
33
+ answers.at(1).simulate('click', {});
34
+ t.true(answerWasClicked);
35
+ t.pass();
36
+ });
37
+ test("should set: selected's background to Primary, unselected's no background", t => {
38
+ const wrapper = mount( /*#__PURE__*/React.createElement(Qcm, defaultFixture.props));
39
+ const answers = wrapper.find('[data-name="answer"]');
40
+ const unselectedAnswer = answers.at(1);
41
+ const expectedPrimaryColor = '#00B0FF'; // ---- unselected ----
42
+ // should not have styles on the wrapper
43
+
44
+ t.true(unselectedAnswer.exists());
45
+ t.deepEqual(unselectedAnswer.props().style, {}); // should not have any styles (color should be picked from the css for unselected)
46
+
47
+ const unselectedLabel = unselectedAnswer.children().at(1);
48
+ t.true(unselectedLabel.exists());
49
+ t.falsy(unselectedLabel.props().style); // check dangerouslySetInnerHTML
50
+
51
+ t.deepEqual(unselectedLabel.props().dangerouslySetInnerHTML, {
52
+ __html: 'Lorem ipsum'
53
+ });
54
+ t.is(unselectedLabel.text(), 'Lorem ipsum'); // should have a backgroundColor of '#F4F4F5' /* cm_grey_75 */
55
+
56
+ const unselectedBackground = unselectedAnswer.children().at(0);
57
+ t.true(unselectedBackground.exists());
58
+ t.deepEqual(unselectedBackground.props().style, {
59
+ backgroundColor: '#F4F4F5'
60
+ }); // selected
61
+ // should have box-shadow color based on primary
62
+
63
+ const selectedAnswer = answers.at(2);
64
+ t.true(selectedAnswer.exists());
65
+ t.deepEqual(selectedAnswer.props().style, {
66
+ boxShadow: '0 4px 16px rgba(0, 122, 179, 0.25)'
67
+ }); // should not have any prop in label style
68
+
69
+ const selectedLabel = selectedAnswer.children().at(1);
70
+ t.true(selectedLabel.exists());
71
+ t.falsy(selectedLabel.props().style); // check dangerouslySetInnerHTML
72
+
73
+ t.deepEqual(selectedLabel.props().dangerouslySetInnerHTML, {
74
+ __html: 'Lorem'
75
+ });
76
+ t.is(selectedLabel.text(), 'Lorem'); // should have backgroundColor as expectedPrimaryColor (primary to be overlayed by the css)
77
+
78
+ const selectedBackground = selectedAnswer.children().at(0);
79
+ t.true(selectedBackground.exists());
80
+ t.deepEqual(selectedBackground.props().style, {
81
+ backgroundColor: expectedPrimaryColor
82
+ });
83
+ t.pass();
84
+ });
85
+ test('should set className to longAnswer if the answer is the longest of the set', t => {
86
+ const wrapper = mount( /*#__PURE__*/React.createElement(Qcm, defaultFixture.props));
87
+ const answer = wrapper.find('[data-name="answer"]'); // regular answer
88
+
89
+ t.true(answer.at(4).exists());
90
+ t.is(answer.at(4).props().className, 'qcm__answer label__innerHTML qcm__selectedAnswer'); // long answer
91
+
92
+ t.true(answer.at(5).exists());
93
+ t.is(answer.at(5).props().className, 'qcm__longestAnswer qcm__answer qcm__answer label__innerHTML qcm__unselectedAnswer');
94
+ t.pass();
95
+ });
96
+ test('should use title as default aria-label if no aria-label is provided', t => {
97
+ const wrapper = mount( /*#__PURE__*/React.createElement(Qcm, noAriaLabelFixture.props));
98
+ const answers = wrapper.find('[data-name="answer"]');
99
+ t.is(answers.at(6).text(), 'Lorem ipsum dolor');
100
+ t.is(answers.at(6).props()['aria-label'], 'Lorem ipsum dolor');
101
+ t.pass();
102
+ });
103
+ //# sourceMappingURL=qcm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/molecule/questions/qcm/test/qcm.js"],"names":["browserEnv","test","React","shallow","mount","configure","Adapter","Qcm","defaultFixture","noAriaLabelFixture","adapter","translate","t","answerWasClicked","props","answers","onClick","wrapper","context","find","true","at","exists","is","simulate","pass","unselectedAnswer","expectedPrimaryColor","deepEqual","style","unselectedLabel","children","falsy","dangerouslySetInnerHTML","__html","text","unselectedBackground","backgroundColor","selectedAnswer","boxShadow","selectedLabel","selectedBackground","answer","className"],"mappings":"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","sourcesContent":["import browserEnv from 'browser-env';\nimport test from 'ava';\nimport React from 'react';\nimport {shallow, mount, configure} from 'enzyme';\nimport {identity} from 'lodash/fp';\nimport Adapter from 'enzyme-adapter-react-16';\nimport Qcm from '..';\nimport defaultFixture from './fixtures/default';\nimport noAriaLabelFixture from './fixtures/no-selected';\n\nbrowserEnv();\nconfigure({adapter: new Adapter()});\nconst translate = identity;\n\ntest('onClick should be reachable, should match given aria-label', t => {\n let answerWasClicked = false;\n defaultFixture.props.answers[1] = {\n ...defaultFixture.props.answers[1],\n onClick: () => {\n answerWasClicked = true;\n }\n };\n const wrapper = shallow(<Qcm {...defaultFixture.props} />, {\n context: {translate}\n });\n const answers = wrapper.find('[data-name=\"answer\"]');\n t.true(answers.at(1).exists());\n t.is(answers.at(1).props()['aria-label'], 'aria Answer');\n answers.at(1).simulate('click', {});\n t.true(answerWasClicked);\n t.pass();\n});\n\ntest(\"should set: selected's background to Primary, unselected's no background\", t => {\n const wrapper = mount(<Qcm {...defaultFixture.props} />);\n const answers = wrapper.find('[data-name=\"answer\"]');\n const unselectedAnswer = answers.at(1);\n const expectedPrimaryColor = '#00B0FF';\n // ---- unselected ----\n // should not have styles on the wrapper\n t.true(unselectedAnswer.exists());\n t.deepEqual(unselectedAnswer.props().style, {});\n\n // should not have any styles (color should be picked from the css for unselected)\n const unselectedLabel = unselectedAnswer.children().at(1);\n t.true(unselectedLabel.exists());\n t.falsy(unselectedLabel.props().style);\n\n // check dangerouslySetInnerHTML\n t.deepEqual(unselectedLabel.props().dangerouslySetInnerHTML, {\n __html: 'Lorem ipsum'\n });\n t.is(unselectedLabel.text(), 'Lorem ipsum');\n\n // should have a backgroundColor of '#F4F4F5' /* cm_grey_75 */\n const unselectedBackground = unselectedAnswer.children().at(0);\n t.true(unselectedBackground.exists());\n t.deepEqual(unselectedBackground.props().style, {\n backgroundColor: '#F4F4F5'\n });\n\n // selected\n // should have box-shadow color based on primary\n const selectedAnswer = answers.at(2);\n t.true(selectedAnswer.exists());\n t.deepEqual(selectedAnswer.props().style, {\n boxShadow: '0 4px 16px rgba(0, 122, 179, 0.25)'\n });\n\n // should not have any prop in label style\n const selectedLabel = selectedAnswer.children().at(1);\n t.true(selectedLabel.exists());\n t.falsy(selectedLabel.props().style);\n\n // check dangerouslySetInnerHTML\n t.deepEqual(selectedLabel.props().dangerouslySetInnerHTML, {\n __html: 'Lorem'\n });\n\n t.is(selectedLabel.text(), 'Lorem');\n\n // should have backgroundColor as expectedPrimaryColor (primary to be overlayed by the css)\n const selectedBackground = selectedAnswer.children().at(0);\n t.true(selectedBackground.exists());\n t.deepEqual(selectedBackground.props().style, {\n backgroundColor: expectedPrimaryColor\n });\n\n t.pass();\n});\n\ntest('should set className to longAnswer if the answer is the longest of the set', t => {\n const wrapper = mount(<Qcm {...defaultFixture.props} />);\n const answer = wrapper.find('[data-name=\"answer\"]');\n // regular answer\n t.true(answer.at(4).exists());\n t.is(answer.at(4).props().className, 'qcm__answer label__innerHTML qcm__selectedAnswer');\n\n // long answer\n t.true(answer.at(5).exists());\n t.is(\n answer.at(5).props().className,\n 'qcm__longestAnswer qcm__answer qcm__answer label__innerHTML qcm__unselectedAnswer'\n );\n t.pass();\n});\n\ntest('should use title as default aria-label if no aria-label is provided', t => {\n const wrapper = mount(<Qcm {...noAriaLabelFixture.props} />);\n const answers = wrapper.find('[data-name=\"answer\"]');\n t.is(answers.at(6).text(), 'Lorem ipsum dolor');\n t.is(answers.at(6).props()['aria-label'], 'Lorem ipsum dolor');\n t.pass();\n});\n"],"file":"qcm.js"}
@@ -1,51 +1,68 @@
1
1
  import _getOr from "lodash/fp/getOr";
2
+
3
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
2
5
  import React from 'react';
3
6
  import PropTypes from 'prop-types';
4
7
  import classnames from 'classnames';
5
8
  import Provider from '../../../atom/provider';
6
9
  import { innerHTML } from '../../../atom/label/style.css';
10
+ import { getShadowBoxColorFromPrimary } from '../../../util/get-shadow-box-color-from-primary';
7
11
  import style from './style.css';
8
12
 
9
13
  const QCMImage = (props, context) => {
10
14
  const {
11
15
  answers
12
16
  } = props;
17
+ const {
18
+ skin
19
+ } = context;
20
+
21
+ const primarySkinColor = _getOr('#00B0FF', 'common.primary', skin);
22
+
13
23
  const answersViews = answers.map((answer, key) => {
14
24
  const {
15
25
  onClick,
16
26
  title,
17
27
  selected,
18
- image
28
+ image,
29
+ ariaLabel
19
30
  } = answer;
20
- const {
21
- skin
22
- } = context;
23
-
24
- const primarySkinColor = _getOr('#00B0FF', 'common.primary', skin);
25
-
26
- const selectedStyle = selected ? {
27
- backgroundColor: primarySkinColor,
28
- borderColor: primarySkinColor
29
- } : null;
30
31
  return /*#__PURE__*/React.createElement("div", {
31
- className: selected ? style.selected : style.answer,
32
32
  onClick: onClick,
33
33
  "data-selected": selected,
34
- style: selectedStyle,
34
+ "data-name": "answerGraphic",
35
+ style: _extends({}, selected && {
36
+ boxShadow: `0 4px 16px ${getShadowBoxColorFromPrimary(primarySkinColor)}`
37
+ }),
38
+ className: selected ? style.selected : style.answer,
35
39
  key: key
40
+ }, /*#__PURE__*/React.createElement("div", {
41
+ "data-name": "answerBackground",
42
+ style: {
43
+ backgroundColor: selected ? primarySkinColor : '#F4F4F5'
44
+ },
45
+ className: style.background
46
+ }), /*#__PURE__*/React.createElement("div", {
47
+ "data-name": "answerContent",
48
+ className: style.content
36
49
  }, /*#__PURE__*/React.createElement("div", {
37
50
  className: style.imageWrapper,
38
- "data-name": "answerGraphic",
51
+ "data-name": "answerImage",
52
+ "aria-label": ariaLabel || title,
39
53
  style: {
40
54
  backgroundImage: `url(${image})`
41
55
  }
42
56
  }), /*#__PURE__*/React.createElement("div", {
43
- className: classnames(style.titleWrapper, innerHTML) // eslint-disable-next-line react/no-danger
57
+ "data-name": "answerText",
58
+ className: style.titleWrapper
59
+ }, /*#__PURE__*/React.createElement("div", {
60
+ className: classnames(style.title, innerHTML) // eslint-disable-next-line react/no-danger
44
61
  ,
45
62
  dangerouslySetInnerHTML: {
46
63
  __html: title
47
64
  }
48
- }));
65
+ }))));
49
66
  });
50
67
  return /*#__PURE__*/React.createElement("div", {
51
68
  "data-name": "qcm-graphic-wrapper",
@@ -61,7 +78,8 @@ QCMImage.propTypes = process.env.NODE_ENV !== "production" ? {
61
78
  title: PropTypes.string,
62
79
  selected: PropTypes.bool,
63
80
  onClick: PropTypes.func,
64
- image: PropTypes.string
81
+ image: PropTypes.string,
82
+ ariaLabel: PropTypes.string
65
83
  }))
66
84
  } : {};
67
85
  export default QCMImage;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/molecule/questions/qcm-graphic/index.js"],"names":["React","PropTypes","classnames","Provider","innerHTML","style","QCMImage","props","context","answers","answersViews","map","answer","key","onClick","title","selected","image","skin","primarySkinColor","selectedStyle","backgroundColor","borderColor","imageWrapper","backgroundImage","titleWrapper","__html","wrapper","contextTypes","childContextTypes","propTypes","arrayOf","shape","string","bool","func"],"mappings":";AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,QAAP,MAAqB,wBAArB;AACA,SAAQC,SAAR,QAAwB,+BAAxB;AACA,OAAOC,KAAP,MAAkB,aAAlB;;AAEA,MAAMC,QAAQ,GAAG,CAACC,KAAD,EAAQC,OAAR,KAAoB;AACnC,QAAM;AAACC,IAAAA;AAAD,MAAYF,KAAlB;AAEA,QAAMG,YAAY,GAAGD,OAAO,CAACE,GAAR,CAAY,CAACC,MAAD,EAASC,GAAT,KAAiB;AAChD,UAAM;AAACC,MAAAA,OAAD;AAAUC,MAAAA,KAAV;AAAiBC,MAAAA,QAAjB;AAA2BC,MAAAA;AAA3B,QAAoCL,MAA1C;AACA,UAAM;AAACM,MAAAA;AAAD,QAASV,OAAf;;AAEA,UAAMW,gBAAgB,GAAG,OAAM,SAAN,EAAiB,gBAAjB,EAAmCD,IAAnC,CAAzB;;AACA,UAAME,aAAa,GAAGJ,QAAQ,GAC1B;AAACK,MAAAA,eAAe,EAAEF,gBAAlB;AAAoCG,MAAAA,WAAW,EAAEH;AAAjD,KAD0B,GAE1B,IAFJ;AAGA,wBACE;AACE,MAAA,SAAS,EAAEH,QAAQ,GAAGX,KAAK,CAACW,QAAT,GAAoBX,KAAK,CAACO,MAD/C;AAEE,MAAA,OAAO,EAAEE,OAFX;AAGE,uBAAeE,QAHjB;AAIE,MAAA,KAAK,EAAEI,aAJT;AAKE,MAAA,GAAG,EAAEP;AALP,oBAOE;AACE,MAAA,SAAS,EAAER,KAAK,CAACkB,YADnB;AAEE,mBAAU,eAFZ;AAGE,MAAA,KAAK,EAAE;AACLC,QAAAA,eAAe,EAAG,OAAMP,KAAM;AADzB;AAHT,MAPF,eAcE;AACE,MAAA,SAAS,EAAEf,UAAU,CAACG,KAAK,CAACoB,YAAP,EAAqBrB,SAArB,CADvB,CAEE;AAFF;AAGE,MAAA,uBAAuB,EAAE;AAACsB,QAAAA,MAAM,EAAEX;AAAT;AAH3B,MAdF,CADF;AAsBD,GA9BoB,CAArB;AAgCA,sBACE;AAAK,iBAAU,qBAAf;AAAqC,IAAA,SAAS,EAAEV,KAAK,CAACsB;AAAtD,KACGjB,YADH,CADF;AAKD,CAxCD;;AA0CAJ,QAAQ,CAACsB,YAAT,GAAwB;AACtBV,EAAAA,IAAI,EAAEf,QAAQ,CAAC0B,iBAAT,CAA2BX;AADX,CAAxB;AAIAZ,QAAQ,CAACwB,SAAT,2CAAqB;AACnBrB,EAAAA,OAAO,EAAER,SAAS,CAAC8B,OAAV,CACP9B,SAAS,CAAC+B,KAAV,CAAgB;AACdjB,IAAAA,KAAK,EAAEd,SAAS,CAACgC,MADH;AAEdjB,IAAAA,QAAQ,EAAEf,SAAS,CAACiC,IAFN;AAGdpB,IAAAA,OAAO,EAAEb,SAAS,CAACkC,IAHL;AAIdlB,IAAAA,KAAK,EAAEhB,SAAS,CAACgC;AAJH,GAAhB,CADO;AADU,CAArB;AAWA,eAAe3B,QAAf","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {getOr} from 'lodash/fp';\nimport classnames from 'classnames';\nimport Provider from '../../../atom/provider';\nimport {innerHTML} from '../../../atom/label/style.css';\nimport style from './style.css';\n\nconst QCMImage = (props, context) => {\n const {answers} = props;\n\n const answersViews = answers.map((answer, key) => {\n const {onClick, title, selected, image} = answer;\n const {skin} = context;\n\n const primarySkinColor = getOr('#00B0FF', 'common.primary', skin);\n const selectedStyle = selected\n ? {backgroundColor: primarySkinColor, borderColor: primarySkinColor}\n : null;\n return (\n <div\n className={selected ? style.selected : style.answer}\n onClick={onClick}\n data-selected={selected}\n style={selectedStyle}\n key={key}\n >\n <div\n className={style.imageWrapper}\n data-name=\"answerGraphic\"\n style={{\n backgroundImage: `url(${image})`\n }}\n />\n <div\n className={classnames(style.titleWrapper, innerHTML)}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: title}}\n />\n </div>\n );\n });\n\n return (\n <div data-name=\"qcm-graphic-wrapper\" className={style.wrapper}>\n {answersViews}\n </div>\n );\n};\n\nQCMImage.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nQCMImage.propTypes = {\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string,\n selected: PropTypes.bool,\n onClick: PropTypes.func,\n image: PropTypes.string\n })\n )\n};\n\nexport default QCMImage;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/molecule/questions/qcm-graphic/index.js"],"names":["React","PropTypes","classnames","Provider","innerHTML","getShadowBoxColorFromPrimary","style","QCMImage","props","context","answers","skin","primarySkinColor","answersViews","map","answer","key","onClick","title","selected","image","ariaLabel","boxShadow","backgroundColor","background","content","imageWrapper","backgroundImage","titleWrapper","__html","wrapper","contextTypes","childContextTypes","propTypes","arrayOf","shape","string","bool","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {getOr} from 'lodash/fp';\nimport classnames from 'classnames';\nimport Provider from '../../../atom/provider';\nimport {innerHTML} from '../../../atom/label/style.css';\nimport {getShadowBoxColorFromPrimary} from '../../../util/get-shadow-box-color-from-primary';\nimport style from './style.css';\n\nconst QCMImage = (props, context) => {\n const {answers} = props;\n const {skin} = context;\n const primarySkinColor = getOr('#00B0FF', 'common.primary', skin);\n\n const answersViews = answers.map((answer, key) => {\n const {onClick, title, selected, image, ariaLabel} = answer;\n\n return (\n <div\n onClick={onClick}\n data-selected={selected}\n data-name=\"answerGraphic\"\n style={{\n ...(selected && {\n boxShadow: `0 4px 16px ${getShadowBoxColorFromPrimary(primarySkinColor)}`\n })\n }}\n className={selected ? style.selected : style.answer}\n key={key}\n >\n <div\n data-name=\"answerBackground\"\n style={{\n backgroundColor: selected ? primarySkinColor : '#F4F4F5'\n }}\n className={style.background}\n />\n <div data-name=\"answerContent\" className={style.content}>\n <div\n className={style.imageWrapper}\n data-name=\"answerImage\"\n aria-label={ariaLabel || title}\n style={{\n backgroundImage: `url(${image})`\n }}\n />\n <div data-name=\"answerText\" className={style.titleWrapper}>\n <div\n className={classnames(style.title, innerHTML)}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: title}}\n />\n </div>\n </div>\n </div>\n );\n });\n\n return (\n <div data-name=\"qcm-graphic-wrapper\" className={style.wrapper}>\n {answersViews}\n </div>\n );\n};\n\nQCMImage.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nQCMImage.propTypes = {\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string,\n selected: PropTypes.bool,\n onClick: PropTypes.func,\n image: PropTypes.string,\n ariaLabel: PropTypes.string\n })\n )\n};\n\nexport default QCMImage;\n"],"file":"index.js"}