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

scottyaslan 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 347bbdba3e NIFI-14923: Allowing the user to show/hide inherited 
parameters. (#10260)
347bbdba3e is described below

commit 347bbdba3ee92d46f85533b3c8c9467ed21e4ff7
Author: Matt Gilman <[email protected]>
AuthorDate: Thu Sep 4 12:10:05 2025 -0400

    NIFI-14923: Allowing the user to show/hide inherited parameters. (#10260)
    
    * NIFI-14923: Allowing the user to show/hide inherited parameters.
    
    * NIFI-14923: When a Parameter is overridden do not show the inherited icon 
and consider the overridden state when determining if a parameter can be edited 
or deleted.
    
    * NIFI-14923: Updating the inheritance tooltip with the name of the 
Parameter Context the Parameter is inherited from.
---
 .../parameter-table/parameter-table.component.html |   9 +-
 .../parameter-table.component.spec.ts              | 557 +++++++++++++++++++++
 .../parameter-table/parameter-table.component.ts   |  67 ++-
 .../edit-parameter-context.component.html          |   1 +
 .../edit-parameter-context.component.spec.ts       |  66 ++-
 .../edit-parameter-context.component.ts            |   7 +
 6 files changed, 693 insertions(+), 14 deletions(-)

diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.html
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.html
index 7489c3e038..2e2aa4a1d5 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.html
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.html
@@ -58,7 +58,7 @@
                                             class="fa fa-level-down 
primary-color"
                                             nifiTooltip
                                             [tooltipComponentType]="TextTip"
-                                            tooltipInputData="This parameter 
is inherited form another Parameter Context."
+                                            
[tooltipInputData]="getInheritedParameterMessage(item)"
                                             [delayClose]="false"></i>
                                     }
                                 </div>
@@ -171,6 +171,13 @@
                 </table>
             </div>
         </div>
+        @if (inheritsParameters) {
+            <div class="flex justify-between items-center">
+                <mat-checkbox [(ngModel)]="showInheritedParameters" 
(click)="initFilter()">
+                    <mat-label class="checkbox-label">Show inherited 
parameters</mat-label>
+                </mat-checkbox>
+            </div>
+        }
     </div>
     <div class="flex basis-1/3 flex-col justify-between gap-y-3 w-full">
         <div class="flex flex-col">
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.spec.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.spec.ts
index 35f1d2ffd7..5ab3e6d660 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.spec.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.spec.ts
@@ -111,4 +111,561 @@ describe('ParameterTable', () => {
             }
         ]);
     });
+
+    describe('isOverridden', () => {
+        it('should consider non inherited or modified as not overridden', () 
=> {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isOverridden(item)).toBe(false);
+        });
+
+        it('should consider inherited but not modified as not overridden', () 
=> {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isOverridden(item)).toBe(false);
+        });
+
+        it('should consider non inherited modified as not overridden', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isOverridden(item)).toBe(false);
+        });
+
+        it('should consider inherited modified as overridden', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isOverridden(item)).toBe(true);
+        });
+    });
+
+    describe('canOverridden', () => {
+        it('should consider non inherited or modified as not able overridden', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(false);
+        });
+
+        it('should consider inherited but not modified as able to override', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(true);
+        });
+
+        it('should consider non inherited and modified as not able to 
override', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(false);
+        });
+
+        it('should consider inherited and modified as not able to override', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(false);
+        });
+    });
+
+    describe('canOverride', () => {
+        it('should consider non inherited or modified as not able overridden', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(false);
+        });
+
+        it('should consider inherited but not modified as able to override', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(true);
+        });
+
+        it('should consider non inherited and modified as not able to 
override', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(false);
+        });
+
+        it('should consider inherited and modified as not able to override', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canOverride(item)).toBe(false);
+        });
+    });
+
+    describe('canEdit', () => {
+        it('should consider inherited and not modified as unable to edit', () 
=> {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canEdit(item)).toBe(false);
+        });
+
+        it('should consider inherited and modified as able to edit', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canEdit(item)).toBe(true);
+        });
+
+        it('should consider not inherited and not modified as able to edit', 
() => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.canEdit(item)).toBe(true);
+        });
+    });
+
+    describe('getInheritedParameterMessage', () => {
+        it('should return empty string for non inherited parameter', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.getInheritedParameterMessage(item)).toBe('');
+        });
+
+        it('should return generic message for inherited parameter with no 
permissions', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true,
+                        parameterContext: {
+                            id: 'contextId',
+                            permissions: {
+                                canRead: false,
+                                canWrite: false
+                            }
+                        }
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.getInheritedParameterMessage(item)).toBe(
+                'This parameter is inherited from another Parameter Context.'
+            );
+        });
+
+        it('should return parameter context specific message for inherited 
parameter with permissions', () => {
+            const name = 'contextName';
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true,
+                        parameterContext: {
+                            id: 'contextId',
+                            permissions: {
+                                canRead: true,
+                                canWrite: false
+                            },
+                            component: {
+                                id: 'contextId',
+                                name
+                            }
+                        }
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.getInheritedParameterMessage(item)).toBe(`This 
parameter is inherited from: ${name}`);
+        });
+    });
+
+    describe('isVisible', () => {
+        it('should consider deleted as not visible', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: true,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isVisible(item)).toBe(false);
+        });
+
+        it('should consider not deleted and as visible', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isVisible(item)).toBe(true);
+        });
+
+        it('should show inherited parameters', () => {
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isVisible(item)).toBe(true);
+        });
+
+        it('should show not inherited parameters', () => {
+            component.showInheritedParameters = false;
+
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isVisible(item)).toBe(false);
+        });
+
+        it('should show overridden inherited parameters', () => {
+            component.showInheritedParameters = false;
+
+            const item: ParameterItem = {
+                added: false,
+                dirty: false,
+                deleted: false,
+                originalEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value',
+                        description: 'asdf',
+                        sensitive: false,
+                        provided: false,
+                        inherited: true
+                    },
+                    canWrite: true
+                },
+                updatedEntity: {
+                    parameter: {
+                        name: 'param',
+                        value: 'value2',
+                        description: 'asdf',
+                        sensitive: false
+                    },
+                    canWrite: true
+                }
+            };
+            expect(component.isVisible(item)).toBe(true);
+        });
+    });
 });
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts
index c4cf4b3f26..f5279fe569 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-table/parameter-table.component.ts
@@ -16,7 +16,7 @@
  */
 
 import { AfterViewInit, ChangeDetectorRef, Component, forwardRef, Input } from 
