1
0
mirror of synced 2026-04-02 22:18:39 +08:00

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:
qwertyyb
2024-05-13 17:23:23 +08:00
committed by GitHub
parent 831204663a
commit 88c04c6dac
18 changed files with 314 additions and 77 deletions

View File

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