import type {Html} from "../../../common/html"; import {html} from "../../../common/html"; import {generateNodeFromHtml} from "./base"; import type {TabProps} from "./tab"; import Tab from "./tab"; export interface FunctionalTabProps extends TabProps { $view: Element; } export default class FunctionalTab extends Tab { $view: Element; $el: Element; $closeButton?: Element; constructor({$view, ...props}: FunctionalTabProps) { super(props); this.$view = $view; this.$el = generateNodeFromHtml(this.templateHtml()); if (this.props.name !== "Settings") { this.props.$root.append(this.$el); this.$closeButton = this.$el.querySelector(".server-tab-badge")!; this.registerListeners(); } } override async activate(): Promise { await super.activate(); this.$view.classList.add("active"); } override async deactivate(): Promise { await super.deactivate(); this.$view.classList.remove("active"); } override async destroy(): Promise { await super.destroy(); this.$view.remove(); } templateHtml(): Html { return html`
close
${this.props.materialIcon}
`; } override registerListeners(): void { super.registerListeners(); this.$el.addEventListener("mouseover", () => { this.$closeButton?.classList.add("active"); }); this.$el.addEventListener("mouseout", () => { this.$closeButton?.classList.remove("active"); }); this.$closeButton?.addEventListener("click", (event: Event) => { this.props.onDestroy?.(); event.stopPropagation(); }); } }