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

Live location sharing: don't group beacon info with room creation summary #8468

Merged
merged 5 commits into from
May 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/components/structures/MessagePanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { MatrixEvent } from 'matrix-js-sdk/src/models/event';
import { Relations } from "matrix-js-sdk/src/models/relations";
import { logger } from 'matrix-js-sdk/src/logger';
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
import { M_BEACON_INFO } from 'matrix-js-sdk/src/@types/beacon';

import shouldHideEvent from '../../shouldHideEvent';
import { wantsDateSeparator } from '../../DateUtils';
Expand Down Expand Up @@ -1079,7 +1080,7 @@ abstract class BaseGrouper {

// Wrap initial room creation events into a GenericEventListSummary
// Grouping only events sent by the same user that sent the `m.room.create` and only until
// the first non-state event or membership event which is not regarding the sender of the `m.room.create` event
// the first non-state event, beacon_info event or membership event which is not regarding the sender of the `m.room.create` event
class CreationGrouper extends BaseGrouper {
static canStartGroup = function(panel: MessagePanel, ev: MatrixEvent): boolean {
return ev.getType() === EventType.RoomCreate;
Expand All @@ -1098,9 +1099,15 @@ class CreationGrouper extends BaseGrouper {
&& (ev.getStateKey() !== createEvent.getSender() || ev.getContent()["membership"] !== "join")) {
return false;
}
// beacons are not part of room creation configuration
// should be shown in timeline
if (M_BEACON_INFO.matches(ev.getType())) {
return false;
}
t3chguy marked this conversation as resolved.
Show resolved Hide resolved
if (ev.isState() && ev.getSender() === createEvent.getSender()) {
return true;
}

return false;
}

Expand Down
26 changes: 26 additions & 0 deletions test/components/structures/MessagePanel-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ import * as TestUtilsMatrix from "../../test-utils";
import EventListSummary from "../../../src/components/views/elements/EventListSummary";
import GenericEventListSummary from "../../../src/components/views/elements/GenericEventListSummary";
import DateSeparator from "../../../src/components/views/messages/DateSeparator";
import { makeBeaconInfoEvent } from '../../test-utils';

jest.mock('../../../src/utils/beacon', () => ({
useBeacon: jest.fn(),
}));

let client;
const room = new Matrix.Room("!roomId:server_name");
Expand Down Expand Up @@ -481,6 +486,27 @@ describe('MessagePanel', function() {
expect(summaryEventTiles.length).toEqual(tiles.length - 3);
});

it('should not collapse beacons as part of creation events', function() {
const [creationEvent] = mkCreationEvents();
const beaconInfoEvent = makeBeaconInfoEvent(
creationEvent.getSender(),
creationEvent.getRoomId(),
{ isLive: true },
);
const combinedEvents = [creationEvent, beaconInfoEvent];
TestUtilsMatrix.upsertRoomStateEvents(room, combinedEvents);
const res = mount(
<WrappedMessagePanel className="cls" events={combinedEvents} />,
);

const summaryTiles = res.find(GenericEventListSummary);
const summaryTile = summaryTiles.at(0);

const summaryEventTiles = summaryTile.find(UnwrappedEventTile);
// nothing in the summary
expect(summaryEventTiles.length).toEqual(0);
});

it('should hide read-marker at the end of creation event summary', function() {
const events = mkCreationEvents();
TestUtilsMatrix.upsertRoomStateEvents(room, events);
Expand Down