Fix buttons of widget in a room (#12288)

* Revert 3acd648 - Fix timeline position when moving to a room and coming back

* Fix initialEventId
This commit is contained in:
Florian Duros 2024-02-27 13:02:16 +01:00 committed by GitHub
parent 28f7aac9a5
commit 494d9de6f0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 35 additions and 14 deletions

View file

@ -687,7 +687,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
newState.showRightPanel = false; newState.showRightPanel = false;
} }
const initialEventId = this.context.roomViewStore.getInitialEventId(); const initialEventId = this.context.roomViewStore.getInitialEventId() ?? this.state.initialEventId;
if (initialEventId) { if (initialEventId) {
let initialEvent = room?.findEventById(initialEventId); let initialEvent = room?.findEventById(initialEventId);
// The event does not exist in the current sync data // The event does not exist in the current sync data
@ -1430,6 +1430,8 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
tombstone: this.getRoomTombstone(room), tombstone: this.getRoomTombstone(room),
liveTimeline: room.getLiveTimeline(), liveTimeline: room.getLiveTimeline(),
}); });
dis.dispatch<ActionPayload>({ action: Action.RoomLoaded });
}; };
private onRoomTimelineReset = (room?: Room): void => { private onRoomTimelineReset = (room?: Room): void => {

View file

@ -374,6 +374,11 @@ export enum Action {
*/ */
OpenSpotlight = "open_spotlight", OpenSpotlight = "open_spotlight",
/**
* Fired when the room loaded.
*/
RoomLoaded = "room_loaded",
/** /**
* Opens right panel with 3pid invite information * Opens right panel with 3pid invite information
*/ */

View file

@ -382,6 +382,10 @@ export class RoomViewStore extends EventEmitter {
this.cancelAskToJoin(payload as CancelAskToJoinPayload); this.cancelAskToJoin(payload as CancelAskToJoinPayload);
break; break;
} }
case Action.RoomLoaded: {
this.setViewRoomOpts();
break;
}
} }
} }
@ -446,10 +450,6 @@ export class RoomViewStore extends EventEmitter {
return; return;
} }
const viewRoomOpts: ViewRoomOpts = { buttons: [] };
// Allow modules to update the list of buttons for the room by updating `viewRoomOpts`.
ModuleRunner.instance.invoke(RoomViewLifecycle.ViewRoom, viewRoomOpts, this.getRoomId());
const newState: Partial<State> = { const newState: Partial<State> = {
roomId: payload.room_id, roomId: payload.room_id,
roomAlias: payload.room_alias ?? null, roomAlias: payload.room_alias ?? null,
@ -472,7 +472,6 @@ export class RoomViewStore extends EventEmitter {
(payload.room_id === this.state.roomId (payload.room_id === this.state.roomId
? this.state.viewingCall ? this.state.viewingCall
: CallStore.instance.getActiveCall(payload.room_id) !== null), : CallStore.instance.getActiveCall(payload.room_id) !== null),
viewRoomOpts,
}; };
// Allow being given an event to be replied to when switching rooms but sanity check its for this room // Allow being given an event to be replied to when switching rooms but sanity check its for this room
@ -837,4 +836,15 @@ export class RoomViewStore extends EventEmitter {
public getViewRoomOpts(): ViewRoomOpts { public getViewRoomOpts(): ViewRoomOpts {
return this.state.viewRoomOpts; return this.state.viewRoomOpts;
} }
/**
* Invokes the view room lifecycle to set the view room options.
*
* @returns {void}
*/
private setViewRoomOpts(): void {
const viewRoomOpts: ViewRoomOpts = { buttons: [] };
ModuleRunner.instance.invoke(RoomViewLifecycle.ViewRoom, viewRoomOpts, this.getRoomId());
this.setState({ viewRoomOpts });
}
} }

View file

@ -711,4 +711,10 @@ describe("RoomView", () => {
await expect(prom).resolves.toEqual(expect.objectContaining({ room_id: room2.roomId })); await expect(prom).resolves.toEqual(expect.objectContaining({ room_id: room2.roomId }));
}); });
it("fires Action.RoomLoaded", async () => {
jest.spyOn(dis, "dispatch");
await mountRoomView();
expect(dis.dispatch).toHaveBeenCalledWith({ action: Action.RoomLoaded });
});
}); });

View file

@ -137,6 +137,11 @@ describe("RoomViewStore", function () {
await untilDispatch(Action.CancelAskToJoin, dis); await untilDispatch(Action.CancelAskToJoin, dis);
}; };
const dispatchRoomLoaded = async () => {
dis.dispatch({ action: Action.RoomLoaded });
await untilDispatch(Action.RoomLoaded, dis);
};
let roomViewStore: RoomViewStore; let roomViewStore: RoomViewStore;
let slidingSyncManager: SlidingSyncManager; let slidingSyncManager: SlidingSyncManager;
let dis: MatrixDispatcher; let dis: MatrixDispatcher;
@ -423,10 +428,6 @@ describe("RoomViewStore", function () {
}); });
}); });
afterEach(() => {
jest.spyOn(SettingsStore, "getValue").mockReset();
});
it("subscribes to the room", async () => { it("subscribes to the room", async () => {
const setRoomVisible = jest const setRoomVisible = jest
.spyOn(slidingSyncManager, "setRoomVisible") .spyOn(slidingSyncManager, "setRoomVisible")
@ -600,10 +601,7 @@ describe("RoomViewStore", function () {
opts.buttons = buttons; opts.buttons = buttons;
} }
}); });
await dispatchRoomLoaded();
dis.dispatch({ action: Action.ViewRoom, room_id: roomId });
await untilDispatch(Action.ViewRoom, dis);
expect(roomViewStore.getViewRoomOpts()).toEqual({ buttons }); expect(roomViewStore.getViewRoomOpts()).toEqual({ buttons });
}); });
}); });