import * as React from 'react'; import { Button } from '@blueprintjs/core'; import { MosaicContext, MosaicRootActions, MosaicWindowContext, } from 'react-mosaic-component'; import { EditorId } from '../../interfaces'; import { AppState } from '../state'; interface ToolbarButtonProps { appState: AppState; id: EditorId; } abstract class ToolbarButton extends React.PureComponent { public static contextType = MosaicWindowContext; public context: MosaicWindowContext; constructor(props: ToolbarButtonProps) { super(props); } public render() { return ( {({ mosaicActions }) => this.createButton(mosaicActions)} ); } /** * Create a button that performs the actual action */ public abstract createButton( _mosaicActions: MosaicRootActions, ): React.ReactNode; } export class MaximizeButton extends ToolbarButton { /** * Create a button that can expand this panel */ public createButton(mosaicActions: MosaicRootActions) { const onClick = () => { mosaicActions.expand(this.context.mosaicWindowActions.getPath()); }; return