2022-02-16 11:20:17 +08:00

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 }));
}
};
}