diff --git a/src/StudioHeader.jsx b/src/StudioHeader.jsx
index 6f95e2c9e8..daa7891146 100644
--- a/src/StudioHeader.jsx
+++ b/src/StudioHeader.jsx
@@ -5,11 +5,17 @@ import { AppContext } from '@edx/frontend-platform/react';
import {
APP_CONFIG_INITIALIZED,
ensureConfig,
+ getConfig,
mergeConfig,
subscribe,
} from '@edx/frontend-platform';
+import { ActionRow } from '@edx/paragon';
-import DesktopHeader from './DesktopHeader';
+import { Menu, MenuTrigger, MenuContent } from './Menu';
+import Avatar from './Avatar';
+import { LinkedLogo, Logo } from './Logo';
+
+import { CaretIcon } from './Icons';
import messages from './Header.messages';
@@ -28,7 +34,124 @@ subscribe(APP_CONFIG_INITIALIZED, () => {
}, 'StudioHeader additional config');
});
-function StudioHeader({ intl, mainMenu, appMenu }) {
+class StudioDesktopHeaderBase extends React.Component {
+ constructor(props) { // eslint-disable-line no-useless-constructor
+ super(props);
+ }
+
+ renderUserMenu() {
+ const {
+ userMenu,
+ avatar,
+ username,
+ intl,
+ } = this.props;
+
+ return (
+
+ );
+ }
+
+ renderLoggedOutItems() {
+ const { loggedOutItems } = this.props;
+
+ return loggedOutItems.map((item, i, arr) => (
+
+ {item.content}
+
+ ));
+ }
+
+ render() {
+ const {
+ logo,
+ logoAltText,
+ logoDestination,
+ loggedIn,
+ intl,
+ actionRowContent,
+ } = this.props;
+ const logoProps = { src: logo, alt: logoAltText, href: logoDestination };
+ const logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'mw-100' : null;
+
+ return (
+
+ );
+ }
+}
+
+StudioDesktopHeaderBase.propTypes = {
+ userMenu: PropTypes.arrayOf(PropTypes.shape({
+ type: PropTypes.oneOf(['item', 'menu']),
+ href: PropTypes.string,
+ content: PropTypes.string,
+ })),
+ loggedOutItems: PropTypes.arrayOf(PropTypes.shape({
+ type: PropTypes.oneOf(['item', 'menu']),
+ href: PropTypes.string,
+ content: PropTypes.string,
+ })),
+ logo: PropTypes.string,
+ logoAltText: PropTypes.string,
+ logoDestination: PropTypes.string,
+ avatar: PropTypes.string,
+ username: PropTypes.string,
+ loggedIn: PropTypes.bool,
+ actionRowContent: PropTypes.element,
+
+ // i18n
+ intl: intlShape.isRequired,
+};
+
+StudioDesktopHeaderBase.defaultProps = {
+ userMenu: [],
+ loggedOutItems: [],
+ logo: null,
+ logoAltText: null,
+ logoDestination: null,
+ avatar: null,
+ username: null,
+ loggedIn: false,
+ actionRowContent: null,
+};
+
+const StudioDesktopHeader = injectIntl(StudioDesktopHeaderBase);
+
+function StudioHeader({ intl, actionRowContent }) {
const { authenticatedUser, config } = useContext(AppContext);
const userMenu = authenticatedUser === null ? [] : [
@@ -56,44 +179,21 @@ function StudioHeader({ intl, mainMenu, appMenu }) {
loggedIn: authenticatedUser !== null,
username: authenticatedUser !== null ? authenticatedUser.username : null,
avatar: authenticatedUser !== null ? authenticatedUser.avatar : null,
- mainMenu,
+ actionRowContent,
userMenu,
- appMenu,
loggedOutItems: [],
};
- return ;
+ return ;
}
StudioHeader.propTypes = {
intl: intlShape.isRequired,
- appMenu: PropTypes.shape(
- {
- content: PropTypes.string,
- href: PropTypes.string,
- menuItems: PropTypes.arrayOf(
- PropTypes.shape({
- type: PropTypes.string,
- href: PropTypes.string,
- content: PropTypes.string,
- }),
- ),
- },
- ),
- mainMenu: PropTypes.arrayOf(
- PropTypes.shape(
- {
- type: PropTypes.string,
- href: PropTypes.string,
- content: PropTypes.string,
- },
- ),
- ),
+ actionRowContent: PropTypes.element,
};
StudioHeader.defaultProps = {
- appMenu: null,
- mainMenu: [],
+ actionRowContent: <>>,
};
export default injectIntl(StudioHeader);