import "./dock.scss"; import React, { Fragment } from "react"; import { observer } from "mobx-react"; import { Trans } from "@lingui/macro"; import { autobind, cssNames, prevDefault } from "../../utils"; import { ResizingAnchor, ResizeDirection } from "../resizing-anchor"; import { Icon } from "../icon"; import { Tabs } from "../tabs/tabs"; import { MenuItem } from "../menu"; import { MenuActions } from "../menu/menu-actions"; import { dockStore, IDockTab } from "./dock.store"; import { DockTab } from "./dock-tab"; import { TerminalTab } from "./terminal-tab"; import { TerminalWindow } from "./terminal-window"; import { CreateResource } from "./create-resource"; import { InstallChart } from "./install-chart"; import { EditResource } from "./edit-resource"; import { UpgradeChart } from "./upgrade-chart"; import { createTerminalTab, isTerminalTab } from "./terminal.store"; import { createResourceTab, isCreateResourceTab } from "./create-resource.store"; import { isEditResourceTab } from "./edit-resource.store"; import { isInstallChartTab } from "./install-chart.store"; import { isUpgradeChartTab } from "./upgrade-chart.store"; import { PodLogs } from "./pod-logs"; import { isPodLogsTab } from "./pod-logs.store"; interface Props { className?: string; } @observer export class Dock extends React.Component { onKeydown = (evt: React.KeyboardEvent) => { const { close, closeTab, selectedTab } = dockStore; if (!selectedTab) return; const { code, ctrlKey, shiftKey } = evt.nativeEvent; if (shiftKey && code === "Escape") { close(); } if (ctrlKey && code === "KeyW") { if (selectedTab.pinned) close(); else closeTab(selectedTab.id); } } onChangeTab = (tab: IDockTab) => { const { open, selectTab } = dockStore; open(); selectTab(tab.id); } @autobind() renderTab(tab: IDockTab) { if (isTerminalTab(tab)) { return } if (isCreateResourceTab(tab) || isEditResourceTab(tab)) { return } if (isInstallChartTab(tab) || isUpgradeChartTab(tab)) { return } /> } if (isPodLogsTab(tab)) { return } } renderTabContent() { const { isOpen, height, selectedTab: tab } = dockStore; if (!isOpen || !tab) return; return (
{isCreateResourceTab(tab) && } {isEditResourceTab(tab) && } {isInstallChartTab(tab) && } {isUpgradeChartTab(tab) && } {isTerminalTab(tab) && } {isPodLogsTab(tab) && }
) } render() { const { className } = this.props; const { isOpen, toggle, tabs, toggleFillSize, selectedTab, hasTabs, fullSize } = dockStore; return (
dockStore.height} minExtent={dockStore.minHeight} maxExtent={dockStore.maxHeight} direction={ResizeDirection.VERTICAL} onStart={dockStore.open} onMinExtentSubceed={dockStore.close} onMinExtentExceed={dockStore.open} onDrag={dockStore.setHeight} />
{this.renderTab(tab)})} />
New tab }} closeOnScroll={false}> createTerminalTab()}> Terminal session createResourceTab()}> Create resource
{hasTabs() && ( <> Exit full size mode : Fit to window} onClick={toggleFillSize} /> Minimize : Open} onClick={toggle} /> )}
{this.renderTabContent()}
) } }