Preserve expanded state for hidden messages

Conditionally adds 'expanded' prop to the message object passed to
gr-message that takes precedence over the default expand/collapse
logic (only when defined). Gr-message also now watches this prop to
determine expanded/collapsed status, as opposed to toggling the prop on
the DOM element.

Bug: Issue 5626
Change-Id: I0cad5ce62a80409fd5709c12008dd4da603ab61a
This commit is contained in:
Kasper Nilsson
2017-02-23 14:34:28 -08:00
parent 2b822834e2
commit ee08b62fd7
4 changed files with 96 additions and 29 deletions

View File

@@ -122,42 +122,91 @@ limitations under the License.
assert.isTrue(element.$.messageControlsContainer.hasAttribute('hidden'));
});
test('show all messages respects expand', function() {
element.messages = _.times(10, randomAutomated)
.concat(_.times(11, randomMessage));
flushAsynchronousOperations();
MockInteractions.tap(element.$$('#collapse-messages')); // Expand all.
flushAsynchronousOperations();
var messages = getMessages();
assert.equal(messages.length, 20);
for (var i = 0; i < messages.length; i++) {
assert.isTrue(messages[i]._expanded);
}
MockInteractions.tap(element.$.oldMessagesBtn);
flushAsynchronousOperations();
messages = getMessages();
assert.equal(messages.length, 21);
for (var i = 0; i < messages.length; i++) {
assert.isTrue(messages[i]._expanded);
}
});
test('show all messages respects collapse', function() {
element.messages = _.times(10, randomAutomated)
.concat(_.times(11, randomMessage));
flushAsynchronousOperations();
MockInteractions.tap(element.$$('#collapse-messages')); // Expand all.
MockInteractions.tap(element.$$('#collapse-messages')); // Collapse all.
flushAsynchronousOperations();
var messages = getMessages();
assert.equal(messages.length, 20);
for (var i = 0; i < messages.length; i++) {
assert.isFalse(messages[i]._expanded);
}
MockInteractions.tap(element.$.oldMessagesBtn);
flushAsynchronousOperations();
messages = getMessages();
assert.equal(messages.length, 21);
for (var i = 0; i < messages.length; i++) {
assert.isFalse(messages[i]._expanded);
}
});
test('expand/collapse all', function() {
var allMessageEls = getMessages();
for (var i = 0; i < allMessageEls.length; i++) {
allMessageEls[i].expanded = false;
allMessageEls[i]._expanded = false;
}
MockInteractions.tap(allMessageEls[1]);
assert.isTrue(allMessageEls[1].expanded);
assert.isTrue(allMessageEls[1]._expanded);
MockInteractions.tap(element.$$('#collapse-messages'));
allMessageEls = getMessages();
for (var i = 0; i < allMessageEls.length; i++) {
assert.isTrue(allMessageEls[i].expanded);
assert.isTrue(allMessageEls[i]._expanded);
}
MockInteractions.tap(element.$$('#collapse-messages'));
allMessageEls = getMessages();
for (var i = 0; i < allMessageEls.length; i++) {
assert.isFalse(allMessageEls[i].expanded);
assert.isFalse(allMessageEls[i]._expanded);
}
});
test('expand/collapse from external keypress', function() {
element.handleExpandCollapse(true);
MockInteractions.tap(element.$$('#collapse-messages'));
var allMessageEls = getMessages();
for (var i = 0; i < allMessageEls.length; i++) {
assert.isTrue(allMessageEls[i].expanded);
assert.isTrue(allMessageEls[i]._expanded);
}
// Expand/collapse all text also changes.
assert.equal(element.$$('#collapse-messages').textContent.trim(),
'Collapse all');
element.handleExpandCollapse(false);
MockInteractions.tap(element.$$('#collapse-messages'));
allMessageEls = getMessages();
for (var i = 0; i < allMessageEls.length; i++) {
assert.isFalse(allMessageEls[i].expanded);
assert.isFalse(allMessageEls[i]._expanded);
}
// Expand/collapse all text also changes.
assert.equal(element.$$('#collapse-messages').textContent.trim(),
@@ -172,7 +221,7 @@ limitations under the License.
test('scroll to message', function() {
var allMessageEls = getMessages();
for (var i = 0; i < allMessageEls.length; i++) {
allMessageEls[i].expanded = false;
allMessageEls[i].set('message.expanded', false);
}
var scrollToStub = sinon.stub(window, 'scrollTo');
@@ -181,14 +230,14 @@ limitations under the License.
element.scrollToMessage('invalid');
for (var i = 0; i < allMessageEls.length; i++) {
assert.isFalse(allMessageEls[i].expanded,
assert.isFalse(allMessageEls[i]._expanded,
'expected gr-message ' + i + ' to not be expanded');
}
var messageID = messages[1].id;
element.scrollToMessage(messageID);
assert.isTrue(
element.$$('[data-message-id="' + messageID + '"]').expanded);
element.$$('[data-message-id="' + messageID + '"]')._expanded);
assert.isTrue(scrollToStub.calledOnce);
assert.isTrue(highlightStub.calledOnce);