import React from "react" import classnames from "classnames" import { DOMWindow } from "components/RenderWindow" import "./index.less" class FloatingStackItem extends React.PureComponent { state = { renderError: null } componentDidCatch(error, info) { console.log(error, info) this.setState({ renderError: error, }) } render() { if (this.state.renderError) { return

Render Error

} return
{this.props.children}
} } export default class FloatingStack extends React.Component { state = { renders: [], globalVisibility: true, } public = { add: (id, render) => { try { if (!id) { console.error(`FloatingStack: id is required`) return false } if (!render) { console.error(`FloatingStack: render is required`) return false } if (this.state.renders.find((item) => item.id === id)) { console.error(`FloatingStack: id ${id} already exists`) return false } this.setState({ renders: [ ...this.state.renders, { id, render: React.createElement(render), }, ] }) return render } catch (error) { console.log(error) return null } }, remove: (id) => { this.setState({ renders: this.state.renders.filter((item) => { return item.id !== id }) }) return true }, toogleGlobalVisibility: (to) => { if (typeof to !== "boolean") { to = !this.state.globalVisibility } this.setState({ globalVisibility: to, }) } } componentDidMount() { window.app.layout.floatingStack = this.public } componentWillUnmount() { window.app.layout.floatingStack = null delete window.app.layout.floatingStack } render() { return
{ this.state.renders.map((item) => { return {item.render} }) }
} } export const createWithDom = () => { const dom = new DOMWindow({ id: "FloatingStack", }) dom.render() return dom }