Skip to content

Commit dc7080b

Browse files
committed
feat: display multiple dashboards and some style fixes
1 parent d1ed685 commit dc7080b

6 files changed

Lines changed: 37 additions & 46 deletions

File tree

.env.development

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ FAVICON_URL=https://edx-cdn.org/v3/prod/favicon.ico
2323
NOTIFICATION_FEEDBACK_URL=''
2424
CAREERS_URL=''
2525
STUDIO_BASE_URL=''
26+
ENABLE_EDX_PERSONAL_DASHBOARD=true

.env.test

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ FAVICON_URL=https://edx-cdn.org/v3/prod/favicon.ico
2323
NOTIFICATION_FEEDBACK_URL=''
2424
CAREERS_URL=''
2525
STUDIO_BASE_URL=''
26+
ENABLE_EDX_PERSONAL_DASHBOARD=true

src/Header.jsx

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -93,26 +93,12 @@ const Header = ({
9393
},
9494
];
9595

96-
// const dashboardMenuItem = {
97-
// type: 'item',
98-
// href: `${config.LMS_BASE_URL}/dashboard`,
99-
// content: intl.formatMessage(messages['header.user.menu.dashboard']),
100-
// };
101-
10296
const logoutMenuItem = {
10397
type: 'item',
10498
href: config.LOGOUT_URL,
10599
content: intl.formatMessage(messages['header.user.menu.logout']),
106100
};
107101

