import React from 'react'; interface GUmiUIFlagProps { filename: string; data: any; index: number; inline: boolean; } interface GUmiUIFlagState { visible: boolean; hovered: boolean; } export default class GUmiUIFlag extends React.Component { constructor(props) { super(props); this.state = { hovered: false, visible: false, }; } handleMessage = event => { try { const { action } = JSON.parse(event.data); switch (action) { case 'umi.ui.enableBlockEditMode': this.setState({ visible: true, }); break; case 'umi.ui.disableBlockEditMode': this.setState({ visible: false, }); break; case 'umi.ui.enable.GUmiUIFlag': this.setState({ visible: true, }); break; default: break; } } catch (_) {} }; componentDidMount() { window.addEventListener('message', this.handleMessage, false); } componentWillUnmount() { window.removeEventListener('message', this.handleMessage, false); } toggleHover = () => { this.setState(({ hovered }) => ({ hovered: !hovered, })); }; clickHandler = () => { const { filename, index } = this.props; const el = document.getElementById('umi-ui-bubble') as HTMLIFrameElement; if (el && el.contentWindow) { el.contentWindow.postMessage( JSON.stringify({ action: 'umi.ui.block.addBlock', payload: { filename, index, }, }), '*', ); } }; render() { const { inline, children } = this.props; const { visible, hovered } = this.state; if (!visible) return children || null; return ( <>
Add to here
{children} ); } }