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 { Draggable, DraggableState } from "../draggable"; 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"; interface Props { className?: string; } @observer export class Dock extends React.Component { onResizeStart = () => { const { isOpen, open, setHeight, minHeight } = dockStore; if (!isOpen) { open(); setHeight(minHeight); } } onResize = ({ offsetY }: DraggableState) => { const { isOpen, close, height, setHeight, minHeight, defaultHeight } = dockStore; const newHeight = height + offsetY; if (height > newHeight && newHeight < minHeight) { setHeight(defaultHeight); close(); } else if (isOpen) { setHeight(newHeight); } } onKeydown = (evt: React.KeyboardEvent) => { const { close, closeTab, selectedTab, fullSize, toggleFillSize } = 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 }/> } } renderTabContent() { const { isOpen, height, selectedTab: tab } = dockStore; if (!isOpen || !tab) return; return (
{isCreateResourceTab(tab) && } {isEditResourceTab(tab) && } {isInstallChartTab(tab) && } {isUpgradeChartTab(tab) && } {isTerminalTab(tab) && }
) } render() { const { className } = this.props; const { isOpen, toggle, tabs, toggleFillSize, selectedTab, hasTabs, fullSize } = dockStore; return (
{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()}
) } }