Fix onNewScreen to use replace when going from roomId->roomAlias to prevent locking the user in place

This commit is contained in:
Michael Telatynski 2020-09-09 16:52:46 +01:00
parent 62556c2afe
commit c26f3b8a97

View file

@ -147,7 +147,7 @@ interface IProps { // TODO type things better
config: Record<string, any>; config: Record<string, any>;
serverConfig?: ValidatedServerConfig; serverConfig?: ValidatedServerConfig;
ConferenceHandler?: any; ConferenceHandler?: any;
onNewScreen: (string) => void; onNewScreen: (screen: string, replaceLast: boolean) => void;
enableGuest?: boolean; enableGuest?: boolean;
// the queryParams extracted from the [real] query-string of the URI // the queryParams extracted from the [real] query-string of the URI
realQueryParams?: Record<string, string>; realQueryParams?: Record<string, string>;
@ -886,6 +886,9 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
} }
} }
// If we are redirecting to a Room Alias and it is for the room we already showing then replace history item
const replaceLast = presentedId[0] === "#" && roomInfo.room_id === this.state.currentRoomId;
if (roomInfo.event_id && roomInfo.highlighted) { if (roomInfo.event_id && roomInfo.highlighted) {
presentedId += "/" + roomInfo.event_id; presentedId += "/" + roomInfo.event_id;
} }
@ -898,7 +901,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
viaServers: roomInfo.via_servers, viaServers: roomInfo.via_servers,
ready: true, ready: true,
}, () => { }, () => {
this.notifyNewScreen('room/' + presentedId); this.notifyNewScreen('room/' + presentedId, replaceLast);
}); });
}); });
} }
@ -1699,9 +1702,9 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
} }
} }
notifyNewScreen(screen: string) { notifyNewScreen(screen: string, replaceLast = false) {
if (this.props.onNewScreen) { if (this.props.onNewScreen) {
this.props.onNewScreen(screen); this.props.onNewScreen(screen, replaceLast);
} }
this.setPageSubtitle(); this.setPageSubtitle();
} }