Skip to content

Commit 01e5f14

Browse files
fix: header user info menu item design (#562)
1 parent 4e20639 commit 01e5f14

File tree

7 files changed

+65
-23
lines changed

7 files changed

+65
-23
lines changed

src/DesktopHeader.jsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,17 @@ class DesktopHeader extends React.Component {
7575
data-hj-suppress
7676
/>
7777
<Dropdown.Menu alignRight>
78-
<Dropdown.Item key="user-info">
79-
<UserMenuItem
80-
name={name}
81-
email={email}
82-
/>
83-
</Dropdown.Item>
78+
{(name || email) && (
79+
<Dropdown.Item
80+
key="user-info"
81+
className="user-info__menu-item"
82+
>
83+
<UserMenuItem
84+
name={name}
85+
email={email}
86+
/>
87+
</Dropdown.Item>
88+
)}
8489
{userMenu.map(({ type, href, content }) => (
8590
<Dropdown.Item key={`${type}-${content}`} href={href}>
8691
{content}

src/MobileHeader.jsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,19 @@ class MobileHeader extends React.Component {
5959

6060
renderUserMenuItems() {
6161
const { userMenu, name, email } = this.props;
62-
const userInfoItem = (
63-
<li className="nav-item" key="user-info">
62+
const userInfoItem = (name || email) ? (
63+
<li className="nav-item user-info__menu-item" key="user-info">
6464
<UserMenuItem name={name} email={email} />
6565
</li>
66-
);
66+
) : null;
67+
6768
const userMenuItems = userMenu.map(({ type, href, content }) => (
6869
<li className="nav-item" key={`${type}-${content}`}>
6970
<a className="nav-link" href={href}>{content}</a>
7071
</li>
7172
));
72-
return [userInfoItem, ...userMenuItems];
73+
74+
return userInfoItem ? [userInfoItem, ...userMenuItems] : userMenuItems;
7375
}
7476

7577
renderLoggedOutItems() {

src/common/style.scss

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
// bottom boarder of first child of user info dropdown menu item
2+
.user-info__menu-item {
3+
border-bottom: 1px solid #70828E !important;
4+
pointer-events: none;
5+
}
6+
17
@media screen and (max-width: 768px) {
2-
.menu-content li:first-child {
8+
.menu-content .user-info__menu-item {
39
display: flex;
410
align-items: center;
5-
padding: 0 16px;
11+
padding: 0.625rem 1rem;
612
border-bottom: 1px solid #70828E;
713

814
a {

src/index.scss

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,3 @@ $white: #fff;
119119
border-radius: $rounded-pill;
120120
}
121121
}
122-
123-
// bottom boarder of first child of user dropdown menu
124-
.dropdown-menu a:first-child {
125-
border-bottom: 1px solid #70828E !important;
126-
}

src/learning-header/AuthenticatedUserDropdown.jsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const AuthenticatedUserDropdown = (props) => {
3636
{intl.formatMessage(messages.dashboard)}
3737
</Dropdown.Item>
3838
);
39+
3940
let careersMenuItem = (
4041
<Dropdown.Item href="https://careers.edx.org/">
4142
{intl.formatMessage(messages.career)}
@@ -44,11 +45,20 @@ const AuthenticatedUserDropdown = (props) => {
4445
</Badge>
4546
</Dropdown.Item>
4647
);
47-
const userMenuItem = (
48-
<Dropdown.Item data-testid="user-item">
49-
<UserMenuItem name={name} email={email} />
48+
49+
const userMenuItem = (name || email) ? (
50+
<Dropdown.Item
51+
key="user-info"
52+
data-testid="user-item"
53+
className="user-info__menu-item"
54+
>
55+
<UserMenuItem
56+
name={name}
57+
email={email}
58+
/>
5059
</Dropdown.Item>
51-
);
60+
) : null;
61+
5262
if (enterpriseLearnerPortalLink && Object.keys(enterpriseLearnerPortalLink).length > 0) {
5363
dashboardMenuItem = (
5464
<Dropdown.Item

src/learning-header/LearningHeader.test.jsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import { AppContext } from '@edx/frontend-platform/react';
23
import {
34
fireEvent, initializeMockApp, render, screen,
45
} from '../setupTest';
@@ -16,7 +17,28 @@ describe('Header', () => {
1617
});
1718

1819
it('displays user menu in dropdown', () => {
19-
render(<Header />);
20+
const authenticatedUser = {
21+
userId: 'abc123',
22+
username: 'edX',
23+
name: 'edX',
24+
25+
roles: [],
26+
administrator: false,
27+
};
28+
const contextValue = {
29+
authenticatedUser,
30+
config: {},
31+
};
32+
const component = (
33+
<AppContext.Provider
34+
value={contextValue}
35+
>
36+
<Header />
37+
</AppContext.Provider>
38+
);
39+
40+
render(component);
41+
2042
const button = screen.getByRole('button', { className: 'dropdown-toggle' });
2143
fireEvent.click(button);
2244
const userMenuItem = screen.queryByTestId('user-item');

src/studio-header/NavDropdownMenu.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@ const NavDropdownMenu = ({
2020
variant="outline-primary"
2121
className="mr-2"
2222
>
23+
{(name || email) && (
2324
<Dropdown.Item
2425
key="user-info"
25-
className="small"
26+
className="small user-info__menu-item"
2627
>
2728
<UserMenuItem
2829
name={name}
2930
email={email}
3031
/>
3132
</Dropdown.Item>
33+
)}
3234
{items.map(item => (
3335
<Dropdown.Item
3436
key={`${item.title}-dropdown-item`}

0 commit comments

Comments
 (0)