Fix people space notification badge not updating for new DM invites (#10849)
* Add regression test * Fix people space notification state not updating for new DM invites
This commit is contained in:
parent
cb779fe872
commit
9611cbf6c4
2 changed files with 27 additions and 5 deletions
|
@ -765,7 +765,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
|
||||||
|
|
||||||
const hiddenChildren = new EnhancedMap<string, Set<string>>();
|
const hiddenChildren = new EnhancedMap<string, Set<string>>();
|
||||||
visibleRooms.forEach((room) => {
|
visibleRooms.forEach((room) => {
|
||||||
if (room.getMyMembership() !== "join") return;
|
if (!["join", "invite"].includes(room.getMyMembership())) return;
|
||||||
this.getParents(room.roomId).forEach((parent) => {
|
this.getParents(room.roomId).forEach((parent) => {
|
||||||
hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId);
|
hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId);
|
||||||
});
|
});
|
||||||
|
@ -872,10 +872,9 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
const notificationStatesToUpdate = [...changeSet];
|
const notificationStatesToUpdate = [...changeSet];
|
||||||
if (
|
// We update the People metaspace even if we didn't detect any changes
|
||||||
this.enabledMetaSpaces.includes(MetaSpace.People) &&
|
// as roomIdsBySpace does not pre-calculate it so we have to assume it could have changed
|
||||||
userDiff.added.length + userDiff.removed.length + usersChanged.length > 0
|
if (this.enabledMetaSpaces.includes(MetaSpace.People)) {
|
||||||
) {
|
|
||||||
notificationStatesToUpdate.push(MetaSpace.People);
|
notificationStatesToUpdate.push(MetaSpace.People);
|
||||||
}
|
}
|
||||||
this.updateNotificationStates(notificationStatesToUpdate);
|
this.updateNotificationStates(notificationStatesToUpdate);
|
||||||
|
|
|
@ -672,6 +672,29 @@ describe("SpaceStore", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should add new DM Invites to the People Space Notification State", async () => {
|
||||||
|
mkRoom(dm1);
|
||||||
|
mocked(client.getRoom(dm1)!).getMyMembership.mockReturnValue("join");
|
||||||
|
mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null);
|
||||||
|
|
||||||
|
await run();
|
||||||
|
|
||||||
|
mkRoom(dm2);
|
||||||
|
const cliDm2 = client.getRoom(dm2)!;
|
||||||
|
mocked(cliDm2).getMyMembership.mockReturnValue("invite");
|
||||||
|
mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null);
|
||||||
|
client.emit(RoomEvent.MyMembership, cliDm2, "invite");
|
||||||
|
|
||||||
|
[dm1, dm2].forEach((d) => {
|
||||||
|
expect(
|
||||||
|
store
|
||||||
|
.getNotificationState(MetaSpace.People)
|
||||||
|
.rooms.map((r) => r.roomId)
|
||||||
|
.includes(d),
|
||||||
|
).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("hierarchy resolution update tests", () => {
|
describe("hierarchy resolution update tests", () => {
|
||||||
it("updates state when spaces are joined", async () => {
|
it("updates state when spaces are joined", async () => {
|
||||||
await run();
|
await run();
|
||||||
|
|
Loading…
Reference in a new issue