fix(editor): 根节点修改在update事件中不要触发依赖收集

This commit is contained in:
roymondchen 2025-05-12 17:48:03 +08:00
parent 8195c105c0
commit 6b481c4473
2 changed files with 16 additions and 3 deletions

View File

@ -19,6 +19,7 @@ import {
createDataSourceTarget, createDataSourceTarget,
DepTargetType, DepTargetType,
NODE_CONDS_KEY, NODE_CONDS_KEY,
NodeType,
Target, Target,
} from '@tmagic/core'; } from '@tmagic/core';
import { ChangeRecord } from '@tmagic/form'; import { ChangeRecord } from '@tmagic/form';
@ -292,7 +293,14 @@ export const initServiceEvents = (
}; };
const collectIdle = (nodes: MComponent[], deep: boolean, type?: DepTargetType) => const collectIdle = (nodes: MComponent[], deep: boolean, type?: DepTargetType) =>
Promise.all(nodes.map((node) => depService.collectIdle([node], { pageId: getPageIdByNode(node) }, deep, type))); Promise.all(
nodes.map((node) => {
if (node.type === NodeType.ROOT) {
return Promise.resolve();
}
return depService.collectIdle([node], { pageId: getPageIdByNode(node) }, deep, type);
}),
);
watch( watch(
() => editorService.get('stage'), () => editorService.get('stage'),
@ -327,7 +335,7 @@ export const initServiceEvents = (
codeBlockService.setCodeDsl(value.codeBlocks); codeBlockService.setCodeDsl(value.codeBlocks);
dataSourceService.set('dataSources', value.dataSources); dataSourceService.set('dataSources', value.dataSources);
depService.removeTargets(DepTargetType.CODE_BLOCK); depService.clearTargets();
for (const [id, code] of Object.entries(value.codeBlocks)) { for (const [id, code] of Object.entries(value.codeBlocks)) {
depService.addTarget(createCodeBlockTarget(id, code)); depService.addTarget(createCodeBlockTarget(id, code));
@ -386,7 +394,9 @@ export const initServiceEvents = (
const needRecollectNodes: MComponent[] = []; const needRecollectNodes: MComponent[] = [];
const normalNodes: MComponent[] = []; const normalNodes: MComponent[] = [];
for (const { newNode, oldNode, changeRecords } of data) { for (const { newNode, oldNode, changeRecords } of data) {
if (changeRecords?.length) { if (newNode.type === NodeType.ROOT) {
normalNodes.push(newNode);
} else if (changeRecords?.length) {
// eslint-disable-next-line no-restricted-syntax // eslint-disable-next-line no-restricted-syntax
forChangeRecords: for (const record of changeRecords) { forChangeRecords: for (const record of changeRecords) {
if (!record.propPath) { if (!record.propPath) {
@ -435,6 +445,7 @@ export const initServiceEvents = (
handler(); handler();
} else { } else {
updateStageNodes(normalNodes); updateStageNodes(normalNodes);
// 在上面判断是否需要收集数据源依赖中已经更新stage // 在上面判断是否需要收集数据源依赖中已经更新stage
Promise.all([ Promise.all([
collectIdle(normalNodes, true, DepTargetType.CODE_BLOCK), collectIdle(normalNodes, true, DepTargetType.CODE_BLOCK),

View File

@ -26,6 +26,8 @@ onmessage = (e) => {
postMessage({}); postMessage({});
} }
watcher.clearTargets();
if (mApp.codeBlocks) { if (mApp.codeBlocks) {
for (const [id, code] of Object.entries(mApp.codeBlocks)) { for (const [id, code] of Object.entries(mApp.codeBlocks)) {
watcher.addTarget(createCodeBlockTarget(id, code)); watcher.addTarget(createCodeBlockTarget(id, code));