Skip to content

Commit 344799d

Browse files
authored
[NIFI-14563] - Display inherited parameter contexts in the correct order (apache#9941)
1 parent d9863fe commit 344799d

File tree

2 files changed

+86
-1
lines changed

2 files changed

+86
-1
lines changed

nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/parameter-context-inheritance/parameter-context-inheritance.component.spec.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,72 @@
1818
import { ComponentFixture, TestBed } from '@angular/core/testing';
1919

2020
import { ParameterContextInheritance } from './parameter-context-inheritance.component';
21+
import { ParameterContextEntity } from '../../../../state/shared';
2122

2223
describe('ParameterContextInheritance', () => {
2324
let component: ParameterContextInheritance;
2425
let fixture: ComponentFixture<ParameterContextInheritance>;
2526

27+
const parameterContext1: ParameterContextEntity = {
28+
revision: { version: 1 },
29+
uri: '',
30+
id: 'pc 1',
31+
permissions: { canRead: true, canWrite: true },
32+
component: {
33+
id: 'pc 1',
34+
parameters: [],
35+
name: 'parameter context 1',
36+
description: 'description',
37+
boundProcessGroups: [],
38+
inheritedParameterContexts: []
39+
}
40+
};
41+
42+
const parameterContext2: ParameterContextEntity = {
43+
revision: { version: 1 },
44+
uri: '',
45+
id: 'pc 2',
46+
permissions: { canRead: true, canWrite: true },
47+
component: {
48+
id: 'pc 2',
49+
parameters: [],
50+
name: 'parameter context 2',
51+
description: 'description',
52+
boundProcessGroups: [],
53+
inheritedParameterContexts: []
54+
}
55+
};
56+
57+
const parameterContext3: ParameterContextEntity = {
58+
revision: { version: 1 },
59+
uri: '',
60+
id: 'pc 3',
61+
permissions: { canRead: true, canWrite: true },
62+
component: {
63+
id: 'pc 3',
64+
parameters: [],
65+
name: 'parameter context 3',
66+
description: 'description',
67+
boundProcessGroups: [],
68+
inheritedParameterContexts: []
69+
}
70+
};
71+
72+
const parameterContext4: ParameterContextEntity = {
73+
revision: { version: 1 },
74+
uri: '',
75+
id: 'pc 4',
76+
permissions: { canRead: true, canWrite: true },
77+
component: {
78+
id: 'pc 4',
79+
parameters: [],
80+
name: 'parameter context 4',
81+
description: 'description',
82+
boundProcessGroups: [],
83+
inheritedParameterContexts: []
84+
}
85+
};
86+
2687
beforeEach(() => {
2788
TestBed.configureTestingModule({
2889
imports: [ParameterContextInheritance]
@@ -35,4 +96,16 @@ describe('ParameterContextInheritance', () => {
3596
it('should create', () => {
3697
expect(component).toBeTruthy();
3798
});
99+
100+
it('should retain the order of inheritance', () => {
101+
component.allParameterContexts = [parameterContext1, parameterContext2, parameterContext3, parameterContext4];
102+
// set the inheritance chain
103+
component.writeValue([parameterContext2, parameterContext1, parameterContext3]);
104+
fixture.detectChanges();
105+
106+
expect(component.selectedParameterContexts.length).toEqual(3);
107+
expect(component.selectedParameterContexts[0].component?.id).toEqual('pc 2');
108+
expect(component.selectedParameterContexts[1].component?.id).toEqual('pc 1');
109+
expect(component.selectedParameterContexts[2].component?.id).toEqual('pc 3');
110+
});
38111
});

nifi-frontend/src/main/frontend/apps/nifi/src/app/ui/common/parameter-context/parameter-context-inheritance/parameter-context-inheritance.component.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,20 +89,32 @@ export class ParameterContextInheritance implements ControlValueAccessor {
8989
private processParameterContexts(): void {
9090
this.availableParameterContexts = [];
9191
this.selectedParameterContexts = [];
92+
const unsortedSelectedParameterContexts: ParameterContextEntity[] = [];
9293

9394
if (this._allParameterContexts && this.inheritedParameterContexts) {
9495
this._allParameterContexts.forEach((parameterContext) => {
9596
const isInherited: boolean = this.inheritedParameterContexts.some(
9697
(inheritedParameterContext) => parameterContext.id == inheritedParameterContext.id
9798
);
9899
if (isInherited) {
99-
this.selectedParameterContexts.push(parameterContext);
100+
unsortedSelectedParameterContexts.push(parameterContext);
100101
} else {
101102
this.availableParameterContexts.push(parameterContext);
102103
}
103104
});
104105

105106
this.sortObjectByPropertyPipe.transform(this.availableParameterContexts, 'component.name');
107+
if (this.inheritedParameterContexts.length > 0 && unsortedSelectedParameterContexts.length > 0) {
108+
// put the inherited parameter contexts in the proper order
109+
this.inheritedParameterContexts.forEach((pc) => {
110+
const selectedParameterContext = unsortedSelectedParameterContexts.find(
111+
(selected) => selected.id == pc.id
112+
);
113+
if (selectedParameterContext) {
114+
this.selectedParameterContexts.push(selectedParameterContext);
115+
}
116+
});
117+
}
106118
}
107119
}
108120

0 commit comments

Comments
 (0)