| /** | 
 |  * @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-included-in-dialog', | 
 |     _legacyUndefinedCheck: true, | 
 |  | 
 |     /** | 
 |      * Fired when the user presses the close button. | 
 |      * | 
 |      * @event close | 
 |      */ | 
 |  | 
 |     properties: { | 
 |       /** @type {?} */ | 
 |       changeNum: { | 
 |         type: Object, | 
 |         observer: '_resetData', | 
 |       }, | 
 |       /** @type {?} */ | 
 |       _includedIn: Object, | 
 |       _loaded: { | 
 |         type: Boolean, | 
 |         value: false, | 
 |       }, | 
 |       _filterText: { | 
 |         type: String, | 
 |         value: '', | 
 |       }, | 
 |     }, | 
 |  | 
 |     loadData() { | 
 |       if (!this.changeNum) { return; } | 
 |       this._filterText = ''; | 
 |       return this.$.restAPI.getChangeIncludedIn(this.changeNum).then( | 
 |           configs => { | 
 |             if (!configs) { return; } | 
 |             this._includedIn = configs; | 
 |             this._loaded = true; | 
 |           }); | 
 |     }, | 
 |  | 
 |     _resetData() { | 
 |       this._includedIn = null; | 
 |       this._loaded = false; | 
 |     }, | 
 |  | 
 |     _computeGroups(includedIn, filterText) { | 
 |       if (!includedIn) { return []; } | 
 |  | 
 |       const filter = item => !filterText.length || | 
 |           item.toLowerCase().indexOf(filterText.toLowerCase()) !== -1; | 
 |  | 
 |       const groups = [ | 
 |         {title: 'Branches', items: includedIn.branches.filter(filter)}, | 
 |         {title: 'Tags', items: includedIn.tags.filter(filter)}, | 
 |       ]; | 
 |       if (includedIn.external) { | 
 |         for (const externalKey of Object.keys(includedIn.external)) { | 
 |           groups.push({ | 
 |             title: externalKey, | 
 |             items: includedIn.external[externalKey].filter(filter), | 
 |           }); | 
 |         } | 
 |       } | 
 |       return groups.filter(g => g.items.length); | 
 |     }, | 
 |  | 
 |     _handleCloseTap(e) { | 
 |       e.preventDefault(); | 
 |       this.fire('close', null, {bubbles: false}); | 
 |     }, | 
 |  | 
 |     _computeLoadingClass(loaded) { | 
 |       return loaded ? 'loading loaded' : 'loading'; | 
 |     }, | 
 |  | 
 |     _onFilterChanged() { | 
 |       this.debounce('filter-change', () => { | 
 |         this._filterText = this.$.filterInput.bindValue; | 
 |       }, 100); | 
 |     }, | 
 |   }); | 
 | })(); |