From 9c368e940e11ac939e5e899576a89984ac42838e Mon Sep 17 00:00:00 2001 From: Maximilian Giller <m.giller@tu-bs.de> Date: Tue, 6 Sep 2022 22:53:58 +0200 Subject: [PATCH] Button to select all nodes of a certain type --- src/editor/js/components/editor.tsx | 10 ++++++++++ src/editor/js/components/nodetypeentry.tsx | 5 ++++- src/editor/js/components/nodetypeseditor.tsx | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/editor/js/components/editor.tsx b/src/editor/js/components/editor.tsx index 25dd3ff..ba47e2e 100644 --- a/src/editor/js/components/editor.tsx +++ b/src/editor/js/components/editor.tsx @@ -12,6 +12,7 @@ import { Link } from "../structures/graph/link"; import { NodeTypesEditor } from "./nodetypeseditor"; import { SpaceManager } from "./spacemanager"; import { SelectLayer } from "./selectlayer"; +import { NodeType } from "../structures/graph/nodetype"; type propTypes = { spaceId: string; @@ -100,6 +101,7 @@ export class Editor extends React.PureComponent<propTypes, stateTypes> { this.selectNode = this.selectNode.bind(this); this.handleResize = this.handleResize.bind(this); this.handleBoxSelect = this.handleBoxSelect.bind(this); + this.handleNodeTypeSelect = this.handleNodeTypeSelect.bind(this); this.renderer = React.createRef(); this.graphContainer = React.createRef(); @@ -598,6 +600,13 @@ export class Editor extends React.PureComponent<propTypes, stateTypes> { return undefined; } + private handleNodeTypeSelect(type: NodeType) { + const nodesWithType = this.state.graph.nodes.filter((n: Node) => + n.type.equals(type) + ); + this.selectNodes(nodesWithType); + } + private handleNodeDrag(node: Node) { this.graphInFocus = true; @@ -735,6 +744,7 @@ export class Editor extends React.PureComponent<propTypes, stateTypes> { <NodeTypesEditor onChange={this.forceUpdate} graph={this.state.graph} + onSelectAll={this.handleNodeTypeSelect} /> <hr /> <h3>Settings</h3> diff --git a/src/editor/js/components/nodetypeentry.tsx b/src/editor/js/components/nodetypeentry.tsx index a5a1cc3..fab85cf 100644 --- a/src/editor/js/components/nodetypeentry.tsx +++ b/src/editor/js/components/nodetypeentry.tsx @@ -8,6 +8,7 @@ type propTypes = { graph: Graph; type: NodeType; onChange: { (): void }; + onSelectAll: (type: NodeType) => void; }; type stateTypes = { temporaryColor: string; @@ -82,7 +83,6 @@ export class NodeTypeEntry extends React.Component<propTypes, stateTypes> { return; } - //TODO: Make sure, that this event is not triggered to quickly! (this.props.type as any)[property] = newValue; this.props.onChange(); @@ -139,6 +139,9 @@ export class NodeTypeEntry extends React.Component<propTypes, stateTypes> { } onChange={(event) => this.handleColorChange(event)} /> + <button onClick={() => this.props.onSelectAll(this.props.type)}> + Select nodes + </button> {this.props.graph && this.props.graph.types.length > 1 ? ( <button onClick={this.deleteType}>Delete</button> ) : ( diff --git a/src/editor/js/components/nodetypeseditor.tsx b/src/editor/js/components/nodetypeseditor.tsx index b649a1d..d429dce 100644 --- a/src/editor/js/components/nodetypeseditor.tsx +++ b/src/editor/js/components/nodetypeseditor.tsx @@ -8,6 +8,7 @@ import { NodeType } from "../structures/graph/nodetype"; type propTypes = { graph: Graph; onChange: { (): void }; + onSelectAll: (type: NodeType) => void; }; export class NodeTypesEditor extends React.Component<propTypes> { @@ -35,6 +36,7 @@ export class NodeTypesEditor extends React.Component<propTypes> { key={type.id} type={type} graph={this.props.graph} + onSelectAll={this.props.onSelectAll} /> ))} </ul> -- GitLab