This is an automated email from the ASF dual-hosted git repository.
mcgilman 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 649bfcf53e NIFI-14485 Add Bounded Process Group column to Parameter
Contexts Page (#9884)
649bfcf53e is described below
commit 649bfcf53e361f0ac16a0fb189cf89fd3deae00f
Author: buczi <[email protected]>
AuthorDate: Wed Jul 23 00:20:21 2025 +0200
NIFI-14485 Add Bounded Process Group column to Parameter Contexts Page
(#9884)
* NIFI-14485 Add Process Group Column to Parameter Context page
Signed-off-by: Maciej Bukalo <[email protected]>
* NIFI-14485 Filter out bound process groups without read permission
Signed-off-by: Maciej Bukalo <[email protected]>
* NIFI-14485 Reformat files
Signed-off-by: Maciej Bukalo <[email protected]>
* NIFI-14485 Show all available process groups when hovering
Signed-off-by: Maciej Bukalo <[email protected]>
* NIFI-14485 Adjust process group column in parameter context
Signed-off-by: Maciej Bukalo <[email protected]>
* NIFI-14485 Add full tests compatible with es2016
Signed-off-by: Maciej Bukalo <[email protected]>
* NIFI-14485 Remove failing tess
Signed-off-by: Maciej Bukalo <[email protected]>
---------
Signed-off-by: Maciej Bukalo <[email protected]>
---
.../feature/parameter-contexts.module.ts | 4 +-
.../parameter-context-table.component.html | 20 ++
.../parameter-context-table.component.scss | 2 +-
.../parameter-context-table.component.spec.ts | 306 ++++++++++++++++++++-
.../parameter-context-table.component.ts | 52 +++-
.../process-group-references.component.html | 6 +-
.../process-group-references.component.scss | 10 +-
.../process-group-references.component.ts | 1 +
.../process-group-tip.component.html | 22 ++
.../process-group-tip.component.scss} | 8 +-
.../process-group-tip.component.spec.ts} | 13 +-
.../process-group-tip.component.ts} | 18 +-
12 files changed, 431 insertions(+), 31 deletions(-)
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.module.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.module.ts
index f5f212ed75..721cb84472 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.module.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/feature/parameter-contexts.module.ts
@@ -26,6 +26,7 @@ import { ParameterContextListingEffects } from
'../state/parameter-context-listi
import { Navigation } from
'../../../ui/common/navigation/navigation.component';
import { BannerText } from
'../../../ui/common/banner-text/banner-text.component';
import { ParameterContextListing } from
'../ui/parameter-context-listing/parameter-context-listing.component';
+import { ProcessGroupReferences } from
'../ui/parameter-context-listing/process-group-references/process-group-references.component';
@NgModule({
declarations: [ParameterContexts],
@@ -37,7 +38,8 @@ import { ParameterContextListing } from
'../ui/parameter-context-listing/paramet
EffectsModule.forFeature(ParameterContextListingEffects),
ParameterContextListing,
Navigation,
- BannerText
+ BannerText,
+ ProcessGroupReferences
]
})
export class ParameterContextsModule {}
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.html
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.html
index 44dce74ab8..a3421adac7 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.html
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.html
@@ -54,6 +54,26 @@
</td>
</ng-container>
+ <!-- Process Group Column -->
+ <ng-container matColumnDef="process groups">
+ <th mat-header-cell *matHeaderCellDef mat-sort-header>Process
Groups</th>
+ <td mat-cell *matCellDef="let item">
+ <div class="flex justify-start gap-x-2 items-center">
+ @let hasMultipleGroups =
hasMultipleProcessGroups(item);
+ <div [class.unset]="hasMultipleGroups">
+ {{ formatProcessGroups(item) }}
+ </div>
+ @if (hasMultipleGroups) {
+ <i
+ class="fa fa-info-circle primary-color"
+ nifiTooltip
+ [tooltipComponentType]="ProcessGroupTip"
+
[tooltipInputData]="getBoundedProcessGroups(item)"></i>
+ }
+ </div>
+ </td>
+ </ng-container>
+
<!-- Actions Column -->
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef></th>
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.scss
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.scss
index 08d3256a74..5cf03d8d2f 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.scss
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.scss
@@ -18,7 +18,7 @@
.parameter-context-table {
.listing-table {
.mat-column-name {
- width: 25%;
+ width: 20%;
}
}
}
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.spec.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.spec.ts
index b50ddbac10..cd2a3bb1a0 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.spec.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.spec.ts
@@ -19,6 +19,11 @@ import { ComponentFixture, TestBed } from
'@angular/core/testing';
import { ParameterContextTable } from './parameter-context-table.component';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { MatTableDataSource } from '@angular/material/table';
+import { ParameterContextEntity } from '../../../../../state/shared';
+import { Sort } from '@angular/material/sort';
+import { RouterModule } from '@angular/router';
+import { MatIconModule } from '@angular/material/icon';
describe('ParameterContextTable', () => {
let component: ParameterContextTable;
@@ -26,7 +31,7 @@ describe('ParameterContextTable', () => {
beforeEach(() => {
TestBed.configureTestingModule({
- imports: [ParameterContextTable, NoopAnimationsModule]
+ imports: [ParameterContextTable, NoopAnimationsModule,
RouterModule, MatIconModule]
});
fixture = TestBed.createComponent(ParameterContextTable);
component = fixture.componentInstance;
@@ -36,4 +41,303 @@ describe('ParameterContextTable', () => {
it('should create', () => {
expect(component).toBeTruthy();
});
+
+ describe('with canRead returning true', () => {
+ beforeEach(() => {
+ jest.spyOn(component, 'canRead').mockReturnValue(true);
+ });
+
+ it('should format name correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ name: 'Example Name'
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatName(entity)).toEqual('Example Name');
+ });
+
+ it('should format provider correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ parameterProviderConfiguration: {
+ component: {
+ parameterGroupName: 'Example Group Name',
+ parameterProviderName: 'Example Provider'
+ }
+ }
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProvider(entity)).toEqual('Example Group
Name from Example Provider');
+ });
+
+ it('should format description correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ description: 'Example Description'
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatDescription(entity)).toEqual('Example
Description');
+ });
+
+ it('should format process groups correctly when there are more than 1
process group', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ boundProcessGroups: [
+ {
+ id: '1',
+ permissions: { canRead: true },
+ component: { id: '111', name: 'PG1' }
+ },
+ {
+ id: '2',
+ permissions: { canRead: true },
+ component: { id: '222', name: 'PG1' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProcessGroups(entity)).toEqual('2
referencing Process Groups');
+ });
+
+ it('should format process groups correctly when there is one process
group', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ boundProcessGroups: [
+ {
+ id: '1',
+ permissions: { canRead: true },
+ component: { id: '111', name: 'PG1' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProcessGroups(entity)).toEqual('PG1');
+ });
+
+ it('should format process groups correctly when there are no process
groups', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ boundProcessGroups: []
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProcessGroups(entity)).toEqual('');
+ });
+
+ it('should format process groups correctly when there is 1 process
groups but without read permission', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ boundProcessGroups: [
+ {
+ id: '1',
+ permissions: { canRead: false },
+ component: { id: '111', name: 'PG1' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProcessGroups(entity)).toEqual('1
referencing Process Group');
+ });
+
+ it.each([
+ { active: 'name', direction: 'asc', expectedOrder: ['2', '1', '3']
},
+ { active: 'name', direction: 'desc', expectedOrder: ['3', '1',
'2'] },
+ { active: 'description', direction: 'asc', expectedOrder: ['2',
'1', '3'] },
+ { active: 'description', direction: 'desc', expectedOrder: ['3',
'1', '2'] },
+ { active: 'provider', direction: 'asc', expectedOrder: ['1', '2',
'3'] },
+ { active: 'provider', direction: 'desc', expectedOrder: ['3', '2',
'1'] },
+ { active: 'process groups', direction: 'asc', expectedOrder: ['1',
'2', '3'] },
+ { active: 'process groups', direction: 'desc', expectedOrder:
['3', '2', '1'] }
+ ])('should sort entities correctly by %s', ({ active, direction,
expectedOrder }) => {
+ const mockEntities = [
+ {
+ id: '1',
+ component: {
+ name: 'B',
+ description: 'Second',
+ parameterProviderConfiguration: {
+ component: {
+ parameterGroupName: 'Name1'
+ }
+ },
+ boundProcessGroups: [
+ {
+ id: '1',
+ permissions: { canRead: true },
+ component: { id: '111', name: 'PG1' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity,
+ {
+ id: '2',
+ component: {
+ name: 'A',
+ description: 'First',
+ parameterProviderConfiguration: {
+ component: {
+ parameterGroupName: 'Name2'
+ }
+ },
+ boundProcessGroups: [
+ {
+ id: '2',
+ permissions: { canRead: true },
+ component: { id: '222', name: 'PG2' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity,
+ {
+ id: '3',
+ component: {
+ name: 'C',
+ description: 'Third',
+ parameterProviderConfiguration: {
+ component: {
+ parameterGroupName: 'Name3'
+ }
+ },
+ boundProcessGroups: [
+ {
+ id: '3',
+ permissions: { canRead: true },
+ component: { id: '333', name: 'PG3' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity
+ ] as ParameterContextEntity[];
+
+ const sortEvent = { active, direction } as Sort;
+ component.dataSource = new MatTableDataSource(mockEntities);
+
+ component.sortData(sortEvent);
+ const sortedData = component.dataSource.data.map((entity) =>
entity.id);
+
+ expect(sortedData).toEqual(expectedOrder);
+ });
+ });
+
+ describe('with canRead returning false', () => {
+ beforeEach(() => {
+ jest.spyOn(component, 'canRead').mockReturnValue(false);
+ });
+
+ it('should format name correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ name: 'Example Name'
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatName(entity)).toEqual('1');
+ });
+
+ it('should format provider correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ parameterProviderConfiguration: {
+ component: {
+ parameterGroupName: 'Example Group Name',
+ parameterProviderName: 'Example Provider'
+ }
+ }
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProvider(entity)).toEqual('');
+ });
+
+ it('should format description correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ description: 'Example Description'
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatDescription(entity)).toEqual('');
+ });
+
+ it('should format process groups correctly', () => {
+ const entity: ParameterContextEntity = {
+ id: '1',
+ component: {
+ boundProcessGroups: [
+ {
+ id: '1',
+ permissions: { canRead: true },
+ component: { id: '111', name: 'PG1' }
+ },
+ {
+ id: '2',
+ permissions: { canRead: true },
+ component: { id: '222', name: 'PG1' }
+ }
+ ]
+ }
+ } as unknown as ParameterContextEntity;
+
+ expect(component.formatProcessGroups(entity)).toEqual('');
+ });
+ });
+
+ describe('verify parameter context actions', () => {
+ const parameterContext: ParameterContextEntity = {
+ id: '1',
+ permissions: { canRead: true, canWrite: true },
+ revision: { version: 0, clientId: '1', lastModifier: '1' },
+ uri: '/nifi-api/parameter-contexts/1',
+ component: {
+ name: 'Test Parameter Context',
+ description: 'Test Description',
+ parameterProviderConfiguration: {
+ component: {
+ parameterGroupName: 'Test Group'
+ }
+ },
+ boundProcessGroups: []
+ }
+ } as unknown as ParameterContextEntity;
+
+ it('should trigger the select action', async () => {
+ jest.spyOn(component.selectParameterContext, 'next');
+ component.select(parameterContext);
+
expect(component.selectParameterContext.next).toHaveBeenCalledWith(parameterContext);
+ });
+
+ it('should trigger the edit action', () => {
+ jest.spyOn(component.editParameterContext, 'next');
+ component.editClicked(parameterContext);
+
expect(component.editParameterContext.next).toHaveBeenCalledWith(parameterContext);
+ });
+
+ it('should trigger the delete action', () => {
+ jest.spyOn(component.deleteParameterContext, 'next');
+ component.deleteClicked(parameterContext);
+
expect(component.deleteParameterContext.next).toHaveBeenCalledWith(parameterContext);
+ });
+
+ it('should trigger the manage access policies action', () => {
+ jest.spyOn(component.manageAccessPolicies, 'next');
+ component.manageAccessPoliciesClicked(parameterContext);
+
expect(component.manageAccessPolicies.next).toHaveBeenCalledWith(parameterContext);
+ });
+ });
});
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 1eb8088587..fbbc0744a3 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
@@ -18,23 +18,34 @@
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { MatSortModule, Sort } from '@angular/material/sort';
-import { NiFiCommon } from '@nifi/shared';
+import { NiFiCommon, NifiTooltipDirective } from '@nifi/shared';
import { FlowConfiguration } from '../../../../../state/flow-configuration';
import { CurrentUser } from '../../../../../state/current-user';
-import { ParameterContextEntity } from '../../../../../state/shared';
+import { BoundProcessGroup, ParameterContextEntity } from
'../../../../../state/shared';
import { MatIconButton } from '@angular/material/button';
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
import { RouterLink } from '@angular/router';
import { NgClass } from '@angular/common';
+import { ProcessGroupTip } from
'../../../../../ui/common/tooltips/process-group-tip/process-group-tip.component';
@Component({
selector: 'parameter-context-table',
templateUrl: './parameter-context-table.component.html',
styleUrls: ['./parameter-context-table.component.scss'],
- imports: [MatTableModule, MatSortModule, MatIconButton, MatMenuTrigger,
MatMenu, MatMenuItem, RouterLink, NgClass]
+ imports: [
+ MatTableModule,
+ MatSortModule,
+ MatIconButton,
+ MatMenuTrigger,
+ MatMenu,
+ MatMenuItem,
+ RouterLink,
+ NgClass,
+ NifiTooltipDirective
+ ]
})
export class ParameterContextTable {
- @Input() initialSortColumn: 'name' | 'provider' | 'description' = 'name';
+ @Input() initialSortColumn: 'name' | 'provider' | 'description' | 'process
groups' = 'name';
@Input() initialSortDirection: 'asc' | 'desc' = 'asc';
activeSort: Sort = {
active: this.initialSortColumn,
@@ -54,7 +65,7 @@ export class ParameterContextTable {
@Output() deleteParameterContext: EventEmitter<ParameterContextEntity> =
new EventEmitter<ParameterContextEntity>();
@Output() manageAccessPolicies: EventEmitter<ParameterContextEntity> = new
EventEmitter<ParameterContextEntity>();
- displayedColumns: string[] = ['name', 'provider', 'description',
'actions'];
+ displayedColumns: string[] = ['name', 'provider', 'description', 'process
groups', 'actions'];
dataSource: MatTableDataSource<ParameterContextEntity> = new
MatTableDataSource<ParameterContextEntity>();
constructor(private nifiCommon: NiFiCommon) {}
@@ -86,6 +97,32 @@ export class ParameterContextTable {
return this.canRead(entity) && entity.component ?
entity.component.description : '';
}
+ formatProcessGroups(entity: ParameterContextEntity): string {
+ const boundedProcessGroups = this.getBoundedProcessGroups(entity);
+ return boundedProcessGroups.length <= 1
+ ? this.getAllowedProcessGroupName(boundedProcessGroups)
+ : boundedProcessGroups.length.toString() + ' referencing Process
Groups';
+ }
+
+ hasMultipleProcessGroups(entity: ParameterContextEntity): boolean {
+ const boundedProcessGroups = this.getBoundedProcessGroups(entity);
+ return boundedProcessGroups.length > 1;
+ }
+
+ getBoundedProcessGroups(entity: ParameterContextEntity):
BoundProcessGroup[] {
+ if (!this.canRead(entity) || entity.component === undefined) {
+ return [];
+ }
+ return entity.component.boundProcessGroups;
+ }
+
+ private getAllowedProcessGroupName(groups: BoundProcessGroup[]): string {
+ if (groups.length === 0) {
+ return '';
+ }
+ return groups[0].permissions.canRead ? groups[0].component.name : '1
referencing Process Group';
+ }
+
editClicked(entity: ParameterContextEntity): void {
this.editParameterContext.next(entity);
}
@@ -157,10 +194,15 @@ export class ParameterContextTable {
case 'description':
retVal =
this.nifiCommon.compareString(this.formatDescription(a),
this.formatDescription(b));
break;
+ case 'process groups':
+ retVal =
this.nifiCommon.compareString(this.formatProcessGroups(a),
this.formatProcessGroups(b));
+ break;
default:
return 0;
}
return retVal * (isAsc ? 1 : -1);
});
}
+
+ protected readonly ProcessGroupTip = ProcessGroupTip;
}
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.html
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.html
index fccf63741c..20337f7720 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.html
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.html
@@ -53,7 +53,11 @@
@if (references.length > 0) {
@for (reference of references; track reference) {
<li>
- <a [routerLink]="getRouteForReference(reference)">{{
reference.component.name }}</a>
+ @if (disabledLinks) {
+ {{ reference.component.name }}
+ } @else {
+ <a
[routerLink]="getRouteForReference(reference)">{{ reference.component.name
}}</a>
+ }
</li>
}
}
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
index 907d0568d8..08ebc77f1b 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
@@ -16,8 +16,14 @@
*/
.process-group-references {
- ul.nested {
- padding-inline-start: 20px;
+ ul {
+ list-style: none;
+ margin: 0;
+
+ &.nested {
+ list-style: disc;
+ padding-inline-start: 20px;
+ }
}
.references {
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.ts
index 5e88c7d8e2..e80d1d3470 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.ts
@@ -35,6 +35,7 @@ export class ProcessGroupReferences {
this.authorizedProcessGroupReferences =
this.getAuthorized(processGroupReferences);
this.unauthorizedProcessGroupReferences =
this.getUnauthorized(processGroupReferences);
}
+ @Input() disabledLinks = false;
authorizedProcessGroupReferences: BoundProcessGroup[] = [];
unauthorizedProcessGroupReferences: BoundProcessGroup[] = [];
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.html
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.html
new file mode 100644
index 0000000000..25e90c670c
--- /dev/null
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.html
@@ -0,0 +1,22 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<div class="tooltip process-group-tip">
+ @if (data) {
+ <process-group-references [processGroupReferences]="data"
[disabledLinks]="true"> </process-group-references>
+ }
+</div>
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.scss
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.scss
similarity index 87%
copy from
nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.scss
copy to
nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.scss
index 08d3256a74..c36976bf29 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.scss
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.scss
@@ -15,10 +15,6 @@
* limitations under the License.
*/
-.parameter-context-table {
- .listing-table {
- .mat-column-name {
- width: 25%;
- }
- }
+.process-group-tip {
+ max-width: 400px;
}
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.spec.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.spec.ts
similarity index 72%
copy from
nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/parameter-context-table/parameter-context-table.component.spec.ts
copy to
nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.spec.ts
index b50ddbac10..a4c607c10a 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.spec.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.spec.ts
@@ -17,18 +17,17 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ParameterContextTable } from './parameter-context-table.component';
-import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { ProcessGroupTip } from './process-group-tip.component';
-describe('ParameterContextTable', () => {
- let component: ParameterContextTable;
- let fixture: ComponentFixture<ParameterContextTable>;
+describe('ProcessGroupTip', () => {
+ let component: ProcessGroupTip;
+ let fixture: ComponentFixture<ProcessGroupTip>;
beforeEach(() => {
TestBed.configureTestingModule({
- imports: [ParameterContextTable, NoopAnimationsModule]
+ imports: [ProcessGroupTip]
});
- fixture = TestBed.createComponent(ParameterContextTable);
+ fixture = TestBed.createComponent(ProcessGroupTip);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.ts
similarity index 58%
copy from
nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
copy to
nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.ts
index 907d0568d8..54a20ab6e4 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component.scss
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/tooltips/process-group-tip/process-group-tip.component.ts
@@ -15,12 +15,16 @@
* limitations under the License.
*/
-.process-group-references {
- ul.nested {
- padding-inline-start: 20px;
- }
+import { Component, Input } from '@angular/core';
+import { BoundProcessGroup } from '../../../../state/shared';
+import { ProcessGroupReferences } from
'../../../../pages/parameter-contexts/ui/parameter-context-listing/process-group-references/process-group-references.component';
- .references {
- margin-left: 20px;
- }
+@Component({
+ selector: 'process-group-tip',
+ templateUrl: './process-group-tip.component.html',
+ imports: [ProcessGroupReferences],
+ styleUrls: ['./process-group-tip.component.scss']
+})
+export class ProcessGroupTip {
+ @Input() data: BoundProcessGroup[] | undefined;
}