Compare commits

...

35 Commits

Author SHA1 Message Date
Renovate Bot
37e9ef0434 fix(deps): update dependency react-responsive to v8.2.0 2021-06-04 00:24:39 +00:00
Renovate Bot
df1b6ff941 chore(deps): update react monorepo to v16.14.0 2021-06-04 00:13:10 +00:00
Renovate Bot
52b8b7ca11 chore(deps): update dependency redux to v4.1.0 2021-06-04 00:00:12 +00:00
Renovate Bot
9ed0af96ca chore(deps): update dependency react-router-dom to v5.2.0 2021-06-03 23:46:01 +00:00
Renovate Bot
8d0bd0ca05 chore(deps): update dependency react-redux to v7.2.4 2021-06-03 23:30:28 +00:00
Renovate Bot
de83d5f20f chore(deps): update dependency husky to v3.1.0 2021-06-03 23:12:56 +00:00
Renovate Bot
54ff71b0ec chore(deps): update dependency enzyme-adapter-react-16 to v1.15.6 2021-06-03 22:54:19 +00:00
Renovate Bot
a8347625ae chore(deps): update dependency enzyme to v3.11.0 2021-06-03 22:34:36 +00:00
Renovate Bot
305ae120c6 chore(deps): update dependency codecov to v3.8.2 2021-06-03 22:14:04 +00:00
Renovate Bot
e1468b5396 chore(deps): update dependency @edx/paragon to v12.8.0 2021-06-03 21:52:33 +00:00
Renovate Bot
10767bdaac chore(deps): update dependency @edx/frontend-platform to v1.11.0 2021-06-03 21:27:30 +00:00
Renovate Bot
484d6af4d9 chore(deps): update dependency @edx/frontend-build to v5.6.14 2021-06-03 21:01:01 +00:00
Renovate Bot
8ba7153806 chore(deps): update commitlint monorepo 2021-06-03 20:31:27 +00:00
stvn
334bdb34f3 merge(#103): build/renovate
commits
=======
- build(renovate): be more liberal about what automerges
2021-06-03 11:18:13 -07:00
stvn
12b63c5583 build(renovate): be more liberal about what automerges
based on https://github.com/edx/frontend-app-account .
2021-06-03 11:00:58 -07:00
stvn
3726792df2 merge: stvn/own/code 2021-05-26 13:42:44 -07:00
stvn
cc252e32e6 build: add CODEOWNERS; edx/community-engineering
Background
==========
As part of our Squad-based ownership, we should stay on top of what
happens in these repositories. However, due to the number of
repositories (and subsequently pull requests) across the edX ecosystem,
it is challenging to stay on top of notifications, separating the
'signal' from the 'noise'. Email filters can go a long way to taming
Inbox notifications, but this is manual and requires maintenance as
Squad ownership changes. It also fails to account for Github-specific behavior.

Proposal
========
By leveraging Github support for `CODEOWNERS` files [1],
we can ensure that our team is at least CCed explicitly, here,
in the form a requested review. This request is just that, a request,
not a requirement; we are not enacting any new merge requirements
at this time.

- [1] https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
2021-05-26 12:16:05 -07:00
David Joy
0c58362b49 docs: Updating README with repository details. (#101)
* docs: fleshing out the readme

Making it consistent with frontend-component-footer and much more detailed.

* fix: Removing unused variable, siteName

Also fixing logout URL in development.  (We fixed this in a number of other repositories already, but somehow this one snuck through)
2021-05-13 14:57:25 -04:00
Uzair Rasheed
b00e018105 Merge pull request #97 from edx/van-379/add-skipnav-link
fix: add skipnav link in header
2021-03-19 21:12:14 +05:00
uzairr
02464f9c09 fix: add skipnav link in header 2021-03-19 21:05:18 +05:00
Uzair Rasheed
67c1fb2cda Merge pull request #95 from edx/van-379/add-skipnav-link
add skipnav link in header
2021-03-19 18:23:28 +05:00
uzairr
e84843d83a add skipnav link in header 2021-03-19 14:57:42 +05:00
Renovate Bot
20606c2880 chore(deps): update dependency redux-saga to v1.1.3 2021-02-11 15:34:50 +00:00
Renovate Bot
3ba52a586e chore(deps): update dependency redux to v4.0.5 2021-02-11 10:36:34 +00:00
Renovate Bot
9eafcc9ca0 chore(deps): update dependency @edx/frontend-platform to v1.8.4 2021-02-11 01:55:14 +00:00
Uzair Rasheed
61ecf93785 Merge pull request #92 from edx/align-logo-to-left
fix: align logo to left
2021-02-08 14:57:53 +05:00
uzairr
917e748fc5 fix: align logo to left on authn mfe 2021-02-08 13:18:42 +05:00
Adeel Ehsan
0d64b19ac4 Merge pull request #89 from edx/aehsan/logistration-renmaed-to-authn
fix: logistration renamed to authn
2021-01-28 14:06:36 +05:00
adeelehsan
9415709b81 fix: logistration renamed to authn 2021-01-28 13:08:25 +05:00
Adeel Ehsan
003d8ee1a7 Merge pull request #88 from edx/revert-87-aehsan/logistration_renmaed_to_authn
Revert "logistration renamed to auth n"
2021-01-28 12:58:14 +05:00
Adeel Ehsan
18dd01d3d2 Revert "logistration renamed to auth n" 2021-01-28 12:52:31 +05:00
Adeel Ehsan
bdb1e03e4e Merge pull request #87 from edx/aehsan/logistration_renmaed_to_authn
logistration renamed to auth n
2021-01-28 12:34:54 +05:00
adeelehsan
5662e5daa3 logistration renamed to auth n 2021-01-28 12:27:17 +05:00
Renovate Bot
9306ce0783 chore(deps): update dependency react-redux to v7.1.3 2021-01-24 19:58:38 +00:00
Renovate Bot
f58ef0ace6 chore(deps): update dependency @edx/frontend-platform to v1.8.1 2021-01-10 13:50:47 +00:00
12 changed files with 4377 additions and 4001 deletions

View File

@@ -6,7 +6,7 @@ ECOMMERCE_BASE_URL=http://localhost:18130
LANGUAGE_PREFERENCE_COOKIE_NAME=openedx-language-preference
LMS_BASE_URL=http://localhost:18000
LOGIN_URL=http://localhost:18000/login
LOGOUT_URL=http://localhost:18000/login
LOGOUT_URL=http://localhost:18000/logout
MARKETING_SITE_BASE_URL=http://localhost:18000
ORDER_HISTORY_URL=localhost:1996/orders
REFRESH_ACCESS_TOKEN_ENDPOINT=http://localhost:18000/login_refresh

1
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1 @@
* @edx/community-engineering

1
.gitignore vendored
View File

@@ -6,3 +6,4 @@ node_modules
temp
src/i18n/transifex_input.json
module.config.js
.idea/

View File

@@ -1,11 +1,75 @@
#########################
frontend-component-header
=========================
#########################
|Build Status| |Codecov| |npm_version| |npm_downloads| |license| |semantic-release|
This is the standard Open edX header for use in React applications. It has two exports:
- **default**: The Header Component
- **messages**: for i18n in the form of ``{ locale: { key: translatedString } }``
********
Overview
********
A generic header for Open edX micro-frontend applications.
************
Requirements
************
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>`_
Environment Variables
=====================
* ``LMS_BASE_URL`` - The URL of the LMS of your Open edX instance.
* ``LOGOUT_URL`` - The URL of the API endpoint which performs a user logout.
* ``LOGIN_URL`` - The URL of the login page where a user can sign into their account.
* ``SITE_NAME`` - The user-facing name of the site, used as `alt` text on the logo in the header.
Defaults to "localhost" in development.
* ``LOGO_URL`` - The URL of the site's logo. This logo is displayed in the header.
* ``AUTHN_MINIMAL_HEADER`` - A boolean flag which hides the main menu, user menu, and logged-out
menu items when truthy. This is intended to be used in micro-frontends like
frontend-app-authentication in which these menus are considered distractions from the user's task.
************
Installation
************
To install this header into your Open edX micro-frontend, run the following command in your MFE:
``npm i --save @edx/frontend-component-header``
This will make the component available to be imported into your application.
*****
Usage
*****
This library has the following exports:
* ``(default)``: The header as a React component.
* ``messages``: Internationalization messages suitable for use with `@edx/frontend-platform/i18n <https://edx.github.io/frontend-platform/module-Internationalization.html>`_
* ``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.
Examples
========
* `An example of component and messages usage. <https://github.com/edx/frontend-template-application/blob/3355bb3a96232390e9056f35b06ffa8f105ed7ca/src/index.jsx#L21>`_
* `An example of SCSS file usage. <https://github.com/edx/frontend-template-application/blob/3cd5485bf387b8c479baf6b02bf59e3061dc3465/src/index.scss#L8>`_
***********
Development
***********
Install dependencies::
npm i
Start the development server::
npm start
Build a production distribution::
npm run build
.. |Build Status| image:: https://api.travis-ci.com/edx/frontend-component-header.svg?branch=master
:target: https://travis-ci.com/edx/frontend-component-header

8173
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -34,31 +34,31 @@
},
"homepage": "https://github.com/edx/frontend-component-header#readme",
"devDependencies": {
"@commitlint/cli": "8.2.0",
"@commitlint/config-angular": "8.2.0",
"@commitlint/prompt": "8.2.0",
"@commitlint/prompt-cli": "8.2.0",
"@commitlint/cli": "8.3.5",
"@commitlint/config-angular": "8.3.4",
"@commitlint/prompt": "8.3.5",
"@commitlint/prompt-cli": "8.3.5",
"@edx/brand": "npm:@edx/brand-openedx@1.1.0",
"@edx/frontend-build": "5.4.0",
"@edx/frontend-platform": "1.8.0",
"@edx/paragon": "12.0.5",
"codecov": "3.7.2",
"enzyme": "3.10.0",
"enzyme-adapter-react-16": "1.14.0",
"husky": "3.0.9",
"@edx/frontend-build": "5.6.14",
"@edx/frontend-platform": "1.11.0",
"@edx/paragon": "12.8.0",
"codecov": "3.8.2",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.6",
"husky": "3.1.0",
"prop-types": "15.7.2",
"react": "16.9.0",
"react-dom": "16.9.0",
"react-redux": "7.1.1",
"react-router-dom": "5.1.2",
"react-test-renderer": "16.9.0",
"react": "16.14.0",
"react-dom": "16.14.0",
"react-redux": "7.2.4",
"react-router-dom": "5.2.0",
"react-test-renderer": "16.14.0",
"reactifex": "1.1.1",
"redux": "4.0.4",
"redux-saga": "1.1.1"
"redux": "4.1.0",
"redux-saga": "1.1.3"
},
"dependencies": {
"babel-polyfill": "6.26.0",
"react-responsive": "8.0.3",
"react-responsive": "8.2.0",
"react-transition-group": "4.3.0"
},
"peerDependencies": {

View File

@@ -1,9 +1,21 @@
{
"extends": [
"config:base"
"config:base",
"schedule:weekly",
":automergeMinor",
":enableVulnerabilityAlerts",
":rebaseStalePrs",
":semanticCommits",
":updateNotScheduled"
],
"patch": {
"automerge": true
},
"rebaseStalePrs": true
"packageRules": [
{
"matchDepTypes": [
"devDependencies",
"lockFileMaintenance"
],
"automerge": true
}
],
"timezone": "America/New_York"
}

View File

@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform';
// Local Components
import { Menu, MenuTrigger, MenuContent } from './Menu';
@@ -103,10 +104,12 @@ class DesktopHeader extends React.Component {
intl,
} = this.props;
const logoProps = { src: logo, alt: logoAltText, href: logoDestination };
const logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'mw-100' : null;
return (
<header className="site-header-desktop">
<div className="container-fluid">
<a className="nav-skip sr-only sr-only-focusable" href="#main">{intl.formatMessage(messages['header.label.skip.nav'])}</a>
<div className={`container-fluid ${logoClasses}`}>
<div className="nav-container position-relative d-flex align-items-center">
{logoDestination === null ? <Logo className="logo" src={logo} alt={logoAltText} /> : <LinkedLogo className="logo" {...logoProps} />}
<nav

View File

@@ -25,7 +25,7 @@ ensureConfig([
subscribe(APP_CONFIG_INITIALIZED, () => {
mergeConfig({
LOGISTRATION_MINIMAL_HEADER: !!process.env.LOGISTRATION_MINIMAL_HEADER,
AUTHN_MINIMAL_HEADER: !!process.env.AUTHN_MINIMAL_HEADER,
}, 'Header additional config');
});
@@ -79,14 +79,13 @@ function Header({ intl }) {
const props = {
logo: config.LOGO_URL,
logoAltText: config.SITE_NAME,
siteName: config.SITE_NAME,
logoDestination: `${config.LMS_BASE_URL}/dashboard`,
loggedIn: authenticatedUser !== null,
username: authenticatedUser !== null ? authenticatedUser.username : null,
avatar: authenticatedUser !== null ? authenticatedUser.avatar : null,
mainMenu: getConfig().LOGISTRATION_MINIMAL_HEADER ? [] : mainMenu,
userMenu: getConfig().LOGISTRATION_MINIMAL_HEADER ? [] : userMenu,
loggedOutItems: getConfig().LOGISTRATION_MINIMAL_HEADER ? [] : loggedOutItems,
mainMenu: getConfig().AUTHN_MINIMAL_HEADER ? [] : mainMenu,
userMenu: getConfig().AUTHN_MINIMAL_HEADER ? [] : userMenu,
loggedOutItems: getConfig().AUTHN_MINIMAL_HEADER ? [] : loggedOutItems,
};
return (

View File

@@ -91,6 +91,11 @@ const messages = defineMessages({
defaultMessage: 'Secondary',
description: 'The aria label for the seconary nav',
},
'header.label.skip.nav': {
id: 'header.label.skip.nav',
defaultMessage: 'Skip to main content',
description: 'A link used by screen readers to allow users to skip to the main content of the page.',
},
});
export default messages;

View File

@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform';
// Local Components
import { Menu, MenuTrigger, MenuContent } from './Menu';
@@ -96,14 +97,17 @@ class MobileHeader extends React.Component {
} = this.props;
const logoProps = { src: logo, alt: logoAltText, href: logoDestination };
const stickyClassName = stickyOnMobile ? 'sticky-top' : '';
const logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'justify-content-left pl-3' : 'justify-content-center';
return (
<header
aria-label={intl.formatMessage(messages['header.label.main.header'])}
className={`site-header-mobile d-flex justify-content-between align-items-center shadow ${stickyClassName}`}
>
<div className="w-100 d-flex justify-content-start">
{mainMenu.length > 0 ? (
<a className="nav-skip sr-only sr-only-focusable" href="#main">{intl.formatMessage(messages['header.label.skip.nav'])}</a>
{mainMenu.length > 0 ? (
<div className="w-100 d-flex justify-content-start">
<Menu className="position-static">
<MenuTrigger
tag="button"
@@ -121,13 +125,13 @@ class MobileHeader extends React.Component {
{this.renderMainMenu()}
</MenuContent>
</Menu>
) : null}
</div>
<div className="w-100 d-flex justify-content-center">
</div>
) : null}
<div className={`w-100 d-flex ${logoClasses}`}>
{ logoDestination === null ? <Logo className="logo" src={logo} alt={logoAltText} /> : <LinkedLogo className="logo" {...logoProps} itemType="http://schema.org/Organization" />}
</div>
<div className="w-100 d-flex justify-content-end align-items-center">
{userMenu.length > 0 || loggedOutItems.length > 0 ? (
{userMenu.length > 0 || loggedOutItems.length > 0 ? (
<div className="w-100 d-flex justify-content-end align-items-center">
<Menu tag="nav" aria-label={intl.formatMessage(messages['header.label.secondary.nav'])} className="position-static">
<MenuTrigger
tag="button"
@@ -141,8 +145,8 @@ class MobileHeader extends React.Component {
{loggedIn ? this.renderUserMenuItems() : this.renderLoggedOutItems()}
</MenuContent>
</Menu>
) : null}
</div>
</div>
) : null}
</header>
);
}

View File

@@ -4,8 +4,14 @@ exports[`<Header /> renders correctly for anonymous desktop 1`] = `
<header
className="site-header-desktop"
>
<a
className="nav-skip sr-only sr-only-focusable"
href="#main"
>
Skip to main content
</a>
<div
className="container-fluid"
className="container-fluid null"
>
<div
className="nav-container position-relative d-flex align-items-center"
@@ -58,6 +64,12 @@ exports[`<Header /> renders correctly for anonymous mobile 1`] = `
aria-label="Main"
className="site-header-mobile d-flex justify-content-between align-items-center shadow sticky-top"
>
<a
className="nav-skip sr-only sr-only-focusable"
href="#main"
>
Skip to main content
</a>
<div
className="w-100 d-flex justify-content-start"
>
@@ -188,8 +200,14 @@ exports[`<Header /> renders correctly for authenticated desktop 1`] = `
<header
className="site-header-desktop"
>
<a
className="nav-skip sr-only sr-only-focusable"
href="#main"
>
Skip to main content
</a>
<div
className="container-fluid"
className="container-fluid null"
>
<div
className="nav-container position-relative d-flex align-items-center"
@@ -292,6 +310,12 @@ exports[`<Header /> renders correctly for authenticated mobile 1`] = `
aria-label="Main"
className="site-header-mobile d-flex justify-content-between align-items-center shadow sticky-top"
>
<a
className="nav-skip sr-only sr-only-focusable"
href="#main"
>
Skip to main content
</a>
<div
className="w-100 d-flex justify-content-start"
>