The change converts the following files to typescript: * elements/settings/gr-identities/gr-identities.ts Change-Id: Iae2915a74bedf40b3577ccdb907e7fe06c458328
		
			
				
	
	
		
			131 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright (C) 2017 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.
 | 
						|
 */
 | 
						|
import '../../../styles/shared-styles';
 | 
						|
import '../../../styles/gr-form-styles';
 | 
						|
import '../../admin/gr-confirm-delete-item-dialog/gr-confirm-delete-item-dialog';
 | 
						|
import '../../shared/gr-button/gr-button';
 | 
						|
import '../../shared/gr-overlay/gr-overlay';
 | 
						|
import '../../shared/gr-rest-api-interface/gr-rest-api-interface';
 | 
						|
import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners';
 | 
						|
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
 | 
						|
import {PolymerElement} from '@polymer/polymer/polymer-element';
 | 
						|
import {htmlTemplate} from './gr-identities_html';
 | 
						|
import {getBaseUrl} from '../../../utils/url-util';
 | 
						|
import {customElement, property} from '@polymer/decorators';
 | 
						|
import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api';
 | 
						|
import {AccountExternalIdInfo, ServerInfo} from '../../../types/common';
 | 
						|
import {GrOverlay} from '../../shared/gr-overlay/gr-overlay';
 | 
						|
import {PolymerDomRepeatEvent} from '../../../types/types';
 | 
						|
 | 
						|
const AUTH = ['OPENID', 'OAUTH'];
 | 
						|
 | 
						|
export interface GrIdentities {
 | 
						|
  $: {
 | 
						|
    restAPI: RestApiService & Element;
 | 
						|
    overlay: GrOverlay;
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
@customElement('gr-identities')
 | 
						|
export class GrIdentities extends GestureEventListeners(
 | 
						|
  LegacyElementMixin(PolymerElement)
 | 
						|
) {
 | 
						|
  static get template() {
 | 
						|
    return htmlTemplate;
 | 
						|
  }
 | 
						|
 | 
						|
  @property({type: Array})
 | 
						|
  _identities: AccountExternalIdInfo[] = [];
 | 
						|
 | 
						|
  @property({type: String})
 | 
						|
  _idName?: string;
 | 
						|
 | 
						|
  @property({type: Object})
 | 
						|
  serverConfig?: ServerInfo;
 | 
						|
 | 
						|
  @property({
 | 
						|
    type: Boolean,
 | 
						|
    computed: '_computeShowLinkAnotherIdentity(serverConfig)',
 | 
						|
  })
 | 
						|
  _showLinkAnotherIdentity?: boolean;
 | 
						|
 | 
						|
  loadData() {
 | 
						|
    return this.$.restAPI.getExternalIds().then(id => {
 | 
						|
      this._identities = id ?? [];
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  _computeIdentity(id: string) {
 | 
						|
    return id && id.startsWith('mailto:') ? '' : id;
 | 
						|
  }
 | 
						|
 | 
						|
  _computeHideDeleteClass(canDelete?: boolean) {
 | 
						|
    return canDelete ? 'show' : '';
 | 
						|
  }
 | 
						|
 | 
						|
  _handleDeleteItemConfirm() {
 | 
						|
    this.$.overlay.close();
 | 
						|
    return this.$.restAPI.deleteAccountIdentity([this._idName!]).then(() => {
 | 
						|
      this.loadData();
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  _handleConfirmDialogCancel() {
 | 
						|
    this.$.overlay.close();
 | 
						|
  }
 | 
						|
 | 
						|
  _handleDeleteItem(e: PolymerDomRepeatEvent<AccountExternalIdInfo>) {
 | 
						|
    const name = e.model.item.identity;
 | 
						|
    if (!name) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this._idName = name;
 | 
						|
    this.$.overlay.open();
 | 
						|
  }
 | 
						|
 | 
						|
  _computeIsTrusted(item?: boolean) {
 | 
						|
    return item ? '' : 'Untrusted';
 | 
						|
  }
 | 
						|
 | 
						|
  filterIdentities(item: AccountExternalIdInfo) {
 | 
						|
    return !item.identity.startsWith('username:');
 | 
						|
  }
 | 
						|
 | 
						|
  _computeShowLinkAnotherIdentity(config?: ServerInfo) {
 | 
						|
    if (config?.auth?.git_basic_auth_policy) {
 | 
						|
      return AUTH.includes(config.auth.git_basic_auth_policy.toUpperCase());
 | 
						|
    }
 | 
						|
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  _computeLinkAnotherIdentity() {
 | 
						|
    const baseUrl = getBaseUrl() || '';
 | 
						|
    let pathname = window.location.pathname;
 | 
						|
    if (baseUrl) {
 | 
						|
      pathname = '/' + pathname.substring(baseUrl.length);
 | 
						|
    }
 | 
						|
    return baseUrl + '/login/' + encodeURIComponent(pathname) + '?link';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
declare global {
 | 
						|
  interface HTMLElementTagNameMap {
 | 
						|
    'gr-identities': GrIdentities;
 | 
						|
  }
 | 
						|
}
 |