@nauedu/frontend-component-header 14.0.0-semantically-released → 18.0.0

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 (79) hide show
  1. package/README.rst +107 -33
  2. package/dist/Avatar.js +5 -7
  3. package/dist/Avatar.js.map +1 -1
  4. package/dist/DesktopHeader.js +88 -71
  5. package/dist/DesktopHeader.js.map +1 -1
  6. package/dist/Header.js +79 -39
  7. package/dist/Header.js.map +1 -1
  8. package/dist/Header.messages.js +15 -0
  9. package/dist/Header.messages.js.map +1 -1
  10. package/dist/Header.test.jsx +67 -90
  11. package/dist/Icons.js +1 -2
  12. package/dist/Icons.js.map +1 -1
  13. package/dist/Logo.js +11 -21
  14. package/dist/Logo.js.map +1 -1
  15. package/dist/Menu/Menu.js +42 -88
  16. package/dist/Menu/Menu.js.map +1 -1
  17. package/dist/Menu/index.js.map +1 -1
  18. package/dist/MobileHeader.js +80 -76
  19. package/dist/MobileHeader.js.map +1 -1
  20. package/dist/__snapshots__/Header.test.jsx.snap +8 -8
  21. package/dist/generic/messages.js.map +1 -1
  22. package/dist/i18n/index.js +1 -30
  23. package/dist/i18n/index.js.map +1 -1
  24. package/dist/index.js +2 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/index.scss +11 -1
  27. package/dist/learning-header/AnonymousUserMenu.js +3 -5
  28. package/dist/learning-header/AnonymousUserMenu.js.map +1 -1
  29. package/dist/learning-header/AuthenticatedUserDropdown.js +8 -10
  30. package/dist/learning-header/AuthenticatedUserDropdown.js.map +1 -1
  31. package/dist/learning-header/LearningHeader.js +22 -42
  32. package/dist/learning-header/LearningHeader.js.map +1 -1
  33. package/dist/learning-header/_header.scss +5 -2
  34. package/dist/learning-header/data/api.js +30 -42
  35. package/dist/learning-header/data/api.js.map +1 -1
  36. package/dist/learning-header/data/api.test.js +124 -175
  37. package/dist/learning-header/data/api.test.js.map +1 -1
  38. package/dist/learning-header/messages.js.map +1 -1
  39. package/dist/setupTest.js +9 -13
  40. package/dist/studio-header/BrandNav.js +21 -0
  41. package/dist/studio-header/BrandNav.js.map +1 -0
  42. package/dist/studio-header/CourseLockUp.js +45 -0
  43. package/dist/studio-header/CourseLockUp.js.map +1 -0
  44. package/dist/studio-header/HeaderBody.js +131 -0
  45. package/dist/studio-header/HeaderBody.js.map +1 -0
  46. package/dist/studio-header/MobileHeader.js +79 -0
  47. package/dist/studio-header/MobileHeader.js.map +1 -0
  48. package/dist/studio-header/MobileMenu.js +45 -0
  49. package/dist/studio-header/MobileMenu.js.map +1 -0
  50. package/dist/studio-header/NavDropdownMenu.js +30 -0
  51. package/dist/studio-header/NavDropdownMenu.js.map +1 -0
  52. package/dist/studio-header/StudioHeader.js +72 -0
  53. package/dist/studio-header/StudioHeader.js.map +1 -0
  54. package/dist/studio-header/StudioHeader.scss +49 -0
  55. package/dist/studio-header/UserMenu.js +55 -0
  56. package/dist/studio-header/UserMenu.js.map +1 -0
  57. package/dist/studio-header/index.js +3 -0
  58. package/dist/studio-header/index.js.map +1 -0
  59. package/dist/studio-header/messages.js +60 -0
  60. package/dist/studio-header/messages.js.map +1 -0
  61. package/dist/studio-header/utils.js +29 -0
  62. package/dist/studio-header/utils.js.map +1 -0
  63. package/dist/test-utils.js +26 -0
  64. package/dist/test-utils.js.map +1 -0
  65. package/package.json +33 -33
  66. package/dist/i18n/messages/ar.json +0 -30
  67. package/dist/i18n/messages/ca.json +0 -1
  68. package/dist/i18n/messages/es_419.json +0 -30
  69. package/dist/i18n/messages/fr.json +0 -30
  70. package/dist/i18n/messages/fr_CA.json +0 -30
  71. package/dist/i18n/messages/he.json +0 -1
  72. package/dist/i18n/messages/id.json +0 -1
  73. package/dist/i18n/messages/ko_KR.json +0 -2
  74. package/dist/i18n/messages/pl.json +0 -1
  75. package/dist/i18n/messages/pt_BR.json +0 -2
  76. package/dist/i18n/messages/ru.json +0 -1
  77. package/dist/i18n/messages/th.json +0 -1
  78. package/dist/i18n/messages/uk.json +0 -1
  79. package/dist/i18n/messages/zh_CN.json +0 -30
package/dist/Menu/Menu.js CHANGED
@@ -1,52 +1,34 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
-
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
2
  var _excluded = ["tag", "className"],
4
- _excluded2 = ["tag", "className"];
5
-
3
+ _excluded2 = ["tag", "className"];
6
4
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7
-
8
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
9
-
5
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
10
6
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
11
-
12
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
13
-
14
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
15
-
16
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17
-
7
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
18
8
  function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
