blob: 821f9874f52b89abf8ba9f3f4b14cad9746a926a [file] [log] [blame]
import { LitElement, html, css } from 'lit';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { customElement, property } from 'lit/decorators.js';
import { map } from 'lit/directives/map.js';
import { ListDashboardResponse } from './gen/pb/api/v1/data.js';
import '@material/mwc-button';
import '@material/mwc-list';
@customElement('testgrid-index')
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export class TestgridIndex extends LitElement {
@property({ type: String }) title: string = 'My app';
@property({ type: Array<string> }) dashboards: Array<string> = [];
// TODO(chases2): inject an APIClient object so we can inject it into tests/storybook later
render() {
return html`
<mwc-list>
${map(this.dashboards, (dash: string, index: number) => {
if (index !== 0) {
return html`
<li divider role="separator"></li>
<mwc-list-item>${dash}</mwc-list-item>
`;
}
return html`<mwc-list-item>${dash}</mwc-list-item>`;
})}
</mwc-list>
<mwc-button raised @click="${this.getDashboards}">Call API</mwc-button>
`;
}
getDashboards() {
this.dashboards = ['Loading...'];
fetch('http://localhost:8080/api/v1/dashboards').then(async response => {
const resp = ListDashboardResponse.fromJson(await response.json());
this.dashboards = [];
resp.dashboards.forEach(db => {
this.dashboards.push(db.name);
});
});
}
static styles = css`
:host {
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: flex-start;
font-size: calc(10px + 2vmin);
color: #1a2b42;
max-width: 960px;
margin: 0 auto;
text-align: center;
background-color: var(--example-app-background-color);
}
`;
}