@breakaway/react-core
Version:
This library provides a set of common React components for use with the PatternFly reference implementation.
243 lines (225 loc) • 7.55 kB
JavaScript
import React from 'react';
import {
ApplicationLauncher,
ApplicationLauncherItem,
Avatar,
Brand,
Button,
ButtonVariant,
Divider,
Dropdown,
DropdownGroup,
DropdownToggle,
DropdownItem,
KebabToggle,
Masthead,
MastheadToggle,
MastheadMain,
MastheadBrand,
MastheadContent,
Toolbar,
ToolbarContent,
ToolbarGroup,
ToolbarItem,
PageToggleButton
} from '@patternfly/react-core';
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
import pfColorLogo from '@patternfly/react-core/src/demos/examples/pfColorLogo.svg';
export default class DashboardHeader extends React.Component {
constructor(props) {
super(props);
this.state = {
isDropdownOpen: false,
isKebabDropdownOpen: false,
isFullKebabDropdownOpen: false,
isAppLauncherOpen: false,
activeItem: 0
};
this.onDropdownToggle = isDropdownOpen => {
this.setState({
isDropdownOpen
});
};
this.onDropdownSelect = () => {
this.setState({
isDropdownOpen: !this.state.isDropdownOpen
});
};
this.onKebabDropdownToggle = isKebabDropdownOpen => {
this.setState({
isKebabDropdownOpen
});
};
this.onKebabDropdownSelect = () => {
this.setState({
isKebabDropdownOpen: !this.state.isKebabDropdownOpen
});
};
this.onFullKebabToggle = isFullKebabDropdownOpen => {
this.setState({
isFullKebabDropdownOpen
});
};
this.onFullKebabSelect = () => {
this.setState({
isFullKebabDropdownOpen: !this.state.isFullKebabDropdownOpen
});
};
this.onAppLauncherToggle = isAppLauncherOpen => {
this.setState({
isAppLauncherOpen
});
};
this.onAppLauncherSelect = () => {
this.setState({
isAppLauncherOpen: !this.state.isAppLauncherOpen
});
};
}
render() {
const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, isAppLauncherOpen } = this.state;
const { notificationBadge } = this.props;
const kebabDropdownItems = [
<DropdownItem key="settings">
<CogIcon /> Settings
</DropdownItem>,
<DropdownItem key="help">
<HelpIcon /> Help
</DropdownItem>
];
const fullKebabItems = [
<DropdownGroup key="group 2">
<DropdownItem key="group 2 profile">My profile</DropdownItem>
<DropdownItem key="group 2 user" component="button">
User management
</DropdownItem>
<DropdownItem key="group 2 logout">Logout</DropdownItem>
</DropdownGroup>,
<Divider key="divider" />,
<DropdownItem key="settings">
<CogIcon /> Settings
</DropdownItem>,
<DropdownItem key="help">
<HelpIcon /> Help
</DropdownItem>
];
const userDropdownItems = [
<DropdownGroup key="group 2">
<DropdownItem key="group 2 profile">My profile</DropdownItem>
<DropdownItem key="group 2 user" component="button">
User management
</DropdownItem>
<DropdownItem key="group 2 logout">Logout</DropdownItem>
</DropdownGroup>
];
const appLauncherItems = [
<ApplicationLauncherItem key="application_1a" href="#">
Application 1 (anchor link)
</ApplicationLauncherItem>,
<ApplicationLauncherItem key="application_2a" component="button" onClick={() => alert('Clicked item 2')}>
Application 2 (button with onClick)
</ApplicationLauncherItem>
];
const headerToolbar = (
<Toolbar id="toolbar" isFullHeight isStatic>
<ToolbarContent>
<ToolbarGroup
variant="icon-button-group"
alignment={{ default: 'alignRight' }}
spacer={{ default: 'spacerNone', md: 'spacerMd' }}
>
{notificationBadge ? (
notificationBadge
) : (
<ToolbarItem>
<Button
aria-label="Notifications"
variant={ButtonVariant.plain}
icon={<BellIcon />}
onClick={() => {}}
/>
</ToolbarItem>
)}
<ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
<ToolbarItem>
<ApplicationLauncher
onSelect={this.onAppLauncherSelect}
onToggle={this.onAppLauncherToggle}
isOpen={isAppLauncherOpen}
items={appLauncherItems}
/>
</ToolbarItem>
<ToolbarItem>
<Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
</ToolbarItem>
<ToolbarItem>
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
</ToolbarItem>
</ToolbarGroup>
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
<Dropdown
isPlain
position="right"
onSelect={this.onKebabDropdownSelect}
toggle={<KebabToggle onToggle={this.onKebabDropdownToggle} />}
isOpen={isKebabDropdownOpen}
dropdownItems={kebabDropdownItems}
/>
</ToolbarItem>
<ToolbarItem visibility={{ md: 'hidden' }}>
<Dropdown
isPlain
position="right"
onSelect={this.onFullKebabSelect}
toggle={<KebabToggle onToggle={this.onFullKebabToggle} />}
isOpen={isFullKebabDropdownOpen}
dropdownItems={fullKebabItems}
/>
</ToolbarItem>
</ToolbarGroup>
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
<Dropdown
isFullHeight
onSelect={this.onDropdownSelect}
isOpen={isDropdownOpen}
toggle={
<DropdownToggle icon={<Avatar src={imgAvatar} alt="Avatar" />} onToggle={this.onDropdownToggle}>
Ned Username
</DropdownToggle>
}
dropdownItems={userDropdownItems}
/>
</ToolbarItem>
</ToolbarContent>
</Toolbar>
);
const masthead = (
<Masthead>
<MastheadToggle>
<PageToggleButton variant="plain" aria-label="Global navigation">
<BarsIcon />
</PageToggleButton>
</MastheadToggle>
<MastheadMain>
<MastheadBrand>
<Brand
widths={{ default: '180px', md: '180px', '2xl': '220px' }}
src={pfColorLogo}
alt="Fallback patternFly default logo"
>
<source media="(min-width: 768px)" srcSet={pfColorLogo} />
<source srcSet={pfColorLogo} />
</Brand>
</MastheadBrand>
</MastheadMain>
<MastheadContent>{headerToolbar}</MastheadContent>
</Masthead>
);
return masthead;
}
}