mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-12 17:08:14 +00:00
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import baseRendererFactory from './base';
|
|
import { IRendererProps } from '../types';
|
|
|
|
export default function componentRendererFactory() {
|
|
const BaseRenderer = baseRendererFactory();
|
|
return class CompRenderer extends BaseRenderer {
|
|
static dislayName = 'comp-renderer';
|
|
|
|
__namespace = 'component';
|
|
|
|
__afterInit(props: IRendererProps) {
|
|
this.__generateCtx({
|
|
component: this,
|
|
});
|
|
const schema = props.__schema || {};
|
|
this.state = this.__parseData(schema.state || {});
|
|
this.__initDataSource(props);
|
|
this.__setLifeCycleMethods('constructor', arguments);
|
|
}
|
|
|
|
render() {
|
|
const { __schema, __components } = this.props;
|
|
if (this.__checkSchema(__schema)) {
|
|
return '自定义组件 schema 结构异常!';
|
|
}
|
|
this.__debug(`${CompRenderer.dislayName} render - ${__schema.fileName}`);
|
|
|
|
this.__generateCtx({
|
|
component: this,
|
|
});
|
|
this.__render();
|
|
|
|
const noContainer = this.__parseData(__schema.props?.noContainer);
|
|
|
|
if (noContainer) {
|
|
return this.__renderContextProvider({ compContext: this });
|
|
}
|
|
|
|
const Component = __components[__schema.componentName];
|
|
|
|
if (!Component) {
|
|
return this.__renderContent(this.__renderContextProvider({ compContext: this }));
|
|
}
|
|
|
|
return this.__renderComp(Component, this.__renderContextProvider({ compContext: this }));
|
|
}
|
|
};
|
|
}
|