@rxdi/ui-components
Version:
UI Components for building graphql-server website
53 lines (46 loc) • 1.3 kB
text/typescript
import { LitElement, Component, html, property, async } from '@rxdi/lit-html';
import { style } from './toc.component.css';
import { Inject } from '@rxdi/core';
import { MarkdownParserMenuProvider } from '../markdown-reader-menu.provider';
import { map, filter } from 'rxjs/operators';
import { TocInterface } from './toc.interface';
/**
* @customElement toc-component
*/
({
selector: 'toc-component',
style,
template(this: TocComponent) {
return html`
<div class="toc-wrapper">
<ul>
${async(this.menus)}
</ul>
</div>
`;
}
})
export class TocComponent extends LitElement {
() opened = true;
(MarkdownParserMenuProvider)
private menuProvider: MarkdownParserMenuProvider;
private menus = this.menuProvider.menu.pipe(
filter(() => !!this.opened),
map(menus => this.createMenusTemplate(menus))
);
private clickAnchor(element: HTMLElement) {
this.menuProvider.navigateToAnchor(element);
}
private createMenusTemplate(menus: TocInterface[]) {
return html`
${menus.map(i => this.createSingleItem(i))}
`;
}
private createSingleItem(item: TocInterface) {
return html`
<li @click=${() => this.clickAnchor(item.elementRef)}>
${item.title}
</li>
`;
}
}