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 = {