Adds a new section to the PolyGerrit settings screen to edit a user's contact email addresses. The user may add new addresses, remove addresses and choose which among their addresses is "preferred". Bug: Issue 3911 Change-Id: Id612762bef52cd1c1b35fdabe6671ecaf349d6b5
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Copyright (C) 2016 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() {
 | 
						|
  'use strict';
 | 
						|
 | 
						|
  Polymer({
 | 
						|
    is: 'gr-email-editor',
 | 
						|
 | 
						|
    properties: {
 | 
						|
      hasUnsavedChanges: {
 | 
						|
        type: Boolean,
 | 
						|
        notify: true,
 | 
						|
        value: false,
 | 
						|
      },
 | 
						|
 | 
						|
      _emails: Array,
 | 
						|
      _emailsToRemove: {
 | 
						|
        type: Array,
 | 
						|
        value: function() { return []; },
 | 
						|
      },
 | 
						|
      _newPreferred: {
 | 
						|
        type: String,
 | 
						|
        value: null,
 | 
						|
      },
 | 
						|
    },
 | 
						|
 | 
						|
    loadData: function() {
 | 
						|
      return this.$.restAPI.getAccountEmails().then(function(emails) {
 | 
						|
        this._emails = emails;
 | 
						|
      }.bind(this));
 | 
						|
    },
 | 
						|
 | 
						|
    save: function() {
 | 
						|
      var promises = [];
 | 
						|
 | 
						|
      for (var i = 0; i < this._emailsToRemove.length; i++) {
 | 
						|
        promises.push(this.$.restAPI.deleteAccountEmail(
 | 
						|
            this._emailsToRemove[i].email));
 | 
						|
      }
 | 
						|
 | 
						|
      if (this._newPreferred) {
 | 
						|
        promises.push(this.$.restAPI.setPreferredAccountEmail(
 | 
						|
            this._newPreferred));
 | 
						|
      }
 | 
						|
 | 
						|
      return Promise.all(promises).then(function() {
 | 
						|
        this._emailsToRemove = [];
 | 
						|
        this._newPreferred = null;
 | 
						|
        this.hasUnsavedChanges = false;
 | 
						|
      }.bind(this));
 | 
						|
    },
 | 
						|
 | 
						|
    _handleDeleteButton: function(e) {
 | 
						|
      var index = parseInt(e.target.getAttribute('data-index'));
 | 
						|
      var email = this._emails[index];
 | 
						|
      this.push('_emailsToRemove', email);
 | 
						|
      this.splice('_emails', index, 1);
 | 
						|
      this.hasUnsavedChanges = true;
 | 
						|
    },
 | 
						|
 | 
						|
    _handlePreferredControlTap: function(e) {
 | 
						|
      if (e.target.classList.contains('preferredControl')) {
 | 
						|
        e.target.firstElementChild.click();
 | 
						|
      }
 | 
						|
    },
 | 
						|
 | 
						|
    _handlePreferredChange: function(e) {
 | 
						|
      var preferred = e.target.value;
 | 
						|
      for (var i = 0; i < this._emails.length; i++) {
 | 
						|
        if (preferred === this._emails[i].email) {
 | 
						|
          this.set(['_emails', i, 'preferred'], true);
 | 
						|
          this._newPreferred = preferred;
 | 
						|
          this.hasUnsavedChanges = true;
 | 
						|
        } else if (this._emails[i].preferred) {
 | 
						|
          this.set(['_emails', i, 'preferred'], false);
 | 
						|
        }
 | 
						|
      }
 | 
						|
    },
 | 
						|
  });
 | 
						|
})();
 |