import "../dock/src/dock/dock.scss"; import React from "react"; import { observer } from "mobx-react"; import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { MenuActions } from "../menu/menu-actions"; import { ResizeDirection, ResizingAnchor } from "../resizing-anchor"; import { DockTabs } from "./dock-tabs"; import type { DockStore, DockTab } from "./store"; import { withInjectables } from "@ogre-tools/injectable-react"; import dockStoreInjectable from "./store.injectable"; import { ErrorBoundary } from "../error-boundary"; export interface DockProps { className?: string; } interface Dependencies { dockStore: DockStore; } enum Direction { NEXT = 1, PREV = -1, } @observer class NonInjectedDock extends React.Component { private readonly element = React.createRef(); onChangeTab = (tab: DockTab) => { const { open, selectTab } = this.props.dockStore; open(); selectTab(tab.id); this.element.current?.focus(); }; switchToNextTab = (selectedTab: DockTab, direction: Direction) => { const { tabs } = this.props.dockStore; const currentIndex = tabs.indexOf(selectedTab); const nextIndex = currentIndex + direction; // check if moving to the next or previous tab is possible. if (nextIndex >= tabs.length || nextIndex < 0) { return; } const nextElement = tabs[nextIndex]; this.onChangeTab(nextElement); }; renderTab(tab: DockTab) { switch (tab.kind) { } } renderTabContent() { const { isOpen, height, selectedTab } = this.props.dockStore; if (!isOpen || !selectedTab) { return null; } return (
{this.renderTab(selectedTab)}
); } render() { const { className, dockStore } = this.props; const { isOpen, toggle, tabs, toggleFillSize, selectedTab, hasTabs, fullSize } = this.props.dockStore; return (
dockStore.height} minExtent={dockStore.minHeight} maxExtent={dockStore.maxHeight} direction={ResizeDirection.VERTICAL} onStart={dockStore.open} onMinExtentSubceed={dockStore.close} onMinExtentExceed={dockStore.open} onDrag={(extent) => (dockStore.height = extent)} />
{hasTabs() && ( <> )}
{this.renderTabContent()}
); } } export const Dock = withInjectables( NonInjectedDock, { getProps: (di, props) => ({ dockStore: di.inject(dockStoreInjectable), ...props, }), }, );