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

Commit 82ae394

Browse files
toger5jryans
andauthored
Only show core navigation elements (call/chat/notification/info) when a widget is maximised (#7114)
Co-authored-by: J. Ryan Stinnett <[email protected]>
1 parent fe24c8a commit 82ae394

File tree

4 files changed

+63
-21
lines changed

4 files changed

+63
-21
lines changed

src/components/structures/RoomView.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2179,7 +2179,21 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
21792179
// TODO-video MainSplitContentType.Video:
21802180
// break;
21812181
}
2182-
2182+
let excludedRightPanelPhaseButtons = [RightPanelPhases.Timeline];
2183+
let onAppsClick = this.onAppsClick;
2184+
let onForgetClick = this.onForgetClick;
2185+
let onSearchClick = this.onSearchClick;
2186+
if (this.state.mainSplitContentType === MainSplitContentType.MaximisedWidget) {
2187+
// Disable phase buttons and action button to have a simplified header when a widget is maximised
2188+
// and enable (not disable) the RightPanelPhases.Timeline button
2189+
excludedRightPanelPhaseButtons = [
2190+
RightPanelPhases.ThreadPanel,
2191+
RightPanelPhases.PinnedMessages,
2192+
];
2193+
onAppsClick = null;
2194+
onForgetClick = null;
2195+
onSearchClick = null;
2196+
}
21832197
return (
21842198
<RoomContext.Provider value={this.state}>
21852199
<main className={mainClasses} ref={this.roomView} onKeyDown={this.onReactKeyDown}>
@@ -2192,12 +2206,13 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
21922206
searchInfo={searchInfo}
21932207
oobData={this.props.oobData}
21942208
inRoom={myMembership === 'join'}
2195-
onSearchClick={this.onSearchClick}
2196-
onForgetClick={(myMembership === "leave") ? this.onForgetClick : null}
2209+
onSearchClick={onSearchClick}
2210+
onForgetClick={(myMembership === "leave") ? onForgetClick : null}
21972211
e2eStatus={this.state.e2eStatus}
2198-
onAppsClick={this.state.hasPinnedWidgets ? this.onAppsClick : null}
2212+
onAppsClick={this.state.hasPinnedWidgets ? onAppsClick : null}
21992213
appsShown={this.state.showApps}
22002214
onCallPlaced={this.onCallPlaced}
2215+
excludedRightPanelPhaseButtons={excludedRightPanelPhaseButtons}
22012216
/>
22022217
<MainSplit panel={rightPanel} resizeNotifier={this.props.resizeNotifier}>
22032218
<div className="mx_RoomView_body">

src/components/structures/ThreadView.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import { _t } from '../../languageHandler';
4343
import ThreadListContextMenu from '../views/context_menus/ThreadListContextMenu';
4444
import RightPanelStore from '../../stores/RightPanelStore';
4545
import SettingsStore from '../../settings/SettingsStore';
46+
import { WidgetLayoutStore } from '../../stores/widgets/WidgetLayoutStore';
4647

4748
interface IProps {
4849
room: Room;
@@ -209,6 +210,12 @@ export default class ThreadView extends React.Component<IProps, IState> {
209210
if (!SettingsStore.getValue("feature_maximised_widgets")) {
210211
previousPhase = RightPanelPhases.ThreadPanel;
211212
}
213+
214+
// change the previous phase to the threadPanel in case there is no maximised widget anymore
215+
if (!WidgetLayoutStore.instance.hasMaximisedWidget(this.props.room)) {
216+
previousPhase = RightPanelPhases.ThreadPanel;
217+
}
218+
212219
// Make sure the previous Phase is always one of the two: Timeline or ThreadPanel
213220
if (![RightPanelPhases.ThreadPanel, RightPanelPhases.Timeline].includes(previousPhase)) {
214221
previousPhase = RightPanelPhases.ThreadPanel;

src/components/views/right_panel/RoomHeaderButtons.tsx

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ const TimelineCardHeaderButton = ({ room, isHighlighted, onClick }) => {
8181

8282
interface IProps {
8383
room?: Room;
84+
excludedRightPanelPhaseButtons?: Array<RightPanelPhases>;
8485
}
8586

8687
@replaceableComponent("views.right_panel.RoomHeaderButtons")
@@ -150,38 +151,54 @@ export default class RoomHeaderButtons extends HeaderButtons<IProps> {
150151
};
151152

152153
public renderButtons() {
153-
return <>
154+
const rightPanelPhaseButtons: Map<RightPanelPhases, any> = new Map();
155+
156+
rightPanelPhaseButtons.set(RightPanelPhases.PinnedMessages,
154157
<PinnedMessagesHeaderButton
155158
room={this.props.room}
156159
isHighlighted={this.isPhase(RightPanelPhases.PinnedMessages)}
157-
onClick={this.onPinnedMessagesClicked}
158-
/>
160+
onClick={this.onPinnedMessagesClicked} />,
161+
);
162+
rightPanelPhaseButtons.set(RightPanelPhases.Timeline,
159163
<TimelineCardHeaderButton
160164
room={this.props.room}
161165
isHighlighted={this.isPhase(RightPanelPhases.Timeline)}
162-
onClick={this.onTimelineCardClicked}
163-
/>
164-
{ SettingsStore.getValue("feature_thread") && <HeaderButton
165-
name="threadsButton"
166-
title={_t("Threads")}
167-
onClick={this.onThreadsPanelClicked}
168-
isHighlighted={this.isPhase(RoomHeaderButtons.THREAD_PHASES)}
169-
analytics={['Right Panel', 'Threads List Button', 'click']}
170-
/> }
166+
onClick={this.onTimelineCardClicked} />,
167+
);
168+
rightPanelPhaseButtons.set(RightPanelPhases.ThreadPanel,
169+
SettingsStore.getValue("feature_thread")
170+
? <HeaderButton
171+
name="threadsButton"
172+
title={_t("Threads")}
173+
onClick={this.onThreadsPanelClicked}
174+
isHighlighted={this.isPhase(RoomHeaderButtons.THREAD_PHASES)}
175+
analytics={['Right Panel', 'Threads List Button', 'click']} />
176+
: null,
177+
);
178+
rightPanelPhaseButtons.set(RightPanelPhases.NotificationPanel,
171179
<HeaderButton
172180
name="notifsButton"
173181
title={_t('Notifications')}
174182
isHighlighted={this.isPhase(RightPanelPhases.NotificationPanel)}
175183
onClick={this.onNotificationsClicked}
176-
analytics={['Right Panel', 'Notification List Button', 'click']}
177-
/>
184+
analytics={['Right Panel', 'Notification List Button', 'click']} />,
185+
);
186+
rightPanelPhaseButtons.set(RightPanelPhases.RoomSummary,
178187
<HeaderButton
179188
name="roomSummaryButton"
180189
title={_t('Room Info')}
181190
isHighlighted={this.isPhase(ROOM_INFO_PHASES)}
182191
onClick={this.onRoomSummaryClicked}
183-
analytics={['Right Panel', 'Room Summary Button', 'click']}
184-
/>
192+
analytics={['Right Panel', 'Room Summary Button', 'click']} />,
193+
);
194+
195+
return <>
196+
{
197+
Array.from(rightPanelPhaseButtons.keys()).map((phase) =>
198+
( this.props.excludedRightPanelPhaseButtons.includes(phase)
199+
? null
200+
: rightPanelPhaseButtons.get(phase)))
201+
}
185202
</>;
186203
}
187204
}

src/components/views/rooms/RoomHeader.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import { SearchScope } from './SearchBar';
3939
import { ContextMenuTooltipButton } from '../../structures/ContextMenu';
4040
import RoomContextMenu from "../context_menus/RoomContextMenu";
4141
import { contextMenuBelow } from './RoomTile';
42+
import { RightPanelPhases } from '../../../stores/RightPanelStorePhases';
4243

4344
export interface ISearchInfo {
4445
searchTerm: string;
@@ -57,6 +58,7 @@ interface IProps {
5758
e2eStatus: E2EStatus;
5859
appsShown: boolean;
5960
searchInfo: ISearchInfo;
61+
excludedRightPanelPhaseButtons?: Array<RightPanelPhases>;
6062
}
6163

6264
interface IState {
@@ -68,6 +70,7 @@ export default class RoomHeader extends React.Component<IProps, IState> {
6870
static defaultProps = {
6971
editing: false,
7072
inRoom: false,
73+
excludedRightPanelPhaseButtons: [],
7174
};
7275

7376
constructor(props, context) {
@@ -263,7 +266,7 @@ export default class RoomHeader extends React.Component<IProps, IState> {
263266
{ searchStatus }
264267
{ topicElement }
265268
{ rightRow }
266-
<RoomHeaderButtons room={this.props.room} />
269+
<RoomHeaderButtons room={this.props.room} excludedRightPanelPhaseButtons={this.props.excludedRightPanelPhaseButtons} />
267270
</div>
268271
</div>
269272
);

0 commit comments

Comments
 (0)