@nauedu/frontend-component-header 14.0.0-semantically-released
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.rst +113 -0
- package/dist/Avatar.js +45 -0
- package/dist/Avatar.js.map +1 -0
- package/dist/DesktopHeader.js +218 -0
- package/dist/DesktopHeader.js.map +1 -0
- package/dist/Header.js +86 -0
- package/dist/Header.js.map +1 -0
- package/dist/Header.messages.js +100 -0
- package/dist/Header.messages.js.map +1 -0
- package/dist/Header.test.jsx +127 -0
- package/dist/Icons.js +53 -0
- package/dist/Icons.js.map +1 -0
- package/dist/Logo.js +51 -0
- package/dist/Logo.js.map +1 -0
- package/dist/Menu/Menu.js +367 -0
- package/dist/Menu/Menu.js.map +1 -0
- package/dist/Menu/index.js +3 -0
- package/dist/Menu/index.js.map +1 -0
- package/dist/Menu/menu.scss +45 -0
- package/dist/MobileHeader.js +240 -0
- package/dist/MobileHeader.js.map +1 -0
- package/dist/__snapshots__/Header.test.jsx.snap +443 -0
- package/dist/generic/messages.js +15 -0
- package/dist/generic/messages.js.map +1 -0
- package/dist/i18n/index.js +31 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/messages/ar.json +30 -0
- package/dist/i18n/messages/ca.json +1 -0
- package/dist/i18n/messages/es_419.json +30 -0
- package/dist/i18n/messages/fr.json +30 -0
- package/dist/i18n/messages/fr_CA.json +30 -0
- package/dist/i18n/messages/he.json +1 -0
- package/dist/i18n/messages/id.json +1 -0
- package/dist/i18n/messages/ko_KR.json +2 -0
- package/dist/i18n/messages/pl.json +1 -0
- package/dist/i18n/messages/pt_BR.json +2 -0
- package/dist/i18n/messages/ru.json +1 -0
- package/dist/i18n/messages/th.json +1 -0
- package/dist/i18n/messages/uk.json +1 -0
- package/dist/i18n/messages/zh_CN.json +30 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/index.scss +120 -0
- package/dist/learning-header/AnonymousUserMenu.js +24 -0
- package/dist/learning-header/AnonymousUserMenu.js.map +1 -0
- package/dist/learning-header/AuthenticatedUserDropdown.js +48 -0
- package/dist/learning-header/AuthenticatedUserDropdown.js.map +1 -0
- package/dist/learning-header/LearningHeader.js +121 -0
- package/dist/learning-header/LearningHeader.js.map +1 -0
- package/dist/learning-header/_header.scss +7 -0
- package/dist/learning-header/data/api.js +57 -0
- package/dist/learning-header/data/api.js.map +1 -0
- package/dist/learning-header/data/api.test.js +216 -0
- package/dist/learning-header/data/api.test.js.map +1 -0
- package/dist/learning-header/messages.js +40 -0
- package/dist/learning-header/messages.js.map +1 -0
- package/dist/setupTest.js +129 -0
- package/package.json +76 -0
package/README.rst
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#########################
|
|
2
|
+
frontend-component-header
|
|
3
|
+
#########################
|
|
4
|
+
|
|
5
|
+
|Build Status| |Codecov| |npm_version| |npm_downloads| |license| |semantic-release|
|
|
6
|
+
|
|
7
|
+
********
|
|
8
|
+
Overview
|
|
9
|
+
********
|
|
10
|
+
|
|
11
|
+
A generic header for Open edX micro-frontend applications.
|
|
12
|
+
|
|
13
|
+
************
|
|
14
|
+
Requirements
|
|
15
|
+
************
|
|
16
|
+
|
|
17
|
+
This component uses ``@edx/frontend-platform`` services such as i18n, analytics, configuration, and the ``AppContext`` React component, and expects that it has been loaded into a micro-frontend that has been properly initialized via ``@edx/frontend-platform``'s ``initialize`` function. `Please visit the frontend template application to see an example. <https://github.com/edx/frontend-template-application/blob/master/src/index.jsx>`_
|
|
18
|
+
|
|
19
|
+
Environment Variables
|
|
20
|
+
=====================
|
|
21
|
+
|
|
22
|
+
* ``LMS_BASE_URL`` - The URL of the LMS of your Open edX instance.
|
|
23
|
+
* ``LOGOUT_URL`` - The URL of the API endpoint which performs a user logout.
|
|
24
|
+
* ``LOGIN_URL`` - The URL of the login page where a user can sign into their account.
|
|
25
|
+
* ``SITE_NAME`` - The user-facing name of the site, used as `alt` text on the logo in the header.
|
|
26
|
+
Defaults to "localhost" in development.
|
|
27
|
+
* ``LOGO_URL`` - The URL of the site's logo. This logo is displayed in the header.
|
|
28
|
+
* ``ORDER_HISTORY_URL`` - The URL of the order history page.
|
|
29
|
+
* ``AUTHN_MINIMAL_HEADER`` - A boolean flag which hides the main menu, user menu, and logged-out
|
|
30
|
+
menu items when truthy. This is intended to be used in micro-frontends like
|
|
31
|
+
frontend-app-authentication in which these menus are considered distractions from the user's task.
|
|
32
|
+
* ``ENABLE_ORG_LOGO`` - A boolean flag to enable the display of the org logo on the center of the
|
|
33
|
+
header nav bar. Defaults to **false**
|
|
34
|
+
|
|
35
|
+
************
|
|
36
|
+
Installation
|
|
37
|
+
************
|
|
38
|
+
|
|
39
|
+
To install this header into your Open edX micro-frontend, run the following command in your MFE:
|
|
40
|
+
|
|
41
|
+
``npm i --save @nauedu/frontend-component-header``
|
|
42
|
+
|
|
43
|
+
This will make the component available to be imported into your application.
|
|
44
|
+
|
|
45
|
+
*****
|
|
46
|
+
Usage
|
|
47
|
+
*****
|
|
48
|
+
|
|
49
|
+
This library has the following exports:
|
|
50
|
+
|
|
51
|
+
* ``(default)``: The header as a React component.
|
|
52
|
+
* ``messages``: Internationalization messages suitable for use with `@edx/frontend-platform/i18n <https://edx.github.io/frontend-platform/module-Internationalization.html>`_
|
|
53
|
+
* ``dist/index.scss``: A SASS file which contains style information for the component. It should be imported into the micro-frontend's own SCSS file.
|
|
54
|
+
|
|
55
|
+
Examples
|
|
56
|
+
========
|
|
57
|
+
|
|
58
|
+
* `An example of component and messages usage. <https://github.com/edx/frontend-template-application/blob/3355bb3a96232390e9056f35b06ffa8f105ed7ca/src/index.jsx#L21>`_
|
|
59
|
+
* `An example of SCSS file usage. <https://github.com/edx/frontend-template-application/blob/3cd5485bf387b8c479baf6b02bf59e3061dc3465/src/index.scss#L8>`_
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
***********
|
|
63
|
+
Development
|
|
64
|
+
***********
|
|
65
|
+
|
|
66
|
+
Install dependencies::
|
|
67
|
+
|
|
68
|
+
npm i
|
|
69
|
+
|
|
70
|
+
Start the development server::
|
|
71
|
+
|
|
72
|
+
npm start
|
|
73
|
+
|
|
74
|
+
Build a production distribution::
|
|
75
|
+
|
|
76
|
+
npm run build
|
|
77
|
+
|
|
78
|
+
***********
|
|
79
|
+
Publishing to npmjs.com
|
|
80
|
+
***********
|
|
81
|
+
|
|
82
|
+
Any changes to this library have to be pushed to npmjs.com to be reflected on the build.
|
|
83
|
+
|
|
84
|
+
Publish to npm::
|
|
85
|
+
|
|
86
|
+
npm publish
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
***********
|
|
90
|
+
Deploy in production
|
|
91
|
+
***********
|
|
92
|
+
To replace the default edx header with the new one, use one of the following instructions:
|
|
93
|
+
|
|
94
|
+
Add the necessary settings to the mfe_brand plugin::
|
|
95
|
+
|
|
96
|
+
RUN npm install '@edx/frontend-component-header@npm:@nauedu/frontend-component-header'
|
|
97
|
+
|
|
98
|
+
Alternatively, you can specify the version::
|
|
99
|
+
|
|
100
|
+
RUN npm install '@edx/frontend-component-header@npm:@nauedu/frontend-component-header@1.0.0'
|
|
101
|
+
|
|
102
|
+
.. |Build Status| image:: https://api.travis-ci.com/edx/frontend-component-header.svg?branch=master
|
|
103
|
+
:target: https://travis-ci.com/edx/frontend-component-header
|
|
104
|
+
.. |Codecov| image:: https://img.shields.io/codecov/c/github/edx/frontend-component-header
|
|
105
|
+
:target: @edx/frontend-component-header
|
|
106
|
+
.. |npm_version| image:: https://img.shields.io/npm/v/@edx/frontend-component-header.svg
|
|
107
|
+
:target: @edx/frontend-component-header
|
|
108
|
+
.. |npm_downloads| image:: https://img.shields.io/npm/dt/@edx/frontend-component-header.svg
|
|
109
|
+
:target: @edx/frontend-component-header
|
|
110
|
+
.. |license| image:: https://img.shields.io/npm/l/@edx/frontend-component-header.svg
|
|
111
|
+
:target: @edx/frontend-component-header
|
|
112
|
+
.. |semantic-release| image:: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
|
|
113
|
+
:target: https://github.com/semantic-release/semantic-release
|
package/dist/Avatar.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { AvatarIcon } from './Icons';
|
|
4
|
+
|
|
5
|
+
function Avatar(_ref) {
|
|
6
|
+
var size = _ref.size,
|
|
7
|
+
src = _ref.src,
|
|
8
|
+
alt = _ref.alt,
|
|
9
|
+
className = _ref.className;
|
|
10
|
+
var avatar = src ? /*#__PURE__*/React.createElement("img", {
|
|
11
|
+
className: "d-block w-100 h-100",
|
|
12
|
+
src: src,
|
|
13
|
+
alt: alt
|
|
14
|
+
}) : /*#__PURE__*/React.createElement(AvatarIcon, {
|
|
15
|
+
style: {
|
|
16
|
+
width: size,
|
|
17
|
+
height: size
|
|
18
|
+
},
|
|
19
|
+
role: "img",
|
|
20
|
+
"aria-hidden": true,
|
|
21
|
+
focusable: "false"
|
|
22
|
+
});
|
|
23
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
24
|
+
style: {
|
|
25
|
+
height: size,
|
|
26
|
+
width: size
|
|
27
|
+
},
|
|
28
|
+
className: "avatar overflow-hidden d-inline-flex rounded-circle ".concat(className)
|
|
29
|
+
}, avatar);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
Avatar.propTypes = {
|
|
33
|
+
src: PropTypes.string,
|
|
34
|
+
size: PropTypes.string,
|
|
35
|
+
alt: PropTypes.string,
|
|
36
|
+
className: PropTypes.string
|
|
37
|
+
};
|
|
38
|
+
Avatar.defaultProps = {
|
|
39
|
+
src: null,
|
|
40
|
+
size: '2rem',
|
|
41
|
+
alt: null,
|
|
42
|
+
className: null
|
|
43
|
+
};
|
|
44
|
+
export default Avatar;
|
|
45
|
+
//# sourceMappingURL=Avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Avatar.jsx"],"names":["React","PropTypes","AvatarIcon","Avatar","size","src","alt","className","avatar","width","height","propTypes","string","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA,SAASC,UAAT,QAA2B,SAA3B;;AAEA,SAASC,MAAT,OAKG;AAAA,MAJDC,IAIC,QAJDA,IAIC;AAAA,MAHDC,GAGC,QAHDA,GAGC;AAAA,MAFDC,GAEC,QAFDA,GAEC;AAAA,MADDC,SACC,QADDA,SACC;AACD,MAAMC,MAAM,GAAGH,GAAG,gBAChB;AAAK,IAAA,SAAS,EAAC,qBAAf;AAAqC,IAAA,GAAG,EAAEA,GAA1C;AAA+C,IAAA,GAAG,EAAEC;AAApD,IADgB,gBAGhB,oBAAC,UAAD;AAAY,IAAA,KAAK,EAAE;AAAEG,MAAAA,KAAK,EAAEL,IAAT;AAAeM,MAAAA,MAAM,EAAEN;AAAvB,KAAnB;AAAkD,IAAA,IAAI,EAAC,KAAvD;AAA6D,uBAA7D;AAAyE,IAAA,SAAS,EAAC;AAAnF,IAHF;AAMA,sBACE;AACE,IAAA,KAAK,EAAE;AAAEM,MAAAA,MAAM,EAAEN,IAAV;AAAgBK,MAAAA,KAAK,EAAEL;AAAvB,KADT;AAEE,IAAA,SAAS,gEAAyDG,SAAzD;AAFX,KAIGC,MAJH,CADF;AAQD;;AAEDL,MAAM,CAACQ,SAAP,GAAmB;AACjBN,EAAAA,GAAG,EAAEJ,SAAS,CAACW,MADE;AAEjBR,EAAAA,IAAI,EAAEH,SAAS,CAACW,MAFC;AAGjBN,EAAAA,GAAG,EAAEL,SAAS,CAACW,MAHE;AAIjBL,EAAAA,SAAS,EAAEN,SAAS,CAACW;AAJJ,CAAnB;AAOAT,MAAM,CAACU,YAAP,GAAsB;AACpBR,EAAAA,GAAG,EAAE,IADe;AAEpBD,EAAAA,IAAI,EAAE,MAFc;AAGpBE,EAAAA,GAAG,EAAE,IAHe;AAIpBC,EAAAA,SAAS,EAAE;AAJS,CAAtB;AAOA,eAAeJ,MAAf","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { AvatarIcon } from './Icons';\n\nfunction Avatar({\n size,\n src,\n alt,\n className,\n}) {\n const avatar = src ? (\n <img className=\"d-block w-100 h-100\" src={src} alt={alt} />\n ) : (\n <AvatarIcon style={{ width: size, height: size }} role=\"img\" aria-hidden focusable=\"false\" />\n );\n\n return (\n <span\n style={{ height: size, width: size }}\n className={`avatar overflow-hidden d-inline-flex rounded-circle ${className}`}\n >\n {avatar}\n </span>\n );\n}\n\nAvatar.propTypes = {\n src: PropTypes.string,\n size: PropTypes.string,\n alt: PropTypes.string,\n className: PropTypes.string,\n};\n\nAvatar.defaultProps = {\n src: null,\n size: '2rem',\n alt: null,\n className: null,\n};\n\nexport default Avatar;\n"],"file":"Avatar.js"}
|
|
@@ -0,0 +1,218 @@
|
|
|
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
|
+
|
|
5
|
+
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
|
+
|
|
9
|
+
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
|
+
|
|
17
|
+
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
|
+
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
|
+
|
|
25
|
+
import React from 'react';
|
|
26
|
+
import PropTypes from 'prop-types';
|
|
27
|
+
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
|
28
|
+
import { getConfig } from '@edx/frontend-platform'; // Local Components
|
|
29
|
+
|
|
30
|
+
import { Menu, MenuTrigger, MenuContent } from './Menu';
|
|
31
|
+
import Avatar from './Avatar';
|
|
32
|
+
import { LinkedLogo, Logo } from './Logo'; // i18n
|
|
33
|
+
|
|
34
|
+
import messages from './Header.messages'; // Assets
|
|
35
|
+
|
|
36
|
+
import { CaretIcon } from './Icons';
|
|
37
|
+
|
|
38
|
+
var DesktopHeader = /*#__PURE__*/function (_React$Component) {
|
|
39
|
+
_inherits(DesktopHeader, _React$Component);
|
|
40
|
+
|
|
41
|
+
var _super = _createSuper(DesktopHeader);
|
|
42
|
+
|
|
43
|
+
function DesktopHeader(props) {
|
|
44
|
+
_classCallCheck(this, DesktopHeader);
|
|
45
|
+
|
|
46
|
+
// eslint-disable-line no-useless-constructor
|
|
47
|
+
return _super.call(this, props);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_createClass(DesktopHeader, [{
|
|
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;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return mainMenu.map(function (menuItem) {
|
|
60
|
+
var type = menuItem.type,
|
|
61
|
+
href = menuItem.href,
|
|
62
|
+
content = menuItem.content,
|
|
63
|
+
submenuContent = menuItem.submenuContent;
|
|
64
|
+
|
|
65
|
+
if (type === 'item') {
|
|
66
|
+
return /*#__PURE__*/React.createElement("a", {
|
|
67
|
+
key: "".concat(type, "-").concat(content),
|
|
68
|
+
className: "nav-link",
|
|
69
|
+
href: href
|
|
70
|
+
}, content);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
74
|
+
key: "".concat(type, "-").concat(content),
|
|
75
|
+
tag: "div",
|
|
76
|
+
className: "nav-item",
|
|
77
|
+
respondToPointerEvents: true
|
|
78
|
+
}, /*#__PURE__*/React.createElement(MenuTrigger, {
|
|
79
|
+
tag: "a",
|
|
80
|
+
className: "nav-link d-inline-flex align-items-center",
|
|
81
|
+
href: href
|
|
82
|
+
}, content, " ", /*#__PURE__*/React.createElement(CaretIcon, {
|
|
83
|
+
role: "img",
|
|
84
|
+
"aria-hidden": true,
|
|
85
|
+
focusable: "false"
|
|
86
|
+
})), /*#__PURE__*/React.createElement(MenuContent, {
|
|
87
|
+
className: "pin-left pin-right shadow py-2"
|
|
88
|
+
}, submenuContent));
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}, {
|
|
92
|
+
key: "renderUserMenu",
|
|
93
|
+
value: function renderUserMenu() {
|
|
94
|
+
var _this$props = this.props,
|
|
95
|
+
userMenu = _this$props.userMenu,
|
|
96
|
+
avatar = _this$props.avatar,
|
|
97
|
+
username = _this$props.username,
|
|
98
|
+
intl = _this$props.intl;
|
|
99
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
100
|
+
transitionClassName: "menu-dropdown",
|
|
101
|
+
transitionTimeout: 250
|
|
102
|
+
}, /*#__PURE__*/React.createElement(MenuTrigger, {
|
|
103
|
+
tag: "button",
|
|
104
|
+
"aria-label": intl.formatMessage(messages['header.label.account.menu.for'], {
|
|
105
|
+
username: username
|
|
106
|
+
}),
|
|
107
|
+
className: "btn btn-outline-primary d-inline-flex align-items-center pl-2 pr-3"
|
|
108
|
+
}, /*#__PURE__*/React.createElement(Avatar, {
|
|
109
|
+
size: "1.5em",
|
|
110
|
+
src: avatar,
|
|
111
|
+
alt: "",
|
|
112
|
+
className: "mr-2"
|
|
113
|
+
}), username, " ", /*#__PURE__*/React.createElement(CaretIcon, {
|
|
114
|
+
role: "img",
|
|
115
|
+
"aria-hidden": true,
|
|
116
|
+
focusable: "false"
|
|
117
|
+
})), /*#__PURE__*/React.createElement(MenuContent, {
|
|
118
|
+
className: "mb-0 dropdown-menu show dropdown-menu-right pin-right shadow py-2"
|
|
119
|
+
}, userMenu.map(function (_ref) {
|
|
120
|
+
var type = _ref.type,
|
|
121
|
+
href = _ref.href,
|
|
122
|
+
content = _ref.content;
|
|
123
|
+
return /*#__PURE__*/React.createElement("a", {
|
|
124
|
+
className: "dropdown-".concat(type),
|
|
125
|
+
key: "".concat(type, "-").concat(content),
|
|
126
|
+
href: href
|
|
127
|
+
}, content);
|
|
128
|
+
})));
|
|
129
|
+
}
|
|
130
|
+
}, {
|
|
131
|
+
key: "renderLoggedOutItems",
|
|
132
|
+
value: function renderLoggedOutItems() {
|
|
133
|
+
var loggedOutItems = this.props.loggedOutItems;
|
|
134
|
+
return loggedOutItems.map(function (item, i, arr) {
|
|
135
|
+
return /*#__PURE__*/React.createElement("a", {
|
|
136
|
+
key: "".concat(item.type, "-").concat(item.content),
|
|
137
|
+
className: i < arr.length - 1 ? 'btn mr-2 btn-link' : 'btn mr-2 btn-outline-primary',
|
|
138
|
+
href: item.href
|
|
139
|
+
}, item.content);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}, {
|
|
143
|
+
key: "render",
|
|
144
|
+
value: function render() {
|
|
145
|
+
var _this$props2 = this.props,
|
|
146
|
+
logo = _this$props2.logo,
|
|
147
|
+
logoAltText = _this$props2.logoAltText,
|
|
148
|
+
logoDestination = _this$props2.logoDestination,
|
|
149
|
+
loggedIn = _this$props2.loggedIn,
|
|
150
|
+
intl = _this$props2.intl;
|
|
151
|
+
var logoProps = {
|
|
152
|
+
src: logo,
|
|
153
|
+
alt: logoAltText,
|
|
154
|
+
href: logoDestination
|
|
155
|
+
};
|
|
156
|
+
var logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'mw-100' : null;
|
|
157
|
+
return /*#__PURE__*/React.createElement("header", {
|
|
158
|
+
className: "site-header-desktop"
|
|
159
|
+
}, /*#__PURE__*/React.createElement("a", {
|
|
160
|
+
className: "nav-skip sr-only sr-only-focusable",
|
|
161
|
+
href: "#main"
|
|
162
|
+
}, intl.formatMessage(messages['header.label.skip.nav'])), /*#__PURE__*/React.createElement("div", {
|
|
163
|
+
className: "container-fluid ".concat(logoClasses)
|
|
164
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
165
|
+
className: "nav-container position-relative d-flex align-items-center"
|
|
166
|
+
}, logoDestination === null ? /*#__PURE__*/React.createElement(Logo, {
|
|
167
|
+
className: "logo",
|
|
168
|
+
src: logo,
|
|
169
|
+
alt: logoAltText
|
|
170
|
+
}) : /*#__PURE__*/React.createElement(LinkedLogo, _extends({
|
|
171
|
+
className: "logo"
|
|
172
|
+
}, logoProps)), /*#__PURE__*/React.createElement("nav", {
|
|
173
|
+
"aria-label": intl.formatMessage(messages['header.label.main.nav']),
|
|
174
|
+
className: "nav main-nav"
|
|
175
|
+
}, this.renderMainMenu()), /*#__PURE__*/React.createElement("nav", {
|
|
176
|
+
"aria-label": intl.formatMessage(messages['header.label.secondary.nav']),
|
|
177
|
+
className: "nav secondary-menu-container align-items-center ml-auto"
|
|
178
|
+
}, loggedIn ? this.renderUserMenu() : this.renderLoggedOutItems()))));
|
|
179
|
+
}
|
|
180
|
+
}]);
|
|
181
|
+
|
|
182
|
+
return DesktopHeader;
|
|
183
|
+
}(React.Component);
|
|
184
|
+
|
|
185
|
+
DesktopHeader.propTypes = {
|
|
186
|
+
mainMenu: PropTypes.oneOfType([PropTypes.node, PropTypes.array]),
|
|
187
|
+
userMenu: PropTypes.arrayOf(PropTypes.shape({
|
|
188
|
+
type: PropTypes.oneOf(['item', 'menu']),
|
|
189
|
+
href: PropTypes.string,
|
|
190
|
+
content: PropTypes.string
|
|
191
|
+
})),
|
|
192
|
+
loggedOutItems: PropTypes.arrayOf(PropTypes.shape({
|
|
193
|
+
type: PropTypes.oneOf(['item', 'menu']),
|
|
194
|
+
href: PropTypes.string,
|
|
195
|
+
content: PropTypes.string
|
|
196
|
+
})),
|
|
197
|
+
logo: PropTypes.string,
|
|
198
|
+
logoAltText: PropTypes.string,
|
|
199
|
+
logoDestination: PropTypes.string,
|
|
200
|
+
avatar: PropTypes.string,
|
|
201
|
+
username: PropTypes.string,
|
|
202
|
+
loggedIn: PropTypes.bool,
|
|
203
|
+
// i18n
|
|
204
|
+
intl: intlShape.isRequired
|
|
205
|
+
};
|
|
206
|
+
DesktopHeader.defaultProps = {
|
|
207
|
+
mainMenu: [],
|
|
208
|
+
userMenu: [],
|
|
209
|
+
loggedOutItems: [],
|
|
210
|
+
logo: null,
|
|
211
|
+
logoAltText: null,
|
|
212
|
+
logoDestination: null,
|
|
213
|
+
avatar: null,
|
|
214
|
+
username: null,
|
|
215
|
+
loggedIn: false
|
|
216
|
+
};
|
|
217
|
+
export default injectIntl(DesktopHeader);
|
|
218
|
+
//# sourceMappingURL=DesktopHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/DesktopHeader.jsx"],"names":["React","PropTypes","injectIntl","intlShape","getConfig","Menu","MenuTrigger","MenuContent","Avatar","LinkedLogo","Logo","messages","CaretIcon","DesktopHeader","props","mainMenu","Array","isArray","map","menuItem","type","href","content","submenuContent","userMenu","avatar","username","intl","formatMessage","loggedOutItems","item","i","arr","length","logo","logoAltText","logoDestination","loggedIn","logoProps","src","alt","logoClasses","AUTHN_MINIMAL_HEADER","renderMainMenu","renderUserMenu","renderLoggedOutItems","Component","propTypes","oneOfType","node","array","arrayOf","shape","oneOf","string","bool","isRequired","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { getConfig } from '@edx/frontend-platform';\n\n// Local Components\nimport { Menu, MenuTrigger, MenuContent } from './Menu';\nimport Avatar from './Avatar';\nimport { LinkedLogo, Logo } from './Logo';\n\n// i18n\nimport messages from './Header.messages';\n\n// Assets\nimport { CaretIcon } from './Icons';\n\nclass DesktopHeader extends React.Component {\n constructor(props) { // eslint-disable-line no-useless-constructor\n super(props);\n }\n\n renderMainMenu() {\n const { mainMenu } = this.props;\n\n // Nodes are accepted as a prop\n if (!Array.isArray(mainMenu)) {\n return mainMenu;\n }\n\n return mainMenu.map((menuItem) => {\n const {\n type,\n href,\n content,\n submenuContent,\n } = menuItem;\n\n if (type === 'item') {\n return (\n <a key={`${type}-${content}`} className=\"nav-link\" href={href}>{content}</a>\n );\n }\n\n return (\n <Menu key={`${type}-${content}`} tag=\"div\" className=\"nav-item\" respondToPointerEvents>\n <MenuTrigger tag=\"a\" className=\"nav-link d-inline-flex align-items-center\" href={href}>\n {content} <CaretIcon role=\"img\" aria-hidden focusable=\"false\" />\n </MenuTrigger>\n <MenuContent className=\"pin-left pin-right shadow py-2\">\n {submenuContent}\n </MenuContent>\n </Menu>\n );\n });\n }\n\n renderUserMenu() {\n const {\n userMenu,\n avatar,\n username,\n intl,\n } = this.props;\n\n return (\n <Menu transitionClassName=\"menu-dropdown\" transitionTimeout={250}>\n <MenuTrigger\n tag=\"button\"\n aria-label={intl.formatMessage(messages['header.label.account.menu.for'], { username })}\n className=\"btn btn-outline-primary d-inline-flex align-items-center pl-2 pr-3\"\n >\n <Avatar size=\"1.5em\" src={avatar} alt=\"\" className=\"mr-2\" />\n {username} <CaretIcon role=\"img\" aria-hidden focusable=\"false\" />\n </MenuTrigger>\n <MenuContent className=\"mb-0 dropdown-menu show dropdown-menu-right pin-right shadow py-2\">\n {userMenu.map(({ type, href, content }) => (\n <a className={`dropdown-${type}`} key={`${type}-${content}`} href={href}>{content}</a>\n ))}\n </MenuContent>\n </Menu>\n );\n }\n\n renderLoggedOutItems() {\n const { loggedOutItems } = this.props;\n\n return loggedOutItems.map((item, i, arr) => (\n <a\n key={`${item.type}-${item.content}`}\n className={i < arr.length - 1 ? 'btn mr-2 btn-link' : 'btn mr-2 btn-outline-primary'}\n href={item.href}\n >\n {item.content}\n </a>\n ));\n }\n\n render() {\n const {\n logo,\n logoAltText,\n logoDestination,\n loggedIn,\n intl,\n } = this.props;\n const logoProps = { src: logo, alt: logoAltText, href: logoDestination };\n const logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'mw-100' : null;\n\n return (\n <header className=\"site-header-desktop\">\n <a className=\"nav-skip sr-only sr-only-focusable\" href=\"#main\">{intl.formatMessage(messages['header.label.skip.nav'])}</a>\n <div className={`container-fluid ${logoClasses}`}>\n <div className=\"nav-container position-relative d-flex align-items-center\">\n {logoDestination === null ? <Logo className=\"logo\" src={logo} alt={logoAltText} /> : <LinkedLogo className=\"logo\" {...logoProps} />}\n <nav\n aria-label={intl.formatMessage(messages['header.label.main.nav'])}\n className=\"nav main-nav\"\n >\n {this.renderMainMenu()}\n </nav>\n <nav\n aria-label={intl.formatMessage(messages['header.label.secondary.nav'])}\n className=\"nav secondary-menu-container align-items-center ml-auto\"\n >\n {loggedIn ? this.renderUserMenu() : this.renderLoggedOutItems()}\n </nav>\n </div>\n </div>\n </header>\n );\n }\n}\n\nDesktopHeader.propTypes = {\n mainMenu: PropTypes.oneOfType([\n PropTypes.node,\n PropTypes.array,\n ]),\n userMenu: PropTypes.arrayOf(PropTypes.shape({\n type: PropTypes.oneOf(['item', 'menu']),\n href: PropTypes.string,\n content: PropTypes.string,\n })),\n loggedOutItems: PropTypes.arrayOf(PropTypes.shape({\n type: PropTypes.oneOf(['item', 'menu']),\n href: PropTypes.string,\n content: PropTypes.string,\n })),\n logo: PropTypes.string,\n logoAltText: PropTypes.string,\n logoDestination: PropTypes.string,\n avatar: PropTypes.string,\n username: PropTypes.string,\n loggedIn: PropTypes.bool,\n\n // i18n\n intl: intlShape.isRequired,\n};\n\nDesktopHeader.defaultProps = {\n mainMenu: [],\n userMenu: [],\n loggedOutItems: [],\n logo: null,\n logoAltText: null,\n logoDestination: null,\n avatar: null,\n username: null,\n loggedIn: false,\n};\n\nexport default injectIntl(DesktopHeader);\n"],"file":"DesktopHeader.js"}
|
package/dist/Header.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import Responsive from 'react-responsive';
|
|
3
|
+
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
|
4
|
+
import { AppContext } from '@edx/frontend-platform/react';
|
|
5
|
+
import { APP_CONFIG_INITIALIZED, ensureConfig, mergeConfig, getConfig, subscribe } from '@edx/frontend-platform';
|
|
6
|
+
import DesktopHeader from './DesktopHeader';
|
|
7
|
+
import MobileHeader from './MobileHeader';
|
|
8
|
+
import messages from './Header.messages';
|
|
9
|
+
ensureConfig(['LMS_BASE_URL', 'LOGOUT_URL', 'LOGIN_URL', 'SITE_NAME', 'LOGO_URL', 'ORDER_HISTORY_URL'], 'Header component');
|
|
10
|
+
subscribe(APP_CONFIG_INITIALIZED, function () {
|
|
11
|
+
mergeConfig({
|
|
12
|
+
AUTHN_MINIMAL_HEADER: !!process.env.AUTHN_MINIMAL_HEADER
|
|
13
|
+
}, 'Header additional config');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
function Header(_ref) {
|
|
17
|
+
var intl = _ref.intl;
|
|
18
|
+
|
|
19
|
+
var _useContext = useContext(AppContext),
|
|
20
|
+
authenticatedUser = _useContext.authenticatedUser,
|
|
21
|
+
config = _useContext.config;
|
|
22
|
+
|
|
23
|
+
var mainMenu = [{
|
|
24
|
+
type: 'item',
|
|
25
|
+
href: "".concat(config.LMS_BASE_URL, "/dashboard"),
|
|
26
|
+
content: intl.formatMessage(messages['header.links.courses'])
|
|
27
|
+
}];
|
|
28
|
+
var orderHistoryItem = {
|
|
29
|
+
type: 'item',
|
|
30
|
+
href: config.ORDER_HISTORY_URL,
|
|
31
|
+
content: intl.formatMessage(messages['header.user.menu.order.history'])
|
|
32
|
+
};
|
|
33
|
+
var userMenu = authenticatedUser === null ? [] : [{
|
|
34
|
+
type: 'item',
|
|
35
|
+
href: "".concat(config.LMS_BASE_URL, "/dashboard"),
|
|
36
|
+
content: intl.formatMessage(messages['header.user.menu.dashboard'])
|
|
37
|
+
}, {
|
|
38
|
+
type: 'item',
|
|
39
|
+
href: "".concat(config.LMS_BASE_URL, "/u/").concat(authenticatedUser.username),
|
|
40
|
+
content: intl.formatMessage(messages['header.user.menu.profile'])
|
|
41
|
+
}, {
|
|
42
|
+
type: 'item',
|
|
43
|
+
href: "".concat(config.LMS_BASE_URL, "/account/settings"),
|
|
44
|
+
content: intl.formatMessage(messages['header.user.menu.account.settings'])
|
|
45
|
+
}, {
|
|
46
|
+
type: 'item',
|
|
47
|
+
href: config.LOGOUT_URL,
|
|
48
|
+
content: intl.formatMessage(messages['header.user.menu.logout'])
|
|
49
|
+
}]; // Users should only see Order History if have a ORDER_HISTORY_URL define in the environment.
|
|
50
|
+
|
|
51
|
+
if (config.ORDER_HISTORY_URL) {
|
|
52
|
+
userMenu.splice(-1, 0, orderHistoryItem);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
var loggedOutItems = [{
|
|
56
|
+
type: 'item',
|
|
57
|
+
href: config.LOGIN_URL,
|
|
58
|
+
content: intl.formatMessage(messages['header.user.menu.login'])
|
|
59
|
+
}, {
|
|
60
|
+
type: 'item',
|
|
61
|
+
href: "".concat(config.LMS_BASE_URL, "/register"),
|
|
62
|
+
content: intl.formatMessage(messages['header.user.menu.register'])
|
|
63
|
+
}];
|
|
64
|
+
var props = {
|
|
65
|
+
logo: config.LOGO_URL,
|
|
66
|
+
logoAltText: config.SITE_NAME,
|
|
67
|
+
logoDestination: "".concat(config.LMS_BASE_URL, "/dashboard"),
|
|
68
|
+
loggedIn: authenticatedUser !== null,
|
|
69
|
+
username: authenticatedUser !== null ? authenticatedUser.username : null,
|
|
70
|
+
avatar: authenticatedUser !== null ? authenticatedUser.avatar : null,
|
|
71
|
+
mainMenu: getConfig().AUTHN_MINIMAL_HEADER ? [] : mainMenu,
|
|
72
|
+
userMenu: getConfig().AUTHN_MINIMAL_HEADER ? [] : userMenu,
|
|
73
|
+
loggedOutItems: getConfig().AUTHN_MINIMAL_HEADER ? [] : loggedOutItems
|
|
74
|
+
};
|
|
75
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Responsive, {
|
|
76
|
+
maxWidth: 768
|
|
77
|
+
}, /*#__PURE__*/React.createElement(MobileHeader, props)), /*#__PURE__*/React.createElement(Responsive, {
|
|
78
|
+
minWidth: 769
|
|
79
|
+
}, /*#__PURE__*/React.createElement(DesktopHeader, props)));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Header.propTypes = {
|
|
83
|
+
intl: intlShape.isRequired
|
|
84
|
+
};
|
|
85
|
+
export default injectIntl(Header);
|
|
86
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Header.jsx"],"names":["React","useContext","Responsive","injectIntl","intlShape","AppContext","APP_CONFIG_INITIALIZED","ensureConfig","mergeConfig","getConfig","subscribe","DesktopHeader","MobileHeader","messages","AUTHN_MINIMAL_HEADER","process","env","Header","intl","authenticatedUser","config","mainMenu","type","href","LMS_BASE_URL","content","formatMessage","orderHistoryItem","ORDER_HISTORY_URL","userMenu","username","LOGOUT_URL","splice","loggedOutItems","LOGIN_URL","props","logo","LOGO_URL","logoAltText","SITE_NAME","logoDestination","loggedIn","avatar","propTypes","isRequired"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;AACA,OAAOC,UAAP,MAAuB,kBAAvB;AACA,SAASC,UAAT,EAAqBC,SAArB,QAAsC,6BAAtC;AACA,SAASC,UAAT,QAA2B,8BAA3B;AACA,SACEC,sBADF,EAEEC,YAFF,EAGEC,WAHF,EAIEC,SAJF,EAKEC,SALF,QAMO,wBANP;AAQA,OAAOC,aAAP,MAA0B,iBAA1B;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AAEA,OAAOC,QAAP,MAAqB,mBAArB;AAEAN,YAAY,CAAC,CACX,cADW,EAEX,YAFW,EAGX,WAHW,EAIX,WAJW,EAKX,UALW,EAMX,mBANW,CAAD,EAOT,kBAPS,CAAZ;AASAG,SAAS,CAACJ,sBAAD,EAAyB,YAAM;AACtCE,EAAAA,WAAW,CAAC;AACVM,IAAAA,oBAAoB,EAAE,CAAC,CAACC,OAAO,CAACC,GAAR,CAAYF;AAD1B,GAAD,EAER,0BAFQ,CAAX;AAGD,CAJQ,CAAT;;AAMA,SAASG,MAAT,OAA0B;AAAA,MAARC,IAAQ,QAARA,IAAQ;;AACxB,oBAAsCjB,UAAU,CAACI,UAAD,CAAhD;AAAA,MAAQc,iBAAR,eAAQA,iBAAR;AAAA,MAA2BC,MAA3B,eAA2BA,MAA3B;;AAEA,MAAMC,QAAQ,GAAG,CACf;AACEC,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,YAAKH,MAAM,CAACI,YAAZ,eAFN;AAGEC,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,sBAAD,CAA3B;AAHX,GADe,CAAjB;AAQA,MAAMc,gBAAgB,GAAG;AACvBL,IAAAA,IAAI,EAAE,MADiB;AAEvBC,IAAAA,IAAI,EAAEH,MAAM,CAACQ,iBAFU;AAGvBH,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,gCAAD,CAA3B;AAHc,GAAzB;AAMA,MAAMgB,QAAQ,GAAGV,iBAAiB,KAAK,IAAtB,GAA6B,EAA7B,GAAkC,CACjD;AACEG,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,YAAKH,MAAM,CAACI,YAAZ,eAFN;AAGEC,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,4BAAD,CAA3B;AAHX,GADiD,EAMjD;AACES,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,YAAKH,MAAM,CAACI,YAAZ,gBAA8BL,iBAAiB,CAACW,QAAhD,CAFN;AAGEL,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,0BAAD,CAA3B;AAHX,GANiD,EAWjD;AACES,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,YAAKH,MAAM,CAACI,YAAZ,sBAFN;AAGEC,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,mCAAD,CAA3B;AAHX,GAXiD,EAgBjD;AACES,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,EAAEH,MAAM,CAACW,UAFf;AAGEN,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,yBAAD,CAA3B;AAHX,GAhBiD,CAAnD,CAjBwB,CAwCxB;;AACA,MAAIO,MAAM,CAACQ,iBAAX,EAA8B;AAC5BC,IAAAA,QAAQ,CAACG,MAAT,CAAgB,CAAC,CAAjB,EAAoB,CAApB,EAAuBL,gBAAvB;AACD;;AAED,MAAMM,cAAc,GAAG,CACrB;AACEX,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,EAAEH,MAAM,CAACc,SAFf;AAGET,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,wBAAD,CAA3B;AAHX,GADqB,EAMrB;AACES,IAAAA,IAAI,EAAE,MADR;AAEEC,IAAAA,IAAI,YAAKH,MAAM,CAACI,YAAZ,cAFN;AAGEC,IAAAA,OAAO,EAAEP,IAAI,CAACQ,aAAL,CAAmBb,QAAQ,CAAC,2BAAD,CAA3B;AAHX,GANqB,CAAvB;AAaA,MAAMsB,KAAK,GAAG;AACZC,IAAAA,IAAI,EAAEhB,MAAM,CAACiB,QADD;AAEZC,IAAAA,WAAW,EAAElB,MAAM,CAACmB,SAFR;AAGZC,IAAAA,eAAe,YAAKpB,MAAM,CAACI,YAAZ,eAHH;AAIZiB,IAAAA,QAAQ,EAAEtB,iBAAiB,KAAK,IAJpB;AAKZW,IAAAA,QAAQ,EAAEX,iBAAiB,KAAK,IAAtB,GAA6BA,iBAAiB,CAACW,QAA/C,GAA0D,IALxD;AAMZY,IAAAA,MAAM,EAAEvB,iBAAiB,KAAK,IAAtB,GAA6BA,iBAAiB,CAACuB,MAA/C,GAAwD,IANpD;AAOZrB,IAAAA,QAAQ,EAAEZ,SAAS,GAAGK,oBAAZ,GAAmC,EAAnC,GAAwCO,QAPtC;AAQZQ,IAAAA,QAAQ,EAAEpB,SAAS,GAAGK,oBAAZ,GAAmC,EAAnC,GAAwCe,QARtC;AASZI,IAAAA,cAAc,EAAExB,SAAS,GAAGK,oBAAZ,GAAmC,EAAnC,GAAwCmB;AAT5C,GAAd;AAYA,sBACE,uDACE,oBAAC,UAAD;AAAY,IAAA,QAAQ,EAAE;AAAtB,kBACE,oBAAC,YAAD,EAAkBE,KAAlB,CADF,CADF,eAIE,oBAAC,UAAD;AAAY,IAAA,QAAQ,EAAE;AAAtB,kBACE,oBAAC,aAAD,EAAmBA,KAAnB,CADF,CAJF,CADF;AAUD;;AAEDlB,MAAM,CAAC0B,SAAP,GAAmB;AACjBzB,EAAAA,IAAI,EAAEd,SAAS,CAACwC;AADC,CAAnB;AAIA,eAAezC,UAAU,CAACc,MAAD,CAAzB","sourcesContent":["import React, { useContext } from 'react';\nimport Responsive from 'react-responsive';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { AppContext } from '@edx/frontend-platform/react';\nimport {\n APP_CONFIG_INITIALIZED,\n ensureConfig,\n mergeConfig,\n getConfig,\n subscribe,\n} from '@edx/frontend-platform';\n\nimport DesktopHeader from './DesktopHeader';\nimport MobileHeader from './MobileHeader';\n\nimport messages from './Header.messages';\n\nensureConfig([\n 'LMS_BASE_URL',\n 'LOGOUT_URL',\n 'LOGIN_URL',\n 'SITE_NAME',\n 'LOGO_URL',\n 'ORDER_HISTORY_URL',\n], 'Header component');\n\nsubscribe(APP_CONFIG_INITIALIZED, () => {\n mergeConfig({\n AUTHN_MINIMAL_HEADER: !!process.env.AUTHN_MINIMAL_HEADER,\n }, 'Header additional config');\n});\n\nfunction Header({ intl }) {\n const { authenticatedUser, config } = useContext(AppContext);\n\n const mainMenu = [\n {\n type: 'item',\n href: `${config.LMS_BASE_URL}/dashboard`,\n content: intl.formatMessage(messages['header.links.courses']),\n },\n ];\n\n const orderHistoryItem = {\n type: 'item',\n href: config.ORDER_HISTORY_URL,\n content: intl.formatMessage(messages['header.user.menu.order.history']),\n };\n\n const userMenu = authenticatedUser === null ? [] : [\n {\n type: 'item',\n href: `${config.LMS_BASE_URL}/dashboard`,\n content: intl.formatMessage(messages['header.user.menu.dashboard']),\n },\n {\n type: 'item',\n href: `${config.LMS_BASE_URL}/u/${authenticatedUser.username}`,\n content: intl.formatMessage(messages['header.user.menu.profile']),\n },\n {\n type: 'item',\n href: `${config.LMS_BASE_URL}/account/settings`,\n content: intl.formatMessage(messages['header.user.menu.account.settings']),\n },\n {\n type: 'item',\n href: config.LOGOUT_URL,\n content: intl.formatMessage(messages['header.user.menu.logout']),\n },\n ];\n\n // Users should only see Order History if have a ORDER_HISTORY_URL define in the environment.\n if (config.ORDER_HISTORY_URL) {\n userMenu.splice(-1, 0, orderHistoryItem);\n }\n\n const loggedOutItems = [\n {\n type: 'item',\n href: config.LOGIN_URL,\n content: intl.formatMessage(messages['header.user.menu.login']),\n },\n {\n type: 'item',\n href: `${config.LMS_BASE_URL}/register`,\n content: intl.formatMessage(messages['header.user.menu.register']),\n },\n ];\n\n const props = {\n logo: config.LOGO_URL,\n logoAltText: config.SITE_NAME,\n logoDestination: `${config.LMS_BASE_URL}/dashboard`,\n loggedIn: authenticatedUser !== null,\n username: authenticatedUser !== null ? authenticatedUser.username : null,\n avatar: authenticatedUser !== null ? authenticatedUser.avatar : null,\n mainMenu: getConfig().AUTHN_MINIMAL_HEADER ? [] : mainMenu,\n userMenu: getConfig().AUTHN_MINIMAL_HEADER ? [] : userMenu,\n loggedOutItems: getConfig().AUTHN_MINIMAL_HEADER ? [] : loggedOutItems,\n };\n\n return (\n <>\n <Responsive maxWidth={768}>\n <MobileHeader {...props} />\n </Responsive>\n <Responsive minWidth={769}>\n <DesktopHeader {...props} />\n </Responsive>\n </>\n );\n}\n\nHeader.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(Header);\n"],"file":"Header.js"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { defineMessages } from '@edx/frontend-platform/i18n';
|
|
2
|
+
var messages = defineMessages({
|
|
3
|
+
'header.links.courses': {
|
|
4
|
+
id: 'header.links.courses',
|
|
5
|
+
defaultMessage: 'Courses',
|
|
6
|
+
description: 'Link to the learner course dashboard'
|
|
7
|
+
},
|
|
8
|
+
'header.links.programs': {
|
|
9
|
+
id: 'header.links.programs',
|
|
10
|
+
defaultMessage: 'Programs',
|
|
11
|
+
description: 'Link to the learner program dashboard'
|
|
12
|
+
},
|
|
13
|
+
'header.links.content.search': {
|
|
14
|
+
id: 'header.links.content.search',
|
|
15
|
+
defaultMessage: 'Discover New',
|
|
16
|
+
description: 'Link to the content search page'
|
|
17
|
+
},
|
|
18
|
+
'header.links.schools': {
|
|
19
|
+
id: 'header.links.schools',
|
|
20
|
+
defaultMessage: 'Schools & Partners',
|
|
21
|
+
description: 'Link to the schools and partners landing page'
|
|
22
|
+
},
|
|
23
|
+
'header.user.menu.dashboard': {
|
|
24
|
+
id: 'header.user.menu.dashboard',
|
|
25
|
+
defaultMessage: 'Dashboard',
|
|
26
|
+
description: 'Link to the user dashboard'
|
|
27
|
+
},
|
|
28
|
+
'header.user.menu.profile': {
|
|
29
|
+
id: 'header.user.menu.profile',
|
|
30
|
+
defaultMessage: 'Profile',
|
|
31
|
+
description: 'Link to the user profile'
|
|
32
|
+
},
|
|
33
|
+
'header.user.menu.account.settings': {
|
|
34
|
+
id: 'header.user.menu.account.settings',
|
|
35
|
+
defaultMessage: 'Account',
|
|
36
|
+
description: 'Link to account settings'
|
|
37
|
+
},
|
|
38
|
+
'header.user.menu.order.history': {
|
|
39
|
+
id: 'header.user.menu.order.history',
|
|
40
|
+
defaultMessage: 'Order History',
|
|
41
|
+
description: 'Link to order history'
|
|
42
|
+
},
|
|
43
|
+
'header.user.menu.logout': {
|
|
44
|
+
id: 'header.user.menu.logout',
|
|
45
|
+
defaultMessage: 'Logout',
|
|
46
|
+
description: 'Logout link'
|
|
47
|
+
},
|
|
48
|
+
'header.user.menu.login': {
|
|
49
|
+
id: 'header.user.menu.login',
|
|
50
|
+
defaultMessage: 'Login',
|
|
51
|
+
description: 'Login link'
|
|
52
|
+
},
|
|
53
|
+
'header.user.menu.register': {
|
|
54
|
+
id: 'header.user.menu.register',
|
|
55
|
+
defaultMessage: 'Sign Up',
|
|
56
|
+
description: 'Link to registration'
|
|
57
|
+
},
|
|
58
|
+
'header.label.account.nav': {
|
|
59
|
+
id: 'header.label.account.nav',
|
|
60
|
+
defaultMessage: 'Account',
|
|
61
|
+
description: 'The aria label for the account menu nav'
|
|
62
|
+
},
|
|
63
|
+
'header.label.account.menu': {
|
|
64
|
+
id: 'header.label.account.menu',
|
|
65
|
+
defaultMessage: 'Account Menu',
|
|
66
|
+
description: 'The aria label for the account menu trigger'
|
|
67
|
+
},
|
|
68
|
+
'header.label.account.menu.for': {
|
|
69
|
+
id: 'header.label.account.menu.for',
|
|
70
|
+
defaultMessage: 'Account menu for {username}',
|
|
71
|
+
description: 'The aria label for the account menu trigger when the username is displayed in it'
|
|
72
|
+
},
|
|
73
|
+
'header.label.main.nav': {
|
|
74
|
+
id: 'header.label.main.nav',
|
|
75
|
+
defaultMessage: 'Main',
|
|
76
|
+
description: 'The aria label for the main menu nav'
|
|
77
|
+
},
|
|
78
|
+
'header.label.main.menu': {
|
|
79
|
+
id: 'header.label.main.menu',
|
|
80
|
+
defaultMessage: 'Main Menu',
|
|
81
|
+
description: 'The aria label for the main menu trigger'
|
|
82
|
+
},
|
|
83
|
+
'header.label.main.header': {
|
|
84
|
+
id: 'header.label.main.header',
|
|
85
|
+
defaultMessage: 'Main',
|
|
86
|
+
description: 'The aria label for the main header'
|
|
87
|
+
},
|
|
88
|
+
'header.label.secondary.nav': {
|
|
89
|
+
id: 'header.label.secondary.nav',
|
|
90
|
+
defaultMessage: 'Secondary',
|
|
91
|
+
description: 'The aria label for the seconary nav'
|
|
92
|
+
},
|
|
93
|
+
'header.label.skip.nav': {
|
|
94
|
+
id: 'header.label.skip.nav',
|
|
95
|
+
defaultMessage: 'Skip to main content',
|
|
96
|
+
description: 'A link used by screen readers to allow users to skip to the main content of the page.'
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
export default messages;
|
|
100
|
+
//# sourceMappingURL=Header.messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Header.messages.jsx"],"names":["defineMessages","messages","id","defaultMessage","description"],"mappings":"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","sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'header.links.courses': {\n id: 'header.links.courses',\n defaultMessage: 'Courses',\n description: 'Link to the learner course dashboard',\n },\n 'header.links.programs': {\n id: 'header.links.programs',\n defaultMessage: 'Programs',\n description: 'Link to the learner program dashboard',\n },\n 'header.links.content.search': {\n id: 'header.links.content.search',\n defaultMessage: 'Discover New',\n description: 'Link to the content search page',\n },\n 'header.links.schools': {\n id: 'header.links.schools',\n defaultMessage: 'Schools & Partners',\n description: 'Link to the schools and partners landing page',\n },\n 'header.user.menu.dashboard': {\n id: 'header.user.menu.dashboard',\n defaultMessage: 'Dashboard',\n description: 'Link to the user dashboard',\n },\n 'header.user.menu.profile': {\n id: 'header.user.menu.profile',\n defaultMessage: 'Profile',\n description: 'Link to the user profile',\n },\n 'header.user.menu.account.settings': {\n id: 'header.user.menu.account.settings',\n defaultMessage: 'Account',\n description: 'Link to account settings',\n },\n 'header.user.menu.order.history': {\n id: 'header.user.menu.order.history',\n defaultMessage: 'Order History',\n description: 'Link to order history',\n },\n 'header.user.menu.logout': {\n id: 'header.user.menu.logout',\n defaultMessage: 'Logout',\n description: 'Logout link',\n },\n 'header.user.menu.login': {\n id: 'header.user.menu.login',\n defaultMessage: 'Login',\n description: 'Login link',\n },\n 'header.user.menu.register': {\n id: 'header.user.menu.register',\n defaultMessage: 'Sign Up',\n description: 'Link to registration',\n },\n 'header.label.account.nav': {\n id: 'header.label.account.nav',\n defaultMessage: 'Account',\n description: 'The aria label for the account menu nav',\n },\n 'header.label.account.menu': {\n id: 'header.label.account.menu',\n defaultMessage: 'Account Menu',\n description: 'The aria label for the account menu trigger',\n },\n 'header.label.account.menu.for': {\n id: 'header.label.account.menu.for',\n defaultMessage: 'Account menu for {username}',\n description: 'The aria label for the account menu trigger when the username is displayed in it',\n },\n 'header.label.main.nav': {\n id: 'header.label.main.nav',\n defaultMessage: 'Main',\n description: 'The aria label for the main menu nav',\n },\n 'header.label.main.menu': {\n id: 'header.label.main.menu',\n defaultMessage: 'Main Menu',\n description: 'The aria label for the main menu trigger',\n },\n 'header.label.main.header': {\n id: 'header.label.main.header',\n defaultMessage: 'Main',\n description: 'The aria label for the main header',\n },\n 'header.label.secondary.nav': {\n id: 'header.label.secondary.nav',\n defaultMessage: 'Secondary',\n description: 'The aria label for the seconary nav',\n },\n 'header.label.skip.nav': {\n id: 'header.label.skip.nav',\n defaultMessage: 'Skip to main content',\n description: 'A link used by screen readers to allow users to skip to the main content of the page.',\n },\n});\n\nexport default messages;\n"],"file":"Header.messages.js"}
|