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 f81ecff432 NIFI-14105: Fixing issue in EditProcessGroup dialog when
there is no selected Parameter Context and the user lacks permissions to an
available Parameter Context. (#9593)
f81ecff432 is described below
commit f81ecff432aad3f3686668cbe97afc365967b163
Author: Matt Gilman <[email protected]>
AuthorDate: Mon Jan 6 12:55:34 2025 -0500
NIFI-14105: Fixing issue in EditProcessGroup dialog when there is no
selected Parameter Context and the user lacks permissions to an available
Parameter Context. (#9593)
- Marked the component in the ParameterContextEntity as optional.
- Updated usage to account for possible undefined component.
---
.../create-process-group.component.ts | 4 +-
.../edit-process-group.component.html | 2 +-
.../edit-process-group.component.spec.ts | 134 +++++++++++++++++----
.../edit-process-group.component.ts | 27 ++++-
.../group-components/group-components.component.ts | 2 +-
.../parameter-context-listing.effects.ts | 5 +-
.../edit-parameter-context.component.ts | 16 ++-
.../parameter-context-inheritance.component.ts | 9 +-
.../parameter-context-table.component.ts | 10 +-
.../parameter-table/parameter-table.component.ts | 6 +-
.../apps/nifi/src/app/state/shared/index.ts | 2 +-
.../property-table/property-table.component.ts | 4 +-
12 files changed, 162 insertions(+), 59 deletions(-)
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/create-process-group/create-process-group.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/create-process-group/create-process-group.component.ts
index e102fb8131..bb901109a0 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/create-process-group/create-process-group.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/create-process-group/create-process-group.component.ts
@@ -23,7 +23,6 @@ import { CanvasState } from '../../../../../state';
import { createProcessGroup, uploadProcessGroup } from
'../../../../../state/flow/flow.actions';
import { selectSaving } from '../../../../../state/flow/flow.selectors';
import { AsyncPipe } from '@angular/common';
-import { ErrorBanner } from
'../../../../../../../ui/common/error-banner/error-banner.component';
import { MatButtonModule } from '@angular/material/button';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
@@ -42,7 +41,6 @@ import { ContextErrorBanner } from
'../../../../../../../ui/common/context-error
standalone: true,
imports: [
AsyncPipe,
- ErrorBanner,
MatButtonModule,
MatDialogModule,
MatFormFieldModule,
@@ -84,7 +82,7 @@ export class CreateProcessGroup extends CloseOnEscapeDialog {
});
dialogRequest.parameterContexts.forEach((parameterContext) => {
- if (parameterContext.permissions.canRead) {
+ if (parameterContext.permissions.canRead &&
parameterContext.component) {
this.parameterContextsOptions.push({
text: parameterContext.component.name,
value: parameterContext.id,
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.html
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.html
index 4aa12385f2..416fe4d03a 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.html
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.html
@@ -33,7 +33,7 @@
<mat-form-field>
<mat-label>Parameter Context</mat-label>
<mat-select formControlName="parameterContext">
- @for (option of parameterContextsOptions;
track option) {
+ @for (option of parameterContextsOptions;
track option.value) {
@if (option.description) {
<mat-option
[value]="option.value"
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
index 65c4f440d2..09a8bf8487 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.spec.ts
@@ -28,7 +28,8 @@ describe('EditProcessGroup', () => {
let component: EditProcessGroup;
let fixture: ComponentFixture<EditProcessGroup>;
- const parameterContextId = '95d509b9-018b-1000-daff-b7957ea7934f';
+ const noPermissionsParameterContextId =
'95d509b9-018b-1000-daff-b7957ea7935e';
+ const selectedParameterContextId = '95d509b9-018b-1000-daff-b7957ea7934f';
const data: any = {
type: 'ProcessGroup',
uri:
'https://localhost:4200/nifi-api/process-groups/162380af-018c-1000-a7eb-f5d06f77168b',
@@ -63,7 +64,7 @@ describe('EditProcessGroup', () => {
defaultBackPressureObjectThreshold: 10000,
defaultBackPressureDataSizeThreshold: '1 GB',
parameterContext: {
- id: parameterContextId
+ id: selectedParameterContextId
},
executionEngine: 'INHERITED',
maxConcurrentTasks: 1,
@@ -106,6 +107,38 @@ describe('EditProcessGroup', () => {
outputPortCount: 0
}
};
+ const parameterContexts = [
+ {
+ revision: {
+ version: 0
+ },
+ id: selectedParameterContextId,
+ uri: '',
+ permissions: {
+ canRead: true,
+ canWrite: true
+ },
+ component: {
+ name: 'params 2',
+ description: '',
+ parameters: [],
+ boundProcessGroups: [],
+ inheritedParameterContexts: [],
+ id: '95d509b9-018b-1000-daff-b7957ea7934f'
+ }
+ },
+ {
+ revision: {
+ version: 0
+ },
+ id: noPermissionsParameterContextId,
+ uri: '',
+ permissions: {
+ canRead: false,
+ canWrite: false
+ }
+ }
+ ];
beforeEach(() => {
TestBed.configureTestingModule({
@@ -124,27 +157,7 @@ describe('EditProcessGroup', () => {
});
fixture = TestBed.createComponent(EditProcessGroup);
component = fixture.componentInstance;
- component.parameterContexts = [
- {
- revision: {
- version: 0
- },
- id: parameterContextId,
- uri: '',
- permissions: {
- canRead: true,
- canWrite: true
- },
- component: {
- name: 'params 2',
- description: '',
- parameters: [],
- boundProcessGroups: [],
- inheritedParameterContexts: [],
- id: '95d509b9-018b-1000-daff-b7957ea7934f'
- }
- }
- ];
+ component.parameterContexts = parameterContexts;
fixture.detectChanges();
});
@@ -154,7 +167,78 @@ describe('EditProcessGroup', () => {
});
it('verify parameter context value', () => {
- expect(component.parameterContextsOptions.length).toEqual(2);
-
expect(component.editProcessGroupForm.get('parameterContext')?.value).toEqual(parameterContextId);
+ expect(component.parameterContextsOptions.length).toEqual(3);
+
expect(component.editProcessGroupForm.get('parameterContext')?.value).toEqual(selectedParameterContextId);
+ });
+
+ describe('no permissions to available parameter context', () => {
+ it('verify selected parameter context with permissions', () => {
+ expect(component.parameterContextsOptions.length).toEqual(3);
+
component.parameterContextsOptions.forEach((parameterContextsOption) => {
+ if (parameterContextsOption.value ===
noPermissionsParameterContextId) {
+ expect(parameterContextsOption.disabled).toBeTruthy();
+ } else if (parameterContextsOption.value ===
selectedParameterContextId) {
+ expect(parameterContextsOption.disabled).toBeFalsy();
+ }
+ });
+ });
+
+ it('verify selected parameter context with no permissions', () => {
+ // change the selected parameter context to one with no permissions
+ component.request = {
+ ...data,
+ entity: {
+ ...data.entity,
+ component: {
+ ...data.entity.component,
+ parameterContext: {
+ id: noPermissionsParameterContextId
+ }
+ }
+ }
+ };
+
+ // reset the parameter contexts to rebuild the options
+ component.parameterContexts = [...parameterContexts];
+
+ fixture.detectChanges();
+
+ expect(component.parameterContextsOptions.length).toEqual(3);
+
component.parameterContextsOptions.forEach((parameterContextsOption) => {
+ if (parameterContextsOption.value ===
noPermissionsParameterContextId) {
+ expect(parameterContextsOption.disabled).toBeFalsy();
+ } else if (parameterContextsOption.value ===
selectedParameterContextId) {
+ expect(parameterContextsOption.disabled).toBeFalsy();
+ }
+ });
+ });
+
+ it('verify no selected parameter context', () => {
+ // clear the selected parameter context
+ component.request = {
+ ...data,
+ entity: {
+ ...data.entity,
+ component: {
+ ...data.entity.component,
+ parameterContext: undefined
+ }
+ }
+ };
+
+ // reset the parameter contexts to rebuild the options
+ component.parameterContexts = [...parameterContexts];
+
+ fixture.detectChanges();
+
+ expect(component.parameterContextsOptions.length).toEqual(3);
+
component.parameterContextsOptions.forEach((parameterContextsOption) => {
+ if (parameterContextsOption.value ===
noPermissionsParameterContextId) {
+ expect(parameterContextsOption.disabled).toBeTruthy();
+ } else if (parameterContextsOption.value ===
selectedParameterContextId) {
+ expect(parameterContextsOption.disabled).toBeFalsy();
+ }
+ });
+ });
});
});
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
index e0edbb0834..254067de83 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/edit-process-group/edit-process-group.component.ts
@@ -59,18 +59,27 @@ import { ContextErrorBanner } from
'../../../../../../../ui/common/context-error
})
export class EditProcessGroup extends TabbedDialog {
@Input() set parameterContexts(parameterContexts:
ParameterContextEntity[]) {
+ this.initializeParameterContextOptions();
+
parameterContexts.forEach((parameterContext) => {
- if (parameterContext.permissions.canRead) {
+ if (parameterContext.permissions.canRead &&
parameterContext.component) {
this.parameterContextsOptions.push({
text: parameterContext.component.name,
value: parameterContext.id,
description: parameterContext.component.description
});
} else {
+ let disabled: boolean;
+ if (this.request.entity.component.parameterContext) {
+ disabled =
this.request.entity.component.parameterContext.id !== parameterContext.id;
+ } else {
+ disabled = true;
+ }
+
this.parameterContextsOptions.push({
text: parameterContext.id,
value: parameterContext.id,
- disabled:
this.request.entity.component.parameterContext.id !== parameterContext.id
+ disabled
});
}
});
@@ -167,10 +176,7 @@ export class EditProcessGroup extends TabbedDialog {
this.readonly = !request.entity.permissions.canWrite;
- this.parameterContextsOptions.push({
- text: 'No parameter context',
- value: null
- });
+ this.initializeParameterContextOptions();
this.editProcessGroupForm = this.formBuilder.group({
name: new FormControl(request.entity.component.name,
Validators.required),
@@ -203,6 +209,15 @@ export class EditProcessGroup extends TabbedDialog {
this.executionEngineChanged(request.entity.component.executionEngine);
}
+ private initializeParameterContextOptions(): void {
+ this.parameterContextsOptions = [
+ {
+ text: 'No parameter context',
+ value: null
+ }
+ ];
+ }
+
executionEngineChanged(value: string): void {
if (value == this.STATELESS) {
this.editProcessGroupForm.addControl(
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/group-components/group-components.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/group-components/group-components.component.ts
index b8be35788b..d392537445 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/group-components/group-components.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/flow-designer/ui/canvas/items/process-group/group-components/group-components.component.ts
@@ -73,7 +73,7 @@ export class GroupComponents {
});
dialogRequest.parameterContexts.forEach((parameterContext) => {
- if (parameterContext.permissions.canRead) {
+ if (parameterContext.permissions.canRead &&
parameterContext.component) {
this.parameterContextsOptions.push({
text: parameterContext.component.name,
value: parameterContext.id,
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts
index ddc65aa457..ea5c5d506f 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/state/parameter-context-listing/parameter-context-listing.effects.ts
@@ -534,11 +534,14 @@ export class ParameterContextListingEffects {
ofType(ParameterContextListingActions.promptParameterContextDeletion),
map((action) => action.request),
tap((request) => {
+ // @ts-ignore - component will be defined since the user
has permissions to delete the context, but it is optional as defined by the type
+ const name = request.parameterContext.component.name;
+
const dialogReference = this.dialog.open(YesNoDialog, {
...SMALL_DIALOG,
data: {
title: 'Delete Parameter Context',
- message: `Delete parameter context
${request.parameterContext.component.name}?`
+ message: `Delete parameter context ${name}?`
}
});
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
index 9c725a2d98..3da070af09 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/edit-parameter-context/edit-parameter-context.component.ts
@@ -32,6 +32,7 @@ import { Client } from
'../../../../../service/client.service';
import { ParameterTable } from '../parameter-table/parameter-table.component';
import {
EditParameterResponse,
+ ParameterContext,
ParameterContextEntity,
ParameterContextUpdateRequestEntity,
ParameterEntity,
@@ -104,20 +105,23 @@ export class EditParameterContext extends TabbedDialog {
this.isNew = false;
this.readonly = !request.parameterContext.permissions.canWrite;
+ // @ts-ignore - component will be defined since the user has
permissions to edit the context, but it is optional as defined by the type
+ const parameterContext: ParameterContext =
request.parameterContext.component;
+
this.editParameterContextForm = this.formBuilder.group({
- name: new FormControl(request.parameterContext.component.name,
Validators.required),
- description: new
FormControl(request.parameterContext.component.description),
+ name: new FormControl(parameterContext.name,
Validators.required),
+ description: new FormControl(parameterContext.description),
parameters: new FormControl({
- value: request.parameterContext.component.parameters,
+ value: parameterContext.parameters,
disabled: this.readonly
}),
inheritedParameterContexts: new FormControl({
- value:
request.parameterContext.component.inheritedParameterContexts,
+ value: parameterContext.inheritedParameterContexts,
disabled: this.readonly
})
});
- if
(request.parameterContext.component.parameterProviderConfiguration) {
- this.parameterProvider =
request.parameterContext.component.parameterProviderConfiguration.component;
+ if (parameterContext.parameterProviderConfiguration) {
+ this.parameterProvider =
parameterContext.parameterProviderConfiguration.component;
}
} else {
this.isNew = true;
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-inheritance/parameter-context-inheritance.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-inheritance/parameter-context-inheritance.component.ts
index d2128f2f5e..3bd3f195a5 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-inheritance/parameter-context-inheritance.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-inheritance/parameter-context-inheritance.component.ts
@@ -113,7 +113,7 @@ export class ParameterContextInheritance implements
ControlValueAccessor {
}
hasDescription(entity: ParameterContextEntity): boolean {
- return !this.nifiCommon.isBlank(entity.component.description);
+ return !this.nifiCommon.isBlank(entity.component?.description);
}
removeSelected(entity: ParameterContextEntity, i: number): void {
@@ -172,12 +172,15 @@ export class ParameterContextInheritance implements
ControlValueAccessor {
private serializeInheritedParameterContexts():
ParameterContextReferenceEntity[] {
return this.selectedParameterContexts.map((parameterContext) => {
+ // @ts-ignore - component will be defined since the user has
permissions to inherit from the context, but it is optional as defined by the
type
+ const name = parameterContext.component.name;
+
return {
permissions: parameterContext.permissions,
id: parameterContext.id,
component: {
- id: parameterContext.component.id,
- name: parameterContext.component.name
+ id: parameterContext.id,
+ name
}
};
});
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.ts
index 178dad8eab..07c938ba18 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.ts
@@ -63,11 +63,11 @@ export class ParameterContextTable {
}
formatName(entity: ParameterContextEntity): string {
- return this.canRead(entity) ? entity.component.name : entity.id;
+ return this.canRead(entity) && entity.component ?
entity.component.name : entity.id;
}
formatProvider(entity: ParameterContextEntity): string {
- if (!this.canRead(entity)) {
+ if (!this.canRead(entity) || !entity.component) {
return '';
}
const paramProvider = entity.component.parameterProviderConfiguration;
@@ -78,7 +78,7 @@ export class ParameterContextTable {
}
formatDescription(entity: ParameterContextEntity): string {
- return this.canRead(entity) ? entity.component.description : '';
+ return this.canRead(entity) && entity.component ?
entity.component.description : '';
}
editClicked(entity: ParameterContextEntity): void {
@@ -105,14 +105,14 @@ export class ParameterContextTable {
}
canGoToParameterProvider(entity: ParameterContextEntity): boolean {
- if (!this.canRead(entity)) {
+ if (!this.canRead(entity) || !entity.component) {
return false;
}
return !!entity.component.parameterProviderConfiguration;
}
getParameterProviderLink(entity: ParameterContextEntity): string[] {
- if (!entity.component.parameterProviderConfiguration) {
+ if (!this.canRead(entity) || !entity.component ||
!entity.component.parameterProviderConfiguration) {
return [];
}
return ['/settings', 'parameter-providers',
entity.component.parameterProviderConfiguration.id];
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 97c919dc9b..c2572ace4c 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
@@ -20,8 +20,7 @@ import { ControlValueAccessor, 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';
-import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
-import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
+import { NgTemplateOutlet } from '@angular/common';
import { RouterLink } from '@angular/router';
import { EditParameterResponse, ParameterEntity } from
'../../../../../state/shared';
import { NifiTooltipDirective, NiFiCommon, TextTip, Parameter } from
'@nifi/shared';
@@ -51,10 +50,7 @@ export interface ParameterItem {
MatTableModule,
MatSortModule,
NgTemplateOutlet,
- CdkOverlayOrigin,
- CdkConnectedOverlay,
RouterLink,
- AsyncPipe,
NifiTooltipDirective,
ParameterReferences,
MatMenu,
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
index a2075d6c95..1143a4d062 100644
--- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
+++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
@@ -281,7 +281,7 @@ export interface ParameterContextEntity {
permissions: Permissions;
id: string;
uri: string;
- component: ParameterContext;
+ component?: ParameterContext;
}
export interface ParameterContext {
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/property-table/property-table.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/property-table/property-table.component.ts
index 7796aa0a20..9dd9b42e21 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/property-table/property-table.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/property-table/property-table.component.ts
@@ -235,7 +235,7 @@ export class PropertyTable implements AfterViewInit,
ControlValueAccessor {
// the dependent value contains parameter reference, if the
user can view
// the parameter context resolve the parameter value to see if
it
// satisfies the dependent values
- if (this.parameterContext?.permissions.canRead) {
+ if (this.parameterContext?.permissions.canRead &&
this.parameterContext.component) {
const referencedParameter =
this.parameterContext.component.parameters
.map((parameterEntity) => parameterEntity.parameter)
.find((parameter: Parameter) => dependentValue ==
`#{${parameter.name}}`);
@@ -328,7 +328,7 @@ export class PropertyTable implements AfterViewInit,
ControlValueAccessor {
if (!this.supportsParameters || !this.parameterContext) {
return null;
}
- if (this.parameterContext.permissions.canRead) {
+ if (this.parameterContext.permissions.canRead &&
this.parameterContext.component) {
return this.parameterContext.component.parameters
.map((parameterEntity) => parameterEntity.parameter)
.filter((parameter: Parameter) => parameter.sensitive ==
propertyItem.descriptor.sensitive);