19
-
20
9
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
21
-
22
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
23
-
24
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
25
-
26
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
-
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
-
30
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
31
-
10
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
12
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
13
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
14
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
18
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
32
19
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
33
-
34
20
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
35
-
36
21
  import React from 'react';
37
22
  import { CSSTransition } from 'react-transition-group';
38
23
  import PropTypes from 'prop-types';
39
-
40
- function MenuTrigger(_ref) {
24
+ var MenuTrigger = function MenuTrigger(_ref) {
41
25
  var tag = _ref.tag,
42
- className = _ref.className,
43
- attributes = _objectWithoutProperties(_ref, _excluded);
44
-
26
+ className = _ref.className,
27
+ attributes = _objectWithoutProperties(_ref, _excluded);
45
28
  return /*#__PURE__*/React.createElement(tag, _objectSpread({
46
29
  className: "menu-trigger ".concat(className)
47
30
  }, attributes));
48
- }
49
-
31
+ };
50
32
  MenuTrigger.propTypes = {
51
33
  tag: PropTypes.string,
52
34
  className: PropTypes.string
@@ -55,18 +37,16 @@ MenuTrigger.defaultProps = {
55
37
  tag: 'div',
56
38
  className: null
57
39
  };
58
- var MenuTriggerType = /*#__PURE__*/React.createElement(MenuTrigger, null).type;
59
-
60
- function MenuContent(_ref2) {
40
+ var MenuTriggerComp = /*#__PURE__*/React.createElement(MenuTrigger, null);
41
+ var MenuTriggerType = MenuTriggerComp.type;
42
+ var MenuContent = function MenuContent(_ref2) {
61
43
  var tag = _ref2.tag,
62
- className = _ref2.className,
63
- attributes = _objectWithoutProperties(_ref2, _excluded2);
64
-
44
+ className = _ref2.className,
45
+ attributes = _objectWithoutProperties(_ref2, _excluded2);
65
46
  return /*#__PURE__*/React.createElement(tag, _objectSpread({
66
47
  className: ['menu-content', className].join(' ')
67
48
  }, attributes));
68
- }
69
-
49
+ };
70
50
  MenuContent.propTypes = {
71
51
  tag: PropTypes.string,
72
52
  className: PropTypes.string
@@ -86,56 +66,49 @@ var menuPropTypes = {
86
66
  transitionClassName: PropTypes.string,
87
67
  children: PropTypes.arrayOf(PropTypes.node).isRequired
88
68
  };
89
-
90
69
  var Menu = /*#__PURE__*/function (_React$Component) {
91
- _inherits(Menu, _React$Component);
92
-
93
- var _super = _createSuper(Menu);
94
-
95
70
  function Menu(props) {
96
71
  var _this;
97
-
98
72
  _classCallCheck(this, Menu);
99
-
100
- _this = _super.call(this, props);
73
+ _this = _callSuper(this, Menu, [props]);
101
74
  _this.menu = /*#__PURE__*/React.createRef();
102
75
  _this.state = {
103
76
  expanded: false
104
77
  };
105
- _this.onTriggerClick = _this.onTriggerClick.bind(_assertThisInitialized(_this));
106
- _this.onCloseClick = _this.onCloseClick.bind(_assertThisInitialized(_this));
107
- _this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));
108
- _this.onDocumentClick = _this.onDocumentClick.bind(_assertThisInitialized(_this));
109
- _this.onMouseEnter = _this.onMouseEnter.bind(_assertThisInitialized(_this));
110
- _this.onMouseLeave = _this.onMouseLeave.bind(_assertThisInitialized(_this));
78
+ _this.onTriggerClick = _this.onTriggerClick.bind(_this);
79
+ _this.onCloseClick = _this.onCloseClick.bind(_this);
80
+ _this.onKeyDown = _this.onKeyDown.bind(_this);
81
+ _this.onDocumentClick = _this.onDocumentClick.bind(_this);
82
+ _this.onMouseEnter = _this.onMouseEnter.bind(_this);
83
+ _this.onMouseLeave = _this.onMouseLeave.bind(_this);
111
84
  return _this;
112
- } // Lifecycle Events
85
+ }
113
86
 
