| 2 | import _ from 'lodash' |
| 3 | |
| 4 | const block = (tag, props={}) => { |
| 5 | const app = window.__app__ |
| 6 | |
| 7 | const blocks = app.get('blocks') |
| 8 | if(blocks[tag] !== undefined) { |
| 9 | const nodes = blocks[tag].reduce((prev, block) => { |
| 10 | const ret = block({ nodes: prev, ...props }) |
| 11 | if(ret != undefined && ret != null && ret != prev) { |
| 12 | if(Array.isArray(ret)) { |
| 13 | prev = prev.concat(ret.map(c => React.cloneElement(c, props))) |
| 14 | } else if(React.isValidElement(ret)) { |
| 15 | prev.push(React.cloneElement(ret, props)) |
| 16 | } |
| 17 | } |
| 18 | return prev |
| 19 | }, []) |
| 20 | if(nodes.length && nodes.filter(node => node !== null).length > 0) { |
| 21 | return nodes |
| 22 | } |
| 23 | } |
| 24 | return null |
| 25 | } |
| 26 | |
| 27 | const Block = ({ name, children, ...props }) => { |
| 28 | const bs = block(name, props) |