Merge pull request #5759 from vector-im/luke/renumerate-broken-ordered-sublists
Implement renumeration of ordered tags upon collision
This commit is contained in:
commit
9835e2e0b4
1 changed files with 20 additions and 17 deletions
|
@ -327,43 +327,46 @@ var RoomSubList = React.createClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
calcManualOrderTagData: function(room) {
|
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.
|
// 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.
|
// 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) {
|
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) {
|
if (!prevTag) {
|
||||||
console.error("Previous room in sublist is not tagged to be in this list. This should never happen.")
|
console.error("Previous room in sublist is not tagged to be in this list. This should never happen.");
|
||||||
}
|
} else if (prevTag.order === undefined) {
|
||||||
else if (prevTag.order === undefined) {
|
|
||||||
console.error("Previous room in sublist has no ordering metadata. This should never happen.");
|
console.error("Previous room in sublist has no ordering metadata. This should never happen.");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
orderA = prevTag.order;
|
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) {
|
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) {
|
if (!nextTag) {
|
||||||
console.error("Next room in sublist is not tagged to be in this list. This should never happen.")
|
console.error("Next room in sublist is not tagged to be in this list. This should never happen.");
|
||||||
}
|
} else if (nextTag.order === undefined) {
|
||||||
else if (nextTag.order === undefined) {
|
|
||||||
console.error("Next room in sublist has no ordering metadata. This should never happen.");
|
console.error("Next room in sublist has no ordering metadata. This should never happen.");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
orderB = nextTag.order;
|
orderB = nextTag.order;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var order = (orderA + orderB) / 2.0;
|
const order = (orderA + orderB) / 2.0;
|
||||||
|
|
||||||
if (order === orderA || order === orderB) {
|
if (order === orderA || order === orderB) {
|
||||||
console.error("Cannot describe new list position. This should be incredibly unlikely.");
|
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;
|
return order;
|
||||||
|
|
Loading…
Reference in a new issue