Fix invisible power levels tile when showing hidden events (#9162)

* Fix invisible power levels tile when showing hidden events

* Add regression test
This commit is contained in:
Michael Telatynski 2022-08-10 14:33:13 +01:00 committed by GitHub
parent 28ed87bffe
commit 2e32a4d4b6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 17 deletions

View file

@ -434,29 +434,29 @@ function textForHistoryVisibilityEvent(event: MatrixEvent): () => string | null
// Currently will only display a change if a user's power level is changed // Currently will only display a change if a user's power level is changed
function textForPowerEvent(event: MatrixEvent): () => string | null { function textForPowerEvent(event: MatrixEvent): () => string | null {
const senderName = getSenderName(event); const senderName = getSenderName(event);
if (!event.getPrevContent() || !event.getPrevContent().users || if (!event.getPrevContent()?.users || !event.getContent()?.users) {
!event.getContent() || !event.getContent().users) {
return null; return null;
} }
const previousUserDefault = event.getPrevContent().users_default || 0; const previousUserDefault: number = event.getPrevContent().users_default || 0;
const currentUserDefault = event.getContent().users_default || 0; const currentUserDefault: number = event.getContent().users_default || 0;
// Construct set of userIds // Construct set of userIds
const users = []; const users: string[] = [];
Object.keys(event.getContent().users).forEach( Object.keys(event.getContent().users).forEach((userId) => {
(userId) => {
if (users.indexOf(userId) === -1) users.push(userId); if (users.indexOf(userId) === -1) users.push(userId);
}, });
); Object.keys(event.getPrevContent().users).forEach((userId) => {
Object.keys(event.getPrevContent().users).forEach(
(userId) => {
if (users.indexOf(userId) === -1) users.push(userId); if (users.indexOf(userId) === -1) users.push(userId);
}, });
);
const diffs = []; const diffs: {
userId: string;
name: string;
from: number;
to: number;
}[] = [];
users.forEach((userId) => { users.forEach((userId) => {
// Previous power level // Previous power level
let from = event.getPrevContent().users[userId]; let from: number = event.getPrevContent().users[userId];
if (!Number.isInteger(from)) { if (!Number.isInteger(from)) {
from = previousUserDefault; from = previousUserDefault;
} }

View file

@ -225,6 +225,10 @@ export function pickFactory(
return noEventFactoryFactory(); // improper event type to render return noEventFactoryFactory(); // improper event type to render
} }
if (STATE_EVENT_TILE_TYPES[evType] === TextualEventFactory && !hasText(mxEvent, showHiddenEvents)) {
return noEventFactoryFactory();
}
return STATE_EVENT_TILE_TYPES[evType] ?? noEventFactoryFactory(); return STATE_EVENT_TILE_TYPES[evType] ?? noEventFactoryFactory();
} }

View file

@ -0,0 +1,36 @@
/*
Copyright 2022 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { EventType, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { JSONEventFactory, pickFactory } from "../../src/events/EventTileFactory";
import { createTestClient } from "../test-utils";
const roomId = "!room:example.com";
describe("pickFactory", () => {
it("should return JSONEventFactory for a no-op m.room.power_levels event", () => {
const cli = createTestClient();
const event = new MatrixEvent({
type: EventType.RoomPowerLevels,
state_key: "",
content: {},
sender: cli.getUserId(),
room_id: roomId,
});
expect(pickFactory(event, cli, true)).toBe(JSONEventFactory);
});
});