| // Copyright (C) 2019 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| (function() { |
| Polymer({ |
| is: 'rv-filter-section', |
| |
| properties: { |
| pluginRestApi: Object, |
| repoName: String, |
| reviewers: Array, |
| filter: String, |
| canModifyConfig: Boolean, |
| _originalFilter: String, |
| _editingReviewer: { |
| type: Boolean, |
| value: false, |
| }, |
| reviewersUrl: String, |
| }, |
| |
| attached() { |
| this._updateSection(); |
| }, |
| |
| _updateSection() { |
| this._originalFilter = this.filter; |
| }, |
| |
| _computeEditing(filter, _originalFilter) { |
| if (_originalFilter === '') { |
| return true; |
| } |
| return filter === ''; |
| }, |
| |
| _computeCancelHidden(filter, _originalFilter) { |
| return !this._computeEditing(filter, _originalFilter); |
| }, |
| |
| _computeAddBtnHidden(canModifyConfig, editingReviewer) { |
| return !(canModifyConfig && !editingReviewer); |
| }, |
| |
| _computeFilterInputDisabled(canModifyConfig, originalFilter) { |
| return !canModifyConfig || originalFilter !== ''; |
| }, |
| |
| _handleCancel() { |
| this.remove(); |
| }, |
| |
| _handleReviewerDeleted(e) { |
| if (e.detail.editing) { |
| this.reviewers.pop(); |
| this._editingReviewer = false; |
| } else { |
| const index = e.model.index; |
| const deleted = this.reviewers[index]; |
| this._putReviewer(deleted, 'DELETE'); |
| } |
| }, |
| |
| _handleReviewerAdded(e) { |
| this._editingReviewer = false; |
| this._putReviewer(e.detail.reviewer, 'ADD').catch(err => { |
| this.fire('show-alert', {message: err}); |
| throw err; |
| }); |
| }, |
| |
| _putReviewer(reviewer, action) { |
| return this.pluginRestApi.put(this.reviewersUrl, { |
| action, |
| reviewer, |
| filter: this.filter, |
| }).then(result => { |
| const detail = {result}; |
| this.dispatchEvent( |
| new CustomEvent('reviewer-changed', {detail, bubbles: true})); |
| }); |
| }, |
| |
| _handleAddReviewer() { |
| this.push('reviewers', ''); |
| this._editingReviewer = true; |
| }, |
| }); |
| })(); |