mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 03:01:16 +00:00
fix: fix onChangeNodeVisible & onChangeNodeChildren cannot be triggered successfully in some cases
This commit is contained in:
parent
8d2fe15a3f
commit
9444752a65
@ -15,6 +15,8 @@ import {
|
|||||||
IPublicApiProject,
|
IPublicApiProject,
|
||||||
IPublicModelDropLocation,
|
IPublicModelDropLocation,
|
||||||
IPublicEnumTransformStage,
|
IPublicEnumTransformStage,
|
||||||
|
IPublicOnChangeOptions,
|
||||||
|
EDITOR_EVENT,
|
||||||
} from '@alilc/lowcode-types';
|
} from '@alilc/lowcode-types';
|
||||||
import { Project } from '../project';
|
import { Project } from '../project';
|
||||||
import { ISimulatorHost } from '../simulator';
|
import { ISimulatorHost } from '../simulator';
|
||||||
@ -158,6 +160,22 @@ export class DocumentModel implements IDocumentModel {
|
|||||||
this.inited = true;
|
this.inited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onChangeNodeVisible(fn: (node: IPublicModelNode, visible: boolean) => void): () => void {
|
||||||
|
this.designer.editor?.eventBus.on(EDITOR_EVENT.NODE_CHILDREN_CHANGE, fn);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
this.designer.editor?.eventBus.off(EDITOR_EVENT.NODE_CHILDREN_CHANGE, fn);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
onChangeNodeChildren(fn: (info: IPublicOnChangeOptions) => void): () => void {
|
||||||
|
this.designer.editor?.eventBus.on(EDITOR_EVENT.NODE_VISIBLE_CHANGE, fn);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
this.designer.editor?.eventBus.off(EDITOR_EVENT.NODE_VISIBLE_CHANGE, fn);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@obx.shallow private willPurgeSpace: Node[] = [];
|
@obx.shallow private willPurgeSpace: Node[] = [];
|
||||||
|
|
||||||
get modalNode() {
|
get modalNode() {
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import {
|
|||||||
IPublicModelNode,
|
IPublicModelNode,
|
||||||
IPublicModelExclusiveGroup,
|
IPublicModelExclusiveGroup,
|
||||||
IPublicEnumTransformStage,
|
IPublicEnumTransformStage,
|
||||||
|
EDITOR_EVENT,
|
||||||
} from '@alilc/lowcode-types';
|
} from '@alilc/lowcode-types';
|
||||||
import { compatStage, isDOMText, isJSExpression } from '@alilc/lowcode-utils';
|
import { compatStage, isDOMText, isJSExpression } from '@alilc/lowcode-utils';
|
||||||
import { SettingTopEntry } from '@alilc/lowcode-designer';
|
import { SettingTopEntry } from '@alilc/lowcode-designer';
|
||||||
@ -193,6 +194,13 @@ export class Node<Schema extends IPublicTypeNodeSchema = IPublicTypeNodeSchema>
|
|||||||
|
|
||||||
this.isInited = true;
|
this.isInited = true;
|
||||||
this.emitter = createModuleEventBus('Node');
|
this.emitter = createModuleEventBus('Node');
|
||||||
|
const editor = this.document.designer.editor;
|
||||||
|
this.onVisibleChange((visible: boolean) => {
|
||||||
|
editor?.eventBus.emit(EDITOR_EVENT.NODE_VISIBLE_CHANGE, this, visible);
|
||||||
|
});
|
||||||
|
this.onChildrenChange((info?: { type: string; node: Node }) => {
|
||||||
|
editor?.eventBus.emit(EDITOR_EVENT.NODE_VISIBLE_CHANGE, info);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_settingEntry: SettingTopEntry;
|
_settingEntry: SettingTopEntry;
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import { Node } from '../../../src/document/node/node';
|
|||||||
import { Designer } from '../../../src/designer/designer';
|
import { Designer } from '../../../src/designer/designer';
|
||||||
import formSchema from '../../fixtures/schema/form';
|
import formSchema from '../../fixtures/schema/form';
|
||||||
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
||||||
import { EBADF } from 'constants';
|
|
||||||
|
|
||||||
const mockCreateSettingEntry = jest.fn();
|
const mockCreateSettingEntry = jest.fn();
|
||||||
jest.mock('../../../src/designer/designer', () => {
|
jest.mock('../../../src/designer/designer', () => {
|
||||||
|
|||||||
@ -1,8 +1,5 @@
|
|||||||
import set from 'lodash/set';
|
|
||||||
import cloneDeep from 'lodash/cloneDeep';
|
|
||||||
import '../../fixtures/window';
|
import '../../fixtures/window';
|
||||||
import { Project } from '../../../src/project/project';
|
import { Project } from '../../../src/project/project';
|
||||||
import { Node } from '../../../src/document/node/node';
|
|
||||||
import { Designer } from '../../../src/designer/designer';
|
import { Designer } from '../../../src/designer/designer';
|
||||||
import formSchema from '../../fixtures/schema/form';
|
import formSchema from '../../fixtures/schema/form';
|
||||||
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
||||||
|
|||||||
@ -1,8 +1,5 @@
|
|||||||
import set from 'lodash/set';
|
|
||||||
import cloneDeep from 'lodash/cloneDeep';
|
|
||||||
import '../../fixtures/window';
|
import '../../fixtures/window';
|
||||||
import { Project } from '../../../src/project/project';
|
import { Project } from '../../../src/project/project';
|
||||||
import { Node } from '../../../src/document/node/node';
|
|
||||||
import { Designer } from '../../../src/designer/designer';
|
import { Designer } from '../../../src/designer/designer';
|
||||||
import formSchema from '../../fixtures/schema/form';
|
import formSchema from '../../fixtures/schema/form';
|
||||||
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
||||||
|
|||||||
@ -2,10 +2,9 @@ import set from 'lodash/set';
|
|||||||
import cloneDeep from 'lodash/cloneDeep';
|
import cloneDeep from 'lodash/cloneDeep';
|
||||||
import '../../fixtures/window';
|
import '../../fixtures/window';
|
||||||
import { Project } from '../../../src/project/project';
|
import { Project } from '../../../src/project/project';
|
||||||
import { Node } from '../../../src/document/node/node';
|
|
||||||
import { Designer } from '../../../src/designer/designer';
|
import { Designer } from '../../../src/designer/designer';
|
||||||
import formSchema from '../../fixtures/schema/form';
|
import formSchema from '../../fixtures/schema/form';
|
||||||
import { getIdsFromSchema, getNodeFromSchemaById } from '../../utils';
|
import { getIdsFromSchema } from '../../utils';
|
||||||
|
|
||||||
const mockCreateSettingEntry = jest.fn();
|
const mockCreateSettingEntry = jest.fn();
|
||||||
jest.mock('../../../src/designer/designer', () => {
|
jest.mock('../../../src/designer/designer', () => {
|
||||||
|
|||||||
@ -139,7 +139,6 @@ export class Project implements IPublicApiProject {
|
|||||||
*/
|
*/
|
||||||
importSchema(schema?: IPublicTypeProjectSchema): void {
|
importSchema(schema?: IPublicTypeProjectSchema): void {
|
||||||
this[projectSymbol].load(schema, true);
|
this[projectSymbol].load(schema, true);
|
||||||
// this[editorSymbol].emit(Events.IMPORT_SCHEMA, schema);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -288,11 +288,8 @@ export class DocumentModel implements IPublicModelDocumentModel {
|
|||||||
* @param fn
|
* @param fn
|
||||||
*/
|
*/
|
||||||
onChangeNodeVisible(fn: (node: IPublicModelNode, visible: boolean) => void): void {
|
onChangeNodeVisible(fn: (node: IPublicModelNode, visible: boolean) => void): void {
|
||||||
// TODO: history 变化时需要重新绑定
|
this[documentSymbol].onChangeNodeVisible((node: IPublicModelNode, visible: boolean) => {
|
||||||
this[documentSymbol].nodesMap?.forEach((node) => {
|
fn(Node.create(node)!, visible);
|
||||||
node.onVisibleChange((flag: boolean) => {
|
|
||||||
fn(Node.create(node)!, flag);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,16 +297,14 @@ export class DocumentModel implements IPublicModelDocumentModel {
|
|||||||
* 当前 document 的节点 children 变更事件
|
* 当前 document 的节点 children 变更事件
|
||||||
* @param fn
|
* @param fn
|
||||||
*/
|
*/
|
||||||
onChangeNodeChildren(fn: (info?: IPublicOnChangeOptions) => void): void {
|
onChangeNodeChildren(fn: (info: IPublicOnChangeOptions) => void): void {
|
||||||
// TODO: history 变化时需要重新绑定
|
this[documentSymbol].onChangeNodeChildren((info?: IPublicOnChangeOptions) => {
|
||||||
this[documentSymbol].nodesMap?.forEach((node) => {
|
if (!info) {
|
||||||
node.onChildrenChange((info?: InnerOnChangeOptions) => {
|
return;
|
||||||
return info
|
}
|
||||||
? fn({
|
fn({
|
||||||
type: info.type,
|
type: info.type,
|
||||||
node: Node.create(node)!,
|
node: Node.create(info.node)!,
|
||||||
})
|
|
||||||
: fn();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -173,3 +173,9 @@ export interface PluginStatus {
|
|||||||
export interface PluginStatusSet {
|
export interface PluginStatusSet {
|
||||||
[key: string]: PluginStatus;
|
[key: string]: PluginStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum EDITOR_EVENT {
|
||||||
|
NODE_CHILDREN_CHANGE = 'node.children.change',
|
||||||
|
|
||||||
|
NODE_VISIBLE_CHANGE = 'node.visible.change',
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ import { IPublicTypeRootSchema, IPublicTypeDragNodeDataObject, IPublicTypeDragNo
|
|||||||
import { IPublicEnumTransformStage } from '../enum';
|
import { IPublicEnumTransformStage } from '../enum';
|
||||||
import { IPublicApiProject } from '../api';
|
import { IPublicApiProject } from '../api';
|
||||||
import { IPublicModelDropLocation, IPublicModelDetecting, IPublicModelNode, IPublicModelSelection, IPublicModelHistory, IPublicModelModalNodesManager } from './';
|
import { IPublicModelDropLocation, IPublicModelDetecting, IPublicModelNode, IPublicModelSelection, IPublicModelHistory, IPublicModelModalNodesManager } from './';
|
||||||
|
import { IPublicOnChangeOptions } from '@alilc/lowcode-types';
|
||||||
|
|
||||||
export interface IPublicModelDocumentModel {
|
export interface IPublicModelDocumentModel {
|
||||||
|
|
||||||
@ -168,6 +169,12 @@ export interface IPublicModelDocumentModel {
|
|||||||
onChangeNodeVisible(fn: (node: IPublicModelNode, visible: boolean) => void): void;
|
onChangeNodeVisible(fn: (node: IPublicModelNode, visible: boolean) => void): void;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前 document 的节点 children 变更事件
|
||||||
|
* @param fn
|
||||||
|
*/
|
||||||
|
onChangeNodeChildren(fn: (info: IPublicOnChangeOptions) => void): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前 document 节点属性修改事件
|
* 当前 document 节点属性修改事件
|
||||||
* @param fn
|
* @param fn
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user