@nauedu/frontend-component-header 14.0.0-semantically-released → 18.1.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.
- package/README.rst +111 -33
- package/dist/Avatar.js +5 -7
- package/dist/Avatar.js.map +1 -1
- package/dist/DesktopHeader.js +98 -74
- package/dist/DesktopHeader.js.map +1 -1
- package/dist/Header.js +81 -41
- package/dist/Header.js.map +1 -1
- package/dist/Header.messages.js +15 -0
- package/dist/Header.messages.js.map +1 -1
- package/dist/Header.test.jsx +67 -90
- package/dist/Icons.js +1 -2
- package/dist/Icons.js.map +1 -1
- package/dist/LanguageSelector/data/api.js +65 -0
- package/dist/LanguageSelector/data/api.js.map +1 -0
- package/dist/LanguageSelector/index.js +113 -0
- package/dist/LanguageSelector/index.js.map +1 -0
- package/dist/Logo.js +11 -21
- package/dist/Logo.js.map +1 -1
- package/dist/Menu/Menu.js +42 -88
- package/dist/Menu/Menu.js.map +1 -1
- package/dist/Menu/index.js.map +1 -1
- package/dist/MobileHeader.js +80 -76
- package/dist/MobileHeader.js.map +1 -1
- package/dist/__snapshots__/Header.test.jsx.snap +12 -12
- package/dist/generic/messages.js.map +1 -1
- package/dist/i18n/index.js +1 -30
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.scss +11 -1
- package/dist/learning-header/AnonymousUserMenu.js +3 -5
- package/dist/learning-header/AnonymousUserMenu.js.map +1 -1
- package/dist/learning-header/AuthenticatedUserDropdown.js +8 -10
- package/dist/learning-header/AuthenticatedUserDropdown.js.map +1 -1
- package/dist/learning-header/LearningHeader.js +56 -50
- package/dist/learning-header/LearningHeader.js.map +1 -1
- package/dist/learning-header/_header.scss +5 -2
- package/dist/learning-header/data/api.js +30 -42
- package/dist/learning-header/data/api.js.map +1 -1
- package/dist/learning-header/data/api.test.js +124 -175
- package/dist/learning-header/data/api.test.js.map +1 -1
- package/dist/learning-header/messages.js.map +1 -1
- package/dist/setupTest.js +9 -13
- package/dist/studio-header/BrandNav.js +21 -0
- package/dist/studio-header/BrandNav.js.map +1 -0
- package/dist/studio-header/CourseLockUp.js +45 -0
- package/dist/studio-header/CourseLockUp.js.map +1 -0
- package/dist/studio-header/HeaderBody.js +131 -0
- package/dist/studio-header/HeaderBody.js.map +1 -0
- package/dist/studio-header/MobileHeader.js +79 -0
- package/dist/studio-header/MobileHeader.js.map +1 -0
- package/dist/studio-header/MobileMenu.js +45 -0
- package/dist/studio-header/MobileMenu.js.map +1 -0
- package/dist/studio-header/NavDropdownMenu.js +30 -0
- package/dist/studio-header/NavDropdownMenu.js.map +1 -0
- package/dist/studio-header/StudioHeader.js +72 -0
- package/dist/studio-header/StudioHeader.js.map +1 -0
- package/dist/studio-header/StudioHeader.scss +49 -0
- package/dist/studio-header/UserMenu.js +55 -0
- package/dist/studio-header/UserMenu.js.map +1 -0
- package/dist/studio-header/index.js +3 -0
- package/dist/studio-header/index.js.map +1 -0
- package/dist/studio-header/messages.js +60 -0
- package/dist/studio-header/messages.js.map +1 -0
- package/dist/studio-header/utils.js +29 -0
- package/dist/studio-header/utils.js.map +1 -0
- package/dist/test-utils.js +26 -0
- package/dist/test-utils.js.map +1 -0
- package/package.json +33 -33
- package/dist/i18n/messages/ar.json +0 -30
- package/dist/i18n/messages/ca.json +0 -1
- package/dist/i18n/messages/es_419.json +0 -30
- package/dist/i18n/messages/fr.json +0 -30
- package/dist/i18n/messages/fr_CA.json +0 -30
- package/dist/i18n/messages/he.json +0 -1
- package/dist/i18n/messages/id.json +0 -1
- package/dist/i18n/messages/ko_KR.json +0 -2
- package/dist/i18n/messages/pl.json +0 -1
- package/dist/i18n/messages/pt_BR.json +0 -2
- package/dist/i18n/messages/ru.json +0 -1
- package/dist/i18n/messages/th.json +0 -1
- package/dist/i18n/messages/uk.json +0 -1
- package/dist/i18n/messages/zh_CN.json +0 -30
package/README.rst
CHANGED
|
@@ -2,22 +2,42 @@
|
|
|
2
2
|
frontend-component-header
|
|
3
3
|
#########################
|
|
4
4
|
|
|
5
|
-
|Build Status| |Codecov| |npm_version| |npm_downloads| |
|
|
5
|
+
|license| |Build Status| |Codecov| |npm_version| |npm_downloads| |semantic-release|
|
|
6
6
|
|
|
7
7
|
********
|
|
8
|
-
|
|
8
|
+
Purpose
|
|
9
9
|
********
|
|
10
10
|
|
|
11
11
|
A generic header for Open edX micro-frontend applications.
|
|
12
12
|
|
|
13
13
|
************
|
|
14
|
-
|
|
14
|
+
Getting Started
|
|
15
15
|
************
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Prerequisites
|
|
18
|
+
=============
|
|
19
|
+
|
|
20
|
+
The `devstack`_ is currently recommended as a development environment for your
|
|
21
|
+
new MFE. If you start it with ``make dev.up.lms`` that should give you
|
|
22
|
+
everything you need as a companion to this frontend.
|
|
23
|
+
|
|
24
|
+
Note that it is also possible to use `Tutor`_ to develop an MFE. You can refer
|
|
25
|
+
to the `relevant tutor-mfe documentation`_ to get started using it.
|
|
26
|
+
|
|
27
|
+
.. _Devstack: https://github.com/openedx/devstack
|
|
28
|
+
|
|
29
|
+
.. _Tutor: https://github.com/overhangio/tutor
|
|
30
|
+
|
|
31
|
+
.. _relevant tutor-mfe documentation: https://github.com/overhangio/tutor-mfe#mfe-development
|
|
32
|
+
|
|
33
|
+
Requirements
|
|
34
|
+
============
|
|
35
|
+
|
|
36
|
+
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/openedx/frontend-template-application/blob/master/src/index.jsx>`_
|
|
37
|
+
|
|
18
38
|
|
|
19
39
|
Environment Variables
|
|
20
|
-
|
|
40
|
+
====================
|
|
21
41
|
|
|
22
42
|
* ``LMS_BASE_URL`` - The URL of the LMS of your Open edX instance.
|
|
23
43
|
* ``LOGOUT_URL`` - The URL of the API endpoint which performs a user logout.
|
|
@@ -26,25 +46,52 @@ Environment Variables
|
|
|
26
46
|
Defaults to "localhost" in development.
|
|
27
47
|
* ``LOGO_URL`` - The URL of the site's logo. This logo is displayed in the header.
|
|
28
48
|
* ``ORDER_HISTORY_URL`` - The URL of the order history page.
|
|
49
|
+
* ``ACCOUNT_PROFILE_URL`` - The URL of the account profile page.
|
|
50
|
+
* ``ACCOUNT_SETTINGS_URL`` - The URL of the account settings page.
|
|
29
51
|
* ``AUTHN_MINIMAL_HEADER`` - A boolean flag which hides the main menu, user menu, and logged-out
|
|
30
52
|
menu items when truthy. This is intended to be used in micro-frontends like
|
|
31
53
|
frontend-app-authentication in which these menus are considered distractions from the user's task.
|
|
32
|
-
* ``
|
|
33
|
-
|
|
54
|
+
* ``ENABLE_HEADER_LANG_SELECTOR`` - A boolean to enable the language selector in the header component.
|
|
55
|
+
* ``SITE_SUPPORTED_LANGUAGES`` - A list with all the languages to display in the selector.
|
|
56
|
+
* ``LOGO_URL_MOBILE`` - The URL of the site's logo for mobile. This logo is displayed in the header.
|
|
57
|
+
|
|
34
58
|
|
|
35
|
-
************
|
|
36
59
|
Installation
|
|
37
|
-
|
|
60
|
+
============
|
|
38
61
|
|
|
39
62
|
To install this header into your Open edX micro-frontend, run the following command in your MFE:
|
|
40
63
|
|
|
41
|
-
``npm i --save @
|
|
64
|
+
``npm i --save @edx/frontend-component-header``
|
|
42
65
|
|
|
43
66
|
This will make the component available to be imported into your application.
|
|
44
67
|
|
|
45
|
-
|
|
68
|
+
Cloning and Startup
|
|
69
|
+
===================
|
|
70
|
+
|
|
71
|
+
.. code-block::
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
1. Clone your new repo:
|
|
75
|
+
|
|
76
|
+
``git clone https://github.com/openedx/frontend-component-header.git``
|
|
77
|
+
|
|
78
|
+
2. Use node v18.x.
|
|
79
|
+
|
|
80
|
+
The current version of the micro-frontend build scripts support node 18.
|
|
81
|
+
Using other major versions of node *may* work, but this is unsupported. For
|
|
82
|
+
convenience, this repository includes an .nvmrc file to help in setting the
|
|
83
|
+
correct node version via `nvm <https://github.com/nvm-sh/nvm>`_.
|
|
84
|
+
|
|
85
|
+
3. Install npm dependencies:
|
|
86
|
+
|
|
87
|
+
``cd frontend-component-header && npm ci``
|
|
88
|
+
|
|
89
|
+
4. Start the dev server:
|
|
90
|
+
|
|
91
|
+
``npm start``
|
|
92
|
+
|
|
46
93
|
Usage
|
|
47
|
-
|
|
94
|
+
=====
|
|
48
95
|
|
|
49
96
|
This library has the following exports:
|
|
50
97
|
|
|
@@ -55,17 +102,15 @@ This library has the following exports:
|
|
|
55
102
|
Examples
|
|
56
103
|
========
|
|
57
104
|
|
|
58
|
-
* `An example of component and messages usage. <https://github.com/
|
|
59
|
-
* `An example of SCSS file usage. <https://github.com/
|
|
105
|
+
* `An example of component and messages usage. <https://github.com/openedx/frontend-template-application/blob/3355bb3a96232390e9056f35b06ffa8f105ed7ca/src/index.jsx#L21>`_
|
|
106
|
+
* `An example of SCSS file usage. <https://github.com/openedx/frontend-template-application/blob/3cd5485bf387b8c479baf6b02bf59e3061dc3465/src/index.scss#L8>`_
|
|
60
107
|
|
|
61
|
-
|
|
62
|
-
***********
|
|
63
108
|
Development
|
|
64
|
-
|
|
109
|
+
===========
|
|
65
110
|
|
|
66
111
|
Install dependencies::
|
|
67
112
|
|
|
68
|
-
npm
|
|
113
|
+
npm ci
|
|
69
114
|
|
|
70
115
|
Start the development server::
|
|
71
116
|
|
|
@@ -75,29 +120,62 @@ Build a production distribution::
|
|
|
75
120
|
|
|
76
121
|
npm run build
|
|
77
122
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
123
|
+
License
|
|
124
|
+
=======
|
|
125
|
+
|
|
126
|
+
The code in this repository is licensed under the AGPLv3 unless otherwise
|
|
127
|
+
noted.
|
|
128
|
+
|
|
129
|
+
Please see `LICENSE <LICENSE>`_ for details.
|
|
130
|
+
|
|
131
|
+
Contributing
|
|
132
|
+
============
|
|
133
|
+
|
|
134
|
+
Contributions are very welcome. Please read `How To Contribute`_ for details.
|
|
135
|
+
|
|
136
|
+
.. _How To Contribute: https://openedx.org/r/how-to-contribute
|
|
137
|
+
|
|
138
|
+
This project is currently accepting all types of contributions, bug fixes,
|
|
139
|
+
security fixes, maintenance work, or new features. However, please make sure
|
|
140
|
+
to have a discussion about your new feature idea with the maintainers prior to
|
|
141
|
+
beginning development to maximize the chances of your change being accepted.
|
|
142
|
+
You can start a conversation by creating a new issue on this repo summarizing
|
|
143
|
+
your idea.
|
|
144
|
+
|
|
145
|
+
Getting Help
|
|
146
|
+
===========
|
|
147
|
+
|
|
148
|
+
If you're having trouble, we have discussion forums at
|
|
149
|
+
https://discuss.openedx.org where you can connect with others in the community.
|
|
150
|
+
|
|
151
|
+
Our real-time conversations are on Slack. You can request a `Slack
|
|
152
|
+
invitation`_, then join our `community Slack workspace`_. Because this is a
|
|
153
|
+
frontend repository, the best place to discuss it would be in the `#wg-frontend
|
|
154
|
+
channel`_.
|
|
81
155
|
|
|
82
|
-
|
|
156
|
+
For anything non-trivial, the best path is to open an issue in this repository
|
|
157
|
+
with as many details about the issue you are facing as you can provide.
|
|
83
158
|
|
|
84
|
-
|
|
159
|
+
https://github.com/openedx/frontend-component-header/issues
|
|
85
160
|
|
|
86
|
-
|
|
161
|
+
For more information about these options, see the `Getting Help`_ page.
|
|
87
162
|
|
|
163
|
+
.. _Slack invitation: https://openedx.org/slack
|
|
164
|
+
.. _community Slack workspace: https://openedx.slack.com/
|
|
165
|
+
.. _#wg-frontend channel: https://openedx.slack.com/archives/C04BM6YC7A6
|
|
166
|
+
.. _Getting Help: https://openedx.org/community/connect
|
|
88
167
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
***********
|
|
92
|
-
To replace the default edx header with the new one, use one of the following instructions:
|
|
168
|
+
The Open edX Code of Conduct
|
|
169
|
+
============================
|
|
93
170
|
|
|
94
|
-
|
|
171
|
+
All community members are expected to follow the `Open edX Code of Conduct`_.
|
|
95
172
|
|
|
96
|
-
|
|
173
|
+
.. _Open edX Code of Conduct: https://openedx.org/code-of-conduct/
|
|
97
174
|
|
|
98
|
-
|
|
175
|
+
Reporting Security Issues
|
|
176
|
+
=========================
|
|
99
177
|
|
|
100
|
-
|
|
178
|
+
Please do not report security issues in public. Please email security@openedx.org.
|
|
101
179
|
|
|
102
180
|
.. |Build Status| image:: https://api.travis-ci.com/edx/frontend-component-header.svg?branch=master
|
|
103
181
|
:target: https://travis-ci.com/edx/frontend-component-header
|
|
@@ -110,4 +188,4 @@ Alternatively, you can specify the version::
|
|
|
110
188
|
.. |license| image:: https://img.shields.io/npm/l/@edx/frontend-component-header.svg
|
|
111
189
|
:target: @edx/frontend-component-header
|
|
112
190
|
.. |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
|
|
191
|
+
:target: https://github.com/semantic-release/semantic-release
|
package/dist/Avatar.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { AvatarIcon } from './Icons';
|
|
4
|
-
|
|
5
|
-
function Avatar(_ref) {
|
|
4
|
+
var Avatar = function Avatar(_ref) {
|
|
6
5
|
var size = _ref.size,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
src = _ref.src,
|
|
7
|
+
alt = _ref.alt,
|
|
8
|
+
className = _ref.className;
|
|
10
9
|
var avatar = src ? /*#__PURE__*/React.createElement("img", {
|
|
11
10
|
className: "d-block w-100 h-100",
|
|
12
11
|
src: src,
|
|
@@ -27,8 +26,7 @@ function Avatar(_ref) {
|
|
|
27
26
|
},
|
|
28
27
|
className: "avatar overflow-hidden d-inline-flex rounded-circle ".concat(className)
|
|
29
28
|
}, avatar);
|
|
30
|
-
}
|
|
31
|
-
|
|
29
|
+
};
|
|
32
30
|
Avatar.propTypes = {
|
|
33
31
|
src: PropTypes.string,
|
|
34
32
|
size: PropTypes.string,
|
package/dist/Avatar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Avatar.js","names":["React","PropTypes","AvatarIcon","Avatar","_ref","size","src","alt","className","avatar","createElement","style","width","height","role","focusable","concat","propTypes","string","defaultProps"],"sources":["../src/Avatar.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { AvatarIcon } from './Icons';\n\nconst 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"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,YAAY;AAElC,SAASC,UAAU,QAAQ,SAAS;AAEpC,IAAMC,MAAM,GAAG,SAATA,MAAMA,CAAAC,IAAA,EAKN;EAAA,IAJJC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IACJC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IACHC,GAAG,GAAAH,IAAA,CAAHG,GAAG;IACHC,SAAS,GAAAJ,IAAA,CAATI,SAAS;EAET,IAAMC,MAAM,GAAGH,GAAG,gBAChBN,KAAA,CAAAU,aAAA;IAAKF,SAAS,EAAC,qBAAqB;IAACF,GAAG,EAAEA,GAAI;IAACC,GAAG,EAAEA;EAAI,CAAE,CAAC,gBAE3DP,KAAA,CAAAU,aAAA,CAACR,UAAU;IAACS,KAAK,EAAE;MAAEC,KAAK,EAAEP,IAAI;MAAEQ,MAAM,EAAER;IAAK,CAAE;IAACS,IAAI,EAAC,KAAK;IAAC,mBAAW;IAACC,SAAS,EAAC;EAAO,CAAE,CAC7F;EAED,oBACEf,KAAA,CAAAU,aAAA;IACEC,KAAK,EAAE;MAAEE,MAAM,EAAER,IAAI;MAAEO,KAAK,EAAEP;IAAK,CAAE;IACrCG,SAAS,yDAAAQ,MAAA,CAAyDR,SAAS;EAAG,GAE7EC,MACG,CAAC;AAEX,CAAC;AAEDN,MAAM,CAACc,SAAS,GAAG;EACjBX,GAAG,EAAEL,SAAS,CAACiB,MAAM;EACrBb,IAAI,EAAEJ,SAAS,CAACiB,MAAM;EACtBX,GAAG,EAAEN,SAAS,CAACiB,MAAM;EACrBV,SAAS,EAAEP,SAAS,CAACiB;AACvB,CAAC;AAEDf,MAAM,CAACgB,YAAY,GAAG;EACpBb,GAAG,EAAE,IAAI;EACTD,IAAI,EAAE,MAAM;EACZE,GAAG,EAAE,IAAI;EACTC,SAAS,EAAE;AACb,CAAC;AAED,eAAeL,MAAM","ignoreList":[]}
|
package/dist/DesktopHeader.js
CHANGED
|
@@ -1,75 +1,62 @@
|
|
|
1
|
-
function _typeof(
|
|
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
|
|
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
|
|
22
|
-
|
|
23
|
-
function
|
|
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';
|
|
18
|
+
import { getConfig } from '@edx/frontend-platform';
|
|
19
|
+
import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
|
|
29
20
|
|
|
21
|
+
// Local Components
|
|
30
22
|
import { Menu, MenuTrigger, MenuContent } from './Menu';
|
|
31
23
|
import Avatar from './Avatar';
|
|
32
|
-
import { LinkedLogo, Logo } from './Logo';
|
|
24
|
+
import { LinkedLogo, Logo } from './Logo';
|
|
33
25
|
|
|
34
|
-
|
|
26
|
+
// i18n
|
|
27
|
+
import messages from './Header.messages';
|
|
35
28
|
|
|
29
|
+
// Assets
|
|
36
30
|
import { CaretIcon } from './Icons';
|
|
37
|
-
|
|
31
|
+
import LanguageSelector from './LanguageSelector';
|
|
38
32
|
var DesktopHeader = /*#__PURE__*/function (_React$Component) {
|
|
39
|
-
_inherits(DesktopHeader, _React$Component);
|
|
40
|
-
|
|
41
|
-
var _super = _createSuper(DesktopHeader);
|
|
42
|
-
|
|
43
33
|
function DesktopHeader(props) {
|
|
44
34
|
_classCallCheck(this, DesktopHeader);
|
|
45
|
-
|
|
46
35
|
// eslint-disable-line no-useless-constructor
|
|
47
|
-
return
|
|
36
|
+
return _callSuper(this, DesktopHeader, [props]);
|
|
48
37
|
}
|
|
49
|
-
|
|
50
|
-
_createClass(DesktopHeader, [{
|
|
51
|
-
key: "
|
|
52
|
-
value: function
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return mainMenu;
|
|
38
|
+
_inherits(DesktopHeader, _React$Component);
|
|
39
|
+
return _createClass(DesktopHeader, [{
|
|
40
|
+
key: "renderMenu",
|
|
41
|
+
value: function renderMenu(menu) {
|
|
42
|
+
// Nodes are accepted as a prop
|
|
43
|
+
if (!Array.isArray(menu)) {
|
|
44
|
+
return menu;
|
|
57
45
|
}
|
|
58
|
-
|
|
59
|
-
return mainMenu.map(function (menuItem) {
|
|
46
|
+
return menu.map(function (menuItem) {
|
|
60
47
|
var type = menuItem.type,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
48
|
+
href = menuItem.href,
|
|
49
|
+
content = menuItem.content,
|
|
50
|
+
submenuContent = menuItem.submenuContent,
|
|
51
|
+
disabled = menuItem.disabled,
|
|
52
|
+
isActive = menuItem.isActive;
|
|
65
53
|
if (type === 'item') {
|
|
66
54
|
return /*#__PURE__*/React.createElement("a", {
|
|
67
55
|
key: "".concat(type, "-").concat(content),
|
|
68
|
-
className: "nav-link",
|
|
56
|
+
className: "nav-link".concat(disabled ? ' disabled' : '').concat(isActive ? ' active' : ''),
|
|
69
57
|
href: href
|
|
70
58
|
}, content);
|
|
71
59
|
}
|
|
72
|
-
|
|
73
60
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
74
61
|
key: "".concat(type, "-").concat(content),
|
|
75
62
|
tag: "div",
|
|
@@ -88,14 +75,26 @@ var DesktopHeader = /*#__PURE__*/function (_React$Component) {
|
|
|
88
75
|
}, submenuContent));
|
|
89
76
|
});
|
|
90
77
|
}
|
|
78
|
+
}, {
|
|
79
|
+
key: "renderMainMenu",
|
|
80
|
+
value: function renderMainMenu() {
|
|
81
|
+
var mainMenu = this.props.mainMenu;
|
|
82
|
+
return this.renderMenu(mainMenu);
|
|
83
|
+
}
|
|
84
|
+
}, {
|
|
85
|
+
key: "renderSecondaryMenu",
|
|
86
|
+
value: function renderSecondaryMenu() {
|
|
87
|
+
var secondaryMenu = this.props.secondaryMenu;
|
|
88
|
+
return this.renderMenu(secondaryMenu);
|
|
89
|
+
}
|
|
91
90
|
}, {
|
|
92
91
|
key: "renderUserMenu",
|
|
93
92
|
value: function renderUserMenu() {
|
|
94
93
|
var _this$props = this.props,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
userMenu = _this$props.userMenu,
|
|
95
|
+
avatar = _this$props.avatar,
|
|
96
|
+
username = _this$props.username,
|
|
97
|
+
intl = _this$props.intl;
|
|
99
98
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
100
99
|
transitionClassName: "menu-dropdown",
|
|
101
100
|
transitionTimeout: 250
|
|
@@ -116,15 +115,32 @@ var DesktopHeader = /*#__PURE__*/function (_React$Component) {
|
|
|
116
115
|
focusable: "false"
|
|
117
116
|
})), /*#__PURE__*/React.createElement(MenuContent, {
|
|
118
117
|
className: "mb-0 dropdown-menu show dropdown-menu-right pin-right shadow py-2"
|
|
119
|
-
}, userMenu.map(function (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
118
|
+
}, userMenu.map(function (group, index) {
|
|
119
|
+
return (
|
|
120
|
+
/*#__PURE__*/
|
|
121
|
+
// eslint-disable-next-line react/jsx-no-comment-textnodes,react/no-array-index-key
|
|
122
|
+
React.createElement(React.Fragment, {
|
|
123
|
+
key: index
|
|
124
|
+
}, group.heading && /*#__PURE__*/React.createElement("div", {
|
|
125
|
+
className: "dropdown-header",
|
|
126
|
+
role: "heading",
|
|
127
|
+
"aria-level": "1"
|
|
128
|
+
}, group.heading), group.items.map(function (_ref) {
|
|
129
|
+
var type = _ref.type,
|
|
130
|
+
content = _ref.content,
|
|
131
|
+
href = _ref.href,
|
|
132
|
+
disabled = _ref.disabled,
|
|
133
|
+
isActive = _ref.isActive;
|
|
134
|
+
return /*#__PURE__*/React.createElement("a", {
|
|
135
|
+
className: "dropdown-".concat(type).concat(isActive ? ' active' : '').concat(disabled ? ' disabled' : ''),
|
|
136
|
+
key: "".concat(type, "-").concat(content),
|
|
137
|
+
href: href
|
|
138
|
+
}, content);
|
|
139
|
+
}), index < userMenu.length - 1 && /*#__PURE__*/React.createElement("div", {
|
|
140
|
+
className: "dropdown-divider",
|
|
141
|
+
role: "separator"
|
|
142
|
+
}))
|
|
143
|
+
);
|
|
128
144
|
})));
|
|
129
145
|
}
|
|
130
146
|
}, {
|
|
@@ -143,11 +159,11 @@ var DesktopHeader = /*#__PURE__*/function (_React$Component) {
|
|
|
143
159
|
key: "render",
|
|
144
160
|
value: function render() {
|
|
145
161
|
var _this$props2 = this.props,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
162
|
+
logo = _this$props2.logo,
|
|
163
|
+
logoAltText = _this$props2.logoAltText,
|
|
164
|
+
logoDestination = _this$props2.logoDestination,
|
|
165
|
+
loggedIn = _this$props2.loggedIn,
|
|
166
|
+
intl = _this$props2.intl;
|
|
151
167
|
var logoProps = {
|
|
152
168
|
src: logo,
|
|
153
169
|
alt: logoAltText,
|
|
@@ -171,23 +187,30 @@ var DesktopHeader = /*#__PURE__*/function (_React$Component) {
|
|
|
171
187
|
className: "logo"
|
|
172
188
|
}, logoProps)), /*#__PURE__*/React.createElement("nav", {
|
|
173
189
|
"aria-label": intl.formatMessage(messages['header.label.main.nav']),
|
|
174
|
-
className: "nav main-nav"
|
|
175
|
-
}, this.renderMainMenu()), /*#__PURE__*/React.createElement("
|
|
190
|
+
className: "nav main-nav mr-auto"
|
|
191
|
+
}, this.renderMainMenu()), getConfig().ENABLE_HEADER_LANG_SELECTOR && /*#__PURE__*/React.createElement("div", {
|
|
192
|
+
className: "mx-2"
|
|
193
|
+
}, /*#__PURE__*/React.createElement(LanguageSelector, {
|
|
194
|
+
options: getConfig().SITE_SUPPORTED_LANGUAGES,
|
|
195
|
+
authenticatedUser: getAuthenticatedUser()
|
|
196
|
+
})), /*#__PURE__*/React.createElement("nav", {
|
|
176
197
|
"aria-label": intl.formatMessage(messages['header.label.secondary.nav']),
|
|
177
|
-
className: "nav secondary-menu-container align-items-center
|
|
178
|
-
}, loggedIn ? this.renderUserMenu() : this.renderLoggedOutItems()))));
|
|
198
|
+
className: "nav secondary-menu-container align-items-center"
|
|
199
|
+
}, loggedIn ? /*#__PURE__*/React.createElement(React.Fragment, null, this.renderSecondaryMenu(), this.renderUserMenu()) : this.renderLoggedOutItems()))));
|
|
179
200
|
}
|
|
180
201
|
}]);
|
|
181
|
-
|
|
182
|
-
return DesktopHeader;
|
|
183
202
|
}(React.Component);
|
|
184
|
-
|
|
185
203
|
DesktopHeader.propTypes = {
|
|
186
204
|
mainMenu: PropTypes.oneOfType([PropTypes.node, PropTypes.array]),
|
|
205
|
+
secondaryMenu: PropTypes.oneOfType([PropTypes.node, PropTypes.array]),
|
|
187
206
|
userMenu: PropTypes.arrayOf(PropTypes.shape({
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
+
}))
|
|
191
214
|
})),
|
|
192
215
|
loggedOutItems: PropTypes.arrayOf(PropTypes.shape({
|
|
193
216
|
type: PropTypes.oneOf(['item', 'menu']),
|
|
@@ -205,6 +228,7 @@ DesktopHeader.propTypes = {
|
|
|
205
228
|
};
|
|
206
229
|
DesktopHeader.defaultProps = {
|
|
207
230
|
mainMenu: [],
|
|
231
|
+
secondaryMenu: [],
|
|
208
232
|
userMenu: [],
|
|
209
233
|
loggedOutItems: [],
|
|
210
234
|
logo: null,
|
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"file":"DesktopHeader.js","names":["React","PropTypes","injectIntl","intlShape","getConfig","getAuthenticatedUser","Menu","MenuTrigger","MenuContent","Avatar","LinkedLogo","Logo","messages","CaretIcon","LanguageSelector","DesktopHeader","_React$Component","props","_classCallCheck","_callSuper","_inherits","_createClass","key","value","renderMenu","menu","Array","isArray","map","menuItem","type","href","content","submenuContent","disabled","isActive","createElement","concat","className","tag","respondToPointerEvents","role","focusable","renderMainMenu","mainMenu","renderSecondaryMenu","secondaryMenu","renderUserMenu","_this$props","userMenu","avatar","username","intl","transitionClassName","transitionTimeout","formatMessage","size","src","alt","group","index","Fragment","heading","items","_ref","length","renderLoggedOutItems","loggedOutItems","item","i","arr","render","_this$props2","logo","logoAltText","logoDestination","loggedIn","logoProps","logoClasses","AUTHN_MINIMAL_HEADER","_extends","ENABLE_HEADER_LANG_SELECTOR","options","SITE_SUPPORTED_LANGUAGES","authenticatedUser","Component","propTypes","oneOfType","node","array","arrayOf","shape","string","oneOf","bool","isRequired","defaultProps"],"sources":["../src/DesktopHeader.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\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';\nimport LanguageSelector from './LanguageSelector';\n\nclass DesktopHeader extends React.Component {\n constructor(props) { // eslint-disable-line no-useless-constructor\n super(props);\n }\n\n renderMenu(menu) {\n // Nodes are accepted as a prop\n if (!Array.isArray(menu)) {\n return menu;\n }\n\n return menu.map((menuItem) => {\n const {\n type,\n href,\n content,\n submenuContent,\n disabled,\n isActive,\n } = menuItem;\n\n if (type === 'item') {\n return (\n <a\n key={`${type}-${content}`}\n className={`nav-link${disabled ? ' disabled' : ''}${isActive ? ' active' : ''}`}\n href={href}\n >\n {content}\n </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 renderMainMenu() {\n const { mainMenu } = this.props;\n return this.renderMenu(mainMenu);\n }\n\n renderSecondaryMenu() {\n const { secondaryMenu } = this.props;\n return this.renderMenu(secondaryMenu);\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((group, index) => (\n // eslint-disable-next-line react/jsx-no-comment-textnodes,react/no-array-index-key\n <React.Fragment key={index}>\n {group.heading && <div className=\"dropdown-header\" role=\"heading\" aria-level=\"1\">{group.heading}</div>}\n {group.items.map(({\n type, content, href, disabled, isActive,\n }) => (\n <a\n className={`dropdown-${type}${isActive ? ' active' : ''}${disabled ? ' disabled' : ''}`}\n key={`${type}-${content}`}\n href={href}\n >\n {content}\n </a>\n ))}\n {index < userMenu.length - 1 && <div className=\"dropdown-divider\" role=\"separator\" />}\n </React.Fragment>\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 mr-auto\"\n >\n {this.renderMainMenu()}\n </nav>\n {getConfig().ENABLE_HEADER_LANG_SELECTOR && (\n <div className=\"mx-2\">\n <LanguageSelector\n options={getConfig().SITE_SUPPORTED_LANGUAGES}\n authenticatedUser={getAuthenticatedUser()}\n />\n </div>\n )}\n <nav\n aria-label={intl.formatMessage(messages['header.label.secondary.nav'])}\n className=\"nav secondary-menu-container align-items-center\"\n >\n {loggedIn\n ? (\n <>\n {this.renderSecondaryMenu()}\n {this.renderUserMenu()}\n </>\n ) : 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 secondaryMenu: PropTypes.oneOfType([\n PropTypes.node,\n PropTypes.array,\n ]),\n userMenu: PropTypes.arrayOf(PropTypes.shape({\n heading: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.shape({\n type: PropTypes.oneOf(['item', 'menu']),\n href: PropTypes.string,\n content: PropTypes.string,\n isActive: PropTypes.bool,\n })),\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 secondaryMenu: [],\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"],"mappings":"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","ignoreList":[]}
|