From e80c4fadea7cc60488bf4a17e9b34ea70ef4914a Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 1 Dec 2017 18:18:48 +0000 Subject: [PATCH 1/2] Linting --- src/components/structures/RoomSubList.js | 29 +++++++++++------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js index e1b2f96e..9ad265dc 100644 --- a/src/components/structures/RoomSubList.js +++ b/src/components/structures/RoomSubList.js @@ -327,40 +327,37 @@ 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 From b0d115a64ac35b2a87fdcc11c7d7eec4f4228836 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Fri, 1 Dec 2017 18:20:38 +0000 Subject: [PATCH 2/2] Implement renumeration of ordered tags upon collision I was being bitten by this enough for me to want to fix it. This implementation really ought to be improved such that it doesnt tend towards being broken the more it is used. --- src/components/structures/RoomSubList.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js index 9ad265dc..251c6522 100644 --- a/src/components/structures/RoomSubList.js +++ b/src/components/structures/RoomSubList.js @@ -360,7 +360,13 @@ var RoomSubList = React.createClass({ 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;