Merge "Handle starring API calls in parent component"

This commit is contained in:
Kasper Nilsson 2018-07-16 17:55:49 +00:00 committed by Gerrit Code Review
commit 447f649f71
8 changed files with 31 additions and 23 deletions

View File

@ -86,7 +86,8 @@ limitations under the License.
changes="{{_changes}}"
preferences="[[preferences]]"
selected-index="{{viewState.selectedChangeIndex}}"
show-star="[[_loggedIn]]"></gr-change-list>
show-star="[[_loggedIn]]"
on-toggle-star="_handleToggleStar"></gr-change-list>
<nav class$="[[_computeNavClass(_loading)]]">
Page [[_computePage(_offset, _changesPerPage)]]
<a id="prevArrow"

View File

@ -263,5 +263,10 @@
_computeLoggedIn(account) {
return !!(account && Object.keys(account).length > 0);
},
_handleToggleStar(e) {
this.$.restAPI.saveChangeStarred(e.detail.change._number,
e.detail.starred);
},
});
})();

View File

@ -307,10 +307,7 @@
}
const changeEl = changeEls[index];
const change = changeEl.change;
const newVal = !change.starred;
changeEl.set('change.starred', newVal);
this.$.restAPI.saveChangeStarred(change._number, newVal);
changeEl.$$('gr-change-star').toggleStar();
},
_changeForIndex(index) {

View File

@ -60,7 +60,8 @@ limitations under the License.
account="[[account]]"
preferences="[[preferences]]"
selected-index="{{viewState.selectedChangeIndex}}"
sections="[[_results]]"></gr-change-list>
sections="[[_results]]"
on-toggle-star="_handleToggleStar"></gr-change-list>
</div>
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
<gr-reporting id="reporting"></gr-reporting>

View File

@ -241,5 +241,10 @@
_computeUserHeaderClass(userParam) {
return userParam === 'self' ? 'hide' : '';
},
_handleToggleStar(e) {
this.$.restAPI.saveChangeStarred(e.detail.change._number,
e.detail.starred);
},
});
})();

View File

@ -17,7 +17,6 @@ limitations under the License.
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../shared/gr-icons/gr-icons.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../../styles/shared-styles.html">
<dom-module id="gr-change-star">
@ -36,7 +35,6 @@ limitations under the License.
class$="[[_computeStarClass(change.starred)]]"
icon$="[[_computeStarIcon(change.starred)]]"></iron-icon>
</button>
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
</template>
<script src="gr-change-star.js"></script>
</dom-module>

View File

@ -20,14 +20,18 @@
Polymer({
is: 'gr-change-star',
/**
* Fired when star state is toggled.
*
* @event toggle-star
*/
properties: {
/** @type {?} */
change: {
type: Object,
notify: true,
},
_xhrPromise: Object, // Used for testing.
},
_computeStarClass(starred) {
@ -42,8 +46,10 @@
toggleStar() {
const newVal = !this.change.starred;
this.set('change.starred', newVal);
this._xhrPromise = this.$.restAPI.saveChangeStarred(this.change._number,
newVal);
this.dispatchEvent(new CustomEvent('toggle-star', {
bubbles: true,
detail: {change: this.change, starred: newVal},
}));
},
});
})();

View File

@ -37,9 +37,6 @@ limitations under the License.
let element;
setup(() => {
stub('gr-rest-api-interface', {
saveChangeStarred() { return Promise.resolve({ok: true}); },
});
element = fixture('basic');
element.change = {
_number: 2,
@ -60,23 +57,21 @@ limitations under the License.
});
test('starring', done => {
element.set('change.starred', false);
MockInteractions.tap(element.$$('button'));
element._xhrPromise.then(req => {
element.addEventListener('toggle-star', () => {
assert.equal(element.change.starred, true);
done();
});
element.set('change.starred', false);
MockInteractions.tap(element.$$('button'));
});
test('unstarring', done => {
element.set('change.starred', true);
MockInteractions.tap(element.$$('button'));
element._xhrPromise.then(req => {
element.addEventListener('toggle-star', () => {
assert.equal(element.change.starred, false);
done();
});
element.set('change.starred', true);
MockInteractions.tap(element.$$('button'));
});
});
</script>