feat: 支持数据源事件 (#605)
* feat: 添加observedData * feat: 修改错误 * fix: 修复单测报错问题 * feat: 完善数据源事件 * fix: 修复数据源事件调用组件方法时报错的异常 * fix: 修复多个相同类型的数据源数据变化的事件混淆的问题 * chore: 删除无用代码 * feat: 默认使用SimpleObservedData * feat: 删除无用代码 --------- Co-authored-by: marchyang <marchyang@tencent.com>
This commit is contained in:
@@ -23,12 +23,15 @@ import { cloneDeep } from 'lodash-es';
|
||||
import type { AppCore, DataSourceSchema, Id, MNode } from '@tmagic/schema';
|
||||
import { compiledNode } from '@tmagic/utils';
|
||||
|
||||
import { SimpleObservedData } from './observed-data/SimpleObservedData';
|
||||
import { DataSource, HttpDataSource } from './data-sources';
|
||||
import type { ChangeEvent, DataSourceManagerData, DataSourceManagerOptions } from './types';
|
||||
import type { ChangeEvent, DataSourceManagerData, DataSourceManagerOptions, ObservedDataClass } from './types';
|
||||
import { compiledNodeField, compliedConditions, compliedIteratorItems } from './utils';
|
||||
|
||||
class DataSourceManager extends EventEmitter {
|
||||
private static dataSourceClassMap = new Map<string, typeof DataSource>();
|
||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||
private static ObservedDataClass: ObservedDataClass = SimpleObservedData;
|
||||
|
||||
public static register<T extends typeof DataSource = typeof DataSource>(type: string, dataSource: T) {
|
||||
DataSourceManager.dataSourceClassMap.set(type, dataSource);
|
||||
@@ -45,6 +48,10 @@ class DataSourceManager extends EventEmitter {
|
||||
return DataSourceManager.dataSourceClassMap.get(type);
|
||||
}
|
||||
|
||||
public static registerObservedData(ObservedDataClass: ObservedDataClass) {
|
||||
DataSourceManager.ObservedDataClass = ObservedDataClass;
|
||||
}
|
||||
|
||||
public app: AppCore;
|
||||
|
||||
public dataSourceMap = new Map<string, DataSource>();
|
||||
@@ -133,6 +140,7 @@ class DataSourceManager extends EventEmitter {
|
||||
request: this.app.request,
|
||||
useMock: this.useMock,
|
||||
initialData: this.data[config.id],
|
||||
ObservedDataClass: DataSourceManager.ObservedDataClass,
|
||||
});
|
||||
|
||||
this.dataSourceMap.set(config.id, ds);
|
||||
@@ -210,6 +218,14 @@ class DataSourceManager extends EventEmitter {
|
||||
});
|
||||
this.dataSourceMap.clear();
|
||||
}
|
||||
|
||||
public onDataChange(id: string, path: string, callback: (newVal: any) => void) {
|
||||
return this.get(id)?.onDataChange(path, callback);
|
||||
}
|
||||
|
||||
public offDataChange(id: string, path: string, callback: (newVal: any) => void) {
|
||||
return this.get(id)?.offDataChange(path, callback);
|
||||
}
|
||||
}
|
||||
|
||||
DataSourceManager.register('http', HttpDataSource as any);
|
||||
|
||||
Reference in New Issue
Block a user