108-
// If there is an Enterprise LP link, use that instead of the B2C Dashboard
109-
// let baseUserMenuDashboardLinks = [];
110-
// if (enterpriseLearnerPortalLink) {
111-
// baseUserMenuDashboardLinks = [enterpriseLearnerPortalLink];
112-
// } else {
113-
// baseUserMenuDashboardLinks = [dashboardMenuItem];
114-
// }
115-
116102
const defaultSecondaryMenu = [
117103
...(getConfig().SUPPORT_URL ? [{
118104
type: 'item',
@@ -125,7 +111,6 @@ const Header = ({
125111
const defaultUserMenu = authenticatedUser === null ? [] : [{
126112
heading: '',
127113
items: [
128-
// ...baseUserMenuDashboardLinks,
129114
...(!enterpriseLearnerPortalLink ? [{
130115
type: 'item',
131116
href: 'https://careers.edx.org/',
@@ -141,13 +126,13 @@ const Header = ({
141126
type: 'item',
142127
href: `${config.ACCOUNT_PROFILE_URL}/u/${authenticatedUser.username}`,
143128
content: intl.formatMessage(messages['header.user.menu.profile']),
144-
isActive: document.title.includes('Profile'),
129+
isActive: document.title.includes(intl.formatMessage(messages['header.user.menu.profile'])),
145130
},
146131
{
147132
type: 'item',
148133
href: config.ACCOUNT_SETTINGS_URL,
149134
content: intl.formatMessage(messages['header.user.menu.account.settings']),
150-
isActive: document.title.includes('Account'),
135+
isActive: document.title.includes(intl.formatMessage(messages['header.user.menu.account.settings'])),
151136
},
152137
// Users should only see Order History if they do not have an available
153138
// learner portal and have a ORDER_HISTORY_URL define in the environment,
@@ -167,11 +152,17 @@ const Header = ({
167152
const secondaryMenu = secondaryMenuItems || defaultSecondaryMenu;
168153
let userMenu = authenticatedUser === null ? [] : userMenuItems || defaultUserMenu;
169154

155+
const minimalDashboardMenuItem = {
156+
type: 'item',
157+
href: `${config.LMS_BASE_URL}/dashboard`,
158+
content: intl.formatMessage(messages['header.user.menu.dashboard']),
159+
};
160+
170161
if (getConfig().MINIMAL_HEADER && authenticatedUser !== null) {
171162
userMenu = [{
172163
heading: '',
173164
items: [
174-
// dashboardMenuItem,
165+
minimalDashboardMenuItem,
175166
logoutMenuItem,
176167
],
177168
}];

src/Header.test.jsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React from 'react';
33
import { act } from 'react-dom/test-utils';
44
import { IntlProvider } from '@edx/frontend-platform/i18n';
55
import TestRenderer from 'react-test-renderer';
6-
import { useEnterpriseConfig } from '@edx/frontend-enterprise-utils';
6+
import { isEnterpriseUser, useEnterpriseConfig } from '@edx/frontend-enterprise-utils';
77
import { AppContext } from '@edx/frontend-platform/react';
88
import { getConfig } from '@edx/frontend-platform';
99
import { Context as ResponsiveContext } from 'react-responsive';
@@ -44,6 +44,9 @@ const HeaderContext = ({ width, contextValue }) => (
4444
describe('<Header />', () => {
4545
beforeEach(() => {
4646
useEnterpriseConfig.mockReturnValue({});
47+
getConfig.mockReturnValue({
48+
ENABLE_EDX_PERSONAL_DASHBOARD: true,
49+
});
4750
});
4851

4952
beforeAll(async () => {
@@ -66,6 +69,10 @@ describe('<Header />', () => {
6669
});
6770
};
6871

72+
const mockIsEnterpriseUser = () => {
73+
isEnterpriseUser.mockReturnValue(true);
74+
};
75+
6976
it('renders correctly for unauthenticated users on desktop', () => {
7077
const contextValue = {
7178
authenticatedUser: null,
@@ -146,14 +153,15 @@ describe('<Header />', () => {
146153
// We do this in the same test to avoid weird things about jest wanting you to use
147154
// the "correct" act() function (even though it gives the same warning regardless
148155
// of where you import it from, be it react-dom/test-utils or react-test-renderer).
156+
mockIsEnterpriseUser();
149157
mockUseEnterpriseConfig();
150158
wrapper = render(component);
151159
await act(async () => {
152160
await flushPromises();
153161
fireEvent.click(wrapper.container.querySelector('#menu-dropdown'));
154162
});
155163
expect(screen.queryByText('Order History')).not.toBeInTheDocument();
156-
expect(screen.getByText('Dashboard')).toBeInTheDocument();
164+
expect(screen.getByText('Personal')).toBeInTheDocument();
157165
});
158166

159167
it('renders correctly for unauthenticated users on mobile', () => {

src/common/UserDashboardMenu/index.test.jsx

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ import {
55
screen,
66
render,
77
} from '@testing-library/react';
8-
import { useEnterpriseConfig } from '@edx/frontend-enterprise-utils';
98

109
import UserDashboardMenu from './index'; // eslint-disable-line
1110

12-
jest.mock('@edx/frontend-enterprise-utils');
1311
mergeConfig({ ENABLE_EDX_PERSONAL_DASHBOARD: true });
1412
const IntlUserDashboardMenu = injectIntl(UserDashboardMenu);
1513

@@ -21,25 +19,24 @@ describe('User Dashboard Menu', () => {
2119
</IntlProvider>
2220
);
2321

24-
it('should render dashboard menu in the user menu dropdown', () => {
25-
useEnterpriseConfig.mockReturnValue({
26-
enterpriseLearnerPortalLink: {
27-
type: 'item',
28-
href: 'http://localhost:8000',
29-
content: 'Dashboard',
30-
},
31-
enterpriseCustomerBrandingConfig: {
32-
logoAltText: 'fake-enterprise-name',
33-
logoDestination: 'http://fake.url',
34-
logo: 'http://fake-logo.url',
35-
},
36-
});
37-
38-
render(Wrapper(<IntlUserDashboardMenu />));
22+
it('should render enterprise dashboard menu in the user menu dropdown', () => {
23+
render(Wrapper(<IntlUserDashboardMenu
24+
enterpriseOrg="Fake Enterprise"
25+
enterpriseSrc="http://fake.url"
26+
hasEnterpriseAccount
27+
/>));
3928

4029
const dashboardSwitchMenu = screen.getByText('SWITCH DASHBOARD');
41-
const dashboardMenu = screen.getByText('Personal');
42-
expect(dashboardMenu).toBeTruthy();
30+
const personalDashboard = screen.getByText('Personal');
31+
const enterpriseDashboard = screen.getByText('Fake Enterprise Dashboard');
4332
expect(dashboardSwitchMenu).toBeTruthy();
33+
expect(personalDashboard).toBeTruthy();
34+
expect(enterpriseDashboard).toBeTruthy();
35+
});
36+
it('should render only one dashboard menu in the user menu dropdown when not enterprise user', () => {
37+
render(Wrapper(<IntlUserDashboardMenu />));
38+
39+
const personalDashboard = screen.getByText('Dashboard');
40+
expect(personalDashboard).toBeTruthy();
4441
});
4542
});

src/index.scss

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
$spacer: 1rem;
2-
$blue: #007db8;
3-
$white: #fff;
4-
$component-active-bg: #0A3055FF !default;
5-
$component-active-color: $white !default;
6-
$rounded-pill: 50rem !default;
7-
81
@import './Menu/menu.scss';
92
@import './studio-header/StudioHeader.scss';
103

0 commit comments

Comments
 (0)