Merge branch 'refactor/remove-container' into 'release/1.0.0'

将Container的职责合并到App



See merge request !1000128
This commit is contained in:
荣彬 2020-09-28 16:55:17 +08:00
commit 0428b5c302
5 changed files with 68 additions and 118 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@ali/lowcode-react-provider", "name": "@ali/lowcode-react-provider",
"version": "1.0.8-0", "version": "1.0.9",
"description": "React Provider for Runtime", "description": "React Provider for Runtime",
"files": [ "files": [
"es", "es",

View File

@ -1,4 +1,4 @@
import { createElement, ReactType, ReactElement } from 'react'; import { createElement, ComponentType, ReactElement } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { Router } from '@recore/router'; import { Router } from '@recore/router';
import { app, Provider } from '@ali/lowcode-runtime'; import { app, Provider } from '@ali/lowcode-runtime';
@ -46,7 +46,7 @@ export default class ReactProvider extends Provider {
} }
// 内置实现 for 动态化渲染 // 内置实现 for 动态化渲染
getRouterView(): ReactType { getRouterView(): ComponentType {
const routerConfig = this.getRouterConfig(); const routerConfig = this.getRouterConfig();
if (!routerConfig) { if (!routerConfig) {
return () => null; return () => null;
@ -84,7 +84,7 @@ export default class ReactProvider extends Provider {
defined: { keepAlive: true }, defined: { keepAlive: true },
}); });
} }
const appHelper = new AppHelper(); const appHelper = new AppHelper({});
appHelper.set('utils', this.getUtils()); appHelper.set('utils', this.getUtils());
appHelper.set('constants', this.getConstants()); appHelper.set('constants', this.getConstants());
const self = this; const self = this;

View File

@ -1,6 +1,6 @@
{ {
"name": "@ali/lowcode-runtime", "name": "@ali/lowcode-runtime",
"version": "1.0.8-0", "version": "1.0.9",
"description": "Runtime for Ali lowCode engine", "description": "Runtime for Ali lowCode engine",
"files": [ "files": [
"es", "es",

View File

@ -1,92 +0,0 @@
import Provider from './provider';
export interface ILayoutOptions {
componentName?: string;
props?: any;
}
export interface IErrorBoundaryConfig {
fallbackUI: any;
afterCatch?: (...rest: any) => any
}
export default class Container {
private renderer: any = null;
private layouts: { [key: string]: { content: any; props: any } } = {};
private loading: any = null;
private errorBoundary: IErrorBoundaryConfig = { fallbackUI: () => '', afterCatch: () => {} };
private providers: { [key: string]: Provider; } = {};
registerRenderer(renderer: any): any {
this.renderer = renderer;
}
registerLayout(Layout: any, options: ILayoutOptions): any {
if (!options) {
return;
}
const { componentName, props = {} } = options;
if (!componentName || !Layout) {
return;
}
this.layouts[componentName] = { content: Layout, props };
}
registerLoading(component: any) {
if (!component) {
return;
}
this.loading = component;
}
registerErrorBoundary(config: IErrorBoundaryConfig) {
if (!config) {
return;
}
this.errorBoundary = config;
}
registerProvider(CustomProvider: any) {
try {
const p = new CustomProvider();
this.providers[p.getContainerId()] = p;
} catch (error) {
console.error(error.message);
}
}
getLayout(componentName: string) {
if (!componentName) {
return;
}
return this.layouts[componentName];
}
getRenderer(): any {
return this.renderer;
}
getLoading(): any {
return this.loading;
}
getErrorBoundary(): any {
return this.errorBoundary;
}
getProvider(id?: string) {
if (!id) {
for (const key in this.providers) {
if (Object.prototype.hasOwnProperty.call(this.providers, key)) {
return this.providers[key];
}
}
} else {
return this.providers[id];
}
}
}

View File

@ -1,56 +1,98 @@
import Container, { ILayoutOptions, IErrorBoundaryConfig } from './container';
import Provider from './provider'; import Provider from './provider';
import runApp from './runApp'; import runApp from './runApp';
class App { export interface ILayoutOptions {
private container: Container; componentName?: string;
props?: any;
}
constructor() { export interface IErrorBoundaryConfig {
this.container = new Container(); fallbackUI: any;
} afterCatch?: (...rest: any) => any
}
class App {
private renderer: any = null;
private layouts: { [key: string]: { content: any; props: any } } = {};
private loading: any = null;
private errorBoundary: IErrorBoundaryConfig = { fallbackUI: () => '', afterCatch: () => {} };
private providers: { [key: string]: Provider; } = {};
run() { run() {
runApp(); runApp();
} }
registerRenderer(renderer: any): any { registerRenderer(renderer: any): any {
this.container.registerRenderer(renderer); this.renderer = renderer;
} }
registerLayout(Layout: any, options: ILayoutOptions): any { registerLayout(Layout: any, options: ILayoutOptions): any {
this.container.registerLayout(Layout, options); if (!options) {
return;
}
const { componentName, props = {} } = options;
if (!componentName || !Layout) {
return;
}
this.layouts[componentName] = { content: Layout, props };
} }
registerLoading(component: any) { registerLoading(component: any) {
this.container.registerLoading(component); if (!component) {
return;
} }
this.loading = component;
registerProvider(CustomProvider: any) {
this.container.registerProvider(CustomProvider);
} }
registerErrorBoundary(config: IErrorBoundaryConfig) { registerErrorBoundary(config: IErrorBoundaryConfig) {
this.container.registerErrorBoundary(config); if (!config) {
return;
}
this.errorBoundary = config;
}
registerProvider(CustomProvider: any) {
try {
const p = new CustomProvider();
this.providers[p.getContainerId()] = p;
} catch (error) {
console.error(error.message);
}
} }
getLayout(componentName: string) { getLayout(componentName: string) {
return this.container.getLayout(componentName); if (!componentName) {
return;
}
return this.layouts[componentName];
} }
getRenderer(): any { getRenderer(): any {
return this.container.getRenderer(); return this.renderer;
} }
getLoading(): any { getLoading(): any {
return this.container.getLoading(); return this.loading;
} }
getErrorBoundary(): IErrorBoundaryConfig { getErrorBoundary(): any {
return this.container.getErrorBoundary(); return this.errorBoundary;
} }
getProvider(id?: string): Provider | undefined { getProvider(id?: string) {
return this.container.getProvider(id); if (!id) {
for (const key in this.providers) {
if (Object.prototype.hasOwnProperty.call(this.providers, key)) {
return this.providers[key];
}
}
} else {
return this.providers[id];
}
} }
} }