mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-04-06 03:57:56 +08:00
fix(editor): 数据源修改后,依赖重新收集不准确
This commit is contained in:
parent
11c027c71b
commit
9c7d711c16
@ -502,6 +502,7 @@ export const initServiceEvents = (
|
|||||||
isModifyField =
|
isModifyField =
|
||||||
changeRecord.propPath === 'fields' ||
|
changeRecord.propPath === 'fields' ||
|
||||||
/fields.(\d)+.name/.test(changeRecord.propPath) ||
|
/fields.(\d)+.name/.test(changeRecord.propPath) ||
|
||||||
|
/fields.(\d)+.defaultValue/.test(changeRecord.propPath) ||
|
||||||
/fields.(\d)+$/.test(changeRecord.propPath);
|
/fields.(\d)+$/.test(changeRecord.propPath);
|
||||||
|
|
||||||
isModifyMock = changeRecord.propPath === 'mocks';
|
isModifyMock = changeRecord.propPath === 'mocks';
|
||||||
@ -523,25 +524,35 @@ export const initServiceEvents = (
|
|||||||
if (Array.isArray(root?.items)) {
|
if (Array.isArray(root?.items)) {
|
||||||
depService.clearIdleTasks();
|
depService.clearIdleTasks();
|
||||||
|
|
||||||
removeDataSourceTarget(config.id);
|
|
||||||
initDataSourceDepTarget(config);
|
|
||||||
|
|
||||||
let collectIdlePromises: Promise<void[]>[] = [];
|
let collectIdlePromises: Promise<void[]>[] = [];
|
||||||
if (isModifyField) {
|
if (isModifyField) {
|
||||||
|
depService.removeTarget(config.id, DepTargetType.DATA_SOURCE);
|
||||||
|
depService.removeTarget(config.id, DepTargetType.DATA_SOURCE_COND);
|
||||||
|
|
||||||
|
depService.addTarget(createDataSourceTarget(config, reactive({})));
|
||||||
|
depService.addTarget(createDataSourceCondTarget(config, reactive({})));
|
||||||
|
|
||||||
collectIdlePromises = [
|
collectIdlePromises = [
|
||||||
collectIdle(root.items, true, DepTargetType.DATA_SOURCE),
|
collectIdle(root.items, true, DepTargetType.DATA_SOURCE),
|
||||||
collectIdle(root.items, true, DepTargetType.DATA_SOURCE_COND),
|
collectIdle(root.items, true, DepTargetType.DATA_SOURCE_COND),
|
||||||
];
|
];
|
||||||
} else if (isModifyMock) {
|
} else if (isModifyMock) {
|
||||||
|
depService.removeTarget(config.id, DepTargetType.DATA_SOURCE);
|
||||||
|
|
||||||
|
depService.addTarget(createDataSourceTarget(config, reactive({})));
|
||||||
|
|
||||||
collectIdlePromises = [collectIdle(root.items, true, DepTargetType.DATA_SOURCE)];
|
collectIdlePromises = [collectIdle(root.items, true, DepTargetType.DATA_SOURCE)];
|
||||||
} else if (isModifyMethod) {
|
} else if (isModifyMethod) {
|
||||||
|
depService.removeTarget(config.id, DepTargetType.DATA_SOURCE_METHOD);
|
||||||
|
|
||||||
|
depService.addTarget(createDataSourceMethodTarget(config, reactive({})));
|
||||||
|
|
||||||
collectIdlePromises = [collectIdle(root.items, true, DepTargetType.DATA_SOURCE_METHOD)];
|
collectIdlePromises = [collectIdle(root.items, true, DepTargetType.DATA_SOURCE_METHOD)];
|
||||||
}
|
}
|
||||||
Promise.all(collectIdlePromises).then(() => {
|
Promise.all(collectIdlePromises)
|
||||||
updateDataSourceSchema();
|
.then(() => updateDataSourceSchema())
|
||||||
updateDsData();
|
.then(() => updateDsData())
|
||||||
updateStageNodes(root.items);
|
.then(() => updateStageNodes(root.items));
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else if (root?.dataSources) {
|
} else if (root?.dataSources) {
|
||||||
updateDsData();
|
updateDsData();
|
||||||
@ -616,20 +627,31 @@ export const initServiceEvents = (
|
|||||||
}
|
}
|
||||||
root.dataSourceCondDeps[target.id] = target.deps;
|
root.dataSourceCondDeps[target.id] = target.deps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (target.type === DepTargetType.DATA_SOURCE_METHOD) {
|
||||||
|
if (!root.dataSourceMethodDeps) {
|
||||||
|
root.dataSourceMethodDeps = {};
|
||||||
|
}
|
||||||
|
root.dataSourceMethodDeps[target.id] = target.deps;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const targetRemoveHandler = (id: string | number) => {
|
const targetRemoveHandler = (id: string | number, type: DepTargetType) => {
|
||||||
const root = editorService.get('root');
|
const root = editorService.get('root');
|
||||||
|
|
||||||
if (!root) return;
|
if (!root) return;
|
||||||
|
|
||||||
if (root.dataSourceDeps) {
|
if (root.dataSourceDeps && type === DepTargetType.DATA_SOURCE) {
|
||||||
delete root.dataSourceDeps[id];
|
delete root.dataSourceDeps[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (root.dataSourceCondDeps) {
|
if (root.dataSourceCondDeps && type === DepTargetType.DATA_SOURCE_COND) {
|
||||||
delete root.dataSourceCondDeps[id];
|
delete root.dataSourceCondDeps[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (root.dataSourceMethodDeps && type === DepTargetType.DATA_SOURCE_METHOD) {
|
||||||
|
delete root.dataSourceMethodDeps[id];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
depService.on('add-target', targetAddHandler);
|
depService.on('add-target', targetAddHandler);
|
||||||
|
@ -28,7 +28,7 @@ import BaseService from './BaseService';
|
|||||||
|
|
||||||
export interface DepEvents {
|
export interface DepEvents {
|
||||||
'add-target': [target: Target];
|
'add-target': [target: Target];
|
||||||
'remove-target': [id: string | number];
|
'remove-target': [id: string | number, type: string | DepTargetType];
|
||||||
collected: [nodes: MNode[], deep: boolean];
|
collected: [nodes: MNode[], deep: boolean];
|
||||||
'ds-collected': [nodes: MNode[], deep: boolean];
|
'ds-collected': [nodes: MNode[], deep: boolean];
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@ class Dep extends BaseService {
|
|||||||
if (!targets) return;
|
if (!targets) return;
|
||||||
|
|
||||||
for (const target of Object.values(targets)) {
|
for (const target of Object.values(targets)) {
|
||||||
this.emit('remove-target', target.id);
|
this.emit('remove-target', target.id, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ class Dep extends BaseService {
|
|||||||
|
|
||||||
public removeTarget(id: Id, type: string = DepTargetType.DEFAULT) {
|
public removeTarget(id: Id, type: string = DepTargetType.DEFAULT) {
|
||||||
this.watcher.removeTarget(id, type);
|
this.watcher.removeTarget(id, type);
|
||||||
this.emit('remove-target', id);
|
this.emit('remove-target', id, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public clearTargets() {
|
public clearTargets() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user