mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 03:01:16 +00:00
fix: fix the problem that the outline pane tree cannot be expanded
This commit is contained in:
parent
2d80d11475
commit
76ec15f5b7
@ -3,8 +3,10 @@ import {
|
|||||||
IPublicTypeLocationChildrenDetail,
|
IPublicTypeLocationChildrenDetail,
|
||||||
IPublicModelNode,
|
IPublicModelNode,
|
||||||
IPublicModelPluginContext,
|
IPublicModelPluginContext,
|
||||||
|
IPublicTypeDisposable,
|
||||||
} from '@alilc/lowcode-types';
|
} from '@alilc/lowcode-types';
|
||||||
import { isI18nData, isLocationChildrenDetail } from '@alilc/lowcode-utils';
|
import { isI18nData, isLocationChildrenDetail } from '@alilc/lowcode-utils';
|
||||||
|
import EventEmitter from 'events';
|
||||||
import { Tree } from './tree';
|
import { Tree } from './tree';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,14 +23,61 @@ export interface FilterResult {
|
|||||||
keywords: string;
|
keywords: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum EVENT_NAMES {
|
||||||
|
filterResultChanged = 'filterResultChanged',
|
||||||
|
|
||||||
|
expandedChanged = 'expandedChanged',
|
||||||
|
|
||||||
|
hiddenChanged = 'hiddenChanged',
|
||||||
|
|
||||||
|
lockedChanged = 'lockedChanged',
|
||||||
|
|
||||||
|
titleLabelChanged = 'titleLabelChanged',
|
||||||
|
|
||||||
|
expandableChanged = 'expandableChanged',
|
||||||
|
}
|
||||||
|
|
||||||
export default class TreeNode {
|
export default class TreeNode {
|
||||||
readonly pluginContext: IPublicModelPluginContext;
|
readonly pluginContext: IPublicModelPluginContext;
|
||||||
onFilterResultChanged: () => void;
|
event = new EventEmitter();
|
||||||
onExpandedChanged: (expanded: boolean) => void;
|
|
||||||
onHiddenChanged: (hidden: boolean) => void;
|
onFilterResultChanged(fn: () => void): IPublicTypeDisposable {
|
||||||
onLockedChanged: (locked: boolean) => void;
|
this.event.on(EVENT_NAMES.filterResultChanged, fn);
|
||||||
onTitleLabelChanged: (treeNode: TreeNode) => void;
|
return () => {
|
||||||
onExpandableChanged: (expandable: boolean) => void;
|
this.event.off(EVENT_NAMES.filterResultChanged, fn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
onExpandedChanged(fn: (expanded: boolean) => void): IPublicTypeDisposable {
|
||||||
|
this.event.on(EVENT_NAMES.expandedChanged, fn);
|
||||||
|
return () => {
|
||||||
|
this.event.off(EVENT_NAMES.expandedChanged, fn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
onHiddenChanged(fn: (hidden: boolean) => void): IPublicTypeDisposable {
|
||||||
|
this.event.on(EVENT_NAMES.hiddenChanged, fn);
|
||||||
|
return () => {
|
||||||
|
this.event.off(EVENT_NAMES.hiddenChanged, fn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
onLockedChanged(fn: (locked: boolean) => void): IPublicTypeDisposable {
|
||||||
|
this.event.on(EVENT_NAMES.lockedChanged, fn);
|
||||||
|
return () => {
|
||||||
|
this.event.off(EVENT_NAMES.lockedChanged, fn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
onTitleLabelChanged(fn: (treeNode: TreeNode) => void): IPublicTypeDisposable {
|
||||||
|
this.event.on(EVENT_NAMES.titleLabelChanged, fn);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
this.event.off(EVENT_NAMES.titleLabelChanged, fn);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
onExpandableChanged(fn: (expandable: boolean) => void): IPublicTypeDisposable {
|
||||||
|
this.event.on(EVENT_NAMES.expandableChanged, fn);
|
||||||
|
return () => {
|
||||||
|
this.event.off(EVENT_NAMES.expandableChanged, fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get id(): string {
|
get id(): string {
|
||||||
return this.node.id;
|
return this.node.id;
|
||||||
@ -46,7 +95,7 @@ export default class TreeNode {
|
|||||||
* 触发 onExpandableChanged 回调
|
* 触发 onExpandableChanged 回调
|
||||||
*/
|
*/
|
||||||
notifyExpandableChanged(): void {
|
notifyExpandableChanged(): void {
|
||||||
this.onExpandableChanged && this.onExpandableChanged(this.expandable);
|
this.event.emit(EVENT_NAMES.expandableChanged, this.expandable);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,7 +148,7 @@ export default class TreeNode {
|
|||||||
|
|
||||||
setExpanded(value: boolean) {
|
setExpanded(value: boolean) {
|
||||||
this._expanded = value;
|
this._expanded = value;
|
||||||
this.onExpandedChanged && this.onExpandedChanged(value);
|
this.event.emit(EVENT_NAMES.expandedChanged, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
get detecting() {
|
get detecting() {
|
||||||
@ -120,7 +169,7 @@ export default class TreeNode {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.node.visible = !flag;
|
this.node.visible = !flag;
|
||||||
this.onHiddenChanged && this.onHiddenChanged(flag);
|
this.event.emit(EVENT_NAMES.hiddenChanged, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
get locked(): boolean {
|
get locked(): boolean {
|
||||||
@ -129,7 +178,7 @@ export default class TreeNode {
|
|||||||
|
|
||||||
setLocked(flag: boolean) {
|
setLocked(flag: boolean) {
|
||||||
this.node.lock(flag);
|
this.node.lock(flag);
|
||||||
this.onLockedChanged && this.onLockedChanged(flag);
|
this.event.emit(EVENT_NAMES.lockedChanged, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
get selected(): boolean {
|
get selected(): boolean {
|
||||||
@ -174,11 +223,11 @@ export default class TreeNode {
|
|||||||
} else {
|
} else {
|
||||||
this.node.getExtraProp('title', true)?.setValue(label);
|
this.node.getExtraProp('title', true)?.setValue(label);
|
||||||
}
|
}
|
||||||
this.onTitleLabelChanged && this.onTitleLabelChanged(this);
|
this.event.emit(EVENT_NAMES.titleLabelChanged, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
get icon() {
|
get icon() {
|
||||||
return this.node.componentMeta.icon;
|
return this.node.componentMeta?.icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
get parent(): TreeNode | null {
|
get parent(): TreeNode | null {
|
||||||
@ -282,8 +331,6 @@ export default class TreeNode {
|
|||||||
|
|
||||||
setFilterReult(val: FilterResult) {
|
setFilterReult(val: FilterResult) {
|
||||||
this._filterResult = val;
|
this._filterResult = val;
|
||||||
if (this.onFilterResultChanged) {
|
this.event.emit(EVENT_NAMES.filterResultChanged)
|
||||||
this.onFilterResultChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,10 +25,10 @@ export default class TreeBranches extends Component<{
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { treeNode } = this.props;
|
const { treeNode } = this.props;
|
||||||
treeNode.onFilterResultChanged = () => {
|
treeNode.onFilterResultChanged(() => {
|
||||||
const { filterWorking: newFilterWorking, matchChild: newMatchChild } = treeNode.filterReult;
|
const { filterWorking: newFilterWorking, matchChild: newMatchChild } = treeNode.filterReult;
|
||||||
this.setState({ filterWorking: newFilterWorking, matchChild: newMatchChild });
|
this.setState({ filterWorking: newFilterWorking, matchChild: newMatchChild });
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount(): void {
|
componentWillUnmount(): void {
|
||||||
@ -73,7 +73,7 @@ class TreeNodeChildren extends Component<{
|
|||||||
keywords: null,
|
keywords: null,
|
||||||
dropDetail: null,
|
dropDetail: null,
|
||||||
};
|
};
|
||||||
offLocationChanged: IPublicTypeDisposable;
|
offLocationChanged: IPublicTypeDisposable | undefined;
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { treeNode, pluginContext } = this.props;
|
const { treeNode, pluginContext } = this.props;
|
||||||
const { project } = pluginContext;
|
const { project } = pluginContext;
|
||||||
@ -85,7 +85,7 @@ class TreeNodeChildren extends Component<{
|
|||||||
keywords,
|
keywords,
|
||||||
dropDetail,
|
dropDetail,
|
||||||
});
|
});
|
||||||
treeNode.onFilterResultChanged = () => {
|
treeNode.onFilterResultChanged(() => {
|
||||||
const {
|
const {
|
||||||
filterWorking: newFilterWorking,
|
filterWorking: newFilterWorking,
|
||||||
matchSelf: newMatchChild,
|
matchSelf: newMatchChild,
|
||||||
@ -96,7 +96,7 @@ class TreeNodeChildren extends Component<{
|
|||||||
matchSelf: newMatchChild,
|
matchSelf: newMatchChild,
|
||||||
keywords: newKeywords,
|
keywords: newKeywords,
|
||||||
});
|
});
|
||||||
};
|
});
|
||||||
this.offLocationChanged = project.currentDocument?.onDropLocationChanged(
|
this.offLocationChanged = project.currentDocument?.onDropLocationChanged(
|
||||||
() => {
|
() => {
|
||||||
this.setState({ dropDetail: treeNode.dropDetail });
|
this.setState({ dropDetail: treeNode.dropDetail });
|
||||||
@ -118,7 +118,7 @@ class TreeNodeChildren extends Component<{
|
|||||||
const endGroup = () => {
|
const endGroup = () => {
|
||||||
if (groupContents.length > 0) {
|
if (groupContents.length > 0) {
|
||||||
children.push(
|
children.push(
|
||||||
<div key={currentGrp.id} className="condition-group-container" data-id={currentGrp.firstNode.id}>
|
<div key={currentGrp.id} className="condition-group-container" data-id={currentGrp.firstNode?.id}>
|
||||||
<div className="condition-group-title">
|
<div className="condition-group-title">
|
||||||
<Title
|
<Title
|
||||||
title={currentGrp.title}
|
title={currentGrp.title}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import TreeNode from '../controllers/tree-node';
|
|||||||
import TreeTitle from './tree-title';
|
import TreeTitle from './tree-title';
|
||||||
import TreeBranches from './tree-branches';
|
import TreeBranches from './tree-branches';
|
||||||
import { IconEyeClose } from '../icons/eye-close';
|
import { IconEyeClose } from '../icons/eye-close';
|
||||||
import { IPublicModelPluginContext, IPublicModelModalNodesManager, IPublicModelDocumentModel } from '@alilc/lowcode-types';
|
import { IPublicModelPluginContext, IPublicModelModalNodesManager, IPublicModelDocumentModel, IPublicTypeDisposable } from '@alilc/lowcode-types';
|
||||||
|
|
||||||
class ModalTreeNodeView extends Component<{
|
class ModalTreeNodeView extends Component<{
|
||||||
treeNode: TreeNode;
|
treeNode: TreeNode;
|
||||||
@ -78,7 +78,7 @@ export default class TreeNodeView extends Component<{
|
|||||||
expandable: false,
|
expandable: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
eventOffCallbacks: Array<() => void> = [];
|
eventOffCallbacks: Array<IPublicTypeDisposable | undefined> = [];
|
||||||
constructor(props: any) {
|
constructor(props: any) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
@ -104,18 +104,18 @@ export default class TreeNodeView extends Component<{
|
|||||||
|
|
||||||
const doc = project.currentDocument;
|
const doc = project.currentDocument;
|
||||||
|
|
||||||
treeNode.onExpandedChanged = ((expanded: boolean) => {
|
treeNode.onExpandedChanged(((expanded: boolean) => {
|
||||||
this.setState({ expanded });
|
this.setState({ expanded });
|
||||||
});
|
}));
|
||||||
treeNode.onHiddenChanged = (hidden: boolean) => {
|
treeNode.onHiddenChanged((hidden: boolean) => {
|
||||||
this.setState({ hidden });
|
this.setState({ hidden });
|
||||||
};
|
});
|
||||||
treeNode.onLockedChanged = (locked: boolean) => {
|
treeNode.onLockedChanged((locked: boolean) => {
|
||||||
this.setState({ locked });
|
this.setState({ locked });
|
||||||
};
|
});
|
||||||
treeNode.onExpandableChanged = (expandable: boolean) => {
|
treeNode.onExpandableChanged((expandable: boolean) => {
|
||||||
this.setState({ expandable });
|
this.setState({ expandable });
|
||||||
};
|
});
|
||||||
|
|
||||||
this.eventOffCallbacks.push(
|
this.eventOffCallbacks.push(
|
||||||
doc?.onDropLocationChanged((document: IPublicModelDocumentModel) => {
|
doc?.onDropLocationChanged((document: IPublicModelDocumentModel) => {
|
||||||
@ -135,8 +135,8 @@ export default class TreeNodeView extends Component<{
|
|||||||
this.eventOffCallbacks.push(offDetectingChange!);
|
this.eventOffCallbacks.push(offDetectingChange!);
|
||||||
}
|
}
|
||||||
componentWillUnmount(): void {
|
componentWillUnmount(): void {
|
||||||
this.eventOffCallbacks?.forEach((offFun: () => void) => {
|
this.eventOffCallbacks?.forEach((offFun: IPublicTypeDisposable | undefined) => {
|
||||||
offFun();
|
offFun && offFun();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -83,11 +83,11 @@ export default class TreeTitle extends Component<{
|
|||||||
editing: false,
|
editing: false,
|
||||||
title: treeNode.titleLabel,
|
title: treeNode.titleLabel,
|
||||||
});
|
});
|
||||||
treeNode.onTitleLabelChanged = () => {
|
treeNode.onTitleLabelChanged(() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
title: treeNode.titleLabel,
|
title: treeNode.titleLabel,
|
||||||
});
|
});
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user