mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +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) {
 | 
					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 earlier_time = new XDate(earlier_msg.msg.timestamp * 1000);
 | 
				
			||||||
    var later_time = new XDate(later_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);
 | 
					                this._message_groups.unshift(first_group);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                new_message_groups = _.initial(new_message_groups);
 | 
					                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;
 | 
					            message_actions.prepend_groups = new_message_groups;
 | 
				
			||||||
            this._message_groups = new_message_groups.concat(this._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;
 | 
					            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
 | 
					        // Rerender message groups
 | 
				
			||||||
        if (message_actions.rerender_groups.length > 0) {
 | 
					        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
 | 
					        // Rerender message rows
 | 
				
			||||||
        if (message_actions.rerender_messages.length > 0) {
 | 
					        if (message_actions.rerender_messages.length > 0) {
 | 
				
			||||||
            _.each(message_actions.rerender_messages, function (message_container) {
 | 
					            _.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('ui', {small_avatar_url: function () { return ''; }});
 | 
				
			||||||
set_global('notifications', {speaking_at_me: function () {}});
 | 
					set_global('notifications', {speaking_at_me: function () {}});
 | 
				
			||||||
set_global('unread', {message_unread: 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() {
 | 
					(function test_merge_message_groups() {
 | 
				
			||||||
    // MessageListView has lots of DOM code, so we are going to test the mesage
 | 
					    // 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 list = build_list([message_group1]);
 | 
				
			||||||
        var result = list.merge_message_groups([message_group2], 'top');
 | 
					        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(
 | 
					        assert_message_groups_list_equal(
 | 
				
			||||||
            list._message_groups,
 | 
					            list._message_groups,
 | 
				
			||||||
            [message_group2, message_group1]
 | 
					            [message_group2, message_group1]
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        assert_message_groups_list_equal(result.append_groups, []);
 | 
					        assert_message_groups_list_equal(result.append_groups, []);
 | 
				
			||||||
        assert_message_groups_list_equal(result.prepend_groups, [message_group2]);
 | 
					        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.append_messages, []);
 | 
				
			||||||
        assert_message_list_equal(result.rerender_messages, []);
 | 
					        assert_message_list_equal(result.rerender_messages, []);
 | 
				
			||||||
    }());
 | 
					    }());
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user