Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
add NotifPanel dot back. (#9242)
Browse files Browse the repository at this point in the history
partially fixes element-hq/element-web#17641
provides a dot, but not a badge. fixes chronic bug 87.
  • Loading branch information
ara4n committed Sep 8, 2022
1 parent 52fc8ff commit eb97b96
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/components/views/right_panel/HeaderButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ interface IState {
headerKind: HeaderKind;
phase: RightPanelPhases;
threadNotificationColor: NotificationColor;
globalNotificationColor: NotificationColor;
}

interface IProps {}
Expand All @@ -51,6 +52,7 @@ export default abstract class HeaderButtons<P = {}> extends React.Component<IPro
headerKind: kind,
phase: rps.currentCard.phase,
threadNotificationColor: NotificationColor.None,
globalNotificationColor: NotificationColor.None,
};
}

Expand Down
28 changes: 25 additions & 3 deletions src/components/views/right_panel/RoomHeaderButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,13 @@ import { useSettingValue } from "../../../hooks/useSettings";
import { useReadPinnedEvents, usePinnedEvents } from './PinnedMessagesCard';
import { showThreadPanel } from "../../../dispatcher/dispatch-actions/threads";
import SettingsStore from "../../../settings/SettingsStore";
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore";
import {
RoomNotificationStateStore,
UPDATE_STATUS_INDICATOR,
} from "../../../stores/notifications/RoomNotificationStateStore";
import { NotificationColor } from "../../../stores/notifications/NotificationColor";
import { ThreadsRoomNotificationState } from "../../../stores/notifications/ThreadsRoomNotificationState";
import { SummarizedNotificationState } from "../../../stores/notifications/SummarizedNotificationState";
import { NotificationStateEvents } from "../../../stores/notifications/NotificationState";
import PosthogTrackers from "../../../PosthogTrackers";
import { ButtonEvent } from "../elements/AccessibleButton";
Expand Down Expand Up @@ -130,29 +134,42 @@ export default class RoomHeaderButtons extends HeaderButtons<IProps> {
RightPanelPhases.ThreadView,
];
private threadNotificationState: ThreadsRoomNotificationState;
private globalNotificationState: SummarizedNotificationState;

constructor(props: IProps) {
super(props, HeaderKind.Room);

this.threadNotificationState = RoomNotificationStateStore.instance.getThreadsRoomState(this.props.room);
this.globalNotificationState = RoomNotificationStateStore.instance.globalState;
}

public componentDidMount(): void {
super.componentDidMount();
this.threadNotificationState.on(NotificationStateEvents.Update, this.onThreadNotification);
RoomNotificationStateStore.instance.on(UPDATE_STATUS_INDICATOR, this.onUpdateStatus);
}

public componentWillUnmount(): void {
super.componentWillUnmount();
this.threadNotificationState.off(NotificationStateEvents.Update, this.onThreadNotification);
RoomNotificationStateStore.instance.off(UPDATE_STATUS_INDICATOR, this.onUpdateStatus);
}

private onThreadNotification = (): void => {
// XXX: why don't we read from this.state.threadNotificationColor in the render methods?
this.setState({
threadNotificationColor: this.threadNotificationState.color,
});
};

private onUpdateStatus = (notificationState: SummarizedNotificationState): void => {
// XXX: why don't we read from this.state.globalNotificationCount in the render methods?
this.globalNotificationState = notificationState;
this.setState({
globalNotificationColor: notificationState.color,
});
};

protected onAction(payload: ActionPayload) {
if (payload.action === Action.ViewUser) {
if (payload.member) {
Expand Down Expand Up @@ -254,7 +271,12 @@ export default class RoomHeaderButtons extends HeaderButtons<IProps> {
title={_t('Notifications')}
isHighlighted={this.isPhase(RightPanelPhases.NotificationPanel)}
onClick={this.onNotificationsClicked}
/>,
isUnread={this.globalNotificationState.color === NotificationColor.Red}
>
{ this.globalNotificationState.color === NotificationColor.Red ?
<UnreadIndicator color={this.globalNotificationState.color} /> :
null }
</HeaderButton>,
);
rightPanelPhaseButtons.set(RightPanelPhases.RoomSummary,
<HeaderButton
Expand All @@ -269,7 +291,7 @@ export default class RoomHeaderButtons extends HeaderButtons<IProps> {
return <>
{
Array.from(rightPanelPhaseButtons.keys()).map((phase) =>
(this.props.excludedRightPanelPhaseButtons.includes(phase)
(this.props.excludedRightPanelPhaseButtons?.includes(phase)
? null
: rightPanelPhaseButtons.get(phase)))
}
Expand Down

0 comments on commit eb97b96

Please sign in to comment.