mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-16 15:01:15 +00:00
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { IBaseRenderComponent } from '../types';
|
|
import baseRendererFactory from './base';
|
|
|
|
export default function tempRendererFactory(): IBaseRenderComponent {
|
|
const BaseRenderer = baseRendererFactory();
|
|
|
|
return class TempRenderer extends BaseRenderer {
|
|
static dislayName = 'temp-renderer';
|
|
|
|
__namespace = 'temp';
|
|
|
|
cacheSetState?: Record<string, any>;
|
|
|
|
__init() {
|
|
this.state = {};
|
|
this.cacheSetState = {};
|
|
}
|
|
|
|
async componentDidMount() {
|
|
const ctx = this.props.__ctx;
|
|
if (!ctx) return;
|
|
const { setState } = ctx;
|
|
this.cacheSetState = setState;
|
|
ctx.setState = (...args: any) => {
|
|
setState.call(ctx, ...args);
|
|
setTimeout(() => this.forceUpdate(), 0);
|
|
};
|
|
this.__debug(`componentDidMount - ${this.props.__schema.fileName}`);
|
|
}
|
|
|
|
async componentDidUpdate() {
|
|
this.__debug(`componentDidUpdate - ${this.props.__schema.fileName}`);
|
|
}
|
|
|
|
async componentWillUnmount() {
|
|
const ctx = this.props.__ctx;
|
|
if (!ctx || !this.cacheSetState) return;
|
|
ctx.setState = this.cacheSetState;
|
|
delete this.cacheSetState;
|
|
this.__debug(`componentWillUnmount - ${this.props.__schema.fileName}`);
|
|
}
|
|
|
|
async componentDidCatch(e: any) {
|
|
console.warn(e);
|
|
this.__debug(`componentDidCatch - ${this.props.__schema.fileName}`);
|
|
}
|
|
|
|
render() {
|
|
const { __schema, __ctx } = this.props;
|
|
if (this.__checkSchema(__schema)) {
|
|
return '下钻编辑 schema 结构异常!';
|
|
}
|
|
|
|
this.__debug(`${TempRenderer.dislayName} render - ${__schema?.fileName}`);
|
|
|
|
return this.__renderContent(this.__renderContextProvider({ __ctx }));
|
|
}
|
|
};
|
|
}
|