diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js index e1b2f96eb5..251c65226c 100644 --- a/src/components/structures/RoomSubList.js +++ b/src/components/structures/RoomSubList.js @@ -327,43 +327,46 @@ var RoomSubList = React.createClass({ }, calcManualOrderTagData: function(room) { - var index = this.state.sortedList.indexOf(room); + const index = this.state.sortedList.indexOf(room); // we sort rooms by the lexicographic ordering of the 'order' metadata on their tags. // for convenience, we calculate this for now a floating point number between 0.0 and 1.0. - var orderA = 0.0; // by default we're next to the beginning of the list + let orderA = 0.0; // by default we're next to the beginning of the list if (index > 0) { - var prevTag = this.state.sortedList[index - 1].tags[this.props.tagName]; + const prevTag = this.state.sortedList[index - 1].tags[this.props.tagName]; if (!prevTag) { - console.error("Previous room in sublist is not tagged to be in this list. This should never happen.") - } - else if (prevTag.order === undefined) { + console.error("Previous room in sublist is not tagged to be in this list. This should never happen."); + } else if (prevTag.order === undefined) { console.error("Previous room in sublist has no ordering metadata. This should never happen."); - } - else { + } else { orderA = prevTag.order; } } - var orderB = 1.0; // by default we're next to the end of the list too + let orderB = 1.0; // by default we're next to the end of the list too if (index < this.state.sortedList.length - 1) { - var nextTag = this.state.sortedList[index + 1].tags[this.props.tagName]; + const nextTag = this.state.sortedList[index + 1].tags[this.props.tagName]; if (!nextTag) { - console.error("Next room in sublist is not tagged to be in this list. This should never happen.") - } - else if (nextTag.order === undefined) { + console.error("Next room in sublist is not tagged to be in this list. This should never happen."); + } else if (nextTag.order === undefined) { console.error("Next room in sublist has no ordering metadata. This should never happen."); - } - else { + } else { orderB = nextTag.order; } } - var order = (orderA + orderB) / 2.0; + const order = (orderA + orderB) / 2.0; + if (order === orderA || order === orderB) { console.error("Cannot describe new list position. This should be incredibly unlikely."); - // TODO: renumber the list + this.state.sortedList.forEach((room, index) => { + MatrixClientPeg.get().setRoomTag( + room.roomId, this.props.tagName, + {order: index / this.state.sortedList.length}, + ); + }); + return index / this.state.sortedList.length; } return order;