mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
Fix bug with date separators when prepending messages
When the date changes between an existing group and a new group the existing date separator needs to be updated. This is done by rerendering the existing group. (imported from commit a3775815e33872b0ec07704dc7ccf5fd2671fa21)
This commit is contained in:
@@ -24,6 +24,9 @@ function stringify_time(time) {
|
||||
}
|
||||
|
||||
function same_day(earlier_msg, later_msg) {
|
||||
if (earlier_msg === undefined || later_msg === undefined) {
|
||||
return false;
|
||||
}
|
||||
var earlier_time = new XDate(earlier_msg.msg.timestamp * 1000);
|
||||
var later_time = new XDate(later_msg.msg.timestamp * 1000);
|
||||
|
||||
@@ -279,6 +282,15 @@ MessageListView.prototype = {
|
||||
this._message_groups.unshift(first_group);
|
||||
|
||||
new_message_groups = _.initial(new_message_groups);
|
||||
} else if (!same_day(second_group.message_containers[0], first_group.message_containers[0])) {
|
||||
// The groups did not merge, so we need up update the date row for the old group
|
||||
add_display_time(
|
||||
second_group,
|
||||
_.first(second_group.message_containers),
|
||||
_.last(first_group.message_containers)
|
||||
);
|
||||
// We could add an action to just update the date row, but for now rerender the group.
|
||||
message_actions.rerender_groups.push(second_group);
|
||||
}
|
||||
message_actions.prepend_groups = new_message_groups;
|
||||
this._message_groups = new_message_groups.concat(this._message_groups);
|
||||
@@ -401,6 +413,27 @@ MessageListView.prototype = {
|
||||
self.message_containers[message_container.msg.id] = message_container;
|
||||
});
|
||||
|
||||
// Render new message groups on the top
|
||||
if (message_actions.prepend_groups.length > 0) {
|
||||
save_scroll_position();
|
||||
|
||||
rendered_groups = $(templates.render('message_group', {
|
||||
message_groups: message_actions.prepend_groups,
|
||||
use_match_properties: self.list.filter.is_search(),
|
||||
table_name: self.table_name
|
||||
}));
|
||||
|
||||
dom_messages = rendered_groups.find('.message_row');
|
||||
new_dom_elements = new_dom_elements.concat(rendered_groups);
|
||||
|
||||
self._post_process_dom_messages(dom_messages.get());
|
||||
|
||||
// The date row will be included in the message groups or will be
|
||||
// added in a rerenderd in the group below
|
||||
table.find('.recipient_row').first().prev('.date_row').remove();
|
||||
table.prepend(rendered_groups);
|
||||
condense.condense_and_collapse(dom_messages);
|
||||
}
|
||||
|
||||
// Rerender message groups
|
||||
if (message_actions.rerender_groups.length > 0) {
|
||||
@@ -426,27 +459,6 @@ MessageListView.prototype = {
|
||||
});
|
||||
}
|
||||
|
||||
// Render new message groups on the top
|
||||
if (message_actions.prepend_groups.length > 0) {
|
||||
save_scroll_position();
|
||||
|
||||
rendered_groups = $(templates.render('message_group', {
|
||||
message_groups: message_actions.prepend_groups,
|
||||
use_match_properties: self.list.filter.is_search(),
|
||||
table_name: self.table_name
|
||||
}));
|
||||
|
||||
dom_messages = rendered_groups.find('.message_row');
|
||||
new_dom_elements = new_dom_elements.concat(rendered_groups);
|
||||
|
||||
self._post_process_dom_messages(dom_messages.get());
|
||||
|
||||
// The date row will be included in the message groups
|
||||
table.find('.recipient_row').first().prev('.date_row').remove();
|
||||
table.prepend(rendered_groups);
|
||||
condense.condense_and_collapse(dom_messages);
|
||||
}
|
||||
|
||||
// Rerender message rows
|
||||
if (message_actions.rerender_messages.length > 0) {
|
||||
_.each(message_actions.rerender_messages, function (message_container) {
|
||||
|
||||
@@ -12,6 +12,16 @@ set_global('feature_flags', {twenty_four_hour_time: false});
|
||||
set_global('ui', {small_avatar_url: function () { return ''; }});
|
||||
set_global('notifications', {speaking_at_me: function () {}});
|
||||
set_global('unread', {message_unread: function () {}});
|
||||
// timerender calls setInterval when imported
|
||||
set_global('timerender', {
|
||||
render_date: function (time1, time2) {
|
||||
if (time2 === undefined) {
|
||||
return [{outerHTML: String(time1)}];
|
||||
} else {
|
||||
return [{outerHTML: String(time1) + ' - ' + String(time2)}];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
(function test_merge_message_groups() {
|
||||
// MessageListView has lots of DOM code, so we are going to test the mesage
|
||||
@@ -297,14 +307,17 @@ set_global('unread', {message_unread: function () {}});
|
||||
var list = build_list([message_group1]);
|
||||
var result = list.merge_message_groups([message_group2], 'top');
|
||||
|
||||
assert(message_group1.show_date);
|
||||
assert.equal(
|
||||
message_group1.show_date,
|
||||
'Sun Jan 11 1970 05:00:00 GMT-0500 (EST) - Wed Dec 31 1969 19:16:40 GMT-0500 (EST)'
|
||||
);
|
||||
assert_message_groups_list_equal(
|
||||
list._message_groups,
|
||||
[message_group2, message_group1]
|
||||
);
|
||||
assert_message_groups_list_equal(result.append_groups, []);
|
||||
assert_message_groups_list_equal(result.prepend_groups, [message_group2]);
|
||||
assert_message_groups_list_equal(result.rerender_groups, []);
|
||||
assert_message_groups_list_equal(result.rerender_groups, [message_group1]);
|
||||
assert_message_list_equal(result.append_messages, []);
|
||||
assert_message_list_equal(result.rerender_messages, []);
|
||||
}());
|
||||
|
||||
Reference in New Issue
Block a user