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

Commit

Permalink
Support joining non-peekable rooms via the module API (#10154)
Browse files Browse the repository at this point in the history
When previewing a room, we normally do not have a Room object. Currently, when the RoomPreviewBar is instantiated without a room, it doesn't raise the PreviewRoomNotLoggedIn and JoinFromRoomPreview module lifecycle events, meaning that modules are unable to intercept previews of non-peekable rooms.

To fix this, make sure that we pass the room ID into RoomPreviewBar irrespective of whether we have a Room object, and use it to raise the module lifecycle events.

Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
  • Loading branch information
maheichyk committed Feb 23, 2023
1 parent 880428a commit d0c266d
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
6 changes: 5 additions & 1 deletion src/components/structures/RoomView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1957,6 +1957,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
loading={loading}
joining={this.state.joining}
oobData={this.props.oobData}
roomId={this.state.roomId}
/>
</ErrorBoundary>
</div>
Expand Down Expand Up @@ -1986,7 +1987,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
invitedEmail={invitedEmail}
oobData={this.props.oobData}
signUrl={this.props.threepidInvite?.signUrl}
room={this.state.room}
roomId={this.state.roomId}
/>
</ErrorBoundary>
</div>
Expand Down Expand Up @@ -2023,6 +2024,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
error={this.state.roomLoadError}
joining={this.state.joining}
rejecting={this.state.rejecting}
roomId={this.state.roomId}
/>
</ErrorBoundary>
);
Expand Down Expand Up @@ -2052,6 +2054,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
canPreview={false}
joining={this.state.joining}
room={this.state.room}
roomId={this.state.roomId}
/>
</ErrorBoundary>
</div>
Expand Down Expand Up @@ -2144,6 +2147,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
oobData={this.props.oobData}
canPreview={this.state.canPeek}
room={this.state.room}
roomId={this.state.roomId}
/>
);
if (!this.state.canPeek && !this.state.room?.isSpaceRoom()) {
Expand Down
16 changes: 9 additions & 7 deletions src/components/views/rooms/RoomPreviewBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@ interface IProps {

canPreview?: boolean;
previewLoading?: boolean;

// The id of the room to be previewed, if it is known.
// (It may be unknown if we are waiting for an alias to be resolved.)
roomId?: string;

// A `Room` object for the room to be previewed, if we have one.
room?: Room;

loading?: boolean;
Expand Down Expand Up @@ -310,18 +316,14 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
}
case MessageCase.NotLoggedIn: {
const opts: RoomPreviewOpts = { canJoin: false };
if (this.props.room?.roomId) {
ModuleRunner.instance.invoke(
RoomViewLifecycle.PreviewRoomNotLoggedIn,
opts,
this.props.room.roomId,
);
if (this.props.roomId) {
ModuleRunner.instance.invoke(RoomViewLifecycle.PreviewRoomNotLoggedIn, opts, this.props.roomId);
}
if (opts.canJoin) {
title = _t("Join the room to participate");
primaryActionLabel = _t("Join");
primaryActionHandler = () => {
ModuleRunner.instance.invoke(RoomViewLifecycle.JoinFromRoomPreview, this.props.room.roomId);
ModuleRunner.instance.invoke(RoomViewLifecycle.JoinFromRoomPreview, this.props.roomId);
};
} else {
title = _t("Join the conversation with an account");
Expand Down
1 change: 1 addition & 0 deletions test/components/views/rooms/RoomPreviewBar-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ describe("<RoomPreviewBar />", () => {

const getComponent = (props: ComponentProps<typeof RoomPreviewBar> = {}) => {
const defaultProps = {
roomId,
room: createRoom(roomId, userId),
};
return render(<RoomPreviewBar {...defaultProps} {...props} />);
Expand Down

0 comments on commit d0c266d

Please sign in to comment.