| /** | 
 |  * @license | 
 |  * Copyright (C) 2021 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 {customElement, property, state} from 'lit/decorators'; | 
 | import {LitElement, html, PropertyValues} from 'lit'; | 
 | import {AppElementTopicParams} from '../gr-app-types'; | 
 | import {getAppContext} from '../../services/app-context'; | 
 | import {KnownExperimentId} from '../../services/flags/flags'; | 
 | import {GerritNav} from '../core/gr-navigation/gr-navigation'; | 
 | import {GerritView} from '../../services/router/router-model'; | 
 | import './gr-topic-summary'; | 
 | import './gr-topic-tree'; | 
 |  | 
 | /** | 
 |  * A page showing all information about a topic and changes that are related | 
 |  * to that topic. | 
 |  */ | 
 | @customElement('gr-topic-view') | 
 | export class GrTopicView extends LitElement { | 
 |   @property({type: Object}) | 
 |   params?: AppElementTopicParams; | 
 |  | 
 |   @state() | 
 |   topicName?: string; | 
 |  | 
 |   private readonly flagsService = getAppContext().flagsService; | 
 |  | 
 |   override willUpdate(changedProperties: PropertyValues) { | 
 |     if (changedProperties.has('params')) { | 
 |       this.paramsChanged(); | 
 |     } | 
 |   } | 
 |  | 
 |   override render() { | 
 |     if (this.topicName === undefined) { | 
 |       return; | 
 |     } | 
 |     // TODO: Add topic selector | 
 |     return html` | 
 |       <gr-topic-summary .topicName=${this.topicName}></gr-topic-summary> | 
 |       <gr-topic-tree .topicName=${this.topicName}></gr-topic-tree> | 
 |     `; | 
 |   } | 
 |  | 
 |   paramsChanged() { | 
 |     if (this.params?.view !== GerritView.TOPIC) return; | 
 |     this.topicName = this.params?.topic; | 
 |     if ( | 
 |       !this.flagsService.isEnabled(KnownExperimentId.TOPICS_PAGE) && | 
 |       this.topicName | 
 |     ) { | 
 |       GerritNav.navigateToSearchQuery(`topic:${this.topicName}`); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | declare global { | 
 |   interface HTMLElementTagNameMap { | 
 |     'gr-topic-view': GrTopicView; | 
 |   } | 
 | } |