import type {HTML} from "../../../common/html"; import {html} from "../../../common/html"; import {ipcRenderer} from "../typed-ipc-renderer"; import {generateNodeFromHTML} from "./base"; import type {TabProps} from "./tab"; import Tab from "./tab"; import type WebView from "./webview"; export interface ServerTabProps extends TabProps { webview: Promise; } export default class ServerTab extends Tab { webview: Promise; $el: Element; $badge: Element; constructor({webview, ...props}: ServerTabProps) { super(props); this.webview = webview; this.$el = generateNodeFromHTML(this.templateHTML()); this.props.$root.append(this.$el); this.registerListeners(); this.$badge = this.$el.querySelector(".server-tab-badge")!; } override async activate(): Promise { await super.activate(); (await this.webview).load(); } override async deactivate(): Promise { await super.deactivate(); (await this.webview).hide(); } override async destroy(): Promise { await super.destroy(); (await this.webview).$el.remove(); } templateHTML(): HTML { return html`
${this.generateShortcutText()}
`; } updateBadge(count: number): void { if (count > 0) { const formattedCount = count > 999 ? "1K+" : count.toString(); this.$badge.textContent = formattedCount; this.$badge.classList.add("active"); } else { this.$badge.classList.remove("active"); } } generateShortcutText(): string { // Only provide shortcuts for server [0..9] if (this.props.index >= 9) { return ""; } const shownIndex = this.props.index + 1; // Array index == Shown index - 1 ipcRenderer.send("switch-server-tab", shownIndex - 1); return process.platform === "darwin" ? `⌘${shownIndex}` : `Ctrl+${shownIndex}`; } }