1
0
mirror of synced 2026-04-03 06:28:35 +08:00

feat(cli,data-source,runtime): 数据源支持动态按需加载

This commit is contained in:
roymondchen
2024-04-12 16:52:58 +08:00
parent 872c978b9b
commit 006133102f
11 changed files with 83 additions and 36 deletions

View File

@@ -13,7 +13,7 @@ import {
replaceChildNode,
} from '@tmagic/utils';
import type { DataSourceManagerData } from './types';
import type { AsyncDataSourceResolveResult, DataSourceManagerData } from './types';
export const compliedConditions = (node: MNode, data: DataSourceManagerData) => {
if (!node.displayConds || !Array.isArray(node.displayConds) || !node.displayConds.length) return true;
@@ -151,3 +151,34 @@ export const compliedIteratorItems = (itemData: any, items: MNode[], dsId: strin
);
});
};
export const registerDataSourceOnDemand = async (
dsl: MApp,
dataSourceModules: Record<string, () => Promise<AsyncDataSourceResolveResult>>,
) => {
const { dataSourceCondDeps = {}, dataSourceDeps = {}, dataSources = [] } = dsl;
const dsModuleMap: Record<string, () => Promise<AsyncDataSourceResolveResult>> = {};
dataSources.forEach((ds) => {
let dep = dataSourceCondDeps[ds.id] || {};
if (!Object.keys(dep).length) {
dep = dataSourceDeps[ds.id] || {};
}
if (Object.keys(dep).length && dataSourceModules[ds.type]) {
dsModuleMap[ds.type] = dataSourceModules[ds.type];
}
});
const modules = await Promise.all(Object.values(dsModuleMap).map((asyncModule) => asyncModule()));
const moduleMap: Record<string, any> = {};
modules.forEach((module, index) => {
const type = Object.keys(dsModuleMap)[index];
moduleMap[type] = module.default;
});
return moduleMap;
};