/** * @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'; const SUGGESTIONS_LIMIT = 15; const REF_PREFIX = 'refs/heads/'; /** * @appliesMixin Gerrit.URLEncodingMixin */ class GrRepoBranchPicker extends Polymer.mixinBehaviors( [ Gerrit.URLEncodingBehavior, ], Polymer.GestureEventListeners( Polymer.LegacyElementMixin( Polymer.Element))) { static get is() { return 'gr-repo-branch-picker'; } static get properties() { return { repo: { type: String, notify: true, observer: '_repoChanged', }, branch: { type: String, notify: true, }, _branchDisabled: Boolean, _query: { type: Function, value() { return this._getRepoBranchesSuggestions.bind(this); }, }, _repoQuery: { type: Function, value() { return this._getRepoSuggestions.bind(this); }, }, }; } attached() { super.attached(); if (this.repo) { this.$.repoInput.setText(this.repo); } } ready() { super.ready(); this._branchDisabled = !this.repo; } _getRepoBranchesSuggestions(input) { if (!this.repo) { return Promise.resolve([]); } if (input.startsWith(REF_PREFIX)) { input = input.substring(REF_PREFIX.length); } return this.$.restAPI.getRepoBranches(input, this.repo, SUGGESTIONS_LIMIT) .then(this._branchResponseToSuggestions.bind(this)); } _getRepoSuggestions(input) { return this.$.restAPI.getRepos(input, SUGGESTIONS_LIMIT) .then(this._repoResponseToSuggestions.bind(this)); } _repoResponseToSuggestions(res) { return res.map(repo => { return { name: repo.name, value: this.singleDecodeURL(repo.id), }; }); } _branchResponseToSuggestions(res) { return Object.keys(res).map(key => { let branch = res[key].ref; if (branch.startsWith(REF_PREFIX)) { branch = branch.substring(REF_PREFIX.length); } return {name: branch, value: branch}; }); } _repoCommitted(e) { this.repo = e.detail.value; } _branchCommitted(e) { this.branch = e.detail.value; } _repoChanged() { this.$.branchInput.clear(); this._branchDisabled = !this.repo; } } customElements.define(GrRepoBranchPicker.is, GrRepoBranchPicker); })();