mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-14 02:47:49 +00:00
59 lines
1.2 KiB
TypeScript
59 lines
1.2 KiB
TypeScript
import type WebView from "./webview";
|
|
|
|
export interface TabProps {
|
|
role: string;
|
|
icon?: string;
|
|
name: string;
|
|
$root: Element;
|
|
onClick: () => void;
|
|
index: number;
|
|
tabIndex: number;
|
|
onHover?: () => void;
|
|
onHoverOut?: () => void;
|
|
webview: WebView;
|
|
materialIcon?: string;
|
|
onDestroy?: () => void;
|
|
}
|
|
|
|
export default abstract class Tab {
|
|
props: TabProps;
|
|
webview: WebView;
|
|
abstract $el: Element;
|
|
|
|
constructor(props: TabProps) {
|
|
this.props = props;
|
|
this.webview = this.props.webview;
|
|
}
|
|
|
|
registerListeners(): void {
|
|
this.$el.addEventListener("click", this.props.onClick);
|
|
|
|
if (this.props.onHover !== undefined) {
|
|
this.$el.addEventListener("mouseover", this.props.onHover);
|
|
}
|
|
|
|
if (this.props.onHoverOut !== undefined) {
|
|
this.$el.addEventListener("mouseout", this.props.onHoverOut);
|
|
}
|
|
}
|
|
|
|
showNetworkError(): void {
|
|
this.webview.forceLoad();
|
|
}
|
|
|
|
activate(): void {
|
|
this.$el.classList.add("active");
|
|
this.webview.load();
|
|
}
|
|
|
|
deactivate(): void {
|
|
this.$el.classList.remove("active");
|
|
this.webview.hide();
|
|
}
|
|
|
|
destroy(): void {
|
|
this.$el.remove();
|
|
this.webview.$el!.remove();
|
|
}
|
|
}
|