-
-
-
-
-
+const DesktopHeader = ({
+ mainMenu,
+ secondaryMenu,
+ userMenu,
+ loggedOutItems,
+ logo,
+ logoAltText,
+ logoDestination,
+ avatar,
+ username,
+ loggedIn,
+}) => {
+ const intl = useIntl();
+
+ const renderMainMenu = () =>
;
+
+ const renderSecondaryMenu = () =>
;
+
+ const renderUserMenu = () => (
+
+ );
+
+ const renderLoggedOutItems = () =>
;
+
+ const logoProps = { src: logo, alt: logoAltText, href: logoDestination };
+ const logoClasses = getConfig().AUTHN_MINIMAL_HEADER ? 'mw-100' : null;
+
+ return (
+
+ );
+};
export const desktopHeaderDataShape = {
mainMenu: desktopHeaderMainOrSecondaryMenuDataShape,
@@ -131,9 +113,6 @@ DesktopHeader.propTypes = {
avatar: desktopHeaderDataShape.avatar,
username: desktopHeaderDataShape.username,
loggedIn: desktopHeaderDataShape.loggedIn,
-
- // i18n
- intl: intlShape.isRequired,
};
DesktopHeader.defaultProps = {
@@ -149,4 +128,4 @@ DesktopHeader.defaultProps = {
loggedIn: false,
};
-export default injectIntl(DesktopHeader);
+export default DesktopHeader;
diff --git a/src/learning-header/AnonymousUserMenu.jsx b/src/learning-header/AnonymousUserMenu.jsx
index d98593c6b..5fe18a703 100644
--- a/src/learning-header/AnonymousUserMenu.jsx
+++ b/src/learning-header/AnonymousUserMenu.jsx
@@ -2,12 +2,13 @@ import React from 'react';
import { getConfig } from '@edx/frontend-platform';
import { getLoginRedirectUrl } from '@edx/frontend-platform/auth';
-import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import { useIntl } from '@edx/frontend-platform/i18n';
import LearningLoggedOutItemsSlot from '../plugin-slots/LearningLoggedOutItemsSlot';
import genericMessages from '../generic/messages';
-const AnonymousUserMenu = ({ intl }) => {
+const AnonymousUserMenu = () => {
+ const intl = useIntl();
const buttonsInfo = [
{
message: intl.formatMessage(genericMessages.registerSentenceCase),
@@ -23,8 +24,4 @@ const AnonymousUserMenu = ({ intl }) => {
return
;
};
-AnonymousUserMenu.propTypes = {
- intl: intlShape.isRequired,
-};
-
-export default injectIntl(AnonymousUserMenu);
+export default AnonymousUserMenu;
diff --git a/src/learning-header/AuthenticatedUserDropdown.jsx b/src/learning-header/AuthenticatedUserDropdown.jsx
index e27066223..1fb17d396 100644
--- a/src/learning-header/AuthenticatedUserDropdown.jsx
+++ b/src/learning-header/AuthenticatedUserDropdown.jsx
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { faUserCircle } from '@fortawesome/free-solid-svg-icons';
import { getConfig } from '@edx/frontend-platform';
-import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import { useIntl } from '@edx/frontend-platform/i18n';
import { Dropdown } from '@openedx/paragon';
import LearningUserMenuToggleSlot from '../plugin-slots/LearningUserMenuToggleSlot';
@@ -11,7 +11,8 @@ import LearningUserMenuSlot from '../plugin-slots/LearningUserMenuSlot';
import messages from './messages';
-const AuthenticatedUserDropdown = ({ intl, username }) => {
+const AuthenticatedUserDropdown = ({ username }) => {
+ const intl = useIntl();
const dropdownItems = [
{
message: intl.formatMessage(messages.dashboard),
@@ -48,8 +49,7 @@ const AuthenticatedUserDropdown = ({ intl, username }) => {
};
AuthenticatedUserDropdown.propTypes = {
- intl: intlShape.isRequired,
username: PropTypes.string.isRequired,
};
-export default injectIntl(AuthenticatedUserDropdown);
+export default AuthenticatedUserDropdown;
diff --git a/src/learning-header/LearningHeader.jsx b/src/learning-header/LearningHeader.jsx
index 723b5927d..349690bb2 100644
--- a/src/learning-header/LearningHeader.jsx
+++ b/src/learning-header/LearningHeader.jsx
@@ -1,7 +1,7 @@
import React, { useContext } from 'react';
import PropTypes from 'prop-types';
import { getConfig } from '@edx/frontend-platform';
-import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import { useIntl } from '@edx/frontend-platform/i18n';
import { AppContext } from '@edx/frontend-platform/react';
import AnonymousUserMenu from './AnonymousUserMenu';
@@ -13,8 +13,12 @@ import messages from './messages';
import LearningHelpSlot from '../plugin-slots/LearningHelpSlot';
const LearningHeader = ({
- courseOrg, courseNumber, courseTitle, intl, showUserDropdown,
+ courseOrg,
+ courseNumber,
+ courseTitle,
+ showUserDropdown,
}) => {
+ const intl = useIntl();
const { authenticatedUser } = useContext(AppContext);
const headerLogo = (
@@ -53,7 +57,6 @@ LearningHeader.propTypes = {
courseOrg: courseInfoDataShape.courseOrg,
courseNumber: courseInfoDataShape.courseNumber,
courseTitle: courseInfoDataShape.courseTitle,
- intl: intlShape.isRequired,
showUserDropdown: PropTypes.bool,
};
@@ -64,4 +67,4 @@ LearningHeader.defaultProps = {
showUserDropdown: true,
};
-export default injectIntl(LearningHeader);
+export default LearningHeader;
diff --git a/src/mobile-header/MobileHeader.jsx b/src/mobile-header/MobileHeader.jsx
index 788d17e13..6d48efd07 100644
--- a/src/mobile-header/MobileHeader.jsx
+++ b/src/mobile-header/MobileHeader.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import { useIntl } from '@edx/frontend-platform/i18n';
import { getConfig } from '@edx/frontend-platform';
// Local Components
@@ -20,99 +20,84 @@ import messages from '../Header.messages';
// Assets
import { MenuIcon } from '../Icons';
-class MobileHeader extends React.Component {
- constructor(props) { // eslint-disable-line @typescript-eslint/no-useless-constructor
- super(props);
- }
-
- renderMainMenu() {
- const { mainMenu, secondaryMenu } = this.props;
- return
;
- }
-
- renderUserMenuItems() {
- const { userMenu } = this.props;
- return
;
- }
-
- renderLoggedOutItems() {
- const { loggedOutItems } = this.props;
- return
;
- }
-
- renderUserMenuToggle() {
- const { avatar, username } = this.props;
- return
;
- }
-
- render() {
- const {
- logo,
- logoAltText,
- logoDestination,
- loggedIn,
- stickyOnMobile,
- intl,
- mainMenu,
- userMenu,
- loggedOutItems,
- } = 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 (
-
- {intl.formatMessage(messages['header.label.skip.nav'])}
- {mainMenu.length > 0 ? (
-
-
-
-
- ) : null}
-
-
+const MobileHeader = ({
+ mainMenu,
+ secondaryMenu,
+ userMenu,
+ loggedOutItems,
+ logo,
+ logoAltText,
+ logoDestination,
+ avatar,
+ username,
+ loggedIn,
+ stickyOnMobile,
+}) => {
+ const intl = useIntl();
+
+ const renderMainMenu = () =>
;
+
+ const renderUserMenuItems = () =>
;
+
+ const renderLoggedOutItems = () =>
;
+
+ const renderUserMenuToggle = () =>
;
+
+ 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 (
+
+ {intl.formatMessage(messages['header.label.skip.nav'])}
+ {mainMenu.length > 0 ? (
+
+
+
- {userMenu.length > 0 || loggedOutItems.length > 0 ? (
-
-
-
- ) : null}
-
- );
- }
-}
+ ) : null}
+
+
+
+ {userMenu.length > 0 || loggedOutItems.length > 0 ? (
+
+
+
+ ) : null}
+
+ );
+};
export const mobileHeaderDataShape = {
mainMenu: mobileHeaderMainMenuDataShape,
@@ -140,9 +125,6 @@ MobileHeader.propTypes = {
username: mobileHeaderDataShape.username,
loggedIn: mobileHeaderDataShape.loggedIn,
stickyOnMobile: mobileHeaderDataShape.stickyOnMobile,
-
- // i18n
- intl: intlShape.isRequired,
};
MobileHeader.defaultProps = {
@@ -160,4 +142,4 @@ MobileHeader.defaultProps = {
};
-export default injectIntl(MobileHeader);
+export default MobileHeader;
diff --git a/src/studio-header/CourseLockUp.tsx b/src/studio-header/CourseLockUp.tsx
index c6236147e..d0c687a60 100644
--- a/src/studio-header/CourseLockUp.tsx
+++ b/src/studio-header/CourseLockUp.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import { useIntl } from '@edx/frontend-platform/i18n';
import {
OverlayTrigger,
Tooltip,
@@ -9,41 +9,43 @@ import { Link } from 'react-router-dom';
import messages from './messages';
-const CourseLockUp = ({
- outlineLink,
- org,
- number,
- title,
- // injected
- intl,
-}) => (
-
- {title}
-
- )}
- >
- {
+ const intl = useIntl();
+
+ return (
+
+ {title}
+
+ )}
>
- {org} {number}
- {title}
-
-
-);
+
+ {org} {number}
+ {title}
+
+
+ );
+};
CourseLockUp.propTypes = {
number: PropTypes.string,
org: PropTypes.string,
title: PropTypes.string,
outlineLink: PropTypes.string,
- // injected
- intl: intlShape.isRequired,
};
CourseLockUp.defaultProps = {
@@ -53,4 +55,4 @@ CourseLockUp.defaultProps = {
outlineLink: null,
};
-export default injectIntl(CourseLockUp);
+export default CourseLockUp;
diff --git a/src/studio-header/UserMenu.tsx b/src/studio-header/UserMenu.tsx
index 03695c165..66add10cb 100644
--- a/src/studio-header/UserMenu.tsx
+++ b/src/studio-header/UserMenu.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+import { useIntl } from '@edx/frontend-platform/i18n';
import {
Avatar,
} from '@openedx/paragon';
@@ -14,9 +14,8 @@ const UserMenu = ({
authenticatedUserAvatar,
isMobile,
isAdmin,
- // injected
- intl,
}) => {
+ const intl = useIntl();
const avatar = authenticatedUserAvatar ? (
![]()