import "./main-layout.scss"; import React from "react"; import { observable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import { createStorage, cssNames } from "../../utils"; import { Sidebar } from "./sidebar"; import { ErrorBoundary } from "../error-boundary"; import { Dock } from "../dock"; import { getHostedCluster } from "../../../common/cluster-store"; interface Props { className?: any; footer?: React.ReactNode; headerClass?: string; footerClass?: string; } @observer export class MainLayout extends React.Component { public storage = createStorage("main_layout", { pinnedSidebar: true }); @observable isPinned = this.storage.get().pinnedSidebar; @observable isAccessible = true; @disposeOnUnmount syncPinnedStateWithStorage = reaction( () => this.isPinned, (isPinned) => this.storage.merge({ pinnedSidebar: isPinned }) ); toggleSidebar = () => { this.isPinned = !this.isPinned; this.isAccessible = false; setTimeout(() => (this.isAccessible = true), 250); }; render() { const { className, headerClass, footer, footerClass, children } = this.props; const cluster = getHostedCluster(); if (!cluster) { return null; // fix: skip render when removing active (visible) cluster } return (
{cluster.preferences.clusterName || cluster.contextName}
{children}
); } }