/// import * as React from 'react' import * as ReactDOM from 'react-dom' import * as typings from './gaea.type' import {observer, Provider} from 'mobx-react' import ApplicationStore from './store/application' import ViewportStore from './store/viewport' import Setting from './store/setting' import Page from './page/page.component' @observer export default class Gaea extends React.Component { static defaultProps: typings.PropsDefine = new typings.Props() public state: typings.StateDefine = new typings.State() private applicationStore = new ApplicationStore() private viewport = new ViewportStore(this.applicationStore) private setting = new Setting() private handleOnSaveBind = this.handleOnSave.bind(this) componentWillMount() { // 将初始化的 props 赋值到 store 上 this.setPropsToApplication.call(this, this.props) // 监听 this.addListener.call(this) } componentWillUnmount() { // 移除监听 this.removeListener.call(this) } componentWillReceiveProps(nextProps: typings.PropsDefine) { // TODO 别每次都更新啊,要 shadowEqual 判断下是否相等 // 再覆盖初始化数据 this.setPropsToApplication.call(this, nextProps) // 因为初始化数据不会自动更新,所以要 forceUpdate 一下 this.forceUpdate() } /** * 将 props 赋值到 store 中 */ setPropsToApplication(props: typings.PropsDefine) { this.applicationStore.setInitPropsToApplication({ title: props.title, baseComponents: this.props.baseComponents, customComponents: props.customComponents, isHideCustomComponents: props.isHideCustomComponents, height: props.height, // 页面编辑信息 defaultValue: props.defaultValue, isReactNative:props.isReactNative }) } /** * 获取根节点 ref */ getRootRef(ref: React.ReactInstance) { this.viewport.setRootDomInstance(ReactDOM.findDOMNode(ref)) } /** * 添加监听 */ addListener() { this.applicationStore.event.on(this.applicationStore.event.onSave, this.handleOnSaveBind) } /** * 移除监听 */ removeListener() { this.applicationStore.event.off(this.applicationStore.event.onSave, this.handleOnSaveBind) } /** * 触发保存 */ handleOnSave(context: any, componentsInfo: { [mapUniqueKey: string]: FitGaea.ViewportComponentInfo }) { this.props.onSave(componentsInfo) } render() { return (
) } }