mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 19:38:05 +00:00
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { getLogger } from '@alilc/lowcode-utils';
|
||
import baseRendererFactory from './base';
|
||
import { IBaseRendererProps, IBaseRenderComponent } from '../types';
|
||
|
||
const logger = getLogger({ level: 'warn', bizName: 'renderer-core:page' });
|
||
|
||
export default function pageRendererFactory(): IBaseRenderComponent {
|
||
const BaseRenderer = baseRendererFactory();
|
||
return class PageRenderer extends BaseRenderer {
|
||
static displayName = 'PageRenderer';
|
||
|
||
__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.__executeLifeCycleMethod('constructor', [props, ...rest]);
|
||
}
|
||
|
||
async componentDidUpdate(prevProps: IBaseRendererProps, _prevState: {}, snapshot: unknown) {
|
||
const { __ctx } = this.props;
|
||
// 当编排的时候修改 schema.state 值,需要将最新 schema.state 值 setState
|
||
if (JSON.stringify(prevProps.__schema.state) != JSON.stringify(this.props.__schema.state)) {
|
||
const newState = this.__parseData(this.props.__schema.state, __ctx);
|
||
this.setState(newState);
|
||
}
|
||
|
||
super.componentDidUpdate?.(prevProps, _prevState, snapshot);
|
||
}
|
||
|
||
setState(state: any, callback?: () => void) {
|
||
logger.info('page set state', state);
|
||
super.setState(state, callback);
|
||
}
|
||
|
||
render() {
|
||
const { __schema, __components } = this.props;
|
||
if (this.__checkSchema(__schema)) {
|
||
return '页面schema结构异常!';
|
||
}
|
||
this.__debug(`${PageRenderer.displayName} render - ${__schema.fileName}`);
|
||
|
||
this.__bindCustomMethods(this.props);
|
||
this.__initDataSource(this.props);
|
||
|
||
this.__generateCtx({
|
||
page: this,
|
||
});
|
||
this.__render();
|
||
|
||
const { Page } = __components;
|
||
if (Page) {
|
||
return this.__renderComp(Page, { pageContext: this });
|
||
}
|
||
|
||
return this.__renderContent(this.__renderContextProvider({ pageContext: this }));
|
||
}
|
||
};
|
||
}
|