| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {LitElement} from 'lit-element'; |
| import qs from 'qs'; |
| import {store, connectStore} from 'reducers/base.js'; |
| import * as userV0 from 'reducers/userV0.js'; |
| import * as projectV0 from 'reducers/projectV0.js'; |
| import * as sitewide from 'reducers/sitewide.js'; |
| |
| /** |
| * `<ezt-app-base>` |
| * |
| * Base component meant to simulate a subset of the work mr-app does on |
| * EZT pages in order to allow us to more easily glue web components |
| * on EZT pages to SPA web components. |
| * |
| */ |
| export class EztAppBase extends connectStore(LitElement) { |
| /** @override */ |
| static get properties() { |
| return { |
| projectName: {type: String}, |
| userDisplayName: {type: String}, |
| }; |
| } |
| |
| /** @override */ |
| connectedCallback() { |
| super.connectedCallback(); |
| |
| this.mapUrlToQueryParams(); |
| } |
| |
| /** @override */ |
| updated(changedProperties) { |
| if (changedProperties.has('userDisplayName') && this.userDisplayName) { |
| this.fetchUserData(this.userDisplayName); |
| } |
| |
| if (changedProperties.has('projectName') && this.projectName) { |
| this.fetchProjectData(this.projectName); |
| } |
| } |
| |
| fetchUserData(displayName) { |
| store.dispatch(userV0.fetch(displayName)); |
| } |
| |
| fetchProjectData(projectName) { |
| store.dispatch(projectV0.select(projectName)); |
| store.dispatch(projectV0.fetch(projectName)); |
| } |
| |
| mapUrlToQueryParams() { |
| const params = qs.parse((window.location.search || '').substr(1)); |
| |
| store.dispatch(sitewide.setQueryParams(params)); |
| } |
| } |
| customElements.define('ezt-app-base', EztAppBase); |