Skip to content

Commit

Permalink
Optimise positionableItems / empty getters (#373)
Browse files Browse the repository at this point in the history
* Optimise LGraph.empty() getter

* Optimise positionableItems getters

- No change to internal functionality
- Replaces forced spread of all items on every property access with generator function
- Consumers that require an array can very cleanly spread into one
  • Loading branch information
webfiltered authored Dec 7, 2024
1 parent a7be883 commit 1c1241b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
9 changes: 6 additions & 3 deletions src/LGraph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,15 @@ export class LGraph implements LinkNetwork, Serialisable<SerialisableGraph> {

/** @returns Whether the graph has no items */
get empty(): boolean {
return this.positionableItems.length === 0
return this._nodes.length + this._groups.length + this.reroutes.size === 0
}

/** @returns All items on the canvas that can be selected */
get positionableItems(): Positionable[] {
return [...this._nodes, ...this._groups, ...this.reroutes.values()]
*positionableItems(): Generator<LGraphNode | LGraphGroup | Reroute> {
for (const node of this._nodes) yield node
for (const group of this._groups) yield group
for (const reroute of this.reroutes.values()) yield reroute
return
}

#reroutes = new Map<RerouteId, Reroute>()
Expand Down
6 changes: 3 additions & 3 deletions src/LGraphCanvas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3958,8 +3958,8 @@ export class LGraphCanvas {
return this.graph.empty
}

get positionableItems(): Positionable[] {
return this.graph.positionableItems
get positionableItems() {
return this.graph.positionableItems()
}

/**
Expand Down Expand Up @@ -8420,7 +8420,7 @@ export class LGraphCanvas {
* If nothing is selected, the view is fitted around all items in the graph.
*/
fitViewToSelectionAnimated(options: AnimationOptions = {}) {
const items: Positionable[] = this.selectedItems.size
const items = this.selectedItems.size
? Array.from(this.selectedItems)
: this.positionableItems
this.animateToBounds(createBounds(items), options)
Expand Down

0 comments on commit 1c1241b

Please sign in to comment.