mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-05-03 22:55:44 +01:00
When conversations are reordered (last message time has changed), this commit leads to scrolling the shortest distance to the conversation.
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
window.Whisper = window.Whisper || {};
|
|
|
|
Whisper.ConversationListView = Whisper.ListView.extend({
|
|
tagName: 'div',
|
|
itemView: Whisper.ConversationListItemView,
|
|
updateLocation: function(conversation) {
|
|
var $el = this.$('.' + conversation.cid);
|
|
|
|
if (!$el || !$el.length) {
|
|
console.log(
|
|
'updateLocation: did not find element for conversation',
|
|
conversation.idForLogging()
|
|
);
|
|
return;
|
|
}
|
|
if ($el.length > 1) {
|
|
console.log(
|
|
'updateLocation: found more than one element for conversation',
|
|
conversation.idForLogging()
|
|
);
|
|
return;
|
|
}
|
|
|
|
var $allConversations = this.$('.conversation-list-item');
|
|
var inboxCollection = getInboxCollection();
|
|
var index = inboxCollection.indexOf(conversation);
|
|
|
|
var elIndex = $allConversations.index($el);
|
|
if (elIndex < 0) {
|
|
console.log(
|
|
'updateLocation: did not find index for conversation',
|
|
conversation.idForLogging()
|
|
);
|
|
}
|
|
|
|
if (index === elIndex) {
|
|
return;
|
|
}
|
|
if (index === 0) {
|
|
this.$el.prepend($el);
|
|
} else if (index === this.collection.length - 1) {
|
|
this.$el.append($el);
|
|
} else {
|
|
var targetConversation = inboxCollection.at(index - 1);
|
|
var target = this.$('.' + targetConversation.cid);
|
|
$el.insertAfter(target);
|
|
}
|
|
|
|
if ($('.selected').length) {
|
|
$('.selected')[0].scrollIntoView({
|
|
block: 'nearest',
|
|
});
|
|
}
|
|
},
|
|
removeItem: function(conversation) {
|
|
var $el = this.$('.' + conversation.cid);
|
|
if ($el && $el.length > 0) {
|
|
$el.remove();
|
|
}
|
|
},
|
|
});
|
|
})();
|