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();
   }

Reply via email to