import { html, css, LitElement, TemplateResult, CSSResult } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { choose } from 'lit/directives/choose.js'; import { SearchService } from '../src/search-service'; import { SearchServiceInterface } from '../src/search-service-interface'; import { SearchBackendOptionsInterface } from '../src/search-backend/search-backend-options'; import './item-detail-query'; import './search-query'; @customElement('app-root') export class AppRoot extends LitElement { @state() private searchServiceUrlOptions?: SearchBackendOptionsInterface = this.initSearchServiceUrlOptions(); @state() private queryType: 'search' | 'item' = 'search'; @state() private searchService: SearchServiceInterface = new SearchService( this.searchServiceUrlOptions ); private initSearchServiceUrlOptions() { const params = new URL(window.location.href).searchParams; return { baseUrl: params.get('search_base_url') ?? 'archive.org', servicePath: params.get('search_service_path') ?? undefined, debuggingEnabled: !!params.get('debugging'), }; } /** @inheritdoc */ render(): TemplateResult { return html`
${choose(this.queryType, [ ['search', () => this.searchTemplate], ['item', () => this.itemTemplate], ])} `; } onQueryTypeChange(event: Event): void { const target = event.target as HTMLInputElement; this.queryType = target.value as 'search' | 'item'; } private get itemTemplate(): TemplateResult { return html`