 cee02d5cea
			
		
	
	cee02d5cea
	
	
	
		
			
			* stable-3.0: Update git submodules Update git submodules Fix "TypeError: groups is not iterable" in _disableAgreements Fix typos: Aggreements -> Agreements Change-Id: I36702d2b1d43958d149254113fb2172d6a5ff0fe
		
			
				
	
	
		
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright (C) 2018 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-cla-view',
 | |
| 
 | |
|     properties: {
 | |
|       _groups: Object,
 | |
|       /** @type {?} */
 | |
|       _serverConfig: Object,
 | |
|       _agreementsText: String,
 | |
|       _agreementName: String,
 | |
|       _signedAgreements: Array,
 | |
|       _showAgreements: {
 | |
|         type: Boolean,
 | |
|         value: false,
 | |
|       },
 | |
|       _agreementsUrl: String,
 | |
|     },
 | |
| 
 | |
|     behaviors: [
 | |
|       Gerrit.BaseUrlBehavior,
 | |
|       Gerrit.FireBehavior,
 | |
|     ],
 | |
| 
 | |
|     attached() {
 | |
|       this.loadData();
 | |
| 
 | |
|       this.fire('title-change', {title: 'New Contributor Agreement'});
 | |
|     },
 | |
| 
 | |
|     loadData() {
 | |
|       const promises = [];
 | |
|       promises.push(this.$.restAPI.getConfig(true).then(config => {
 | |
|         this._serverConfig = config;
 | |
|       }));
 | |
| 
 | |
|       promises.push(this.$.restAPI.getAccountGroups().then(groups => {
 | |
|         this._groups = groups.sort((a, b) => {
 | |
|           return a.name.localeCompare(b.name);
 | |
|         });
 | |
|       }));
 | |
| 
 | |
|       promises.push(this.$.restAPI.getAccountAgreements().then(agreements => {
 | |
|         this._signedAgreements = agreements || [];
 | |
|       }));
 | |
| 
 | |
|       return Promise.all(promises);
 | |
|     },
 | |
| 
 | |
|     _getAgreementsUrl(configUrl) {
 | |
|       let url;
 | |
|       if (!configUrl) {
 | |
|         return '';
 | |
|       }
 | |
|       if (configUrl.startsWith('http:') || configUrl.startsWith('https:')) {
 | |
|         url = configUrl;
 | |
|       } else {
 | |
|         url = this.getBaseUrl() + '/' + configUrl;
 | |
|       }
 | |
| 
 | |
|       return url;
 | |
|     },
 | |
| 
 | |
|     _handleShowAgreement(e) {
 | |
|       this._agreementName = e.target.getAttribute('data-name');
 | |
|       this._agreementsUrl =
 | |
|           this._getAgreementsUrl(e.target.getAttribute('data-url'));
 | |
|       this._showAgreements = true;
 | |
|     },
 | |
| 
 | |
|     _handleSaveAgreements(e) {
 | |
|       this._createToast('Agreement saving...');
 | |
| 
 | |
|       const name = this._agreementName;
 | |
|       return this.$.restAPI.saveAccountAgreement({name}).then(res => {
 | |
|         let message = 'Agreement failed to be submitted, please try again';
 | |
|         if (res.status === 200) {
 | |
|           message = 'Agreement has been successfully submited.';
 | |
|         }
 | |
|         this._createToast(message);
 | |
|         this.loadData();
 | |
|         this._agreementsText = '';
 | |
|         this._showAgreements = false;
 | |
|       });
 | |
|     },
 | |
| 
 | |
|     _createToast(message) {
 | |
|       this.dispatchEvent(new CustomEvent(
 | |
|           'show-alert', {detail: {message}, bubbles: true, composed: true}));
 | |
|     },
 | |
| 
 | |
|     _computeShowAgreementsClass(agreements) {
 | |
|       return agreements ? 'show' : '';
 | |
|     },
 | |
| 
 | |
|     _disableAgreements(item, groups, signedAgreements) {
 | |
|       if (!groups) return false;
 | |
|       for (const group of groups) {
 | |
|         if ((item && item.auto_verify_group &&
 | |
|             item.auto_verify_group.id === group.id) ||
 | |
|             signedAgreements.find(i => i.name === item.name)) {
 | |
|           return true;
 | |
|         }
 | |
|       }
 | |
|       return false;
 | |
|     },
 | |
| 
 | |
|     _hideAgreements(item, groups, signedAgreements) {
 | |
|       return this._disableAgreements(item, groups, signedAgreements) ?
 | |
|           '' : 'hide';
 | |
|     },
 | |
| 
 | |
|     _disableAgreementsText(text) {
 | |
|       return text.toLowerCase() === 'i agree' ? false : true;
 | |
|     },
 | |
| 
 | |
|     // This checks for auto_verify_group,
 | |
|     // if specified it returns 'hideAgreementsTextBox' which
 | |
|     // then hides the text box and submit button.
 | |
|     _computeHideAgreementClass(name, config) {
 | |
|       if (!config) return '';
 | |
|       for (const key in config) {
 | |
|         if (!config.hasOwnProperty(key)) {
 | |
|           continue;
 | |
|         }
 | |
|         for (const prop in config[key]) {
 | |
|           if (!config[key].hasOwnProperty(prop)) {
 | |
|             continue;
 | |
|           }
 | |
|           if (name === config[key].name &&
 | |
|               !config[key].auto_verify_group) {
 | |
|             return 'hideAgreementsTextBox';
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     },
 | |
|   });
 | |
| })();
 |