Add unread notifications badge to the navigation bar
This commit is contained in:
parent
0f155af32a
commit
2cdc00bc8b
3 changed files with 28 additions and 1 deletions
|
@ -46,6 +46,7 @@ const messages = defineMessages({
|
||||||
// The component.
|
// The component.
|
||||||
export default function DrawerHeader ({
|
export default function DrawerHeader ({
|
||||||
columns,
|
columns,
|
||||||
|
unreadNotifications,
|
||||||
intl,
|
intl,
|
||||||
onSettingsClick,
|
onSettingsClick,
|
||||||
}) {
|
}) {
|
||||||
|
@ -77,7 +78,12 @@ export default function DrawerHeader ({
|
||||||
aria-label={intl.formatMessage(messages.notifications)}
|
aria-label={intl.formatMessage(messages.notifications)}
|
||||||
title={intl.formatMessage(messages.notifications)}
|
title={intl.formatMessage(messages.notifications)}
|
||||||
to='/notifications'
|
to='/notifications'
|
||||||
><Icon icon='bell' /></Link>
|
>
|
||||||
|
<span className='icon-badge-wrapper'>
|
||||||
|
<Icon icon='bell' />
|
||||||
|
{ unreadNotifications > 0 && <div className='icon-badge' />}
|
||||||
|
</span>
|
||||||
|
</Link>
|
||||||
))}
|
))}
|
||||||
{renderForColumn('COMMUNITY', (
|
{renderForColumn('COMMUNITY', (
|
||||||
<Link
|
<Link
|
||||||
|
@ -112,6 +118,7 @@ export default function DrawerHeader ({
|
||||||
// Props.
|
// Props.
|
||||||
DrawerHeader.propTypes = {
|
DrawerHeader.propTypes = {
|
||||||
columns: ImmutablePropTypes.list,
|
columns: ImmutablePropTypes.list,
|
||||||
|
unreadNotifications: PropTypes.number,
|
||||||
intl: PropTypes.object,
|
intl: PropTypes.object,
|
||||||
onSettingsClick: PropTypes.func,
|
onSettingsClick: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,6 +34,7 @@ const mapStateToProps = state => ({
|
||||||
searchHidden: state.getIn(['search', 'hidden']),
|
searchHidden: state.getIn(['search', 'hidden']),
|
||||||
searchValue: state.getIn(['search', 'value']),
|
searchValue: state.getIn(['search', 'value']),
|
||||||
submitted: state.getIn(['search', 'submitted']),
|
submitted: state.getIn(['search', 'submitted']),
|
||||||
|
unreadNotifications: state.getIn(['notifications', 'unread']),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Dispatch mapping.
|
// Dispatch mapping.
|
||||||
|
@ -87,6 +88,7 @@ class Drawer extends React.Component {
|
||||||
searchValue,
|
searchValue,
|
||||||
submitted,
|
submitted,
|
||||||
isSearchPage,
|
isSearchPage,
|
||||||
|
unreadNotifications,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const computedClass = classNames('drawer', `mbstobon-${elefriend}`);
|
const computedClass = classNames('drawer', `mbstobon-${elefriend}`);
|
||||||
|
|
||||||
|
@ -96,6 +98,7 @@ class Drawer extends React.Component {
|
||||||
{multiColumn ? (
|
{multiColumn ? (
|
||||||
<DrawerHeader
|
<DrawerHeader
|
||||||
columns={columns}
|
columns={columns}
|
||||||
|
unreadNotifications={unreadNotifications}
|
||||||
intl={intl}
|
intl={intl}
|
||||||
onSettingsClick={onOpenSettings}
|
onSettingsClick={onOpenSettings}
|
||||||
/>
|
/>
|
||||||
|
@ -139,6 +142,7 @@ Drawer.propTypes = {
|
||||||
searchHidden: PropTypes.bool,
|
searchHidden: PropTypes.bool,
|
||||||
searchValue: PropTypes.string,
|
searchValue: PropTypes.string,
|
||||||
submitted: PropTypes.bool,
|
submitted: PropTypes.bool,
|
||||||
|
unreadNotifications: PropTypes.number,
|
||||||
|
|
||||||
// Dispatch props.
|
// Dispatch props.
|
||||||
onChange: PropTypes.func,
|
onChange: PropTypes.func,
|
||||||
|
|
|
@ -1121,6 +1121,22 @@
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-badge-wrapper {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-badge {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
right: -.25em;
|
||||||
|
top: -.25em;
|
||||||
|
background-color: $ui-highlight-color;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-size: 75%;
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
::-webkit-scrollbar-thumb {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue