[NIFI-14185] - upgrade angular 19, nx 20 (#9669)

* [NIFI-14185] - Upgrade to Angular 19 as well as migrating to Nx 20

* linting fixes, prettier fix, jest config supporting usage of d3 when testing

* upgrade ngx-skeleton-loader to be compatible with angular 19

* added comment about the jest/d3 workaround

* prettier

* required fixes for issues broken after the version upgrade: documentation expansion panel scrolling, minor compile issues

* ran prettier
This commit is contained in:
Rob Fellows 2025-01-31 14:40:45 -05:00 committed by GitHub
parent 78f7395ea1
commit 31ca24e972
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
262 changed files with 6480 additions and 3460 deletions

View File

@ -26,7 +26,8 @@
{
"suffixes": [""]
}
]
],
"@angular-eslint/prefer-standalone": "warn"
}
},
{

View File

@ -46,3 +46,5 @@ Thumbs.db
.nx/cache
.nx/workspace-data
.angular
migrations.json

View File

@ -38,7 +38,8 @@
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-this-alias": "warn",
"@typescript-eslint/no-unused-vars": "warn",
"no-useless-escape": "off"
"no-useless-escape": "off",
"@angular-eslint/prefer-standalone": "warn"
}
}
]

View File

@ -21,7 +21,8 @@ import { Storage, ThemingService } from '@nifi/shared';
@Component({
selector: 'nifi-jolt-transform-json-ui',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
styleUrls: ['./app.component.scss'],
standalone: false
})
export class AppComponent {
title = 'nifi-jolt-transform-json-ui';

View File

@ -67,7 +67,8 @@ const JS_BEAUTIFY_OPTIONS = {
@Component({
selector: 'jolt-transform-json-ui',
templateUrl: './jolt-transform-json-ui.component.html',
styleUrls: ['./jolt-transform-json-ui.component.scss']
styleUrls: ['./jolt-transform-json-ui.component.scss'],
standalone: false
})
export class JoltTransformJsonUi implements OnDestroy {
private processorId$ = this.store.selectSignal(selectProcessorIdFromRoute);

View File

@ -33,7 +33,8 @@
// Include the common styles for Angular Material. We include this here so that you only
// have to load a single css file for Angular Material in your app.
// Be sure that you only ever include this mixin once!
@include mat.core();
@include mat.elevation-classes();
@include mat.app-background();
@tailwind base;
@tailwind components;

View File

@ -38,7 +38,8 @@
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-this-alias": "warn",
"@typescript-eslint/no-unused-vars": "warn",
"no-useless-escape": "off"
"no-useless-escape": "off",
"@angular-eslint/prefer-standalone": "warn"
}
}
]

View File

@ -40,7 +40,8 @@ import { DocumentVisibility } from './state/document-visibility';
@Component({
selector: 'nifi',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
styleUrls: ['./app.component.scss'],
standalone: false
})
export class AppComponent implements OnDestroy {
title = 'nifi';

View File

@ -20,6 +20,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'access-policies',
templateUrl: './access-policies.component.html',
styleUrls: ['./access-policies.component.scss']
styleUrls: ['./access-policies.component.scss'],
standalone: false
})
export class AccessPolicies {}

View File

