mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-14 13:03:07 +00:00
60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import baseRendererFactory from './base';
|
||
import { IBaseRendererProps, IBaseRenderComponent } from '../types';
|
||
|
||
export default function pageRendererFactory(): IBaseRenderComponent {
|
||
const BaseRenderer = baseRendererFactory();
|
||
return class PageRenderer extends BaseRenderer {
|
||
static dislayName = 'page-renderer';
|
||
|
||
__namespace = 'page';
|
||
|
||
__afterInit(props: IBaseRendererProps, ...rest: unknown[]) {
|
||
this.__generateCtx({
|
||
page: this,
|
||
});
|
||
const schema = props.__schema || {};
|
||
this.state = this.__parseData(schema.state || {});
|
||
this.__initDataSource(props);
|
||
this.__excuteLifeCycleMethod('constructor', [props, ...rest]);
|
||
}
|
||
|
||
async componentDidUpdate(prevProps: IBaseRendererProps, _prevState: {}, snapshot: unknown) {
|
||
const { __ctx } = this.props;
|
||
const prevState = this.__parseData(prevProps.__schema.state, __ctx);
|
||
const newState = this.__parseData(this.props.__schema.state, __ctx);
|
||
// 当编排的时候修改schema.state值,需要将最新schema.state值setState
|
||
if (JSON.stringify(newState) != JSON.stringify(prevState)) {
|
||
this.setState(newState);
|
||
}
|
||
|
||
super.componentDidUpdate?.(prevProps, _prevState, snapshot);
|
||
}
|
||
|
||
render() {
|
||
const { __schema, __components } = this.props;
|
||
if (this.__checkSchema(__schema)) {
|
||
return '页面schema结构异常!';
|
||
}
|
||
this.__debug(`${PageRenderer.dislayName} render - ${__schema.fileName}`);
|
||
|
||
this.__bindCustomMethods(this.props);
|
||
this.__initDataSource(this.props);
|
||
|
||
// this.__excuteLifeCycleMethod('constructor', arguments);
|
||
|
||
this.__generateCtx({
|
||
page: this,
|
||
});
|
||
this.__render();
|
||
|
||
|
||
const { Page } = __components;
|
||
if (Page) {
|
||
return this.__renderComp(Page, { pageContext: this });
|
||
}
|
||
|
||
return this.__renderContent(this.__renderContextProvider({ pageContext: this }));
|
||
}
|
||
};
|
||
}
|