Merge "Disable save button until content changes"

This commit is contained in:
Andrew Bonventre
2016-07-27 19:56:20 +00:00
committed by Gerrit Code Review
3 changed files with 41 additions and 8 deletions

View File

@@ -48,7 +48,7 @@ limitations under the License.
<div class="editButtons"> <div class="editButtons">
<gr-button primary <gr-button primary
on-tap="_handleSave" on-tap="_handleSave"
disabled="[[disabled]]">Save</gr-button> disabled="[[_saveDisabled]]">Save</gr-button>
<gr-button <gr-button
on-tap="_handleCancel" on-tap="_handleCancel"
disabled="[[disabled]]">Cancel</gr-button> disabled="[[disabled]]">Cancel</gr-button>

View File

@@ -31,19 +31,24 @@
properties: { properties: {
content: { content: {
type: String,
notify: true, notify: true,
type: String,
}, },
disabled: { disabled: {
type: Boolean,
reflectToAttribute: true, reflectToAttribute: true,
},
editing: {
type: Boolean, type: Boolean,
value: false, value: false,
observer: '_editingChanged',
}, },
editing: {
observer: '_editingChanged',
type: Boolean,
value: false,
},
_saveDisabled: {
computed: '_computeSaveDisabled(disabled, content, _newContent)',
type: Boolean,
value: true,
},
_newContent: String, _newContent: String,
}, },
@@ -56,6 +61,10 @@
this._newContent = this.content; this._newContent = this.content;
}, },
_computeSaveDisabled: function(disabled, content, newContent) {
return disabled || (content === newContent);
},
_handleSave: function(e) { _handleSave: function(e) {
e.preventDefault(); e.preventDefault();
this.fire('editable-content-save', {content: this._newContent}); this.fire('editable-content-save', {content: this._newContent});

View File

@@ -54,11 +54,35 @@ limitations under the License.
MockInteractions.tap(element.$$('gr-button:not([primary])')); MockInteractions.tap(element.$$('gr-button:not([primary])'));
}); });
test('editing content updates', function() { test('enabling editing updates edit field contents', function() {
element.content = 'current content'; element.content = 'current content';
element._newContent = 'stale content'; element._newContent = 'stale content';
element.editing = true; element.editing = true;
assert.equal(element._newContent, 'current content'); assert.equal(element._newContent, 'current content');
}); });
test('disabling editing does not update edit field contents', function() {
element.content = 'current content';
element.editing = true;
element._newContent = 'stale content';
element.editing = false;
assert.equal(element._newContent, 'stale content');
});
suite('editing', function() {
setup(function() {
element.content = 'current content';
element.editing = true;
});
test('save button is disabled initially', function() {
assert.isTrue(element.$$('gr-button[primary]').disabled);
});
test('save button is enabled when content changes', function() {
element._newContent = 'new content';
assert.isFalse(element.$$('gr-button[primary]').disabled);
});
});
}); });
</script> </script>