| /** | 
 |  * @license | 
 |  * Copyright 2020 Google LLC | 
 |  * SPDX-License-Identifier: Apache-2.0 | 
 |  */ | 
 | import {Observable} from 'rxjs'; | 
 | import {Model} from '../../models/model'; | 
 | import {select} from '../../utils/observable-util'; | 
 | import {define} from '../../models/dependency'; | 
 |  | 
 | export enum GerritView { | 
 |   ADMIN = 'admin', | 
 |   AGREEMENTS = 'agreements', | 
 |   CHANGE = 'change', | 
 |   DASHBOARD = 'dashboard', | 
 |   DOCUMENTATION_SEARCH = 'documentation-search', | 
 |   GROUP = 'group', | 
 |   PLUGIN_SCREEN = 'plugin-screen', | 
 |   REPO = 'repo', | 
 |   SEARCH = 'search', | 
 |   SETTINGS = 'settings', | 
 | } | 
 |  | 
 | // TODO: Consider renaming this to AppElementState or something similar. | 
 | // Or maybe RootViewState. This class does *not* model the state of the router. | 
 | export interface RouterState { | 
 |   // Note that this router model view must be updated before view model state. | 
 |   view?: GerritView; | 
 | } | 
 |  | 
 | export const routerModelToken = define<RouterModel>('router-model'); | 
 |  | 
 | // TODO: Consider renaming this to AppElementViewModel or something similar. | 
 | // Or maybe RootViewModel. This class is *not* a view model of the router. | 
 | export class RouterModel extends Model<RouterState> { | 
 |   readonly routerView$: Observable<GerritView | undefined> = select( | 
 |     this.state$, | 
 |     state => state.view | 
 |   ); | 
 |  | 
 |   constructor() { | 
 |     super({}); | 
 |   } | 
 | } |