Fix duplicate EventListSummarys (#7952)
* Fix duplicate EventListSummarys Signed-off-by: Robin Townsend <robin@robin.town> * Add regression test Signed-off-by: Robin Townsend <robin@robin.town>
This commit is contained in:
parent
560f8f7ee7
commit
aadb64615f
2 changed files with 34 additions and 6 deletions
|
@ -1290,12 +1290,11 @@ class MainGrouper extends BaseGrouper {
|
||||||
const keyEvent = this.events.find(e => this.panel.grouperKeyMap.get(e));
|
const keyEvent = this.events.find(e => this.panel.grouperKeyMap.get(e));
|
||||||
const key = keyEvent ? this.panel.grouperKeyMap.get(keyEvent) : this.generateKey();
|
const key = keyEvent ? this.panel.grouperKeyMap.get(keyEvent) : this.generateKey();
|
||||||
if (!keyEvent) {
|
if (!keyEvent) {
|
||||||
// Populate the weak map with the key that we are using for all related events.
|
// Populate the weak map with the key.
|
||||||
this.events.forEach(e => {
|
// Note that we only set the key on the specific event it refers to, since this group might get
|
||||||
if (!this.panel.grouperKeyMap.has(e)) {
|
// split up in the future by other intervening events. If we were to set the key on all events
|
||||||
this.panel.grouperKeyMap.set(e, key);
|
// currently in the group, we would risk later giving the same key to multiple groups.
|
||||||
}
|
this.panel.grouperKeyMap.set(this.events[0], key);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let highlightInSummary = false;
|
let highlightInSummary = false;
|
||||||
|
|
|
@ -572,4 +572,33 @@ describe('MessagePanel', function() {
|
||||||
expect(els.key()).toEqual("eventlistsummary-" + events[0].getId());
|
expect(els.key()).toEqual("eventlistsummary-" + events[0].getId());
|
||||||
expect(els.prop("events").length).toEqual(11);
|
expect(els.prop("events").length).toEqual(11);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('assigns different keys to summaries that get split up', () => {
|
||||||
|
const events = mkMelsEvents().slice(1, 11);
|
||||||
|
|
||||||
|
const res = mount(<WrappedMessagePanel events={events} />);
|
||||||
|
let els = res.find("EventListSummary");
|
||||||
|
expect(els.length).toEqual(1);
|
||||||
|
expect(els.key()).toEqual("eventlistsummary-" + events[0].getId());
|
||||||
|
expect(els.prop("events").length).toEqual(10);
|
||||||
|
|
||||||
|
res.setProps({
|
||||||
|
events: [
|
||||||
|
...events.slice(0, 5),
|
||||||
|
TestUtilsMatrix.mkMessage({
|
||||||
|
event: true,
|
||||||
|
room: "!room:id",
|
||||||
|
user: "@user:id",
|
||||||
|
msg: "Hello!",
|
||||||
|
}),
|
||||||
|
...events.slice(5, 10),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
els = res.find("EventListSummary");
|
||||||
|
expect(els.length).toEqual(2);
|
||||||
|
expect(els.first().key()).not.toEqual(els.last().key());
|
||||||
|
expect(els.first().prop("events").length).toEqual(5);
|
||||||
|
expect(els.last().prop("events").length).toEqual(5);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue