blob: 578c9a37c9ea2a80a59ad6fd6d8f8bb37c542e92 [file] [log] [blame]
/**
* @module modules/favorites-sk
* @description <h2><code>favorites-sk</code></h2>
*
* @evt
*
* @attr
*
* @example
*/
import { html } from 'lit-html';
import { define } from '../../../elements-sk/modules/define';
import { ElementSk } from '../../../infra-sk/modules/ElementSk';
import { jsonOrThrow } from '../../../infra-sk/modules/jsonOrThrow';
import { Favorites } from '../json';
import '../window/window';
import { errorMessage } from '../../../elements-sk/modules/errorMessage';
export class FavoritesSk extends ElementSk {
private favoritesConfig: Favorites | null = null;
constructor() {
super(FavoritesSk.template);
}
private static template = (ele: FavoritesSk) => html`
<header><h1 class="name">Favorites</h1></header>
<hr />
${ele.getSectionsTemplate()}
`;
private getSectionsTemplate() {
const sections = this.favoritesConfig?.sections;
if (sections == null || sections.length === 0) {
return html`No favorites have been configured for this instance.`;
}
return html`${sections.map(
(section) =>
html` <div class="section">
<h3>${section.name}</h3>
<table>
<tr>
<th>Link</th>
<th>Description</th>
</tr>
${section.links?.map(
(link) => html`
<tr>
<td><a href=${link.href}>${link.text}</a></td>
<td>${link.description}</td>
</tr>
`
)}
</table>
</div>
<hr />`
)}`;
}
async connectedCallback(): Promise<void> {
super.connectedCallback();
this._render();
if (this.favoritesConfig == null) {
try {
const response = await fetch('/_/favorites/');
const json = await jsonOrThrow(response);
this.favoritesConfig = json;
this._render();
} catch (error) {
errorMessage(String(error));
}
}
}
}
define('favorites-sk', FavoritesSk);