'@angular/core';
-import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
+import { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from 
'@angular/forms';
 import { MatButtonModule } from '@angular/material/button';
 import { MatDialogModule } from '@angular/material/dialog';
 import { MatTableDataSource, MatTableModule } from '@angular/material/table';
@@ -31,6 +31,8 @@ import { ParameterContextListingState } from 
'../../../state/parameter-context-l
 import { showOkDialog } from 
'../../../state/parameter-context-listing/parameter-context-listing.actions';
 import { MatSortModule, Sort } from '@angular/material/sort';
 import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
+import { MatCheckbox } from '@angular/material/checkbox';
+import { MatLabel } from '@angular/material/select';
 
 export interface ParameterItem {
     deleted: boolean;
@@ -54,7 +56,10 @@ export interface ParameterItem {
         ParameterReferences,
         MatMenu,
         MatMenuItem,
-        MatMenuTrigger
+        MatMenuTrigger,
+        MatLabel,
+        MatCheckbox,
+        FormsModule
     ],
     styleUrls: ['./parameter-table.component.scss'],
     providers: [
@@ -69,6 +74,7 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
     @Input() createNewParameter!: (existingParameters: string[]) => 
Observable<EditParameterResponse>;
     @Input() editParameter!: (parameter: Parameter) => 
Observable<EditParameterResponse>;
     @Input() canAddParameters = true;
+    @Input() inheritsParameters = false;
 
     protected readonly TextTip = TextTip;
 
@@ -87,6 +93,8 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
     onTouched!: () => void;
     onChange!: (parameters: ParameterEntity[]) => void;
 
+    showInheritedParameters: boolean = true;
+
     constructor(
         private store: Store<ParameterContextListingState>,
         private changeDetector: ChangeDetectorRef,
@@ -103,7 +111,19 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
     }
 
     isVisible(item: ParameterItem): boolean {
-        return !item.deleted;
+        if (item.deleted) {
+            return false;
+        }
+
+        if (
+            !this.showInheritedParameters &&
+            item.originalEntity.parameter.inherited &&
+            !item.updatedEntity?.parameter
+        ) {
+            return false;
+        }
+
+        return true;
     }
 
     registerOnChange(onChange: (parameters: ParameterEntity[]) => void): void {
@@ -251,6 +271,18 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
         }
     }
 
+    getInheritedParameterMessage(item: ParameterItem): string {
+        if (item.originalEntity.parameter.inherited) {
+            const parameterContext = 
item.originalEntity.parameter.parameterContext;
+            if (parameterContext?.permissions.canRead && 
parameterContext.component) {
+                return `This parameter is inherited from: 
${parameterContext.component.name}`;
+            } else {
+                return 'This parameter is inherited from another Parameter 
Context.';
+            }
+        }
+        return '';
+    }
+
     isSensitiveParameter(item: ParameterItem): boolean {
         return item.originalEntity.parameter.sensitive;
     }
@@ -285,10 +317,7 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
     }
 
     canGoToParameter(item: ParameterItem): boolean {
-        return (
-            item.originalEntity.parameter.inherited === true &&
-            
item.originalEntity.parameter.parameterContext?.permissions.canRead == true
-        );
+        return this.canOverride(item) && 
item.originalEntity.parameter.parameterContext?.permissions.canRead == true;
     }
 
     getParameterLink(item: ParameterItem): string[] {
@@ -299,8 +328,12 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
         return [];
     }
 
+    isOverridden(item: ParameterItem): boolean {
+        return item.originalEntity.parameter.inherited === true && 
item.updatedEntity !== undefined;
+    }
+
     canOverride(item: ParameterItem): boolean {
-        return item.originalEntity.parameter.inherited === true;
+        return item.originalEntity.parameter.inherited === true && 
item.updatedEntity === undefined;
     }
 
     overrideParameter(item: ParameterItem): void {
@@ -326,8 +359,13 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
     canEdit(item: ParameterItem): boolean {
         const canWrite: boolean = item.originalEntity.canWrite == true;
         const provided: boolean = item.originalEntity.parameter.provided == 
true;
-        const inherited: boolean = item.originalEntity.parameter.inherited == 
true;
-        return canWrite && !provided && !inherited;
+
+        if (item.originalEntity.parameter.inherited) {
+            const overridden: boolean = this.isOverridden(item);
+            return canWrite && !provided && overridden;
+        }
+
+        return canWrite && !provided;
     }
 
     editClicked(item: ParameterItem): void {
@@ -403,8 +441,13 @@ export class ParameterTable implements AfterViewInit, 
ControlValueAccessor {
     canDelete(item: ParameterItem): boolean {
         const canWrite: boolean = item.originalEntity.canWrite == true;
         const provided: boolean = item.originalEntity.parameter.provided == 
true;
-        const inherited: boolean = item.originalEntity.parameter.inherited == 
true;
-        return canWrite && !provided && !inherited;
+
+        if (item.originalEntity.parameter.inherited) {
+            const overridden: boolean = this.isOverridden(item);
+            return canWrite && !provided && overridden;
+        }
+
+        return canWrite && !provided;
     }
 
     deleteClicked(item: ParameterItem): void {
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.html
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.html
index d38a7f9467..421cd7a3e9 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.html
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.html
@@ -155,6 +155,7 @@
                         <parameter-table
                             formControlName="parameters"
                             
[canAddParameters]="!request.parameterContext?.component?.parameterProviderConfiguration"
+                            
[inheritsParameters]="inheritsParameters(request.parameterContext?.component?.parameters)"
                             [createNewParameter]="createNewParameter"
                             [editParameter]="editParameter"></parameter-table>
                     </div>
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.spec.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.spec.ts
index 57698295f1..cd44eb4b88 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.spec.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.spec.ts
@@ -24,7 +24,7 @@ import { NoopAnimationsModule } from 
'@angular/platform-browser/animations';
 import { provideMockStore } from '@ngrx/store/testing';
 import { initialState } from 
'../../../../pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.reducer';
 import { ClusterConnectionService } from 
'../../../../service/cluster-connection.service';
-import { ParameterContextEntity } from '../../../../state/shared';
+import { ParameterContextEntity, ParameterEntity } from 
'../../../../state/shared';
 
 import { EditParameterContextRequest } from '../index';
 
@@ -259,4 +259,68 @@ describe('EditParameterContext', () => {
     it('should create', () => {
         expect(component).toBeTruthy();
     });
+
+    describe('inheritsParameters', () => {
+        it('should return true if parameters are inherited', () => {
+            const parameters: ParameterEntity[] = [
+                {
+                    canWrite: true,
+                    parameter: {
+                        name: 'one',
+                        description: 'Description for one.',
+                        sensitive: false,
+                        value: 'value',
+                        provided: false,
+                        referencingComponents: [],
+                        parameterContext: {
+                            id: '95d4f3d2-018b-1000-b7c7-b830c49a8026',
+                            permissions: {
+                                canRead: true,
+                                canWrite: true
+                            },
+                            component: {
+                                id: '95d4f3d2-018b-1000-b7c7-b830c49a8026',
+                                name: 'params 1'
+                            }
+                        },
+                        inherited: true
+                    }
+                }
+            ];
+            expect(component.inheritsParameters(parameters)).toBe(true);
+        });
+
+        it('should return false if parameters are not inherited', () => {
+            const parameters: ParameterEntity[] = [
+                {
+                    canWrite: true,
+                    parameter: {
+                        name: 'one',
+                        description: 'Description for one.',
+                        sensitive: false,
+                        value: 'value',
+                        provided: false,
+                        referencingComponents: [],
+                        parameterContext: {
+                            id: '95d4f3d2-018b-1000-b7c7-b830c49a8026',
+                            permissions: {
+                                canRead: true,
+                                canWrite: true
+                            },
+                            component: {
+                                id: '95d4f3d2-018b-1000-b7c7-b830c49a8026',
+                                name: 'params 1'
+                            }
+                        },
+                        inherited: false
+                    }
+                }
+            ];
+            expect(component.inheritsParameters(parameters)).toBe(false);
+        });
+
+        it('should return false if parameters undefined', () => {
+            expect(component.inheritsParameters(undefined)).toBe(false);
+        });
+    });
 });
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.ts
index 48986cdaa6..23ff05fed3 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/edit-parameter-context/edit-parameter-context.component.ts
@@ -145,6 +145,13 @@ export class EditParameterContext extends TabbedDialog {
         return '';
     }
 
+    inheritsParameters(parameters: ParameterEntity[] | undefined): boolean {
+        if (parameters) {
+            return parameters.some((parameterEntity) => 
parameterEntity.parameter?.inherited);
+        }
+        return false;
+    }
+
     submitForm() {
         if (this.isNew) {
             const payload: any = {


Reply via email to