Skip to content

Commit dcbd355

Browse files
committed
Allow any node to be passed in as the avatar for GlobalHeaderProfile
Closes salesforce#1461
1 parent 0e22d42 commit dcbd355

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

components/global-header/__docs__/storybook-stories.jsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import IconSettings from '../../icon-settings';
44

55
import logo from '../__examples__/logo.svg';
66

7+
import Avatar from '../../avatar';
78
import GlobalHeader from '../../global-header';
89
import GlobalHeaderButton from '../../global-header/button';
910
import GlobalHeaderDropdown from '../../global-header/dropdown';
@@ -104,6 +105,7 @@ const GlobalHeaderDemo = (props) => (
104105
openOn={props.openOn}
105106
onClick={action('Profile Clicked')}
106107
onSelect={action('Profile Selected')}
108+
avatar={props.avatar}
107109
>
108110
<HeaderProfileCustomContent />
109111
</GlobalHeaderProfile>
@@ -132,4 +134,7 @@ storiesOf(GLOBAL_HEADER, module)
132134
options={[{ label: 'Profile Menu' }]}
133135
/>
134136
</GlobalHeader>
137+
))
138+
.add('With custom <Avatar/>', () => (
139+
<GlobalHeaderDemo avatar={<Avatar variant="user" label="Art Vandelay" />} />
135140
));

components/global-header/private/dropdown-trigger.jsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ const GlobalHeaderDropdownTrigger = createReactClass({
3838
// ### Prop Types
3939
propTypes: {
4040
/**
41-
* An image URL to display for the user profile.
41+
* An image URL or avatar node to display for the user profile.
4242
*/
43-
avatar: PropTypes.string,
43+
avatar: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
4444
/**
4545
* CSS classes to be added to `li` element.
4646
*/
@@ -107,11 +107,22 @@ const GlobalHeaderDropdownTrigger = createReactClass({
107107
triggerRef: PropTypes.func,
108108
},
109109

110+
renderAvatar () {
111+
const { avatar } = this.props;
112+
if (typeof avatar === 'string') {
113+
return (
114+
<span className="slds-avatar slds-avatar--circle slds-avatar--medium">
115+
<img src={avatar} alt="" />
116+
</span>
117+
);
118+
}
119+
return avatar || null;
120+
},
121+
110122
// ### Render
111123
render () {
112124
// The following props are provided to the `li`, all others are passed into the `Button`
113125
const {
114-
avatar,
115126
className,
116127
id,
117128
isOpen,
@@ -128,7 +139,6 @@ const GlobalHeaderDropdownTrigger = createReactClass({
128139
...rest
129140
} = this.props;
130141

131-
// TODO: Add avatar component for use across multiple components
132142
return (
133143
/* eslint-disable jsx-a11y/no-static-element-interactions */
134144
<li
@@ -162,11 +172,7 @@ const GlobalHeaderDropdownTrigger = createReactClass({
162172
aria-haspopup="true"
163173
{...rest}
164174
>
165-
{avatar ? (
166-
<span className="slds-avatar slds-avatar--circle slds-avatar--medium">
167-
<img src={avatar} alt="" />
168-
</span>
169-
) : null}
175+
{this.renderAvatar()}
170176
</Button>
171177
{menu}
172178
</li>

components/global-header/profile.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ GlobalHeaderProfile.propTypes = {
7070
*/
7171
className: PropTypes.string,
7272
/**
73-
* An image URL to display for the user profile.
73+
* An image URL or avatar node to display for the user profile.
7474
*/
75-
avatar: PropTypes.string,
75+
avatar: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
7676
/**
7777
* CSS classes to be added to `li` element.
7878
*/

0 commit comments

Comments
 (0)