114
-
115
- _createClass(Menu, [{
87
+ // Lifecycle Events
88
+ _inherits(Menu, _React$Component);
89
+ return _createClass(Menu, [{
116
90
  key: "componentWillUnmount",
117
91
  value: function componentWillUnmount() {
118
92
  document.removeEventListener('touchend', this.onDocumentClick, true);
119
- document.removeEventListener('click', this.onDocumentClick, true); // Call onClose callback when unmounting and open
93
+ document.removeEventListener('click', this.onDocumentClick, true);
120
94
 
95
+ // Call onClose callback when unmounting and open
121
96
  if (this.state.expanded && this.props.onClose) {
122
97
  this.props.onClose();
123
98
  }
124
- } // Event handlers
99
+ }
125
100
 
101
+ // Event handlers
126
102
  }, {
127
103
  key: "onDocumentClick",
128
104
  value: function onDocumentClick(e) {
129
105
  if (!this.props.closeOnDocumentClick) {
130
106
  return;
131
107
  }
132
-
133
108
  var clickIsInMenu = this.menu.current === e.target || this.menu.current.contains(e.target);
134
-
135
109
  if (clickIsInMenu) {
136
110
  return;
137
111
  }
138
-
139
112
  this.close();
140
113
  }
141
114
  }, {
@@ -146,7 +119,6 @@ var Menu = /*#__PURE__*/function (_React$Component) {
146
119
  if (this.state.expanded && e.target.getAttribute('href')) {
147
120
  return;
148
121
  }
149
-
150
122
  e.preventDefault();
151
123
  this.toggle();
152
124
  }
@@ -162,7 +134,6 @@ var Menu = /*#__PURE__*/function (_React$Component) {
162
134
  if (!this.state.expanded) {
163
135
  return;
164
136
  }
165
-
166
137
  switch (e.key) {
167
138
  case 'Escape':
168
139
  {
@@ -172,7 +143,6 @@ var Menu = /*#__PURE__*/function (_React$Component) {
172
143
  this.close();
173
144
  break;
174
145
  }
175
-
176
146
  case 'Enter':
177
147
  {
178
148
  // Using focusable elements instead of a ref to the trigger
@@ -181,37 +151,30 @@ var Menu = /*#__PURE__*/function (_React$Component) {
181
151
  e.preventDefault();
182
152
  this.toggle();
183
153
  }
184
-
185
154
  break;
186
155
  }
187
-
188
156
  case 'Tab':
189
157
  {
190
158
  e.preventDefault();
191
-
192
159
  if (e.shiftKey) {
193
160
  this.focusPrevious();
194
161
  } else {
195
162
  this.focusNext();
196
163
  }
197
-
198
164
  break;
199
165
  }
200
-
201
166
  case 'ArrowDown':
202
167
  {
203
168
  e.preventDefault();
204
169
  this.focusNext();
205
170
  break;
206
171
  }
207
-
208
172
  case 'ArrowUp':
209
173
  {
210
174
  e.preventDefault();
211
175
  this.focusPrevious();
212
176
  break;
213
177
  }
214
-
215
178
  default:
216
179
  }
217
180
  }
@@ -221,7 +184,6 @@ var Menu = /*#__PURE__*/function (_React$Component) {
221
184
  if (!this.props.respondToPointerEvents) {
222
185
  return;
223
186
  }
224
-
225
187
  this.open();
226
188
  }
227
189
  }, {
@@ -230,10 +192,10 @@ var Menu = /*#__PURE__*/function (_React$Component) {
230
192
  if (!this.props.respondToPointerEvents) {
231
193
  return;
232
194
  }
233
-
234
195
  this.close();
235
- } // Internal functions
196
+ }
236
197
 
198
+ // Internal functions
237
199
  }, {
238
200
  key: "getFocusableElements",
239
201
  value: function getFocusableElements() {
@@ -243,7 +205,6 @@ var Menu = /*#__PURE__*/function (_React$Component) {
243
205
  key: "getAttributesFromProps",
244
206
  value: function getAttributesFromProps() {
245
207
  var _this2 = this;
246
-
247
208
  // Any extra props are attributes for the menu
248
209
  var attributes = {};
249
210
  Object.keys(this.props).filter(function (property) {
@@ -275,12 +236,11 @@ var Menu = /*#__PURE__*/function (_React$Component) {
275
236
  if (this.props.onOpen) {
276
237
  this.props.onOpen();
277
238
  }
278
-
279
239
  this.setState({
280
240
  expanded: true
281
- }); // Listen to touchend and click events to ensure the menu
241
+ });
242
+ // Listen to touchend and click events to ensure the menu
282
243
  // can be closed on mobile, pointer, and mixed input devices
283
-
284
244
  document.addEventListener('touchend', this.onDocumentClick, true);
285
245
  document.addEventListener('click', this.onDocumentClick, true);
286
246
  }
@@ -290,7 +250,6 @@ var Menu = /*#__PURE__*/function (_React$Component) {
290
250
  if (this.props.onClose) {
291
251
  this.props.onClose();
292
252
  }
293
-
294
253
  this.setState({
295
254
  expanded: false
296
255
  });
@@ -329,13 +288,11 @@ var Menu = /*#__PURE__*/function (_React$Component) {
329
288
  key: "render",
330
289
  value: function render() {
331
290
  var _this3 = this;
332
-
333
291
  var className = this.props.className;
334
292
  var wrappedChildren = React.Children.map(this.props.children, function (child) {
335
293
  if (child.type === MenuTriggerType) {
336
294
  return _this3.renderTrigger(child);
337
295
  }
338
-
339
296
  return _this3.renderMenuContent(child);
340
297
  });
341
298
  var rootClassName = this.state.expanded ? 'menu expanded' : 'menu';
@@ -348,10 +305,7 @@ var Menu = /*#__PURE__*/function (_React$Component) {
348
305
  }, this.getAttributesFromProps()), wrappedChildren);
349
306
  }
350
307
  }]);
351
-
352
- return Menu;
353
308
  }(React.Component);
354
-
355
309
  Menu.propTypes = menuPropTypes;
356
310
  Menu.defaultProps = {
357
311
  tag: 'div',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Menu/Menu.jsx"],"names":["React","CSSTransition","PropTypes","MenuTrigger","tag","className","attributes","createElement","propTypes","string","defaultProps","MenuTriggerType","type","MenuContent","join","menuPropTypes","onClose","func","onOpen","closeOnDocumentClick","bool","respondToPointerEvents","transitionTimeout","number","transitionClassName","children","arrayOf","node","isRequired","Menu","props","menu","createRef","state","expanded","onTriggerClick","bind","onCloseClick","onKeyDown","onDocumentClick","onMouseEnter","onMouseLeave","document","removeEventListener","e","clickIsInMenu","current","target","contains","close","getAttribute","preventDefault","toggle","getFocusableElements","focus","key","stopPropagation","activeElement","shiftKey","focusPrevious","focusNext","open","querySelectorAll","Object","keys","filter","property","undefined","forEach","focusableElements","Array","from","activeIndex","indexOf","nextIndex","length","previousIndex","setState","addEventListener","cloneElement","onClick","wrappedChildren","Children","map","child","renderTrigger","renderMenuContent","rootClassName","ref","getAttributesFromProps","Component"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\n\nfunction MenuTrigger({ tag, className, ...attributes }) {\n return React.createElement(tag, {\n className: `menu-trigger ${className}`,\n ...attributes,\n });\n}\nMenuTrigger.propTypes = {\n tag: PropTypes.string,\n className: PropTypes.string,\n};\nMenuTrigger.defaultProps = {\n tag: 'div',\n className: null,\n};\nconst MenuTriggerType = <MenuTrigger />.type;\n\nfunction MenuContent({ tag, className, ...attributes }) {\n return React.createElement(tag, {\n className: ['menu-content', className].join(' '),\n ...attributes,\n });\n}\nMenuContent.propTypes = {\n tag: PropTypes.string,\n className: PropTypes.string,\n};\nMenuContent.defaultProps = {\n tag: 'div',\n className: null,\n};\n\nconst menuPropTypes = {\n tag: PropTypes.string,\n onClose: PropTypes.func,\n onOpen: PropTypes.func,\n closeOnDocumentClick: PropTypes.bool,\n respondToPointerEvents: PropTypes.bool,\n className: PropTypes.string,\n transitionTimeout: PropTypes.number,\n transitionClassName: PropTypes.string,\n children: PropTypes.arrayOf(PropTypes.node).isRequired,\n};\n\nclass Menu extends React.Component {\n constructor(props) {\n super(props);\n\n this.menu = React.createRef();\n this.state = {\n expanded: false,\n };\n\n this.onTriggerClick = this.onTriggerClick.bind(this);\n this.onCloseClick = this.onCloseClick.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.onDocumentClick = this.onDocumentClick.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n }\n\n // Lifecycle Events\n componentWillUnmount() {\n document.removeEventListener('touchend', this.onDocumentClick, true);\n document.removeEventListener('click', this.onDocumentClick, true);\n\n // Call onClose callback when unmounting and open\n if (this.state.expanded && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n // Event handlers\n onDocumentClick(e) {\n if (!this.props.closeOnDocumentClick) {\n return;\n }\n\n const clickIsInMenu = this.menu.current === e.target || this.menu.current.contains(e.target);\n if (clickIsInMenu) {\n return;\n }\n\n this.close();\n }\n\n onTriggerClick(e) {\n // Let the browser follow the link of the trigger if the menu\n // is already expanded and the trigger has an href attribute\n if (this.state.expanded && e.target.getAttribute('href')) {\n return;\n }\n\n e.preventDefault();\n this.toggle();\n }\n\n onCloseClick() {\n this.getFocusableElements()[0].focus();\n this.close();\n }\n\n onKeyDown(e) {\n if (!this.state.expanded) {\n return;\n }\n switch (e.key) {\n case 'Escape': {\n e.preventDefault();\n e.stopPropagation();\n this.getFocusableElements()[0].focus();\n this.close();\n break;\n }\n case 'Enter': {\n // Using focusable elements instead of a ref to the trigger\n // because Hyperlink and Button can handle refs as functional components\n if (document.activeElement === this.getFocusableElements()[0]) {\n e.preventDefault();\n this.toggle();\n }\n break;\n }\n case 'Tab': {\n e.preventDefault();\n if (e.shiftKey) {\n this.focusPrevious();\n } else {\n this.focusNext();\n }\n break;\n }\n case 'ArrowDown': {\n e.preventDefault();\n this.focusNext();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n this.focusPrevious();\n break;\n }\n default:\n }\n }\n\n onMouseEnter() {\n if (!this.props.respondToPointerEvents) {\n return;\n }\n this.open();\n }\n\n onMouseLeave() {\n if (!this.props.respondToPointerEvents) {\n return;\n }\n this.close();\n }\n\n // Internal functions\n\n getFocusableElements() {\n return this.menu.current.querySelectorAll('button:not([disabled]), [href]:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled])');\n }\n\n getAttributesFromProps() {\n // Any extra props are attributes for the menu\n const attributes = {};\n Object.keys(this.props)\n .filter(property => menuPropTypes[property] === undefined)\n .forEach((property) => {\n attributes[property] = this.props[property];\n });\n return attributes;\n }\n\n focusNext() {\n const focusableElements = Array.from(this.getFocusableElements());\n const activeIndex = focusableElements.indexOf(document.activeElement);\n const nextIndex = (activeIndex + 1) % focusableElements.length;\n focusableElements[nextIndex].focus();\n }\n\n focusPrevious() {\n const focusableElements = Array.from(this.getFocusableElements());\n const activeIndex = focusableElements.indexOf(document.activeElement);\n const previousIndex = (activeIndex || focusableElements.length) - 1;\n focusableElements[previousIndex].focus();\n }\n\n open() {\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n this.setState({ expanded: true });\n // Listen to touchend and click events to ensure the menu\n // can be closed on mobile, pointer, and mixed input devices\n document.addEventListener('touchend', this.onDocumentClick, true);\n document.addEventListener('click', this.onDocumentClick, true);\n }\n\n close() {\n if (this.props.onClose) {\n this.props.onClose();\n }\n this.setState({ expanded: false });\n document.removeEventListener('touchend', this.onDocumentClick, true);\n document.removeEventListener('click', this.onDocumentClick, true);\n }\n\n toggle() {\n if (this.state.expanded) {\n this.close();\n } else {\n this.open();\n }\n }\n\n renderTrigger(node) {\n return React.cloneElement(node, {\n onClick: this.onTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': this.state.expanded,\n });\n }\n\n renderMenuContent(node) {\n return (\n <CSSTransition\n in={this.state.expanded}\n timeout={this.props.transitionTimeout}\n classNames={this.props.transitionClassName}\n unmountOnExit\n >\n {node}\n </CSSTransition>\n );\n }\n\n render() {\n const { className } = this.props;\n\n const wrappedChildren = React.Children.map(this.props.children, (child) => {\n if (child.type === MenuTriggerType) {\n return this.renderTrigger(child);\n }\n return this.renderMenuContent(child);\n });\n\n const rootClassName = this.state.expanded ? 'menu expanded' : 'menu';\n\n return React.createElement(this.props.tag, {\n className: `${rootClassName} ${className}`,\n ref: this.menu,\n onKeyDown: this.onKeyDown,\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n ...this.getAttributesFromProps(),\n }, wrappedChildren);\n }\n}\n\nMenu.propTypes = menuPropTypes;\nMenu.defaultProps = {\n tag: 'div',\n className: null,\n onClose: null,\n onOpen: null,\n respondToPointerEvents: false,\n closeOnDocumentClick: true,\n transitionTimeout: 250,\n transitionClassName: 'menu-content',\n};\n\nexport { Menu, MenuTrigger, MenuContent };\n"],"file":"Menu.js"}
1
+ {"version":3,"file":"Menu.js","names":["React","CSSTransition","PropTypes","MenuTrigger","_ref","tag","className","attributes","_objectWithoutProperties","_excluded","createElement","_objectSpread","concat","propTypes","string","defaultProps","MenuTriggerComp","MenuTriggerType","type","MenuContent","_ref2","_excluded2","join","menuPropTypes","onClose","func","onOpen","closeOnDocumentClick","bool","respondToPointerEvents","transitionTimeout","number","transitionClassName","children","arrayOf","node","isRequired","Menu","_React$Component","props","_this","_classCallCheck","_callSuper","menu","createRef","state","expanded","onTriggerClick","bind","onCloseClick","onKeyDown","onDocumentClick","onMouseEnter","onMouseLeave","_inherits","_createClass","key","value","componentWillUnmount","document","removeEventListener","e","clickIsInMenu","current","target","contains","close","getAttribute","preventDefault","toggle","getFocusableElements","focus","stopPropagation","activeElement","shiftKey","focusPrevious","focusNext","open","querySelectorAll","getAttributesFromProps","_this2","Object","keys","filter","property","undefined","forEach","focusableElements","Array","from","activeIndex","indexOf","nextIndex","length","previousIndex","setState","addEventListener","renderTrigger","cloneElement","onClick","renderMenuContent","timeout","classNames","unmountOnExit","render","_this3","wrappedChildren","Children","map","child","rootClassName","ref","Component"],"sources":["../../src/Menu/Menu.jsx"],"sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\n\nconst MenuTrigger = ({ tag, className, ...attributes }) => React.createElement(tag, {\n className: `menu-trigger ${className}`,\n ...attributes,\n});\nMenuTrigger.propTypes = {\n tag: PropTypes.string,\n className: PropTypes.string,\n};\nMenuTrigger.defaultProps = {\n tag: 'div',\n className: null,\n};\nconst MenuTriggerComp = <MenuTrigger />;\nconst MenuTriggerType = MenuTriggerComp.type;\n\nconst MenuContent = ({ tag, className, ...attributes }) => React.createElement(tag, {\n className: ['menu-content', className].join(' '),\n ...attributes,\n});\nMenuContent.propTypes = {\n tag: PropTypes.string,\n className: PropTypes.string,\n};\nMenuContent.defaultProps = {\n tag: 'div',\n className: null,\n};\n\nconst menuPropTypes = {\n tag: PropTypes.string,\n onClose: PropTypes.func,\n onOpen: PropTypes.func,\n closeOnDocumentClick: PropTypes.bool,\n respondToPointerEvents: PropTypes.bool,\n className: PropTypes.string,\n transitionTimeout: PropTypes.number,\n transitionClassName: PropTypes.string,\n children: PropTypes.arrayOf(PropTypes.node).isRequired,\n};\n\nclass Menu extends React.Component {\n constructor(props) {\n super(props);\n\n this.menu = React.createRef();\n this.state = {\n expanded: false,\n };\n\n this.onTriggerClick = this.onTriggerClick.bind(this);\n this.onCloseClick = this.onCloseClick.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.onDocumentClick = this.onDocumentClick.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n }\n\n // Lifecycle Events\n componentWillUnmount() {\n document.removeEventListener('touchend', this.onDocumentClick, true);\n document.removeEventListener('click', this.onDocumentClick, true);\n\n // Call onClose callback when unmounting and open\n if (this.state.expanded && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n // Event handlers\n onDocumentClick(e) {\n if (!this.props.closeOnDocumentClick) {\n return;\n }\n\n const clickIsInMenu = this.menu.current === e.target || this.menu.current.contains(e.target);\n if (clickIsInMenu) {\n return;\n }\n\n this.close();\n }\n\n onTriggerClick(e) {\n // Let the browser follow the link of the trigger if the menu\n // is already expanded and the trigger has an href attribute\n if (this.state.expanded && e.target.getAttribute('href')) {\n return;\n }\n\n e.preventDefault();\n this.toggle();\n }\n\n onCloseClick() {\n this.getFocusableElements()[0].focus();\n this.close();\n }\n\n onKeyDown(e) {\n if (!this.state.expanded) {\n return;\n }\n switch (e.key) {\n case 'Escape': {\n e.preventDefault();\n e.stopPropagation();\n this.getFocusableElements()[0].focus();\n this.close();\n break;\n }\n case 'Enter': {\n // Using focusable elements instead of a ref to the trigger\n // because Hyperlink and Button can handle refs as functional components\n if (document.activeElement === this.getFocusableElements()[0]) {\n e.preventDefault();\n this.toggle();\n }\n break;\n }\n case 'Tab': {\n e.preventDefault();\n if (e.shiftKey) {\n this.focusPrevious();\n } else {\n this.focusNext();\n }\n break;\n }\n case 'ArrowDown': {\n e.preventDefault();\n this.focusNext();\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n this.focusPrevious();\n break;\n }\n default:\n }\n }\n\n onMouseEnter() {\n if (!this.props.respondToPointerEvents) {\n return;\n }\n this.open();\n }\n\n onMouseLeave() {\n if (!this.props.respondToPointerEvents) {\n return;\n }\n this.close();\n }\n\n // Internal functions\n\n getFocusableElements() {\n return this.menu.current.querySelectorAll('button:not([disabled]), [href]:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled])');\n }\n\n getAttributesFromProps() {\n // Any extra props are attributes for the menu\n const attributes = {};\n Object.keys(this.props)\n .filter(property => menuPropTypes[property] === undefined)\n .forEach((property) => {\n attributes[property] = this.props[property];\n });\n return attributes;\n }\n\n focusNext() {\n const focusableElements = Array.from(this.getFocusableElements());\n const activeIndex = focusableElements.indexOf(document.activeElement);\n const nextIndex = (activeIndex + 1) % focusableElements.length;\n focusableElements[nextIndex].focus();\n }\n\n focusPrevious() {\n const focusableElements = Array.from(this.getFocusableElements());\n const activeIndex = focusableElements.indexOf(document.activeElement);\n const previousIndex = (activeIndex || focusableElements.length) - 1;\n focusableElements[previousIndex].focus();\n }\n\n open() {\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n this.setState({ expanded: true });\n // Listen to touchend and click events to ensure the menu\n // can be closed on mobile, pointer, and mixed input devices\n document.addEventListener('touchend', this.onDocumentClick, true);\n document.addEventListener('click', this.onDocumentClick, true);\n }\n\n close() {\n if (this.props.onClose) {\n this.props.onClose();\n }\n this.setState({ expanded: false });\n document.removeEventListener('touchend', this.onDocumentClick, true);\n document.removeEventListener('click', this.onDocumentClick, true);\n }\n\n toggle() {\n if (this.state.expanded) {\n this.close();\n } else {\n this.open();\n }\n }\n\n renderTrigger(node) {\n return React.cloneElement(node, {\n onClick: this.onTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': this.state.expanded,\n });\n }\n\n renderMenuContent(node) {\n return (\n <CSSTransition\n in={this.state.expanded}\n timeout={this.props.transitionTimeout}\n classNames={this.props.transitionClassName}\n unmountOnExit\n >\n {node}\n </CSSTransition>\n );\n }\n\n render() {\n const { className } = this.props;\n\n const wrappedChildren = React.Children.map(this.props.children, (child) => {\n if (child.type === MenuTriggerType) {\n return this.renderTrigger(child);\n }\n return this.renderMenuContent(child);\n });\n\n const rootClassName = this.state.expanded ? 'menu expanded' : 'menu';\n\n return React.createElement(this.props.tag, {\n className: `${rootClassName} ${className}`,\n ref: this.menu,\n onKeyDown: this.onKeyDown,\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n ...this.getAttributesFromProps(),\n }, wrappedChildren);\n }\n}\n\nMenu.propTypes = menuPropTypes;\nMenu.defaultProps = {\n tag: 'div',\n className: null,\n onClose: null,\n onOpen: null,\n respondToPointerEvents: false,\n closeOnDocumentClick: true,\n transitionTimeout: 250,\n transitionClassName: 'menu-content',\n};\n\nexport { Menu, MenuTrigger, MenuContent };\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Menu/index.jsx"],"names":["Menu","MenuTrigger","MenuContent"],"mappings":"AAAA,SAASA,IAAT,EAAeC,WAAf,EAA4BC,WAA5B,QAA+C,QAA/C;AAEA,SAASF,IAAT,EAAeC,WAAf,EAA4BC,WAA5B","sourcesContent":["import { Menu, MenuTrigger, MenuContent } from './Menu';\n\nexport { Menu, MenuTrigger, MenuContent };\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["Menu","MenuTrigger","MenuContent"],"sources":["../../src/Menu/index.jsx"],"sourcesContent":["import { Menu, MenuTrigger, MenuContent } from './Menu';\n\nexport { Menu, MenuTrigger, MenuContent };\n"],"mappings":"AAAA,SAASA,IAAI,EAAEC,WAAW,EAAEC,WAAW,QAAQ,QAAQ;AAEvD,SAASF,IAAI,EAAEC,WAAW,EAAEC,WAAW","ignoreList":[]}
@@ -1,75 +1,60 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
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
-
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ 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); }
5
3
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
-
7
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
8
-
4
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
9
5
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
10
-
11
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
12
-
13
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
14
-
15
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
16
-
6
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
7
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
17
9
  function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
18
-
19
10
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
20
-
21
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
22
-
23
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
24
-
11
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
12
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
13
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
14
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
25
15
  import React from 'react';
26
16
  import PropTypes from 'prop-types';
27
17
  import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
28
- import { getConfig } from '@edx/frontend-platform'; // Local Components
18
+ import { getConfig } from '@edx/frontend-platform';
29
19
 
20
+ // Local Components
30
21
  import { Menu, MenuTrigger, MenuContent } from './Menu';
31
22
  import Avatar from './Avatar';
32
- import { LinkedLogo, Logo } from './Logo'; // i18n
23
+ import { LinkedLogo, Logo } from './Logo';
33
24
 
34
- import messages from './Header.messages'; // Assets
25
+ // i18n
26
+ import messages from './Header.messages';
35
27
 
28
+ // Assets
36
29
  import { MenuIcon } from './Icons';
37
-
38
30
  var MobileHeader = /*#__PURE__*/function (_React$Component) {
39
- _inherits(MobileHeader, _React$Component);
40
-
41
- var _super = _createSuper(MobileHeader);
42
-
43
31
  function MobileHeader(props) {
44
32
  _classCallCheck(this, MobileHeader);
45
-
46
33
  // eslint-disable-line no-useless-constructor
47
- return _super.call(this, props);
34
+ return _callSuper(this, MobileHeader, [props]);
48
35
  }
49
-
50
- _createClass(MobileHeader, [{
51
- key: "renderMainMenu",
52
- value: function renderMainMenu() {
53
- var mainMenu = this.props.mainMenu; // Nodes are accepted as a prop
54
-
55
- if (!Array.isArray(mainMenu)) {
56
- return mainMenu;
36
+ _inherits(MobileHeader, _React$Component);
37
+ return _createClass(MobileHeader, [{
38
+ key: "renderMenu",
39
+ value: function renderMenu(menu) {
40
+ // Nodes are accepted as a prop
41
+ if (!Array.isArray(menu)) {
42
+ return menu;
57
43
  }
58
-
59
- return mainMenu.map(function (menuItem) {
44
+ return menu.map(function (menuItem) {
60
45
  var type = menuItem.type,
61
- href = menuItem.href,
62
- content = menuItem.content,
63
- submenuContent = menuItem.submenuContent;
64
-
46
+ href = menuItem.href,
47
+ content = menuItem.content,
48
+ submenuContent = menuItem.submenuContent,
49
+ disabled = menuItem.disabled,
50
+ isActive = menuItem.isActive;
65
51
  if (type === 'item') {
66
52
  return /*#__PURE__*/React.createElement("a", {
67
53
  key: "".concat(type, "-").concat(content),
68
- className: "nav-link",
54
+ className: "nav-link".concat(disabled ? ' disabled' : '').concat(isActive ? ' active' : ''),
69
55
  href: href
70
56
  }, content);
71
57
  }
72
-
73
58
  return /*#__PURE__*/React.createElement(Menu, {
74
59
  key: "".concat(type, "-").concat(content),
75
60
  tag: "div",
@@ -84,21 +69,37 @@ var MobileHeader = /*#__PURE__*/function (_React$Component) {
84
69
  }, submenuContent));
85
70
  });
86
71
  }
72
+ }, {
73
+ key: "renderMainMenu",
74
+ value: function renderMainMenu() {
75
+ var mainMenu = this.props.mainMenu;
76
+ return this.renderMenu(mainMenu);
77
+ }
78
+ }, {
79
+ key: "renderSecondaryMenu",
80
+ value: function renderSecondaryMenu() {
81
+ var secondaryMenu = this.props.secondaryMenu;
82
+ return this.renderMenu(secondaryMenu);
83
+ }
87
84
  }, {
88
85
  key: "renderUserMenuItems",
89
86
  value: function renderUserMenuItems() {
90
87
  var userMenu = this.props.userMenu;
91
- return userMenu.map(function (_ref) {
92
- var type = _ref.type,
88
+ return userMenu.map(function (group) {
89
+ return group.items.map(function (_ref) {
90
+ var type = _ref.type,
91
+ content = _ref.content,
93
92
  href = _ref.href,
94
- content = _ref.content;
95
- return /*#__PURE__*/React.createElement("li", {
96
- className: "nav-item",
97
- key: "".concat(type, "-").concat(content)
98
- }, /*#__PURE__*/React.createElement("a", {
99
- className: "nav-link",
100
- href: href
101
- }, content));
93
+ disabled = _ref.disabled,
94
+ isActive = _ref.isActive;
95
+ return /*#__PURE__*/React.createElement("li", {
96
+ className: "nav-item",
97
+ key: "".concat(type, "-").concat(content)
98
+ }, /*#__PURE__*/React.createElement("a", {
99
+ className: "nav-link".concat(isActive ? ' active' : '').concat(disabled ? ' disabled' : ''),
100
+ href: href
101
+ }, content));
102
+ });
102
103
  });
103
104
  }
104
105
  }, {
@@ -107,8 +108,8 @@ var MobileHeader = /*#__PURE__*/function (_React$Component) {
107
108
  var loggedOutItems = this.props.loggedOutItems;
108
109
  return loggedOutItems.map(function (_ref2, i, arr) {
109
110
  var type = _ref2.type,
110
- href = _ref2.href,
111
- content = _ref2.content;
111
+ href = _ref2.href,
112
+ content = _ref2.content;
112
113
  return /*#__PURE__*/React.createElement("li", {
113
114
  className: "nav-item px-3 my-2",
114
115
  key: "".concat(type, "-").concat(content)
@@ -122,17 +123,17 @@ var MobileHeader = /*#__PURE__*/function (_React$Component) {
122
123
  key: "render",
123
124
  value: function render() {
124
125
  var _this$props = this.props,
125
- logo = _this$props.logo,
126
- logoAltText = _this$props.logoAltText,
127
- logoDestination = _this$props.logoDestination,
128
- loggedIn = _this$props.loggedIn,
129
- avatar = _this$props.avatar,
130
- username = _this$props.username,
131
- stickyOnMobile = _this$props.stickyOnMobile,
132
- intl = _this$props.intl,
133
- mainMenu = _this$props.mainMenu,
134
- userMenu = _this$props.userMenu,
135
- loggedOutItems = _this$props.loggedOutItems;
126
+ logo = _this$props.logo,
127
+ logoAltText = _this$props.logoAltText,
128
+ logoDestination = _this$props.logoDestination,
129
+ loggedIn = _this$props.loggedIn,
130
+ avatar = _this$props.avatar,
131
+ username = _this$props.username,
132
+ stickyOnMobile = _this$props.stickyOnMobile,
133
+ intl = _this$props.intl,
134
+ mainMenu = _this$props.mainMenu,
135
+ userMenu = _this$props.userMenu,
136
+ loggedOutItems = _this$props.loggedOutItems;
136
137
  var logoProps = {
137
138
  src: logo,
138
139
  alt: logoAltText,
@@ -167,7 +168,7 @@ var MobileHeader = /*#__PURE__*/function (_React$Component) {
167
168
  tag: "nav",
168
169
  "aria-label": intl.formatMessage(messages['header.label.main.nav']),
169
170
  className: "nav flex-column pin-left pin-right border-top shadow py-2"
170
- }, this.renderMainMenu()))) : null, /*#__PURE__*/React.createElement("div", {
171
+ }, this.renderMainMenu(), this.renderSecondaryMenu()))) : null, /*#__PURE__*/React.createElement("div", {
171
172
  className: "w-100 d-flex ".concat(logoClasses)
172
173
  }, logoDestination === null ? /*#__PURE__*/React.createElement(Logo, {
173
174
  className: "logo",
@@ -198,16 +199,18 @@ var MobileHeader = /*#__PURE__*/function (_React$Component) {
198
199
  }, loggedIn ? this.renderUserMenuItems() : this.renderLoggedOutItems()))) : null);
199
200
  }
200
201
  }]);
201
-
202
- return MobileHeader;
203
202
  }(React.Component);
204
-
205
203
  MobileHeader.propTypes = {
206
204
  mainMenu: PropTypes.oneOfType([PropTypes.node, PropTypes.array]),
205
+ secondaryMenu: PropTypes.oneOfType([PropTypes.node, PropTypes.array]),
207
206
  userMenu: PropTypes.arrayOf(PropTypes.shape({
208
- type: PropTypes.oneOf(['item', 'menu']),
209
- href: PropTypes.string,
210
- content: PropTypes.string
207
+ heading: PropTypes.string,
208
+ items: PropTypes.arrayOf(PropTypes.shape({
209
+ type: PropTypes.oneOf(['item', 'menu']),
210
+ href: PropTypes.string,
211
+ content: PropTypes.string,
212
+ isActive: PropTypes.bool
213
+ }))
211
214
  })),
212
215
  loggedOutItems: PropTypes.arrayOf(PropTypes.shape({
213
216
  type: PropTypes.oneOf(['item', 'menu']),
@@ -226,6 +229,7 @@ MobileHeader.propTypes = {
226
229
  };
227
230
  MobileHeader.defaultProps = {
228
231
  mainMenu: [],
232
+ secondaryMenu: [],
229
233
  userMenu: [],
230
234
  loggedOutItems: [],
231
235
  logo: null,