mirror of
https://github.com/element-hq/element-web
synced 2024-11-25 02:35:48 +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) {
|
_slotRoomIntoList(room, category, tag, existingEntries, newList, lastTimestampFn) {
|
||||||
const targetCategoryIndex = CATEGORY_ORDER.indexOf(category);
|
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
|
// 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
|
// 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
|
// 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.
|
// based on most recent timestamp.
|
||||||
const changedBoundary = entryCategoryIndex > targetCategoryIndex;
|
const changedBoundary = entryCategoryIndex > targetCategoryIndex;
|
||||||
const currentCategory = entryCategoryIndex === targetCategoryIndex;
|
const currentCategory = entryCategoryIndex === targetCategoryIndex;
|
||||||
if (changedBoundary || (currentCategory && lastTimestampFn(room) >= lastTimestampFn(entry.room))) {
|
if (changedBoundary || (currentCategory && categoryComparator({room}, entry) <= 0)) {
|
||||||
if (changedBoundary) {
|
if (changedBoundary) {
|
||||||
// If we changed a boundary, then we've gone too far - go to the top of the last
|
// If we changed a boundary, then we've gone too far - go to the top of the last
|
||||||
// section instead.
|
// section instead.
|
||||||
|
@ -479,12 +487,6 @@ class RoomListStore extends Store {
|
||||||
_setRoomCategory(room, category) {
|
_setRoomCategory(room, category) {
|
||||||
if (!room) return; // This should only happen in tests
|
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 = {};
|
const listsClone = {};
|
||||||
|
|
||||||
// Micro optimization: Support lazily loading the last timestamp in a room
|
// Micro optimization: Support lazily loading the last timestamp in a room
|
||||||
|
|
Loading…
Reference in a new issue