import { DEFAULT_CONFIG } from "#common/api/config"; import { PaginatedResponse, TableColumn } from "#elements/table/Table"; import { TableModal } from "#elements/table/TableModal"; import { SlottedTemplateResult } from "#elements/types"; import { Application, Endpoint, RacApi } from "@goauthentik/api"; import { msg } from "@lit/localize"; import { html, TemplateResult } from "lit"; import { customElement, property } from "lit/decorators.js"; @customElement("ak-library-rac-endpoint-launch") export class RACLaunchEndpointModal extends TableModal { clickable = true; protected override searchEnabled = true; protected override rowClickListener(item: Endpoint, event?: InputEvent | PointerEvent) { if (!item.launchUrl) { return super.rowClickListener(item, event); } const target = this.app?.openInNewTab ? `ak-rac-endpoint-${item.name}` : "_self"; window.open(item.launchUrl, target); } @property({ attribute: false }) app?: Application; async apiEndpoint(): Promise> { const endpoints = await new RacApi(DEFAULT_CONFIG).racEndpointsList({ ...(await this.defaultEndpointConfig()), provider: this.app?.provider || 0, }); if (this.open && endpoints.pagination.count === 1) { this.rowClickListener(endpoints.results[0]); this.open = false; } return endpoints; } protected columns: TableColumn[] = [ // --- [msg("Name")], ]; row(item: Endpoint): SlottedTemplateResult[] { return [html`${item.name}`]; } renderModalInner(): TemplateResult { return html`

${msg("Select endpoint to connect to")}

${this.renderTable()}
`; } } declare global { interface HTMLElementTagNameMap { "ak-library-rac-endpoint-launch": RACLaunchEndpointModal; } }