This is an automated email from the ASF dual-hosted git repository.

rfellows pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 15a56a1902 NIFI-13378: Adds Version State as filterable option in 
Process Groups tab in Summary (#8945)
15a56a1902 is described below

commit 15a56a19026c093b7b838c04613195a77e90efdb
Author: sujkm <[email protected]>
AuthorDate: Mon Jun 10 18:22:26 2024 -0400

    NIFI-13378: Adds Version State as filterable option in Process Groups tab 
in Summary (#8945)
    
    * NIFI-13378: Adds Version State as filterable option in Process Groups tab 
in Summary
    
    * updated value of selections to enum values
    
    This closes #8945
---
 .../summary-table-filter.component.html            | 15 ++++
 .../summary-table-filter.component.ts              | 87 ++++++++++++++++++++--
 .../process-group-status-table.component.html      |  1 +
 .../process-group-status-table.component.ts        |  9 ++-
 4 files changed, 106 insertions(+), 6 deletions(-)

diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.html
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.html
index bec08f9269..e2538407ae 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.html
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.html
@@ -50,6 +50,21 @@
                         </mat-form-field>
                     </div>
                 }
+                @if (includeVersionedFlowStateFilter) {
+                    <div>
+                        <mat-form-field subscriptSizing="dynamic">
+                            <mat-label>Version State</mat-label>
+                            <mat-select 
formControlName="filterVersionedFlowState">
+                                <mat-option value="All">All States</mat-option>
+                                <mat-option value="UP_TO_DATE">Up to 
date</mat-option>
+                                <mat-option value="LOCALLY_MODIFIED">Locally 
modified</mat-option>
+                                <mat-option value="STALE">Stale</mat-option>
+                                <mat-option 
value="LOCALLY_MODIFIED_AND_STALE">Locally modified and stale</mat-option>
+                                <mat-option value="SYNC_FAILURE">Sync 
failure</mat-option>
+                            </mat-select>
+                        </mat-form-field>
+                    </div>
+                }
                 @if (includePrimaryNodeOnlyFilter) {
                     <div>
                         <mat-checkbox color="primary" 
formControlName="primaryOnly"></mat-checkbox>
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.ts
index f09115e6ad..2eae944f60 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/common/summary-table-filter/summary-table-filter.component.ts
@@ -30,6 +30,7 @@ export interface SummaryTableFilterArgs {
     filterTerm: string;
     filterColumn: string;
     filterStatus?: string;
+    filterVersionedFlowState?: string;
     primaryOnly?: boolean;
     clusterNode?: NodeSearchResult;
 }
@@ -69,6 +70,7 @@ export class SummaryTableFilter implements AfterViewInit {
 
     @Input() includeStatusFilter = false;
     @Input() includePrimaryNodeOnlyFilter = false;
+    @Input() includeVersionedFlowStateFilter = false;
 
     @Input() set selectedNode(node: NodeSearchResult | null) {
         const n: NodeSearchResult = node ? (node.id !== 'All' ? node : 
this.allNodes) : this.allNodes;
@@ -137,6 +139,12 @@ export class SummaryTableFilter implements AfterViewInit {
         }
     }
 
+    @Input() set filterVersionedFlowState(state: string) {
+        if (this.includeVersionedFlowStateFilter) {
+            this.filterForm.get('filterVersionedFlowState')?.value(state);
+        }
+    }
+
     @Input() set filteredCount(count: number) {
         this._filteredCount = count;
     }
@@ -158,6 +166,7 @@ export class SummaryTableFilter implements AfterViewInit {
             filterTerm: '',
             filterColumn: this._initialFilterColumn || 'name',
             filterStatus: 'All',
+            filterVersionedFlowState: 'All',
             primaryOnly: false,
             clusterNode: this.allNodes
         });
@@ -170,9 +179,18 @@ export class SummaryTableFilter implements AfterViewInit {
             .subscribe((filterTerm: string) => {
                 const filterColumn = 
this.filterForm.get('filterColumn')?.value;
                 const filterStatus = 
this.filterForm.get('filterStatus')?.value;
+                const filterVersionedFlowState = 
this.filterForm.get('filterVersionedFlowState')?.value;
                 const primaryOnly = this.filterForm.get('primaryOnly')?.value;
                 const clusterNode = this.filterForm.get('clusterNode')?.value;
-                this.applyFilter(filterTerm, filterColumn, filterStatus, 
primaryOnly, clusterNode, 'filterTerm');
+                this.applyFilter(
+                    filterTerm,
+                    filterColumn,
+                    filterStatus,
+                    filterVersionedFlowState,
+                    primaryOnly,
+                    clusterNode,
+                    'filterTerm'
+                );
             });
 
         this.filterForm
@@ -181,20 +199,58 @@ export class SummaryTableFilter implements AfterViewInit {
             .subscribe((filterColumn: string) => {
                 const filterTerm = this.filterForm.get('filterTerm')?.value;
                 const filterStatus = 
this.filterForm.get('filterStatus')?.value;
+                const filterVersionedFlowState = 
this.filterForm.get('filterVersionedFlowState')?.value;
                 const primaryOnly = this.filterForm.get('primaryOnly')?.value;
                 const clusterNode = this.filterForm.get('clusterNode')?.value;
-                this.applyFilter(filterTerm, filterColumn, filterStatus, 
primaryOnly, clusterNode, 'filterColumn');
+                this.applyFilter(
+                    filterTerm,
+                    filterColumn,
+                    filterStatus,
+                    filterVersionedFlowState,
+                    primaryOnly,
+                    clusterNode,
+                    'filterColumn'
+                );
             });
 
         this.filterForm
             .get('filterStatus')
             ?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))
             .subscribe((filterStatus: string) => {
+                const filterTerm = this.filterForm.get('filterTerm')?.value;
+                const filterVersionedFlowState = 
this.filterForm.get('filterVersionedFlowState')?.value;
+                const filterColumn = 
this.filterForm.get('filterColumn')?.value;
+                const primaryOnly = this.filterForm.get('primaryOnly')?.value;
+                const clusterNode = this.filterForm.get('clusterNode')?.value;
+                this.applyFilter(
+                    filterTerm,
+                    filterColumn,
+                    filterStatus,
+                    filterVersionedFlowState,
+                    primaryOnly,
+                    clusterNode,
+                    'filterStatus'
+                );
+            });
+
+        this.filterForm
+            .get('filterVersionedFlowState')
+            ?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))
+            .subscribe((filterVersionedFlowState: string) => {
                 const filterTerm = this.filterForm.get('filterTerm')?.value;
                 const filterColumn = 
this.filterForm.get('filterColumn')?.value;
+                const filterStatus = 
this.filterForm.get('filterStatus')?.value;
                 const primaryOnly = this.filterForm.get('primaryOnly')?.value;
                 const clusterNode = this.filterForm.get('clusterNode')?.value;
-                this.applyFilter(filterTerm, filterColumn, filterStatus, 
primaryOnly, clusterNode, 'filterStatus');
+                this.applyFilter(
+                    filterTerm,
+                    filterColumn,
+                    filterStatus,
+                    filterVersionedFlowState,
+                    primaryOnly,
+                    clusterNode,
+                    'filterVersionedFlowState'
+                );
             });
 
         this.filterForm
