import "./dock-tab.scss"; import React from "react"; import { observer } from "mobx-react"; import { autobind, cssNames, prevDefault } from "../../utils"; import { dockStore, IDockTab } from "./dock.store"; import { Tab, TabProps } from "../tabs"; import { Icon } from "../icon"; import { Menu, MenuItem } from "../menu"; import { observable } from "mobx"; export interface DockTabProps extends TabProps { moreActions?: React.ReactNode; } @observer export class DockTab extends React.Component { @observable menuVisible = false; get tabId() { return this.props.value.id; } @autobind() close() { dockStore.closeTab(this.tabId); } renderMenu() { const { closeTab, closeAllTabs, closeOtherTabs, closeTabsToTheRight, tabs, getTabIndex } = dockStore; const closeAllDisabled = tabs.length === 1; const closeOtherDisabled = tabs.length === 1; const closeRightDisabled = getTabIndex(this.tabId) === tabs.length - 1; return ( this.menuVisible = true} close={() => this.menuVisible = false} toggleEvent="contextmenu" > closeTab(this.tabId)}> Close closeAllTabs()} disabled={closeAllDisabled}> Close all tabs closeOtherTabs(this.tabId)} disabled={closeOtherDisabled}> Close other tabs closeTabsToTheRight(this.tabId)} disabled={closeRightDisabled}> Close tabs to the right ); } render() { const { className, moreActions, ...tabProps } = this.props; const { title, pinned } = tabProps.value; const label = (
{title} {moreActions} {!pinned && ( )}
); return ( <> this.menuVisible = true} label={label} /> {this.renderMenu()} ); } }