@ -35,7 +35,6 @@ import { CloseOnEscapeDialog } from '@nifi/shared';
@Component({
selector: 'add-tenant-to-policy-dialog',
standalone: true,
imports: [
MatDialogModule,
MatButtonModule,

View File

@ -24,7 +24,6 @@ import { CloseOnEscapeDialog } from '@nifi/shared';
@Component({
selector: 'override-policy-dialog',
standalone: true,
imports: [MatDialogModule, MatButtonModule, FormsModule, ReactiveFormsModule, MatRadioModule],
templateUrl: './override-policy-dialog.component.html',
styleUrls: ['./override-policy-dialog.component.scss']

View File

@ -35,7 +35,6 @@ export interface TenantItem {
@Component({
selector: 'policy-table',
standalone: true,
templateUrl: './policy-table.component.html',
imports: [MatTableModule, MatSortModule, MatIconButton, MatMenu, MatMenuTrigger, MatMenuItem],
styleUrls: ['./policy-table.component.scss']

View File

@ -51,7 +51,8 @@ import { ErrorContextKey } from '../../../../state/error';
@Component({
selector: 'global-access-policies',
templateUrl: './component-access-policies.component.html',
styleUrls: ['./component-access-policies.component.scss']
styleUrls: ['./component-access-policies.component.scss'],
standalone: false
})
export class ComponentAccessPolicies implements OnInit, OnDestroy {
flowConfiguration$ = this.store.select(selectFlowConfiguration);

View File

@ -52,7 +52,8 @@ import { ErrorContextKey } from '../../../../state/error';
@Component({
selector: 'global-access-policies',
templateUrl: './global-access-policies.component.html',
styleUrls: ['./global-access-policies.component.scss']
styleUrls: ['./global-access-policies.component.scss'],
standalone: false
})
export class GlobalAccessPolicies implements OnInit, OnDestroy {
flowConfiguration$ = this.store.select(selectFlowConfiguration);

View File

@ -20,6 +20,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'bulletins',
templateUrl: './bulletins.component.html',
styleUrls: ['./bulletins.component.scss']
styleUrls: ['./bulletins.component.scss'],
standalone: false
})
export class Bulletins {}

View File

@ -40,7 +40,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'bulletin-board-list',
standalone: true,
imports: [MatFormFieldModule, MatInputModule, MatOptionModule, MatSelectModule, ReactiveFormsModule, RouterLink],
templateUrl: './bulletin-board-list.component.html',
styleUrls: ['./bulletin-board-list.component.scss']

View File

@ -46,7 +46,6 @@ import { MatButtonModule } from '@angular/material/button';
@Component({
selector: 'bulletin-board',
standalone: true,
imports: [
NgxSkeletonLoaderModule,
MatFormFieldModule,

View File

@ -44,7 +44,8 @@ interface TabLink {
@Component({
selector: 'cluster',
templateUrl: './cluster.component.html',
styleUrls: ['./cluster.component.scss']
styleUrls: ['./cluster.component.scss'],
standalone: false
})
export class Cluster implements OnInit, OnDestroy {
private _currentUser!: CurrentUser;

View File

@ -40,7 +40,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'cluster-content-storage-listing',
standalone: true,
imports: [AsyncPipe, NgxSkeletonLoaderModule, RepositoryStorageTable],
templateUrl: './cluster-content-storage-listing.component.html',
styleUrl: './cluster-content-storage-listing.component.scss'

View File

@ -39,7 +39,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'cluster-flow-file-storage-listing',
standalone: true,
imports: [RepositoryStorageTable, NgxSkeletonLoaderModule, AsyncPipe],
templateUrl: './cluster-flow-file-storage-listing.component.html',
styleUrl: './cluster-flow-file-storage-listing.component.scss'

View File

@ -33,7 +33,6 @@ import { clearJvmNodeSelection, selectJvmNode } from '../../state/cluster-listin
@Component({
selector: 'cluster-jvm-listing',
standalone: true,
imports: [ClusterSystemTable, NgxSkeletonLoaderModule, ClusterJvmTable],
templateUrl: './cluster-jvm-listing.component.html',
styleUrl: './cluster-jvm-listing.component.scss'

View File

@ -31,7 +31,6 @@ import { ConnectedPosition } from '@angular/cdk/overlay';
@Component({
selector: 'cluster-jvm-table',
standalone: true,
imports: [ClusterTableFilter, MatTableModule, MatSortModule, NifiTooltipDirective],
templateUrl: './cluster-jvm-table.component.html',
styleUrl: './cluster-jvm-table.component.scss'

View File

@ -23,7 +23,6 @@ import { CloseOnEscapeDialog, CopyDirective } from '@nifi/shared';
@Component({
selector: 'cluster-node-detail-dialog',
standalone: true,
imports: [MatDialogModule, MatButton, CopyDirective],
templateUrl: './cluster-node-detail-dialog.component.html',
styleUrl: './cluster-node-detail-dialog.component.scss'

View File

@ -41,7 +41,6 @@ import { selectCurrentUser } from '../../../../state/current-user/current-user.s
@Component({
selector: 'cluster-node-listing',
standalone: true,
imports: [NgxSkeletonLoaderModule, ClusterNodeTable],
templateUrl: './cluster-node-listing.component.html',
styleUrl: './cluster-node-listing.component.scss'

View File

@ -32,7 +32,6 @@ import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
@Component({
selector: 'cluster-node-table',
standalone: true,
imports: [
MatCell,
MatHeaderCell,

View File

@ -40,7 +40,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'cluster-provenance-storage-listing',
standalone: true,
imports: [AsyncPipe, NgxSkeletonLoaderModule, RepositoryStorageTable],
templateUrl: './cluster-provenance-storage-listing.component.html',
styleUrl: './cluster-provenance-storage-listing.component.scss'

View File

@ -33,7 +33,6 @@ import { NodeSnapshot } from '../../../../state/system-diagnostics';
@Component({
selector: 'cluster-system-listing',
standalone: true,
imports: [NgxSkeletonLoaderModule, ClusterSystemTable, ClusterNodeTable],
templateUrl: './cluster-system-listing.component.html',
styleUrl: './cluster-system-listing.component.scss'

View File

@ -28,7 +28,6 @@ import { MatTableModule } from '@angular/material/table';
@Component({
selector: 'cluster-system-table',
standalone: true,
imports: [ClusterTableFilter, MatTableModule, MatSortModule],
templateUrl: './cluster-system-table.component.html',
styleUrl: './cluster-system-table.component.scss'

View File

@ -33,7 +33,6 @@ import { ClusterVersionTable } from './cluster-version-table/cluster-version-tab
@Component({
selector: 'cluster-version-listing',
standalone: true,
imports: [ClusterSystemTable, NgxSkeletonLoaderModule, ClusterVersionTable],
templateUrl: './cluster-version-listing.component.html',
styleUrl: './cluster-version-listing.component.scss'

View File

@ -28,7 +28,6 @@ import { MatSortModule, Sort } from '@angular/material/sort';
@Component({
selector: 'cluster-version-table',
standalone: true,
imports: [ClusterTableFilter, MatTableModule, MatSortModule],
templateUrl: './cluster-version-table.component.html',
styleUrl: './cluster-version-table.component.scss'

View File

@ -41,7 +41,6 @@ export interface ClusterTableFilterContext extends ClusterTableFilterArgs {
@Component({
selector: 'cluster-table-filter',
standalone: true,
imports: [MatCheckbox, MatFormField, MatInput, MatLabel, MatOption, MatSelect, ReactiveFormsModule],
templateUrl: './cluster-table-filter.component.html',
styleUrl: './cluster-table-filter.component.scss'

View File

@ -23,7 +23,6 @@ import { ClusterTableFilterContext } from '../cluster-table-filter/cluster-table
@Component({
selector: 'cluster-table',
standalone: true,
imports: [MatTableModule, MatSortModule],
template: ''
})

View File

@ -25,7 +25,6 @@ import { MatTableModule } from '@angular/material/table';
@Component({
selector: 'repository-storage-table',
standalone: true,
imports: [ClusterTableFilter, MatTableModule, MatSortModule],
templateUrl: './repository-storage-table.component.html',
styleUrl: './repository-storage-table.component.scss'

View File

@ -42,7 +42,8 @@ interface SupportedContentViewer {
@Component({
selector: 'content-viewer',
templateUrl: './content-viewer.component.html',
styleUrls: ['./content-viewer.component.scss']
styleUrls: ['./content-viewer.component.scss'],
standalone: false
})
export class ContentViewerComponent implements OnInit, OnDestroy {
viewerForm: FormGroup;

View File

@ -30,7 +30,6 @@ import { RecreateViewDirective } from '../recreate-view.directive';
@Component({
selector: 'external-viewer',
standalone: true,
templateUrl: './external-viewer.component.html',
imports: [RecreateViewDirective],
styleUrls: ['./external-viewer.component.scss']

View File

@ -27,7 +27,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'hex-viewer',
standalone: true,
templateUrl: './hex-viewer.component.html',
imports: [],
styleUrls: ['./hex-viewer.component.scss']

View File

@ -24,7 +24,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'image-viewer',
standalone: true,
templateUrl: './image-viewer.component.html',
imports: [],
styleUrls: ['./image-viewer.component.scss']

View File

@ -23,7 +23,8 @@ import { resetCounterState } from '../state/counter-listing/counter-listing.acti
@Component({
selector: 'counters',
templateUrl: './counters.component.html',
styleUrls: ['./counters.component.scss']
styleUrls: ['./counters.component.scss'],
standalone: false
})
export class Counters implements OnDestroy {
constructor(private store: Store<NiFiState>) {}

View File

@ -26,7 +26,8 @@ import { selectCurrentUser } from '../../../../state/current-user/current-user.s
@Component({
selector: 'counter-listing',
templateUrl: './counter-listing.component.html',
styleUrls: ['./counter-listing.component.scss']
styleUrls: ['./counter-listing.component.scss'],
standalone: false
})
export class CounterListing implements OnInit {
counterListingState$ = this.store.select(selectCounterListingState);

View File

@ -27,7 +27,8 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'counter-table',
templateUrl: './counter-table.component.html',
styleUrls: ['./counter-table.component.scss']
styleUrls: ['./counter-table.component.scss'],
standalone: false
})
export class CounterTable implements AfterViewInit {
private _canModifyCounters = false;

View File

@ -30,7 +30,7 @@
</mat-form-field>
</form>
<mat-accordion multi>
<mat-expansion-panel>
<mat-expansion-panel [expanded]="generalExpanded">
<mat-expansion-panel-header>
<mat-panel-title>General</mat-panel-title>
</mat-expansion-panel-header>
@ -47,7 +47,7 @@
}
</div>
</mat-expansion-panel>
<mat-expansion-panel>
<mat-expansion-panel [expanded]="processorsExpanded">
<mat-expansion-panel-header>
<mat-panel-title>Processors</mat-panel-title>
</mat-expansion-panel-header>
@ -60,7 +60,7 @@
}
"></ng-container>
</mat-expansion-panel>
<mat-expansion-panel>
<mat-expansion-panel [expanded]="controllerServicesExpanded">
<mat-expansion-panel-header>
<mat-panel-title>Controller Services</mat-panel-title>
</mat-expansion-panel-header>
@ -73,7 +73,7 @@
}
"></ng-container>
</mat-expansion-panel>
<mat-expansion-panel>
<mat-expansion-panel [expanded]="reportingTasksExpanded">
<mat-expansion-panel-header>
<mat-panel-title>Reporting Tasks</mat-panel-title>
</mat-expansion-panel-header>
@ -86,7 +86,7 @@
}
"></ng-container>
</mat-expansion-panel>
<mat-expansion-panel>
<mat-expansion-panel [expanded]="parameterProvidersExpanded">
<mat-expansion-panel-header>
<mat-panel-title>Parameter Providers</mat-panel-title>
</mat-expansion-panel-header>

View File

@ -38,7 +38,7 @@ import {
import { ComponentType, isDefinedAndNotNull, NiFiCommon, selectCurrentRoute } from '@nifi/shared';
import { MatAccordion } from '@angular/material/expansion';
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
import { debounceTime, distinctUntilChanged, map } from 'rxjs';
import { combineLatestWith, debounceTime, distinctUntilChanged, map } from 'rxjs';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { DocumentedType } from '../../../state/shared';
import {
@ -51,7 +51,8 @@ import { navigateToOverview } from '../state/documentation/documentation.actions
@Component({
selector: 'documentation',
templateUrl: './documentation.component.html',
styleUrls: ['./documentation.component.scss']
styleUrls: ['./documentation.component.scss'],
standalone: false
})
export class Documentation implements OnInit, AfterViewInit {
private destroyRef: DestroyRef = inject(DestroyRef);
@ -81,6 +82,12 @@ export class Documentation implements OnInit, AfterViewInit {
private isOverviewRoute: boolean = false;
private scrolledIntoView = false;
generalExpanded = true;
processorsExpanded = false;
controllerServicesExpanded = false;
reportingTasksExpanded = false;
parameterProvidersExpanded = false;
constructor(
private store: Store<NiFiState>,
private formBuilder: FormBuilder,
@ -98,11 +105,28 @@ export class Documentation implements OnInit, AfterViewInit {
a?.type === b?.type
),
isDefinedAndNotNull(),
takeUntilDestroyed()
takeUntilDestroyed(),
combineLatestWith(this.store.select(selectCurrentRoute))
)
.subscribe((coordinates) => {
.subscribe(([coordinates, currentRoute]) => {
this.selectedCoordinates = coordinates;
this.isOverviewRoute = false;
// ensure the panel that the defined component is in is expanded
switch (currentRoute.url[0].path) {
case ComponentType.Processor:
this.processorsExpanded = true;
break;
case ComponentType.ControllerService:
this.controllerServicesExpanded = true;
break;
case ComponentType.ReportingTask:
this.reportingTasksExpanded = true;
break;
case ComponentType.ParameterProvider:
this.parameterProvidersExpanded = true;
break;
}
});
this.store
@ -122,6 +146,7 @@ export class Documentation implements OnInit, AfterViewInit {
.subscribe((isOverviewRoute) => {
this.isOverviewRoute = isOverviewRoute;
this.selectedCoordinates = null;
this.generalExpanded = isOverviewRoute;
});
this.filterForm = this.formBuilder.group({
@ -150,7 +175,6 @@ export class Documentation implements OnInit, AfterViewInit {
});
this.store.dispatch(loadExtensionTypesForDocumentation());
this.applyFilter(null);
}
ngAfterViewInit(): void {

View File

@ -32,7 +32,6 @@ import { MarkdownComponent } from 'ngx-markdown';
@Component({
selector: 'additional-details',
standalone: true,
imports: [MatAccordion, MatExpansionModule, MatIconButton, NgxSkeletonLoaderModule, MarkdownComponent],
templateUrl: './additional-details.component.html',
styleUrl: './additional-details.component.scss'

View File

@ -22,7 +22,6 @@ import { Attribute } from '../../../state/processor-definition';
@Component({
selector: 'attributes-definition',
standalone: true,
imports: [MatTableModule],
templateUrl: './attributes-definition.component.html',
styleUrl: './attributes-definition.component.scss'

View File

@ -27,7 +27,6 @@ import { AdditionalDetailsComponent } from '../additional-details/additional-det
@Component({
selector: 'configurable-extension-definition',
standalone: true,
imports: [
PropertiesDefinitionComponent,
DynamicPropertiesDefinitionComponent,

View File

@ -23,7 +23,6 @@ import { MatIconButton } from '@angular/material/button';
@Component({
selector: 'dynamic-properties-definition',
standalone: true,
imports: [MatAccordion, MatExpansionModule, MatIconButton],
templateUrl: './dynamic-properties-definition.component.html',
styleUrl: './dynamic-properties-definition.component.scss'

View File

@ -31,7 +31,6 @@ import { InputRequirementComponent } from '../input-requirement/input-requiremen
@Component({
selector: 'multi-processor-use-case',
standalone: true,
templateUrl: './multi-processor-use-case.component.html',
imports: [MatAccordion, MatExpansionModule, MatIconButton, InputRequirementComponent, AsyncPipe, RouterLink],
styleUrl: './multi-processor-use-case.component.scss'

View File

@ -24,7 +24,6 @@ import { PropertyDefinitionComponent } from '../property-definition/property-def
@Component({
selector: 'properties-definition',
standalone: true,
imports: [MatAccordion, MatExpansionModule, MatButtonModule, PropertyDefinitionComponent],
templateUrl: './properties-definition.component.html',
styleUrl: './properties-definition.component.scss'

View File

@ -37,7 +37,6 @@ import { RouterLink } from '@angular/router';
@Component({
selector: 'property-definition',
standalone: true,
imports: [
NgxSkeletonLoaderModule,
MatTableModule,

View File

@ -22,7 +22,6 @@ import { Relationship } from '../../../state/processor-definition';
@Component({
selector: 'relationships-definition',
standalone: true,
imports: [MatTableModule],
templateUrl: './relationships-definition.component.html',
styleUrl: './relationships-definition.component.scss'

View File

@ -22,7 +22,6 @@ import { SystemResourceConsideration } from '../../../state';
@Component({
selector: 'resource-considerations',
standalone: true,
imports: [MatTableModule],
templateUrl: './resource-considerations.component.html',
styleUrl: './resource-considerations.component.scss'

View File

@ -22,7 +22,6 @@ import { Restriction } from '../../../state';
@Component({
selector: 'restrictions-definition',
standalone: true,
imports: [MatTableModule],
templateUrl: './restrictions-definition.component.html',
styleUrl: './restrictions-definition.component.scss'

View File

@ -29,7 +29,6 @@ import { DocumentedType } from '../../../../../state/shared';
@Component({
selector: 'see-also',
standalone: true,
templateUrl: './see-also.component.html',
imports: [RouterLink, NifiTooltipDirective, AsyncPipe, NgTemplateOutlet],
styleUrl: './see-also.component.scss'

View File

@ -24,7 +24,6 @@ import { InputRequirementComponent } from '../input-requirement/input-requiremen
@Component({
selector: 'use-case',
standalone: true,
templateUrl: './use-case.component.html',
imports: [MatAccordion, MatExpansionModule, MatIconButton, PropertyDefinitionComponent, InputRequirementComponent],
styleUrl: './use-case.component.scss'

View File

@ -33,7 +33,6 @@ import { distinctUntilChanged } from 'rxjs';
@Component({
selector: 'controller-service-definition',
standalone: true,
imports: [NgxSkeletonLoaderModule, ConfigurableExtensionDefinitionComponent],
templateUrl: './controller-service-definition.component.html',
styleUrl: './controller-service-definition.component.scss'

View File

@ -33,7 +33,6 @@ import { selectFlowAnalysisRuleDefinitionState } from '../../state/flow-analysis
@Component({
selector: 'flow-analysis-rule-definition',
standalone: true,
imports: [NgxSkeletonLoaderModule, ConfigurableExtensionDefinitionComponent],
templateUrl: './flow-analysis-rule-definition.component.html',
styleUrl: './flow-analysis-rule-definition.component.scss'

View File

@ -28,7 +28,6 @@ import { NgTemplateOutlet } from '@angular/common';
@Component({
selector: 'overview',
standalone: true,
imports: [MatCardModule, NgTemplateOutlet],
templateUrl: './overview.component.html',
styleUrls: ['./overview.component.scss']

View File

@ -33,7 +33,6 @@ import { selectParameterProviderDefinitionState } from '../../state/parameter-pr
@Component({
selector: 'parameter-provider-definition',
standalone: true,
imports: [NgxSkeletonLoaderModule, ConfigurableExtensionDefinitionComponent],
templateUrl: './parameter-provider-definition.component.html',
styleUrl: './parameter-provider-definition.component.scss'

View File

@ -39,7 +39,6 @@ import { distinctUntilChanged } from 'rxjs';
@Component({
selector: 'processor-definition',
standalone: true,
imports: [
NgxSkeletonLoaderModule,
ConfigurableExtensionDefinitionComponent,

View File

@ -33,7 +33,6 @@ import { selectReportingTaskDefinitionState } from '../../state/reporting-task-d
@Component({
selector: 'reporting-task-definition',
standalone: true,
imports: [NgxSkeletonLoaderModule, ConfigurableExtensionDefinitionComponent],
templateUrl: './reporting-task-definition.component.html',
styleUrl: './reporting-task-definition.component.scss'

View File

@ -24,7 +24,8 @@ import { resetErrorState } from '../../../state/error/error.actions';
@Component({
selector: 'error',
templateUrl: './error.component.html',
styleUrls: ['./error.component.scss']
styleUrls: ['./error.component.scss'],
standalone: false
})
export class Error implements OnDestroy {
errorDetail$ = this.store.select(selectFullScreenError);

View File

@ -20,6 +20,7 @@ import { Component } from '@angular/core';
@Component({
selector: 'flow-configuration-history',
templateUrl: './flow-configuration-history.component.html',
styleUrls: ['./flow-configuration-history.component.scss']
styleUrls: ['./flow-configuration-history.component.scss'],
standalone: false
})
export class FlowConfigurationHistory {}

View File

@ -80,65 +80,13 @@
</div>
}
}
@case ('Connect' || 'Disconnect') {
@if (getConnectActionDetails(action); as details) {
<div>
<div>Source Id</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.sourceId }
"></ng-container>
</div>
<div>
<div>Source Name</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.sourceName }
"></ng-container>
</div>
<div>
<div>Source Type</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.sourceType }
"></ng-container>
</div>
<div>
<div>Relationship(s)</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.relationship }
"></ng-container>
</div>
<div>
<div>Destination Id</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.destinationId }
"></ng-container>
</div>
<div>
<div>Destination Name</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.destinationName }
"></ng-container>
</div>
<div>
<div>Destination Type</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.destinationType }
"></ng-container>
</div>
}
@case ('Connect') {
<ng-container *ngTemplateOutlet="connectOrDisconnect; context: { $implicit: action }">
</ng-container>
}
@case ('Disconnect') {
<ng-container *ngTemplateOutlet="connectOrDisconnect; context: { $implicit: action }">
</ng-container>
}
@case ('Move') {
@if (getMoveActionDetails(action); as details) {
@ -210,6 +158,58 @@
<div class="unset neutral-color">No value set</div>
}
</ng-template>
<ng-template #connectOrDisconnect let-action>
@if (getConnectActionDetails(action); as details) {
<div>
<div>Source Id</div>
<ng-container
*ngTemplateOutlet="formatValue; context: { $implicit: details.sourceId }"></ng-container>
</div>
<div>
<div>Source Name</div>
<ng-container
*ngTemplateOutlet="formatValue; context: { $implicit: details.sourceName }"></ng-container>
</div>
<div>
<div>Source Type</div>
<ng-container
*ngTemplateOutlet="formatValue; context: { $implicit: details.sourceType }"></ng-container>
</div>
<div>
<div>Relationship(s)</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.relationship }
"></ng-container>
</div>
<div>
<div>Destination Id</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.destinationId }
"></ng-container>
</div>
<div>
<div>Destination Name</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.destinationName }
"></ng-container>
</div>
<div>
<div>Destination Type</div>
<ng-container
*ngTemplateOutlet="
formatValue;
context: { $implicit: details.destinationType }
"></ng-container>
</div>
}
</ng-template>
</mat-dialog-content>
<mat-dialog-actions align="end">
<button mat-flat-button mat-dialog-close>Ok</button>

View File

@ -33,7 +33,6 @@ import { MatButtonModule } from '@angular/material/button';
@Component({
selector: 'action-details',
standalone: true,
imports: [CommonModule, MatDialogModule, PipesModule, MatButtonModule, CopyDirective],
templateUrl: './action-details.component.html',
styleUrls: ['./action-details.component.scss']

View File

@ -55,7 +55,6 @@ interface FilterableColumn {
@Component({
selector: 'flow-configuration-history-listing',
standalone: true,
imports: [
CommonModule,
NgxSkeletonLoaderModule,

View File

@ -25,7 +25,6 @@ import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
@Component({
selector: 'flow-configuration-history-table',
standalone: true,
imports: [MatTableModule, MatSortModule, MatIconButton, MatMenu, MatMenuTrigger, MatMenuItem],
templateUrl: './flow-configuration-history-table.component.html',
styleUrls: ['./flow-configuration-history-table.component.scss']

View File

@ -33,7 +33,6 @@ import { MatRadioButton, MatRadioGroup } from '@angular/material/radio';
@Component({
selector: 'purge-history',
standalone: true,
imports: [
CommonModule,
MatDialogModule,

View File

@ -23,7 +23,8 @@ import { NiFiState } from '../../../state';
@Component({
selector: 'flow-designer',
templateUrl: './flow-designer.component.html',
styleUrls: ['./flow-designer.component.scss']
styleUrls: ['./flow-designer.component.scss'],
standalone: false
})
export class FlowDesigner implements OnInit {
constructor(private store: Store<NiFiState>) {}

View File

@ -92,7 +92,7 @@ export class ParameterHelperService {
convertToParameterDialogReference.componentInstance.saving$ =
this.store.select(selectParameterSaving);
convertToParameterDialogReference.componentInstance.cancel.pipe(
convertToParameterDialogReference.componentInstance.close.pipe(
takeUntil(convertToParameterDialogReference.afterClosed()),
tap(() => ParameterActions.stopPollingParameterContextUpdateRequest())
);

View File

@ -4578,7 +4578,10 @@ export class FlowEffects {
dialogRef.componentInstance.changeColor.pipe(take(1)).subscribe((requests) => {
requests.forEach((request) => {
const style = { ...request.style } || {};
let style: any = {};
if (request.style) {
style = { ...request.style };
}
if (request.type === ComponentType.Processor) {
if (request.color) {
style['background-color'] = request.color;

View File

@ -85,7 +85,7 @@ export class QueueEffects {
disableClose: true
});
dialogReference.componentInstance.cancel.pipe(take(1)).subscribe(() => {
dialogReference.componentInstance.close.pipe(take(1)).subscribe(() => {
this.store.dispatch(QueueActions.stopPollingEmptyQueueRequest());
});
@ -149,7 +149,7 @@ export class QueueEffects {
disableClose: true
});
dialogReference.componentInstance.cancel.pipe(take(1)).subscribe(() => {
dialogReference.componentInstance.close.pipe(take(1)).subscribe(() => {
this.store.dispatch(QueueActions.stopPollingEmptyQueueRequest());
});

View File

@ -77,7 +77,8 @@ import { snackBarError } from '../../../../state/error/error.actions';
@Component({
selector: 'fd-canvas',
templateUrl: './canvas.component.html',
styleUrls: ['./canvas.component.scss']
styleUrls: ['./canvas.component.scss'],
standalone: false
})
export class Canvas implements OnInit, OnDestroy {
private svg: any;

View File

@ -36,7 +36,6 @@ import { MatCheckbox } from '@angular/material/checkbox';
@Component({
selector: 'change-component-dialog',
standalone: true,
imports: [
CommonModule,
MatDialogTitle,

View File

@ -24,7 +24,6 @@ import { AsyncPipe } from '@angular/common';
@Component({
selector: 'fd-footer',
standalone: true,
templateUrl: './footer.component.html',
imports: [Breadcrumbs, AsyncPipe],
styleUrls: ['./footer.component.scss']

View File

@ -29,7 +29,6 @@ import { NiFiState } from '../../../../../state';
@Component({
selector: 'graph-controls',
standalone: true,
templateUrl: './graph-controls.component.html',
imports: [NavigationControl, OperationControl, AsyncPipe],
styleUrls: ['./graph-controls.component.scss']

View File

@ -29,7 +29,6 @@ import { MatButtonModule } from '@angular/material/button';
@Component({
selector: 'navigation-control',
standalone: true,
templateUrl: './navigation-control.component.html',
imports: [Birdseye, MatButtonModule],
styleUrls: ['./navigation-control.component.scss']

View File

@ -31,7 +31,6 @@ import { CanvasActionsService } from '../../../../service/canvas-actions.service
@Component({
selector: 'operation-control',
standalone: true,
templateUrl: './operation-control.component.html',
imports: [MatButtonModule, ComponentContext],
styleUrls: ['./operation-control.component.scss']

View File

@ -41,7 +41,6 @@ import { BreadcrumbEntity } from '../../../../state/shared';
@Component({
selector: 'flow-analysis-drawer',
standalone: true,
imports: [
CommonModule,
MatMenuModule,

View File

@ -32,7 +32,6 @@ interface Data {
@Component({
selector: 'app-violation-details-dialog',
standalone: true,
imports: [CommonModule, MatDialogModule, MatButton],
templateUrl: './violation-details-dialog.component.html',
styleUrl: './violation-details-dialog.component.scss'

View File

@ -34,7 +34,6 @@ import { CanvasUtils } from '../../../../service/canvas-utils.service';
@Component({
selector: 'flow-status',
standalone: true,
templateUrl: './flow-status.component.html',
imports: [Search, NifiTooltipDirective, CommonModule],
styleUrls: ['./flow-status.component.scss']

View File

@ -41,7 +41,6 @@ import { selectFlowAnalysisState } from '../../../state/flow-analysis/flow-analy
@Component({
selector: 'fd-header',
standalone: true,
templateUrl: './header.component.html',
imports: [
NewCanvasItem,

View File

@ -29,7 +29,6 @@ import { ConnectedPosition } from '@angular/cdk/overlay';
@Component({
selector: 'new-canvas-item',
standalone: true,
templateUrl: './new-canvas-item.component.html',
imports: [CdkDrag, NifiTooltipDirective],
styleUrls: ['./new-canvas-item.component.scss']

View File

@ -44,7 +44,6 @@ import { ErrorHelper } from '../../../../../../service/error-helper.service';
@Component({
selector: 'search',
standalone: true,
templateUrl: './search.component.html',
styleUrls: ['./search.component.scss'],
imports: [

View File

@ -61,7 +61,6 @@ import { ContextErrorBanner } from '../../../../../../../ui/common/context-error
@Component({
selector: 'create-connection',
standalone: true,
imports: [
ExtensionCreation,
AsyncPipe,

View File

@ -26,7 +26,6 @@ import { NifiTooltipDirective, TextTip, SelectOption } from '@nifi/shared';
@Component({
selector: 'destination-process-group',
standalone: true,
templateUrl: './destination-process-group.component.html',
styleUrls: ['./destination-process-group.component.scss'],
imports: [

View File

@ -25,7 +25,6 @@ import { NifiTooltipDirective, TextTip, SelectOption } from '@nifi/shared';
@Component({
selector: 'destination-remote-process-group',
standalone: true,
templateUrl: './destination-remote-process-group.component.html',
styleUrls: ['./destination-remote-process-group.component.scss'],
imports: [

View File

@ -60,7 +60,6 @@ import { ContextErrorBanner } from '../../../../../../../ui/common/context-error
@Component({
selector: 'edit-connection',
standalone: true,
imports: [
ExtensionCreation,
AsyncPipe,

View File

@ -36,7 +36,6 @@ import {
@Component({
selector: 'prioritizers',
standalone: true,
templateUrl: './prioritizers.component.html',
imports: [
MatButtonModule,

View File

@ -26,7 +26,6 @@ import { NifiTooltipDirective, SelectOption, TextTip } from '@nifi/shared';
@Component({
selector: 'source-process-group',
standalone: true,
templateUrl: './source-process-group.component.html',
styleUrls: ['./source-process-group.component.scss'],
imports: [

View File

@ -30,7 +30,6 @@ export interface RelationshipItem {
@Component({
selector: 'source-processor',
standalone: true,
templateUrl: './source-processor.component.html',
styleUrls: ['./source-processor.component.scss'],
imports: [MatCheckboxModule, FormsModule],

View File

@ -26,7 +26,6 @@ import { MatSelectModule } from '@angular/material/select';
@Component({
selector: 'source-remote-process-group',
standalone: true,
templateUrl: './source-remote-process-group.component.html',
styleUrls: ['./source-remote-process-group.component.scss'],
imports: [

View File

@ -30,7 +30,6 @@ import { NiFiCommon, CloseOnEscapeDialog } from '@nifi/shared';
@Component({
selector: 'change-version-dialog',
standalone: true,
imports: [AsyncPipe, MatButton, MatCell, MatCellDef, MatColumnDef, MatDialogModule, MatSortModule, MatTableModule],
templateUrl: './change-version-dialog.html',
styleUrl: './change-version-dialog.scss'

View File

@ -25,7 +25,6 @@ import { MatProgressBar } from '@angular/material/progress-bar';
@Component({
selector: 'change-version-progress-dialog',
standalone: true,
imports: [MatDialogTitle, MatDialogModule, MatButton, AsyncPipe, MatProgressBar],
templateUrl: './change-version-progress-dialog.html',
styleUrl: './change-version-progress-dialog.scss'

View File

@ -62,7 +62,6 @@ import { ContextErrorBanner } from '../../../../../../../ui/common/context-error
@Component({
selector: 'import-from-registry',
standalone: true,
imports: [
AsyncPipe,
ErrorBanner,

View File

@ -33,7 +33,6 @@ import { CloseOnEscapeDialog } from '@nifi/shared';
@Component({
selector: 'local-changes-dialog',
standalone: true,
imports: [
MatDialogModule,
MatButton,

View File

@ -39,7 +39,6 @@ interface LocalChange {
@Component({
selector: 'local-changes-table',
standalone: true,
imports: [
MatFormField,
MatInput,

View File

@ -40,7 +40,6 @@ import { ContextErrorBanner } from '../../../../../../../ui/common/context-error
@Component({
selector: 'save-version-dialog',
standalone: true,
imports: [
MatDialogTitle,
ReactiveFormsModule,

View File

@ -39,7 +39,6 @@ import { ContextErrorBanner } from '../../../../../../../ui/common/context-error
@Component({
selector: 'edit-label',
standalone: true,
templateUrl: './edit-label.component.html',
imports: [
ReactiveFormsModule,

View File

@ -36,7 +36,6 @@ import { ContextErrorBanner } from '../../../../../../../ui/common/context-error
@Component({
selector: 'create-port',
standalone: true,
imports: [
ReactiveFormsModule,
MatDialogModule,

View File

@ -37,7 +37,6 @@ import { ErrorContextKey } from '../../../../../../../state/error';
import { ContextErrorBanner } from '../../../../../../../ui/common/context-error-banner/context-error-banner.component';
@Component({
selector: 'edit-port',
standalone: true,
templateUrl: './edit-port.component.html',
imports: [
ReactiveFormsModule,

Some files were not shown because too many files have changed in this diff Show More