import type { RegisterClientOptions } from '@peertube/peertube-types/client' import { html, LitElement } from 'lit' import { customElement, property, state } from 'lit/decorators.js' import { ptTr } from '../directives/translation' import './help-button' import { Task } from '@lit/task'; import type { ChannelLiveChatInfos } from 'shared/lib/types' import { ChannelDetailsService } from '../services/channel-details' import { provide } from '@lit/context' import { getGlobalStyleSheets } from '../../global-styles' import { channelDetailsServiceContext, registerClientOptionsContext } from '../contexts/channel' @customElement('channel-home') export class ChannelHomeElement extends LitElement { @provide({ context: registerClientOptionsContext }) @property({ attribute: false }) public registerClientOptions: RegisterClientOptions | undefined @state() public _channels: ChannelLiveChatInfos[] | undefined @provide({ context: channelDetailsServiceContext }) private _channelDetailsService: ChannelDetailsService | undefined static styles = [ ...getGlobalStyleSheets() ]; @state() public _formStatus: boolean | any = undefined private _asyncTaskRender = new Task(this, { task: async ([registerClientOptions], {signal}) => { // Getting the current username in localStorage. Don't know any cleaner way to do. const username = window.localStorage.getItem('username') if (!username) { throw new Error('Can\'t get the current username.') } if (this.registerClientOptions) { this._channelDetailsService = new ChannelDetailsService(this.registerClientOptions) this._channels = await this._channelDetailsService.fetchUserChannels(username) } }, args: () => [this.registerClientOptions] }); render = () => { return this._asyncTaskRender.render({ complete: () => html`

${ptTr(LOC_LIVECHAT_CONFIGURATION_TITLE)}

${ptTr(LOC_LIVECHAT_CONFIGURATION_DESC)}

${ptTr(LOC_LIVECHAT_CONFIGURATION_PLEASE_SELECT)}

` }) } }