@@ -204,8 +260,17 @@ export class SummaryTableFilter implements AfterViewInit {
                 const filterTerm = this.filterForm.get('filterTerm')?.value;
                 const filterColumn = 
this.filterForm.get('filterColumn')?.value;
                 const filterStatus = 
this.filterForm.get('filterStatus')?.value;
+                const filterVersionedFlowState = 
this.filterForm.get('filterVersionedFlowState')?.value;
                 const clusterNode = this.filterForm.get('clusterNode')?.value;
-                this.applyFilter(filterTerm, filterColumn, filterStatus, 
primaryOnly, clusterNode, 'primaryOnly');
+                this.applyFilter(
+                    filterTerm,
+                    filterColumn,
+                    filterStatus,
+                    filterVersionedFlowState,
+                    primaryOnly,
+                    clusterNode,
+                    'primaryOnly'
+                );
             });
 
         this.filterForm
@@ -217,8 +282,17 @@ export class SummaryTableFilter implements AfterViewInit {
                     const filterTerm = 
this.filterForm.get('filterTerm')?.value;
                     const filterColumn = 
this.filterForm.get('filterColumn')?.value;
                     const filterStatus = 
this.filterForm.get('filterStatus')?.value;
+                    const filterVersionedFlowState = 
this.filterForm.get('filterVersionedFlowState')?.value;
                     const primaryOnly = 
this.filterForm.get('primaryOnly')?.value;
-                    this.applyFilter(filterTerm, filterColumn, filterStatus, 
primaryOnly, clusterNode, 'clusterNode');
+                    this.applyFilter(
+                        filterTerm,
+                        filterColumn,
+                        filterStatus,
+                        filterVersionedFlowState,
+                        primaryOnly,
+                        clusterNode,
+                        'clusterNode'
+                    );
                 }
             });
     }
@@ -227,6 +301,7 @@ export class SummaryTableFilter implements AfterViewInit {
         filterTerm: string,
         filterColumn: string,
         filterStatus: string,
+        filterVersionedFlowState: string,
         primaryOnly: boolean,
         clusterNode: NodeSearchResult,
         changedField: string
@@ -234,6 +309,7 @@ export class SummaryTableFilter implements AfterViewInit {
         this.filterChanged.next({
             filterColumn,
             filterStatus,
+            filterVersionedFlowState,
             filterTerm,
             primaryOnly,
             clusterNode,
@@ -242,6 +318,7 @@ export class SummaryTableFilter implements AfterViewInit {
         this.showFilterMatchedLabel =
             filterTerm?.length > 0 ||
             filterStatus !== 'All' ||
+            filterVersionedFlowState !== 'All' ||
             primaryOnly ||
             (clusterNode ? clusterNode.id !== 'All' : false);
     }
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.html
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.html
index b2d402fb5d..85ab844c6f 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.html
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.html
@@ -24,6 +24,7 @@
                     [totalCount]="totalCount"
                     [filterableColumns]="filterableColumns"
                     [includeStatusFilter]="false"
+                    [includeVersionedFlowStateFilter]="true"
                     [includePrimaryNodeOnlyFilter]="false"
                     [clusterNodes]="clusterNodes"
                     [selectedNode]="selectedClusterNode"
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.ts
index 5e58909b68..e593e9a470 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/summary/ui/process-group-status-listing/process-group-status-table/process-group-status-table.component.ts
@@ -83,7 +83,14 @@ export class ProcessGroupStatusTable extends 
ComponentStatusTable<ProcessGroupSt
     @Input() rootProcessGroup!: ProcessGroupStatusSnapshot;
 
     override filterPredicate(data: ProcessGroupStatusSnapshotEntity, filter: 
string): boolean {
-        const { filterTerm, filterColumn } = JSON.parse(filter);
+        const { filterTerm, filterColumn, filterVersionedFlowState } = 
JSON.parse(filter);
+        const matchOnVersionedFlowState: boolean = filterVersionedFlowState 
!== 'All';
+
+        if (matchOnVersionedFlowState) {
+            if (data.processGroupStatusSnapshot.versionedFlowState !== 
filterVersionedFlowState) {
+                return false;
+            }
+        }
 
         if (filterTerm === '') {
             return true;

Reply via email to