mirror of
https://github.com/element-hq/element-web
synced 2024-11-24 18:25:49 +03:00
Merge pull request #4175 from matrix-org/travis/room-list-updates
Ensure the room list always triggers updates on itself
This commit is contained in:
commit
7f66198afb
1 changed files with 9 additions and 7 deletions
|
@ -372,6 +372,14 @@ class RoomListStore extends Store {
|
|||
_slotRoomIntoList(room, category, tag, existingEntries, newList, lastTimestampFn) {
|
||||
const targetCategoryIndex = CATEGORY_ORDER.indexOf(category);
|
||||
|
||||
let categoryComparator = (a, b) => lastTimestampFn(a.room) >= lastTimestampFn(b.room);
|
||||
const sortAlgorithm = getListAlgorithm(tag, this._state.algorithm);
|
||||
if (sortAlgorithm === ALGO_RECENT) {
|
||||
categoryComparator = (a, b) => this._recentsComparator(a, b, lastTimestampFn);
|
||||
} else if (sortAlgorithm === ALGO_ALPHABETIC) {
|
||||
categoryComparator = (a, b) => this._lexicographicalComparator(a, b);
|
||||
}
|
||||
|
||||
// The slotting algorithm works by trying to position the room in the most relevant
|
||||
// category of the list (red > grey > etc). To accomplish this, we need to consider
|
||||
// a couple cases: the category existing in the list but having other rooms in it and
|
||||
|
@ -449,7 +457,7 @@ class RoomListStore extends Store {
|
|||
// based on most recent timestamp.
|
||||
const changedBoundary = entryCategoryIndex > targetCategoryIndex;
|
||||
const currentCategory = entryCategoryIndex === targetCategoryIndex;
|
||||
if (changedBoundary || (currentCategory && lastTimestampFn(room) >= lastTimestampFn(entry.room))) {
|
||||
if (changedBoundary || (currentCategory && categoryComparator({room}, entry) <= 0)) {
|
||||
if (changedBoundary) {
|
||||
// If we changed a boundary, then we've gone too far - go to the top of the last
|
||||
// section instead.
|
||||
|
@ -479,12 +487,6 @@ class RoomListStore extends Store {
|
|||
_setRoomCategory(room, category) {
|
||||
if (!room) return; // This should only happen in tests
|
||||
|
||||
if (!this._state.orderImportantFirst) {
|
||||
// XXX bail here early to avoid https://github.com/vector-im/riot-web/issues/9216
|
||||
// this may mean that category updates are missed whilst not ordering by importance first
|
||||
return;
|
||||
}
|
||||
|
||||
const listsClone = {};
|
||||
|
||||
// Micro optimization: Support lazily loading the last timestamp in a room
|
||||
|
|
Loading…
Reference in a new issue