This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-8687-d102e26978cf0a377992b7d3ded03eaccd5d5c75 in repository https://gitbox.apache.org/repos/asf/texera.git
commit ba2667a2259b6f5d7442979e5111d885ab57a4a5 Author: Xinyuan Lin <[email protected]> AuthorDate: Sun Sep 27 02:11:04 2026 +0000 refactor(frontend): remove the dead group-highlight streams (#8687) ### What changes were proposed in this PR? Deletes the group-highlight streams from `JointGraphWrapper`: the two subjects and the `getJointGroupHighlightStream()` / `getJointGroupUnhighlightStream()` getters. It also drops those streams from the four `merge(...)` calls that subscribe to them: one in the property editor, two in the workflow editor, and one in the operator menu. There is no behaviour change: **+6/−54 lines**. ### History | | | | --- | --- | | **Introduced by** | #754 (2020-12-11), "Added operator grouping feature", for selecting operator groups on the canvas | | **Usage removed by** | #3033 (2024-11-13), "Remove Operator Group". It deleted the feature and every `.next()` on these subjects, but kept the subjects, the getters and the subscribers | It has been dead for nearly two years. Each dropped `merge(...)` operand was a stream that never emits, so removing it changes nothing the subscribers can observe. No production code calls `.next()` or `.complete()` on either subject. > Reviewer note: the other streams in those `merge(...)` calls are live and unchanged. The only other edits are comments that still mentioned groups. `joint-graph-wrapper.spec.ts` loses its one case, which asserted that these streams stay silent when operators are highlighted. ### Any related issues, documentation, discussions? Closes #8685 ### How was this PR tested? No new tests. The one removed case only covered the deleted getters. From `frontend/`: - `npx ng test --watch=false --include='**/joint-graph-wrapper.spec.ts' --include='**/property-editor.component.spec.ts' --include='**/workflow-editor.component.spec.ts' --include='**/operator-menu.service.spec.ts'`: 4 files, 250 tests, all pass. - `yarn format:ci`: clean. - `npx ng build`: success. To re-check: ``` git grep -n -i "JointGroup" # no hits ``` ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Claude Opus 5.5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- .../property-editor/property-editor.component.ts | 4 +--- .../workflow-editor/workflow-editor.component.ts | 16 ++++------------ .../service/operator-menu/operator-menu.service.ts | 7 +------ .../workflow-graph/model/joint-graph-wrapper.spec.ts | 14 -------------- .../workflow-graph/model/joint-graph-wrapper.ts | 19 ------------------- 5 files changed, 6 insertions(+), 54 deletions(-) diff --git a/frontend/src/app/workspace/component/property-editor/property-editor.component.ts b/frontend/src/app/workspace/component/property-editor/property-editor.component.ts index af9312f69f..08be5974a9 100644 --- a/frontend/src/app/workspace/component/property-editor/property-editor.component.ts +++ b/frontend/src/app/workspace/component/property-editor/property-editor.component.ts @@ -261,14 +261,12 @@ export class PropertyEditorComponent implements OnInit, OnDestroy, OnChanges { * * Displays the form of the highlighted operator if only one operator is highlighted; * Displays the form of the link breakpoint if only one link is highlighted; - * hides the form if no operator/link is highlighted or multiple operators and/or groups and/or links are highlighted. + * hides the form if no operator/link is highlighted or multiple operators and/or links are highlighted. */ registerHighlightEventsHandler() { merge( this.workflowActionService.getJointGraphWrapper().getJointOperatorHighlightStream(), this.workflowActionService.getJointGraphWrapper().getJointOperatorUnhighlightStream(), - this.workflowActionService.getJointGraphWrapper().getJointGroupHighlightStream(), - this.workflowActionService.getJointGraphWrapper().getJointGroupUnhighlightStream(), this.workflowActionService.getJointGraphWrapper().getLinkHighlightStream(), this.workflowActionService.getJointGraphWrapper().getLinkUnhighlightStream(), this.workflowActionService.getJointGraphWrapper().getJointCommentBoxHighlightStream(), diff --git a/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts b/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts index e8b3e9f587..1fac6beeba 100644 --- a/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts +++ b/frontend/src/app/workspace/component/workflow-editor/workflow-editor.component.ts @@ -1010,12 +1010,8 @@ export class WorkflowEditorComponent implements OnInit, AfterViewInit, OnDestroy }, }; - // highlight on OperatorHighlightStream or GroupHighlightStream or CommentBoxHighlightStream - merge( - this.wrapper.getJointOperatorHighlightStream(), - this.wrapper.getJointGroupHighlightStream(), - this.wrapper.getJointCommentBoxHighlightStream() - ) + // highlight on OperatorHighlightStream or CommentBoxHighlightStream + merge(this.wrapper.getJointOperatorHighlightStream(), this.wrapper.getJointCommentBoxHighlightStream()) .pipe(untilDestroyed(this)) .subscribe(elementIDs => elementIDs.forEach(elementID => { @@ -1023,12 +1019,8 @@ export class WorkflowEditorComponent implements OnInit, AfterViewInit, OnDestroy }) ); - // unhighlight on OperatorUnhighlightStream or GroupUnhighlightStream or CommentBoxUnhighlightStream - merge( - this.wrapper.getJointOperatorUnhighlightStream(), - this.wrapper.getJointGroupUnhighlightStream(), - this.wrapper.getJointCommentBoxUnhighlightStream() - ) + // unhighlight on OperatorUnhighlightStream or CommentBoxUnhighlightStream + merge(this.wrapper.getJointOperatorUnhighlightStream(), this.wrapper.getJointCommentBoxUnhighlightStream()) .pipe(untilDestroyed(this)) .subscribe(elementIDs => elementIDs.forEach(elementID => { diff --git a/frontend/src/app/workspace/service/operator-menu/operator-menu.service.ts b/frontend/src/app/workspace/service/operator-menu/operator-menu.service.ts index 1b800e9f7b..a5f9224a52 100644 --- a/frontend/src/app/workspace/service/operator-menu/operator-menu.service.ts +++ b/frontend/src/app/workspace/service/operator-menu/operator-menu.service.ts @@ -84,12 +84,7 @@ export class OperatorMenuService { const jointGraphWrapper = this.workflowActionService.getJointGraphWrapper(); const texeraGraph = this.workflowActionService.getTexeraGraph(); - merge( - jointGraphWrapper.getJointOperatorHighlightStream(), - jointGraphWrapper.getJointOperatorUnhighlightStream(), - jointGraphWrapper.getJointGroupHighlightStream(), - jointGraphWrapper.getJointGroupUnhighlightStream() - ) + merge(jointGraphWrapper.getJointOperatorHighlightStream(), jointGraphWrapper.getJointOperatorUnhighlightStream()) .pipe(untilDestroyed(this)) .subscribe(() => { this._highlightedOperators$.next(jointGraphWrapper.getCurrentHighlightedOperatorIDs()); diff --git a/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.spec.ts b/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.spec.ts index 0ea0864881..b831727118 100644 --- a/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.spec.ts +++ b/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.spec.ts @@ -990,20 +990,6 @@ describe("JointGraphWrapperService", () => { ports: [], }); }); - - it("exposes the group highlight streams, which operator highlighting does not touch", () => { - addOperators(); - const emitted: unknown[] = []; - const onHighlight = jointGraphWrapper.getJointGroupHighlightStream().subscribe(ids => emitted.push(ids)); - const onUnhighlight = jointGraphWrapper.getJointGroupUnhighlightStream().subscribe(ids => emitted.push(ids)); - - jointGraphWrapper.highlightOperators(mockScanPredicate.operatorID); - jointGraphWrapper.unhighlightOperators(mockScanPredicate.operatorID); - - expect(emitted).toEqual([]); - onHighlight.unsubscribe(); - onUnhighlight.unsubscribe(); - }); }); describe("workflow flags", () => { diff --git a/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.ts b/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.ts index 08eed79a15..ee1fd6a6fd 100644 --- a/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.ts +++ b/frontend/src/app/workspace/service/workflow-graph/model/joint-graph-wrapper.ts @@ -126,10 +126,6 @@ export class JointGraphWrapper { private jointOperatorHighlightStream = new Subject<readonly string[]>(); // event stream of un-highlighting an operator private jointOperatorUnhighlightStream = new Subject<readonly string[]>(); - // event stream of highlighting a group - private jointGroupHighlightStream = new Subject<readonly string[]>(); - // event stream of un-highlighting a group - private jointGroupUnhighlightStream = new Subject<readonly string[]>(); // event stream of highlighing a link private jointLinkHighlightStream = new Subject<readonly string[]>(); // event stream of unhighlighing a link @@ -494,21 +490,6 @@ export class JointGraphWrapper { return this.jointLinkUnhighlightStream.pipe(this.jointGraphContext.bufferWhileAsync); } - /** - * Gets the event stream of an operator being dragged. - */ - public getJointGroupHighlightStream(): Observable<readonly string[]> { - return this.jointGroupHighlightStream.pipe(this.jointGraphContext.bufferWhileAsync); - } - - /** - * Gets the event stream of a group being unhighlighted. - * The group could be unhighlighted because it's deleted. - */ - public getJointGroupUnhighlightStream(): Observable<readonly string[]> { - return this.jointGroupUnhighlightStream.asObservable().pipe(this.jointGraphContext.bufferWhileAsync); - } - public getJointCommentBoxHighlightStream(): Observable<readonly string[]> { return this.jointCommentBoxHighlightStream.asObservable(); }
