|  | /** | 
|  | * @license | 
|  | * 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-registration-dialog', | 
|  |  | 
|  | /** | 
|  | * Fired when account details are changed. | 
|  | * | 
|  | * @event account-detail-update | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * Fired when the close button is pressed. | 
|  | * | 
|  | * @event close | 
|  | */ | 
|  |  | 
|  | properties: { | 
|  | settingsUrl: String, | 
|  | /** @type {?} */ | 
|  | _account: { | 
|  | type: Object, | 
|  | value: () => { | 
|  | // Prepopulate possibly undefined fields with values to trigger | 
|  | // computed bindings. | 
|  | return {email: null, name: null, username: null}; | 
|  | }, | 
|  | }, | 
|  | _usernameMutable: { | 
|  | type: Boolean, | 
|  | computed: '_computeUsernameMutable(_serverConfig, _account.username)', | 
|  | }, | 
|  | _loading: { | 
|  | type: Boolean, | 
|  | value: true, | 
|  | observer: '_loadingChanged', | 
|  | }, | 
|  | _saving: { | 
|  | type: Boolean, | 
|  | value: false, | 
|  | }, | 
|  | _serverConfig: Object, | 
|  | }, | 
|  |  | 
|  | hostAttributes: { | 
|  | role: 'dialog', | 
|  | }, | 
|  |  | 
|  | loadData() { | 
|  | this._loading = true; | 
|  |  | 
|  | const loadAccount = this.$.restAPI.getAccount().then(account => { | 
|  | // Using Object.assign here allows preservation of the default values | 
|  | // supplied in the value generating function of this._account, unless | 
|  | // they are overridden by properties in the account from the response. | 
|  | this._account = Object.assign({}, this._account, account); | 
|  | }); | 
|  |  | 
|  | const loadConfig = this.$.restAPI.getConfig().then(config => { | 
|  | this._serverConfig = config; | 
|  | }); | 
|  |  | 
|  | return Promise.all([loadAccount, loadConfig]).then(() => { | 
|  | this._loading = false; | 
|  | }); | 
|  | }, | 
|  |  | 
|  | _save() { | 
|  | this._saving = true; | 
|  | const promises = [ | 
|  | this.$.restAPI.setAccountName(this.$.name.value), | 
|  | this.$.restAPI.setPreferredAccountEmail(this.$.email.value || ''), | 
|  | ]; | 
|  |  | 
|  | if (this._usernameMutable) { | 
|  | promises.push(this.$.restAPI.setAccountUsername(this.$.username.value)); | 
|  | } | 
|  |  | 
|  | return Promise.all(promises).then(() => { | 
|  | this._saving = false; | 
|  | this.fire('account-detail-update'); | 
|  | }); | 
|  | }, | 
|  |  | 
|  | _handleSave(e) { | 
|  | e.preventDefault(); | 
|  | this._save().then(this.close.bind(this)); | 
|  | }, | 
|  |  | 
|  | _handleClose(e) { | 
|  | e.preventDefault(); | 
|  | this.close(); | 
|  | }, | 
|  |  | 
|  | close() { | 
|  | this._saving = true; // disable buttons indefinitely | 
|  | this.fire('close'); | 
|  | }, | 
|  |  | 
|  | _computeSaveDisabled(name, email, saving) { | 
|  | return !name || !email || saving; | 
|  | }, | 
|  |  | 
|  | _computeUsernameMutable(config, username) { | 
|  | return config.auth.editable_account_fields.includes('USER_NAME') && | 
|  | !username; | 
|  | }, | 
|  |  | 
|  | _computeUsernameClass(usernameMutable) { | 
|  | return usernameMutable ? '' : 'hide'; | 
|  | }, | 
|  |  | 
|  | _loadingChanged() { | 
|  | this.classList.toggle('loading', this._loading); | 
|  | }, | 
|  | }); | 
|  | })(); |