NIFI-13092: Adding info icons to configuration dialogs (#8696)

* NIFI-13092:
- Refactoring TextToolTip input to be a string.

* NIFI-13092:
- Migrating existing info tooltips to use the NiFi tooltip and fa-info-circle icon.

* NIFI-13092:
- Adding info icons to configuration dialogs where necessary.

* NIFI-13092:
- Aligning Run Schedule form label between Reporting Tasks and Processors.

* NIFI-13092:
- Removing primary color from info icons outside of those that appear in tables.

* NIFI-13092:
- Addressing review feedback.

This closes #8696
This commit is contained in:
Matt Gilman 2024-04-24 21:38:23 -04:00 committed by GitHub
parent 0e70f7a07e
commit d9dc283406
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
86 changed files with 765 additions and 474 deletions

View File

@ -80,7 +80,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}
</mat-option>

View File

@ -39,7 +39,7 @@ import { distinctUntilChanged } from 'rxjs';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import { NiFiCommon } from '../../../../service/nifi-common.service';
import { ComponentType, isDefinedAndNotNull, SelectOption, TextTipInput } from '../../../../state/shared';
import { ComponentType, isDefinedAndNotNull, SelectOption } from '../../../../state/shared';
import { TextTip } from '../../../../ui/common/tooltips/text-tip/text-tip.component';
import { AccessPolicyEntity, Action, PolicyStatus, ResourceAction } from '../../state/shared';
import { selectFlowConfiguration } from '../../../../state/flow-configuration/flow-configuration.selectors';
@ -284,13 +284,6 @@ export class ComponentAccessPolicies implements OnInit, OnDestroy {
return true;
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
getContextIcon(): string {
switch (this.resource) {
case 'processors':

View File

@ -65,7 +65,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}
</mat-option>
@ -85,7 +85,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}
</mat-option>

View File

@ -39,13 +39,7 @@ import { distinctUntilChanged } from 'rxjs';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import { NiFiCommon } from '../../../../service/nifi-common.service';
import {
ComponentType,
isDefinedAndNotNull,
RequiredPermission,
SelectOption,
TextTipInput
} from '../../../../state/shared';
import { ComponentType, isDefinedAndNotNull, RequiredPermission, SelectOption } from '../../../../state/shared';
import { TextTip } from '../../../../ui/common/tooltips/text-tip/text-tip.component';
import { AccessPolicyEntity, Action, PolicyStatus } from '../../state/shared';
import { loadExtensionTypesForPolicies } from '../../../../state/extension-types/extension-types.actions';
@ -173,13 +167,6 @@ export class GlobalAccessPolicies implements OnInit, OnDestroy {
return state.loadedTimestamp == initialState.loadedTimestamp;
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
resourceChanged(value: string): void {
if (this.globalPolicySupportsReadWrite(value)) {
this.supportsReadWriteAction = true;

View File

@ -127,7 +127,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -154,7 +154,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>

View File

@ -37,7 +37,7 @@ import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nif
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { MatTabsModule } from '@angular/material/tabs';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { ComponentType, SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { ComponentType } from '../../../../../../../state/shared';
import { NiFiState } from '../../../../../../../state';
import { selectPrioritizerTypes } from '../../../../../../../state/extension-types/extension-types.selectors';
import { Prioritizers } from '../prioritizers/prioritizers.component';
@ -200,13 +200,6 @@ export class CreateConnection {
}
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
loadBalanceChanged(value: string): void {
if (value == 'PARTITION_BY_ATTRIBUTE') {
this.createConnectionForm.addControl('partitionAttribute', new FormControl('', Validators.required));

View File

@ -37,7 +37,7 @@
[disabled]="isDisabled"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(item)"
[tooltipInputData]="item.description"
[delayClose]="false"
>{{ item.text }}</mat-option
>

View File

@ -24,7 +24,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { NifiTooltipDirective } from '../../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { SelectOption, TextTipInput } from '../../../../../../../../state/shared';
import { SelectOption } from '../../../../../../../../state/shared';
@Component({
selector: 'destination-process-group',
@ -111,13 +111,6 @@ export class DestinationProcessGroup implements ControlValueAccessor {
this.selectedInputPort = selectedInputPort;
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
handleChanged() {
// mark the component as touched if not already
if (!this.isTouched) {

View File

@ -34,7 +34,7 @@
[disabled]="item.disabled == true || isDisabled"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(item)"
[tooltipInputData]="item.description"
[delayClose]="false"
>{{ item.text }}</mat-option
>

View File

@ -24,7 +24,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { NifiTooltipDirective } from '../../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { SelectOption, TextTipInput } from '../../../../../../../../state/shared';
import { SelectOption } from '../../../../../../../../state/shared';
@Component({
selector: 'destination-remote-process-group',
@ -99,13 +99,6 @@ export class DestinationRemoteProcessGroup implements ControlValueAccessor {
this.selectedInputPort = selectedInputPort;
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
handleChanged() {
// mark the component as touched if not already
if (!this.isTouched) {

View File

@ -104,11 +104,18 @@
</div>
<div class="flex flex-col mb-5">
<div>Id</div>
<div class="unset nifi-surface-default">No value set</div>
<div class="accent-color font-medium">{{ dialogRequest.entity.id }}</div>
</div>
<div>
<mat-form-field>
<mat-label>FlowFile Expiration</mat-label>
<mat-label>
FlowFile Expiration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The maximum amount of time an object may be in the flow before it will be automatically aged out of the flow."></i>
</mat-label>
<input
matInput
formControlName="flowFileExpiration"
@ -119,7 +126,14 @@
<div class="flex gap-x-2">
<div class="w-full">
<mat-form-field>
<mat-label>Back Pressure Object Threshold</mat-label>
<mat-label>
Back Pressure Object Threshold
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The maximum number of objects that can be queued before back pressure is applied."></i>
</mat-label>
<input
matInput
formControlName="backPressureObjectThreshold"
@ -129,7 +143,14 @@
</div>
<div class="w-full">
<mat-form-field>
<mat-label>Size Threshold</mat-label>
<mat-label>
Size Threshold
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The maximum data size of objects that can be queued before back pressure is applied."></i>
</mat-label>
<input
matInput
formControlName="backPressureDataSizeThreshold"
@ -141,7 +162,14 @@
<div class="flex gap-x-2">
<div class="w-full">
<mat-form-field>
<mat-label>Load Balance Strategy</mat-label>
<mat-label>
Load Balance Strategy
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="How to load balance the data in this Connection across the nodes in the cluster."></i>
</mat-label>
<mat-select
formControlName="loadBalanceStrategy"
(selectionChange)="loadBalanceChanged($event.value)">
@ -151,7 +179,7 @@
[disabled]="connectionReadonly || sourceReadonly || destinationReadonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -162,7 +190,14 @@
@if (loadBalancePartitionAttributeRequired) {
<div class="w-full">
<mat-form-field>
<mat-label>Attribute Name</mat-label>
<mat-label>
Attribute Name
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The FlowFile Attribute to use for determining which node a FlowFile will go to."></i>
</mat-label>
<input
matInput
formControlName="partitionAttribute"
@ -175,7 +210,14 @@
@if (loadBalanceCompressionRequired) {
<div>
<mat-form-field>
<mat-label>Load Balance Compression</mat-label>
<mat-label>
Load Balance Compression
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Whether or not data should be compressed when being transferred between nodes in the cluster."></i>
</mat-label>
<mat-select formControlName="compression">
@for (option of loadBalanceCompressionStrategies; track option) {
<mat-option
@ -183,7 +225,7 @@
[disabled]="connectionReadonly || sourceReadonly || destinationReadonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>

View File

@ -36,7 +36,7 @@ import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nif
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { MatTabsModule } from '@angular/material/tabs';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { ComponentType, SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { ComponentType } from '../../../../../../../state/shared';
import { NiFiState } from '../../../../../../../state';
import { selectPrioritizerTypes } from '../../../../../../../state/extension-types/extension-types.selectors';
import { Prioritizers } from '../prioritizers/prioritizers.component';
@ -224,7 +224,7 @@ export class EditConnectionComponent {
initialCompression: string;
constructor(
@Inject(MAT_DIALOG_DATA) private dialogRequest: EditConnectionDialogRequest,
@Inject(MAT_DIALOG_DATA) public dialogRequest: EditConnectionDialogRequest,
private formBuilder: FormBuilder,
private store: Store<NiFiState>,
private canvasUtils: CanvasUtils,
@ -340,13 +340,6 @@ export class EditConnectionComponent {
}
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
loadBalanceChanged(value: string): void {
if (value == 'PARTITION_BY_ATTRIBUTE') {
this.editConnectionForm.addControl(

View File

@ -17,7 +17,14 @@
<div class="prioritizers flex flex-col gap-y-4" cdkDropListGroup>
<div class="flex flex-col">
<div>Available Prioritizers</div>
<div>
Available Prioritizers
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Prioritizers that are available to reprioritize FlowFiles in this processors work queue."></i>
</div>
<div
class="prioritizers-list border"
cdkDropList
@ -40,7 +47,14 @@
</div>
</div>
<div class="flex flex-col">
<div>Selected Prioritizers</div>
<div>
Selected Prioritizers
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Prioritizers that have been selected to reprioritize FlowFiles in this processors work queue. Multiple selected prioritizers will be considered in order from top to bottom."></i>
</div>
<div
class="prioritizers-list border"
cdkDropList
@ -62,11 +76,11 @@
<div class="flex gap-x-3 items-center">
<div>{{ getPrioritizerLabel(item) }}</div>
@if (hasDescription(item)) {
<div
class="fa fa-question-circle primary-color"
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getDescriptionTipData(item)"></div>
[tooltipInputData]="item.description"></i>
}
</div>
@if (canClose) {

View File

@ -24,7 +24,7 @@ import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
import { RouterLink } from '@angular/router';
import { NiFiCommon } from '../../../../../../../service/nifi-common.service';
import { DocumentedType, TextTipInput } from '../../../../../../../state/shared';
import { DocumentedType } from '../../../../../../../state/shared';
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
import {
@ -128,13 +128,6 @@ export class Prioritizers implements ControlValueAccessor {
return !this.nifiCommon.isBlank(entity.description);
}
getDescriptionTipData(entity: DocumentedType): TextTipInput {
return {
// @ts-ignore
text: entity.description
};
}
removeSelected(entity: DocumentedType, i: number): void {
transferArrayItem(this.selectedPrioritizers, this.availablePrioritizers, i, this.availablePrioritizers.length);

View File

@ -37,7 +37,7 @@
[disabled]="isDisabled"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(item)"
[tooltipInputData]="item.description"
[delayClose]="false"
>{{ item.text }}</mat-option
>

View File

@ -24,7 +24,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { NifiTooltipDirective } from '../../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { SelectOption, TextTipInput } from '../../../../../../../../state/shared';
import { SelectOption } from '../../../../../../../../state/shared';
@Component({
selector: 'source-process-group',
@ -112,13 +112,6 @@ export class SourceProcessGroup implements ControlValueAccessor {
this.selectedOutputPort = selectedOutputPort;
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
handleChanged() {
// mark the component as touched if not already
if (!this.isTouched) {

View File

@ -34,7 +34,7 @@
[disabled]="item.disabled == true || isDisabled"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(item)"
[tooltipInputData]="item.description"
[delayClose]="false"
>{{ item.text }}</mat-option
>

View File

@ -24,7 +24,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { NifiTooltipDirective } from '../../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { SelectOption, TextTipInput } from '../../../../../../../../state/shared';
import { SelectOption } from '../../../../../../../../state/shared';
@Component({
selector: 'source-remote-process-group',
@ -99,13 +99,6 @@ export class SourceRemoteProcessGroup implements ControlValueAccessor {
this.selectedOutputPort = selectedOutputPort;
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
handleChanged() {
// mark the component as touched if not already
if (!this.isTouched) {

View File

@ -28,7 +28,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>
@ -48,7 +48,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>
@ -71,7 +71,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>
@ -88,6 +88,11 @@
<div class="mb-5">
<mat-checkbox color="primary" formControlName="keepParameterContexts">
Keep existing Parameter Contexts
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When not selected, only directly associated Parameter Contexts will be copied, inherited Contexts with no direct assignment to a Process Group are ignored."></i>
</mat-checkbox>
</div>
<div class="flex flex-col mb-5">

View File

@ -25,7 +25,6 @@ import {
isDefinedAndNotNull,
RegistryClientEntity,
SelectOption,
TextTipInput,
VersionedFlow,
VersionedFlowEntity,
VersionedFlowSnapshotMetadata,
@ -158,13 +157,6 @@ export class ImportFromRegistry implements OnInit {
}
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
registryChanged(registryId: string): void {
this.loadBuckets(registryId);
}

View File

@ -57,7 +57,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}
</mat-option>
@ -77,7 +77,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}
</mat-option>

View File

@ -30,7 +30,7 @@ import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nif
import { MatError, MatFormField, MatLabel } from '@angular/material/form-field';
import { MatOption, MatSelect } from '@angular/material/select';
import { Observable, of, take } from 'rxjs';
import { BucketEntity, RegistryClientEntity, SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { BucketEntity, RegistryClientEntity, SelectOption } from '../../../../../../../state/shared';
import { NiFiCommon } from '../../../../../../../service/nifi-common.service';
import { SaveVersionDialogRequest, SaveVersionRequest, VersionControlInformation } from '../../../../../state/flow';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
@ -149,12 +149,6 @@ export class SaveVersionDialog implements OnInit {
}
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
text: option.description || ''
};
}
registryChanged(registryId: string): void {
this.loadBuckets(registryId);
}

View File

@ -25,7 +25,18 @@
</mat-form-field>
@if (!isRootProcessGroup) {
<mat-form-field>
<mat-label>Receive From</mat-label>
<mat-label>
{{ ComponentType.InputPort == request.type ? 'Receive From' : 'Send To' }}
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="
ComponentType.InputPort == request.type
? 'Specify where FlowFiles are received from.'
: 'Specify where FlowFiles are sent.'
"></i>
</mat-label>
<mat-select formControlName="newPortAllowRemoteAccess">
@for (option of allowRemoteAccessOptions; track option) {
@if (option.description) {
@ -33,7 +44,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>

View File

@ -24,7 +24,7 @@ import { selectParentProcessGroupId, selectSaving } from '../../../../../state/f
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { createPort } from '../../../../../state/flow/flow.actions';
import { CreateComponentRequest } from '../../../../../state/flow';
import { ComponentType, SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { ComponentType, SelectOption } from '../../../../../../../state/shared';
import { MatInputModule } from '@angular/material/input';
import { MatSelectModule } from '@angular/material/select';
import { MatTooltipModule } from '@angular/material/tooltip';
@ -76,7 +76,7 @@ export class CreatePort {
];
constructor(
@Inject(MAT_DIALOG_DATA) private request: CreateComponentRequest,
@Inject(MAT_DIALOG_DATA) public request: CreateComponentRequest,
private formBuilder: FormBuilder,
private store: Store<CanvasState>
) {
@ -102,13 +102,6 @@ export class CreatePort {
});
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
createPort() {
this.store.dispatch(
createPort({
@ -120,4 +113,6 @@ export class CreatePort {
})
);
}
protected readonly ComponentType = ComponentType;
}

View File

@ -28,14 +28,28 @@
<div>
@if (request.entity.component.allowRemoteAccess) {
<mat-form-field>
<mat-label>Concurrent Tasks</mat-label>
<mat-label>
Concurrent Tasks
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The number of tasks that should be concurrently scheduled for this port."></i>
</mat-label>
<input matInput formControlName="concurrentTasks" type="text" [readonly]="readonly" />
</mat-form-field>
}
</div>
@if (portTypeLabel == 'Output Port') {
<div class="mb-3.5">
<mat-label>Failure Port</mat-label>
<mat-label>
Failure Port
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When using the Stateless Engine, if any FlowFile is routed to a port marked as a Failure Port, all data in the transaction is rolled back, and the input FlowFile, if any, is routed to the Failure Port."></i>
</mat-label>
<mat-checkbox color="primary" formControlName="portFunction"></mat-checkbox>
</div>
}

View File

@ -33,6 +33,8 @@ import { selectSaving } from '../../../../../state/flow/flow.selectors';
import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nifi-spinner.directive';
import { ClusterConnectionService } from '../../../../../../../service/cluster-connection.service';
import { CanvasUtils } from '../../../../../service/canvas-utils.service';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
@Component({
selector: 'edit-port',
@ -46,7 +48,8 @@ import { CanvasUtils } from '../../../../../service/canvas-utils.service';
MatCheckboxModule,
MatButtonModule,
AsyncPipe,
NifiSpinnerDirective
NifiSpinnerDirective,
NifiTooltipDirective
],
styleUrls: ['./edit-port.component.scss']
})
@ -122,4 +125,6 @@ export class EditPort {
})
);
}
protected readonly TextTip = TextTip;
}

View File

@ -41,7 +41,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getParameterContextOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>

View File

@ -21,7 +21,7 @@ import { CreateProcessGroupDialogRequest } from '../../../../../state/flow';
import { Store } from '@ngrx/store';
import { CanvasState } from '../../../../../state';
import { createProcessGroup, uploadProcessGroup } from '../../../../../state/flow/flow.actions';
import { SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { SelectOption } from '../../../../../../../state/shared';
import { selectSaving } from '../../../../../state/flow/flow.selectors';
import { AsyncPipe } from '@angular/common';
import { ErrorBanner } from '../../../../../../../ui/common/error-banner/error-banner.component';
@ -97,13 +97,6 @@ export class CreateProcessGroup {
});
}
getParameterContextOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
attachFlow(event: Event): void {
const target = event.target as HTMLInputElement;
const files = target.files as FileList;

View File

@ -39,7 +39,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>
@ -58,6 +58,11 @@
formControlName="applyParameterContextRecursively"
name="applyParameterContextRecursively">
Apply Recursively
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When checked Parameter Context will be applied to the Process Group and all the embedded Process Groups recursively, if the user has the proper permissions on all the respective components. If the user does not have the proper permissions on any embedded Process Group, then the Parameter Context will not be applied for any components."></i>
</mat-checkbox>
</div>
<div>
@ -70,7 +75,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -88,7 +93,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -106,7 +111,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -118,7 +123,14 @@
<div class="w-full">
<div>
<mat-form-field>
<mat-label>Default FlowFile Expiration</mat-label>
<mat-label>
Default FlowFile Expiration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="This setting applies as the default FlowFile expiration for any new connection. Configuration of existing connections is unaffected."></i>
</mat-label>
<input
matInput
formControlName="defaultFlowFileExpiration"
@ -128,7 +140,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Default Back Pressure Object Threshold</mat-label>
<mat-label>
Default Back Pressure Object Threshold
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="This setting applies as the default back pressure object count for any new connection. Configuration of existing connections is unaffected."></i>
</mat-label>
<input
matInput
formControlName="defaultBackPressureObjectThreshold"
@ -138,7 +157,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Default Back Pressure Data Size Threshold</mat-label>
<mat-label>
Default Back Pressure Data Size Threshold
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="This setting applies as the default back pressure data size for any new connection. Configuration of existing connections is unaffected."></i>
</mat-label>
<input
matInput
formControlName="defaultBackPressureDataSizeThreshold"
@ -148,7 +174,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Log File Suffix</mat-label>
<mat-label>
Log File Suffix
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Turns on dedicated logging. When left empty log messages will be logged only to the primary app log. When set messages logged by components in this group will be sent to the standard app log, as well as a separate log file, with the provided name, specific to this group."></i>
</mat-label>
<input matInput formControlName="logFileSuffix" type="text" [readonly]="readonly" />
</mat-form-field>
</div>

View File

@ -26,7 +26,7 @@ import { MatTabsModule } from '@angular/material/tabs';
import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { Observable } from 'rxjs';
import { SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { SelectOption } from '../../../../../../../state/shared';
import { Client } from '../../../../../../../service/client.service';
import { PropertyTable } from '../../../../../../../ui/common/property-table/property-table.component';
import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nifi-spinner.directive';
@ -189,13 +189,6 @@ export class EditProcessGroup {
});
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
submitForm() {
let updateStrategy = 'DIRECT_CHILDREN';
if (this.editProcessGroupForm.get('applyParameterContextRecursively')?.value) {

View File

@ -31,7 +31,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getParameterContextOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false"
>{{ option.text }}</mat-option
>

View File

@ -21,7 +21,7 @@ import { GroupComponentsDialogRequest } from '../../../../../state/flow';
import { Store } from '@ngrx/store';
import { CanvasState } from '../../../../../state';
import { groupComponents } from '../../../../../state/flow/flow.actions';
import { ComponentType, SelectOption, TextTipInput } from '../../../../../../../state/shared';
import { ComponentType, SelectOption } from '../../../../../../../state/shared';
import { selectSaving } from '../../../../../state/flow/flow.selectors';
import { AsyncPipe } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
@ -90,13 +90,6 @@ export class GroupComponents {
});
}
getParameterContextOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
createProcessGroup(): void {
this.store.dispatch(
groupComponents({

View File

@ -58,7 +58,14 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>Penalty Duration</mat-label>
<mat-label>
Penalty Duration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The amount of time used when this processor penalizes a FlowFile."></i>
</mat-label>
<input
matInput
formControlName="penaltyDuration"
@ -68,14 +75,28 @@
</div>
<div class="w-full">
<mat-form-field>
<mat-label>Yield Duration</mat-label>
<mat-label>
Yield Duration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When a processor yields, it will not be scheduled again until this amount of time elapses."></i>
</mat-label>
<input matInput formControlName="yieldDuration" type="text" [readonly]="readonly" />
</mat-form-field>
</div>
</div>
<div>
<mat-form-field>
<mat-label>Bulletin Level</mat-label>
<mat-label>
Bulletin Level
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The level at which this processor will generate bulletins."></i>
</mat-label>
<mat-select formControlName="bulletinLevel">
@for (option of bulletinLevels; track option) {
<mat-option [value]="option.value" [disabled]="readonly">
@ -94,7 +115,14 @@
<div class="w-full">
<div>
<mat-form-field>
<mat-label>Scheduling Strategy</mat-label>
<mat-label>
Scheduling Strategy
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The strategy used to schedule this processor."></i>
</mat-label>
<mat-select
formControlName="schedulingStrategy"
(selectionChange)="schedulingStrategyChanged($event.value)">
@ -104,7 +132,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -115,7 +143,14 @@
<div class="flex gap-x-4">
<div class="w-44">
<mat-form-field>
<mat-label>Concurrent Tasks</mat-label>
<mat-label>
Concurrent Tasks
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The number of tasks that should be concurrently scheduled for this processor."></i>
</mat-label>
<input
matInput
formControlName="concurrentTasks"
@ -127,7 +162,14 @@
</div>
<div class="w-44">
<mat-form-field>
<mat-label>Scheduling Period</mat-label>
<mat-label>
Run Schedule
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The minimum number of seconds that should elapse between task executions."></i>
</mat-label>
<input
matInput
formControlName="schedulingPeriod"
@ -139,7 +181,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Execution</mat-label>
<mat-label>
Execution
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The node(s) that this processor will be scheduled to run on."></i>
</mat-label>
<mat-select formControlName="executionNode">
@for (option of executionStrategies; track option) {
<mat-option
@ -147,7 +196,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -159,7 +208,14 @@
<div class="w-full">
@if (supportsBatching()) {
<div class="flex flex-col mb-5">
<div>Run Duration</div>
<div>
Run Duration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When scheduled to run, the processor will continue running for up to this duration. A run duration of 0ms will execute once when scheduled."></i>
</div>
<run-duration-slider
formControlName="runDuration"
(change)="runDurationChanged()"></run-duration-slider>

View File

@ -32,8 +32,7 @@ import {
Parameter,
ParameterContextReferenceEntity,
Property,
SelectOption,
TextTipInput
SelectOption
} from '../../../../../../../state/shared';
import { Client } from '../../../../../../../service/client.service';
import { NiFiCommon } from '../../../../../../../service/nifi-common.service';
@ -239,13 +238,6 @@ export class EditProcessor {
return this.nifiCommon.formatBundle(entity.component.bundle);
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
concurrentTasksChanged(): void {
if (this.schedulingStrategy === 'CRON_DRIVEN') {
this.cronDrivenConcurrentTasks = this.editProcessorForm.get('concurrentTasks')?.value;

View File

@ -20,11 +20,11 @@
<div class="flex flex-col">
<div class="flex items-center gap-x-1.5">
<div>Automatically Terminate/Retry Relationships</div>
<mat-icon
class="info-icon"
title="Will automatically terminate and/or retry FlowFiles sent to a given relationship if it is not defined elsewhere. If both terminate and retry are selected, any retry logic will happen first, then auto-termination."
>info_outline</mat-icon
>
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Will automatically terminate and/or retry FlowFiles sent to a given relationship if it is not defined elsewhere. If both terminate and retry are selected, any retry logic will happen first, then auto-termination."></i>
</div>
<div class="flex flex-col gap-y-3">
@for (relationship of relationships; track relationship; let i = $index) {
@ -65,7 +65,14 @@
@if (isRelationshipRetried()) {
<div>
<mat-form-field>
<mat-label>Number of Retry Attempts</mat-label>
<mat-label>
Number of Retry Attempts
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="For relationships set to retry, this number indicates how many times a FlowFile will attempt to reprocess before it is routed elsewhere."></i>
</mat-label>
<input
matInput
[(ngModel)]="retryCount"
@ -73,22 +80,16 @@
name="retryCount"
(keyup)="handleChanged()"
[readonly]="isDisabled" />
<mat-icon
matSuffix
class="info-icon"
title="For relationships set to retry, this number indicates how many times a FlowFile will attempt to reprocess before it is routed elsewhere."
>info_outline</mat-icon
>
</mat-form-field>
</div>
<div class="flex flex-col mb-6">
<div class="flex items-center gap-x-1.5">
<div>Retry Back Off Policy</div>
<mat-icon
class="info-icon"
title="Penalize: Retry attempts will occur in time, but the processor will continue to process other FlowFiles. Yield: No other FlowFile processing will occur until all retry attempts have been made."
>info_outline</mat-icon
>
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Penalize: Retry attempts will occur in time, but the processor will continue to process other FlowFiles. Yield: No other FlowFile processing will occur until all retry attempts have been made."></i>
</div>
<mat-radio-group
[(ngModel)]="backoffMechanism"
@ -101,19 +102,20 @@
</div>
<div>
<mat-form-field>
<mat-label>Retry Maximum Back Off Period</mat-label>
<mat-label>
Retry Maximum Back Off Period
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Initial retries are based on the Penalty/Yield Duration time specified in the Settings tab. The duration time is repeatedly doubled for every subsequent retry attempt. This number indicates the maximum allowable time period before another retry attempt occurs."></i>
</mat-label>
<input
matInput
[(ngModel)]="maxBackoffPeriod"
type="text"
(keyup)="handleChanged()"
[readonly]="isDisabled" />
<mat-icon
matSuffix
class="info-icon"
title="Initial retries are based on the Penalty/Yield Duration time specified in the Settings tab. The duration time is repeatedly doubled for every subsequent retry attempt. This number indicates the maximum allowable time period before another retry attempt occurs."
>info_outline</mat-icon
>
</mat-form-field>
</div>
}

View File

@ -22,7 +22,14 @@
<div class="tab-content py-4 flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>URLs</mat-label>
<mat-label>
URLs
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the remote target NiFi URLs. Multiple URLs can be specified in comma-separated format. Different protocols cannot be mixed. If remote NiFi is a cluster, two or more node URLs are recommended for better connection establishment availability."></i>
</mat-label>
<input matInput formControlName="urls" type="text" placeholder="https://remotehost:8443/nifi" />
</mat-form-field>
</div>
@ -30,30 +37,30 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>Transport Protocol</mat-label>
<mat-label>
Transport Protocol
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the transport protocol to use for this Remote Process Group communication."></i>
</mat-label>
<mat-select formControlName="transportProtocol">
<mat-option
value="RAW"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getOptionTipData('RAW')"
[delayClose]="false">
RAW
</mat-option>
<mat-option
value="HTTP"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getOptionTipData('HTTP')"
[delayClose]="false">
HTTP
</mat-option>
<mat-option value="RAW"> RAW </mat-option>
<mat-option value="HTTP"> HTTP </mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>Local Network Interface</mat-label>
<mat-label>
Local Network Interface
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The local network interface to send/receive data. If not specified, any local address is used. If clustered, all nodes must have an interface with this identifier."></i>
</mat-label>
<input matInput formControlName="localNetworkInterface" type="text" />
</mat-form-field>
</div>
@ -61,13 +68,27 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy Server Hostname</mat-label>
<mat-label>
HTTP Proxy Server Hostname
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance."></i>
</mat-label>
<input matInput formControlName="httpProxyServerHostname" type="text" />
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy Server Port</mat-label>
<mat-label>
HTTP Proxy Server Port
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the proxy server's port number, optional. If not specified, default port 80 will be used."></i>
</mat-label>
<input matInput formControlName="httpProxyServerPort" type="text" />
</mat-form-field>
</div>
@ -75,27 +96,55 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy User</mat-label>
<mat-label>
HTTP Proxy User
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify an user name to connect to the proxy server, optional."></i>
</mat-label>
<input matInput formControlName="httpProxyUser" type="text" />
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy Password</mat-label>
<input matInput formControlName="httpProxyPassword" type="text" />
<mat-label>
HTTP Proxy Password
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify an user password to connect to the proxy server, optional."></i>
</mat-label>
<input matInput formControlName="httpProxyPassword" type="password" />
</mat-form-field>
</div>
</div>
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>Communications Timeout</mat-label>
<mat-label>
Communications Timeout
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When communication with this remote process group takes longer than this amount of time, it will timeout."></i>
</mat-label>
<input matInput formControlName="communicationsTimeout" type="text" />
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>Yield Duration</mat-label>
<mat-label>
Yield Duration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When communication with this remote process group fails, it will not be scheduled again until this amount of time elapses."></i>
</mat-label>
<input matInput formControlName="yieldDuration" type="text" />
</mat-form-field>
</div>

View File

@ -20,7 +20,6 @@ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
import { Store } from '@ngrx/store';
import { CanvasState } from '../../../../../state';
import { createRemoteProcessGroup } from '../../../../../state/flow/flow.actions';
import { TextTipInput } from '../../../../../../../state/shared';
import { selectSaving } from '../../../../../state/flow/flow.selectors';
import { AsyncPipe } from '@angular/common';
import { ErrorBanner } from '../../../../../../../ui/common/error-banner/error-banner.component';
@ -31,10 +30,10 @@ import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { NifiSpinnerDirective } from '../../../../../../../ui/common/spinner/nifi-spinner.directive';
import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { MatIconModule } from '@angular/material/icon';
import { CreateComponentRequest } from '../../../../../state/flow';
import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
@Component({
standalone: true,
@ -49,8 +48,8 @@ import { CreateComponentRequest } from '../../../../../state/flow';
ReactiveFormsModule,
MatOptionModule,
MatSelectModule,
NifiTooltipDirective,
MatIconModule
MatIconModule,
NifiTooltipDirective
],
templateUrl: './create-remote-process-group.component.html',
styleUrls: ['./create-remote-process-group.component.scss']
@ -58,8 +57,6 @@ import { CreateComponentRequest } from '../../../../../state/flow';
export class CreateRemoteProcessGroup {
saving$ = this.store.select(selectSaving);
protected readonly TextTip = TextTip;
createRemoteProcessGroupForm: FormGroup;
constructor(
@ -80,12 +77,6 @@ export class CreateRemoteProcessGroup {
});
}
getOptionTipData(tip: string): TextTipInput {
return {
text: tip
};
}
createRemoteProcessGroup(): void {
this.store.dispatch(
createRemoteProcessGroup({
@ -104,4 +95,6 @@ export class CreateRemoteProcessGroup {
})
);
}
protected readonly TextTip = TextTip;
}

View File

@ -30,7 +30,14 @@
<div class="tab-content py-4 flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>URLs</mat-label>
<mat-label>
URLs
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the remote target NiFi URLs. Multiple URLs can be specified in comma-separated format. Different protocols cannot be mixed. If remote NiFi is a cluster, two or more node URLs are recommended for better connection establishment availability."></i>
</mat-label>
<input
matInput
formControlName="urls"
@ -43,7 +50,14 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>Transport Protocol</mat-label>
<mat-label>
Transport Protocol
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the transport protocol to use for this Remote Process Group communication."></i>
</mat-label>
<mat-select formControlName="transportProtocol">
<mat-option value="RAW" [disabled]="readonly"> RAW</mat-option>
<mat-option value="HTTP" [disabled]="readonly"> HTTP</mat-option>
@ -52,7 +66,14 @@
</div>
<div class="w-full">
<mat-form-field>
<mat-label>Local Network Interface</mat-label>
<mat-label>
Local Network Interface
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The local network interface to send/receive data. If not specified, any local address is used. If clustered, all nodes must have an interface with this identifier."></i>
</mat-label>
<input matInput formControlName="localNetworkInterface" type="text" [readonly]="readonly" />
</mat-form-field>
</div>
@ -60,13 +81,27 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy Server Hostname</mat-label>
<mat-label>
HTTP Proxy Server Hostname
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the proxy server's hostname to use. If not specified, HTTP traffics are sent directly to the target NiFi instance."></i>
</mat-label>
<input matInput formControlName="httpProxyServerHostname" type="text" [readonly]="readonly" />
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy Server Port</mat-label>
<mat-label>
HTTP Proxy Server Port
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify the proxy server's port number, optional. If not specified, default port 80 will be used."></i>
</mat-label>
<input matInput formControlName="httpProxyServerPort" type="text" [readonly]="readonly" />
</mat-form-field>
</div>
@ -74,27 +109,55 @@
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy User</mat-label>
<mat-label>
HTTP Proxy User
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify an user name to connect to the proxy server, optional."></i>
</mat-label>
<input matInput formControlName="httpProxyUser" type="text" [readonly]="readonly" />
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>HTTP Proxy Password</mat-label>
<input matInput formControlName="httpProxyPassword" type="text" [readonly]="readonly" />
<mat-label>
HTTP Proxy Password
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Specify an user password to connect to the proxy server, optional."></i>
</mat-label>
<input matInput formControlName="httpProxyPassword" type="password" [readonly]="readonly" />
</mat-form-field>
</div>
</div>
<div class="flex gap-x-4">
<div class="w-full">
<mat-form-field>
<mat-label>Communications Timeout</mat-label>
<mat-label>
Communications Timeout
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When communication with this remote process group takes longer than this amount of time, it will timeout."></i>
</mat-label>
<input matInput formControlName="communicationsTimeout" type="text" [readonly]="readonly" />
</mat-form-field>
</div>
<div class="w-full">
<mat-form-field>
<mat-label>Yield Duration</mat-label>
<mat-label>
Yield Duration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="When communication with this remote process group fails, it will not be scheduled again until this amount of time elapses."></i>
</mat-label>
<input matInput formControlName="yieldDuration" type="text" [readonly]="readonly" />
</mat-form-field>
</div>

View File

@ -31,6 +31,7 @@ import { TextTip } from '../../../../../../../ui/common/tooltips/text-tip/text-t
import { EditComponentDialogRequest } from '../../../../../state/flow';
import { ErrorBanner } from '../../../../../../../ui/common/error-banner/error-banner.component';
import { CanvasUtils } from '../../../../../service/canvas-utils.service';
import { NifiTooltipDirective } from '../../../../../../../ui/common/tooltips/nifi-tooltip.directive';
@Component({
standalone: true,
@ -46,7 +47,8 @@ import { CanvasUtils } from '../../../../../service/canvas-utils.service';
AsyncPipe,
NifiSpinnerDirective,
FormsModule,
ErrorBanner
ErrorBanner,
NifiTooltipDirective
],
styleUrls: ['./edit-remote-process-group.component.scss']
})

View File

@ -31,7 +31,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Concurrent Tasks</mat-label>
<mat-label>
Concurrent Tasks
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The number of tasks that should be concurrently scheduled for this port."></i>
</mat-label>
<input matInput formControlName="concurrentTasks" type="text" />
</mat-form-field>
</div>
@ -41,19 +48,40 @@
</div>
<div>
<mat-form-field>
<mat-label>Batch Count</mat-label>
<mat-label>
Batch Count
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The preferred number of flow files to include in a transaction for this port."></i>
</mat-label>
<input matInput formControlName="count" type="text" />
</mat-form-field>
</div>
<div>
<mat-form-field>
<mat-label>Batch Size</mat-label>
<mat-label>
Batch Size
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The preferred number of bytes to include in a transaction for this port."></i>
</mat-label>
<input matInput formControlName="size" type="text" />
</mat-form-field>
</div>
<div>
<mat-form-field>
<mat-label>Batch Duration</mat-label>
<mat-label>
Batch Duration
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The preferred amount of time that a transaction should span for this port."></i>
</mat-label>
<input matInput formControlName="duration" type="text" />
</mat-form-field>
</div>

View File

@ -32,6 +32,8 @@ import { ComponentType } from '../../../../../state/shared';
import { PortSummary } from '../../../state/manage-remote-ports';
import { configureRemotePort } from '../../../state/manage-remote-ports/manage-remote-ports.actions';
import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
@Component({
standalone: true,
@ -44,7 +46,8 @@ import { ClusterConnectionService } from '../../../../../service/cluster-connect
MatCheckboxModule,
MatButtonModule,
AsyncPipe,
NifiSpinnerDirective
NifiSpinnerDirective,
NifiTooltipDirective
],
styleUrls: ['./edit-remote-port.component.scss']
})
@ -106,4 +109,6 @@ export class EditRemotePortComponent {
})
);
}
protected readonly TextTip = TextTip;
}

View File

@ -72,7 +72,7 @@
nifiTooltip
[delayClose]="false"
[tooltipComponentType]="TextTip"
[tooltipInputData]="getCommentsTipData(item)"></div>
[tooltipInputData]="item.comments"></div>
}
@if (portExists(item)) {
<div
@ -80,7 +80,7 @@
nifiTooltip
[delayClose]="false"
[tooltipComponentType]="TextTip"
[tooltipInputData]="getDisconnectedTipData()"></div>
tooltipInputData="This port has been removed."></div>
}
</div>
</td>

View File

@ -39,7 +39,7 @@ import {
stopRemotePortTransmission
} from '../../state/manage-remote-ports/manage-remote-ports.actions';
import { initialState } from '../../state/manage-remote-ports/manage-remote-ports.reducer';
import { isDefinedAndNotNull, TextTipInput } from '../../../../state/shared';
import { isDefinedAndNotNull } from '../../../../state/shared';
import { selectCurrentUser } from '../../../../state/current-user/current-user.selectors';
import { NiFiState } from '../../../../state';
import { NiFiCommon } from '../../../../service/nifi-common.service';
@ -252,18 +252,6 @@ export class ManageRemotePorts implements OnInit, OnDestroy {
return !entity.exists;
}
getCommentsTipData(entity: PortSummary): TextTipInput {
return {
text: entity.comments
};
}
getDisconnectedTipData(): TextTipInput {
return {
text: 'This port has been removed.'
};
}
toggleTransmission(port: PortSummary): void {
if (this.currentRpg) {
if (port.transmitting) {

View File

@ -61,7 +61,14 @@
}
</div>
<div class="flex-1 flex flex-col">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Components referencing the modified parameters grouped by process group."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">
<parameter-references
@ -119,7 +126,14 @@
</div>
</div>
<div class="flex flex-col w-full">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this parameter context."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">
<process-group-references

View File

@ -42,6 +42,8 @@ import { ParameterReferences } from '../../../../../ui/common/parameter-referenc
import { RouterLink } from '@angular/router';
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
@Component({
selector: 'edit-parameter-context',
@ -64,7 +66,8 @@ import { ClusterConnectionService } from '../../../../../service/cluster-connect
ParameterContextInheritance,
ParameterReferences,
RouterLink,
ErrorBanner
ErrorBanner,
NifiTooltipDirective
],
styleUrls: ['./edit-parameter-context.component.scss']
})
@ -181,4 +184,6 @@ export class EditParameterContext {
getParameterProviderLink(parameterProvider: ParameterProviderConfiguration): string[] {
return ['/settings', 'parameter-providers', parameterProvider.parameterProviderId];
}
protected readonly TextTip = TextTip;
}

View File

@ -17,7 +17,14 @@
<div class="parameter-context-inheritance flex gap-x-4" cdkDropListGroup>
<div class="flex flex-col w-full">
<div>Available Parameter Contexts</div>
<div>
Available Parameter Contexts
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Available Parameter Contexts that could be inherited from."></i>
</div>
<div
class="parameter-context-inheritance-list border"
cdkDropList
@ -43,7 +50,14 @@
</div>
</div>
<div class="flex flex-col w-full">
<div>Selected Parameter Contexts</div>
<div>
Selected Parameter Contexts
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Parameter Contexts selected for inheritance. Multiple selected Parameter Contexts will be considered in order from top to bottom."></i>
</div>
<div
class="parameter-context-inheritance-list border"
cdkDropList
@ -71,11 +85,11 @@
<div class="flex gap-x-3 items-center">
<div>{{ item.component.name }}</div>
@if (hasDescription(item)) {
<div
class="fa fa-question-circle primary-color"
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getDescriptionTipData(item)"></div>
[tooltipInputData]="item.component.description"></i>
}
</div>
@if (canClose) {

View File

@ -24,7 +24,7 @@ import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
import { RouterLink } from '@angular/router';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { ParameterContextReferenceEntity, TextTipInput } from '../../../../../state/shared';
import { ParameterContextReferenceEntity } from '../../../../../state/shared';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { ParameterReferences } from '../../../../../ui/common/parameter-references/parameter-references.component';
@ -127,12 +127,6 @@ export class ParameterContextInheritance implements ControlValueAccessor {
return !this.nifiCommon.isBlank(entity.component.description);
}
getDescriptionTipData(entity: ParameterContextEntity): TextTipInput {
return {
text: entity.component.description
};
}
removeSelected(entity: ParameterContextEntity, i: number): void {
transferArrayItem(
this.selectedParameterContexts,

View File

@ -36,11 +36,11 @@
{{ item.entity.parameter.name }}
</div>
@if (hasDescription(item)) {
<div
class="fa fa-question-circle primary-color"
<i
class="fa fa-info-circle primary-color"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getDescriptionTipData(item)"></div>
[tooltipInputData]="item.entity.parameter.description"></i>
}
</div>
</td>
@ -81,7 +81,7 @@
class="fa fa-info primary-color"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getExtraWhitespaceTipData()"></div>
tooltipInputData="The specified value contains leading and/or trailing whitespace character(s). This could produce unexpected results if it was not intentional."></div>
}
</div>
</ng-template>
@ -140,7 +140,14 @@
</div>
</div>
<div class="flex-1 flex flex-col">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Components referencing this parameter grouped by process group."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">
@if (selectedItem) {

View File

@ -24,7 +24,7 @@ import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
import { RouterLink } from '@angular/router';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { Parameter, ParameterEntity, TextTipInput } from '../../../../../state/shared';
import { Parameter, ParameterEntity } from '../../../../../state/shared';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { Observable, take } from 'rxjs';
@ -200,12 +200,6 @@ export class ParameterTable implements AfterViewInit, ControlValueAccessor {
return !this.nifiCommon.isBlank(item.entity.parameter.description);
}
getDescriptionTipData(item: ParameterItem): TextTipInput {
return {
text: item.entity.parameter.description
};
}
isSensitiveParameter(item: ParameterItem): boolean {
return item.entity.parameter.sensitive;
}
@ -222,12 +216,6 @@ export class ParameterTable implements AfterViewInit, ControlValueAccessor {
return this.nifiCommon.hasLeadTrailWhitespace(value);
}
getExtraWhitespaceTipData(): TextTipInput {
return {
text: 'The specified value contains leading and/or trailing whitespace character(s). This could produce unexpected results if it was not intentional.'
};
}
canGoToParameter(item: ParameterItem): boolean {
return (
item.entity.parameter.inherited == true &&

View File

@ -37,8 +37,16 @@
<mat-form-field>
<mat-label>Date Range</mat-label>
<mat-date-range-input [rangePicker]="picker">
<input matStartDate formControlName="startDate" placeholder="Start date" />
<input matEndDate formControlName="endDate" placeholder="End date" />
<input
matStartDate
formControlName="startDate"
placeholder="Start date"
title="The start date in the format 'mm/dd/yyyy'. Must also specify start time." />
<input
matEndDate
formControlName="endDate"
placeholder="End date"
title="The end date in the format 'mm/dd/yyyy'. Must also specify end time." />
</mat-date-range-input>
<mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle>
<mat-date-range-picker #picker></mat-date-range-picker>
@ -47,20 +55,46 @@
<div class="w-full flex flex-col">
<mat-form-field>
<mat-label>Start Time ({{ timezone }})</mat-label>
<input matInput type="time" step="1" formControlName="startTime" />
<input
matInput
type="time"
step="1"
formControlName="startTime"
placeholder="hh:mm:ss"
title="The start time in the format 'hh:mm:ss'. Must also specify start date." />
</mat-form-field>
<mat-form-field>
<mat-label>Minimum File Size</mat-label>
<mat-label>
Minimum File Size
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The minimum file size (e.g. 2 KB)."></i>
</mat-label>
<input matInput type="text" formControlName="minFileSize" />
</mat-form-field>
</div>
<div class="w-full flex flex-col">
<mat-form-field>
<mat-label>End Time ({{ timezone }})</mat-label>
<input matInput type="time" step="1" formControlName="endTime" />
<input
matInput
type="time"
step="1"
formControlName="endTime"
placeholder="hh:mm:ss"
title="The end time in the format 'hh:mm:ss'. Must also specify end date." />
</mat-form-field>
<mat-form-field>
<mat-label>Maximum File Size</mat-label>
<mat-label>
Maximum File Size
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The maximum file size (e.g. 4 GB)."></i>
</mat-label>
<input matInput type="text" formControlName="maxFileSize" />
</mat-form-field>
</div>

View File

@ -58,7 +58,14 @@
<div class="flex flex-col w-full">
<div>
<mat-form-field>
<mat-label>Enforcement Policy</mat-label>
<mat-label>
Enforcement Policy
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The enforcement policy of the flow analysis rule."></i>
</mat-label>
<mat-select formControlName="enforcementPolicy">
@for (option of strategies; track option) {
<mat-option
@ -66,7 +73,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getPropertyTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>

View File

@ -31,8 +31,7 @@ import {
InlineServiceCreationRequest,
InlineServiceCreationResponse,
Property,
SelectOption,
TextTipInput
SelectOption
} from '../../../../../state/shared';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { PropertyTable } from '../../../../../ui/common/property-table/property-table.component';
@ -157,12 +156,5 @@ export class EditFlowAnalysisRule {
});
}
getPropertyTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
protected readonly TextTip = TextTip;
}

View File

@ -41,7 +41,7 @@
[delayClose]="false"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getCommentsTipData(item)"></div>
[tooltipInputData]="item.component.comments"></div>
}
@if (hasErrors(item)) {
<div

View File

@ -27,7 +27,7 @@ import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.com
import { BulletinsTip } from '../../../../../ui/common/tooltips/bulletins-tip/bulletins-tip.component';
import { ValidationErrorsTip } from '../../../../../ui/common/tooltips/validation-errors-tip/validation-errors-tip.component';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { BulletinsTipInput, TextTipInput, ValidationErrorsTipInput } from '../../../../../state/shared';
import { BulletinsTipInput, ValidationErrorsTipInput } from '../../../../../state/shared';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
import { ReportingTaskEntity } from '../../../state/reporting-tasks';
import { CurrentUser } from '../../../../../state/current-user';
@ -137,12 +137,6 @@ export class FlowAnalysisRuleTable {
return !this.nifiCommon.isBlank(entity.component.comments);
}
getCommentsTipData(entity: FlowAnalysisRuleEntity): TextTipInput {
return {
text: entity.component.comments
};
}
hasErrors(entity: FlowAnalysisRuleEntity): boolean {
return !this.nifiCommon.isEmpty(entity.component.validationErrors);
}

View File

@ -20,7 +20,14 @@
<form [formGroup]="controllerForm">
<div>
<mat-form-field>
<mat-label>Maximum Timer Driven Thread Count</mat-label>
<mat-label>
Maximum Timer Driven Thread Count
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The maximum number of threads for timer driven processors available to the system."></i>
</mat-label>
<input
matInput
formControlName="timerDrivenThreadCount"

View File

@ -24,6 +24,7 @@ import { Client } from '../../../../../service/client.service';
import { selectCurrentUser } from '../../../../../state/current-user/current-user.selectors';
import { selectSaving } from '../../../state/general/general.selectors';
import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
@Component({
selector: 'general-form',
@ -67,4 +68,6 @@ export class GeneralForm {
this.store.dispatch(updateControllerConfig({ request: payload }));
}
protected readonly TextTip = TextTip;
}

View File

@ -25,6 +25,7 @@ import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { NifiSpinnerDirective } from '../../../../ui/common/spinner/nifi-spinner.directive';
import { NifiTooltipDirective } from '../../../../ui/common/tooltips/nifi-tooltip.directive';
@NgModule({
declarations: [General, GeneralForm],
@ -37,7 +38,8 @@ import { NifiSpinnerDirective } from '../../../../ui/common/spinner/nifi-spinner
MatInputModule,
MatButtonModule,
NgxSkeletonLoaderModule,
NifiSpinnerDirective
NifiSpinnerDirective,
NifiTooltipDirective
]
})
export class GeneralModule {}

View File

@ -56,7 +56,14 @@
</div>
</div>
<div class="flex flex-col w-full">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this parameter provider."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">
<parameter-provider-references

View File

@ -44,6 +44,8 @@ import { PropertyTable } from '../../../../../ui/common/property-table/property-
import { ErrorBanner } from '../../../../../ui/common/error-banner/error-banner.component';
import { CommonModule } from '@angular/common';
import { ClusterConnectionService } from '../../../../../service/cluster-connection.service';
import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../../../../ui/common/tooltips/nifi-tooltip.directive';
@Component({
selector: 'edit-parameter-provider',
@ -60,7 +62,8 @@ import { ClusterConnectionService } from '../../../../../service/cluster-connect
ParameterProviderReferences,
PropertyTable,
ErrorBanner,
CommonModule
CommonModule,
NifiTooltipDirective
],
templateUrl: './edit-parameter-provider.component.html',
styleUrls: ['./edit-parameter-provider.component.scss']
@ -146,4 +149,6 @@ export class EditParameterProvider {
this.goToReferencingParameterContext(parameterContextReference.component?.id);
}
}
protected readonly TextTip = TextTip;
}

View File

@ -65,8 +65,10 @@
<div class="flex flex-row items-center gap-x-2">
Parameter Contexts To Create
<i
class="fa fa-question-circle primary-color"
title="Parameter groups set to be created as parameter contexts, pending apply."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Parameter groups set to be created as parameter contexts, pending apply."></i>
</div>
<div
*ngIf="Object.keys(parameterContextsToCreate).length > 0; else none"
@ -78,8 +80,10 @@
<div class="flex flex-row items-center gap-x-2">
Parameter Contexts To Update
<i
class="fa fa-question-circle primary-color"
title="Synced parameter contexts to be updated, pending apply."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Synced parameter contexts to be updated, pending apply."></i>
</div>
<div
*ngIf="parameterContextsToUpdate.length > 0; else none"
@ -91,8 +95,10 @@
<div class="flex flex-row items-center gap-x-2">
Affected Referencing Components
<i
class="fa fa-question-circle primary-color"
title="Affected components referencing this parameter provider."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Affected components referencing this parameter provider."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">
@ -127,8 +133,10 @@
<div class="flex flex-row items-center gap-x-2">
Select To Configure a Parameter Group
<i
class="fa fa-question-circle primary-color"
title="Discovered parameter groups from this parameter provider. Select a group to create a parameter context, then configure its parameter sensitivities."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Discovered parameter groups from this parameter provider. Select a group to create a parameter context, then configure its parameter sensitivities."></i>
</div>
<div class="flex-1">
<parameter-groups-table
@ -187,8 +195,10 @@
<div class="flex items-center gap-x-2">
Fetched Parameters
<i
class="fa fa-question-circle primary-color"
title="Discovered parameters from the selected parameter group."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Discovered parameters from the selected parameter group."></i>
</div>
<ul class="flex-1 overflow-y-auto border px-2">
<li
@ -209,8 +219,10 @@
<div class="flex flex-row items-center gap-x-2">
Select Parameters To Be Set As Sensitive
<i
class="fa fa-question-circle primary-color"
title="Only parameters that are not referenced can be modified."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Only parameters that are not referenced can be modified."></i>
</div>
<div class="flex-1 relative">
@ -289,8 +301,10 @@
<div class="flex flex-row items-center gap-x-2">
Parameter Contexts To Create
<i
class="fa fa-question-circle primary-color"
title="Parameter groups set to be created as parameter contexts, pending apply."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Parameter groups set to be created as parameter contexts, pending apply."></i>
</div>
<div
*ngIf="Object.keys(parameterContextsToCreate).length > 0; else none"
@ -302,8 +316,10 @@
<div class="flex flex-row items-center gap-x-2">
Parameter Contexts To Update
<i
class="fa fa-question-circle primary-color"
title="Synced parameter contexts to be updated, pending apply."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Synced parameter contexts to be updated, pending apply."></i>
</div>
<div
*ngIf="parameterContextsToUpdate.length > 0; else none"
@ -315,8 +331,10 @@
<div class="flex flex-row items-center gap-x-2">
Referencing Components
<i
class="fa fa-question-circle primary-color"
title="Components referencing this selected parameter."></i>
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Components referencing this selected parameter."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">

View File

@ -34,7 +34,7 @@
[value]="option.type"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ formatType(option) }}
</mat-option>

View File

@ -23,7 +23,7 @@ import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatButtonModule } from '@angular/material/button';
import { AsyncPipe } from '@angular/common';
import { Observable } from 'rxjs';
import { DocumentedType, TextTipInput } from '../../../../../state/shared';
import { DocumentedType } from '../../../../../state/shared';
import { CreateRegistryClientDialogRequest, CreateRegistryClientRequest } from '../../../state/registry-clients';
import { NifiSpinnerDirective } from '../../../../../ui/common/spinner/nifi-spinner.directive';
import { Client } from '../../../../../service/client.service';
@ -83,13 +83,6 @@ export class CreateRegistryClient {
return this.nifiCommon.substringAfterLast(option.type, '.');
}
getOptionTipData(option: DocumentedType): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
createRegistryClientClicked() {
const request: CreateRegistryClientRequest = {
revision: {

View File

@ -63,7 +63,14 @@
<div class="flex flex-col w-full">
<div>
<mat-form-field>
<mat-label>Scheduling Strategy</mat-label>
<mat-label>
Scheduling Strategy
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The strategy used to schedule this reporting task."></i>
</mat-label>
<mat-select
formControlName="schedulingStrategy"
(selectionChange)="schedulingStrategyChanged($event.value)">
@ -73,7 +80,7 @@
[disabled]="readonly"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getPropertyTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -83,7 +90,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Run Schedule</mat-label>
<mat-label>
Run Schedule
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The amount of time that should elapse between task executions."></i>
</mat-label>
<input
matInput
formControlName="schedulingPeriod"

View File

@ -33,8 +33,7 @@ import {
InlineServiceCreationRequest,
InlineServiceCreationResponse,
Property,
SelectOption,
TextTipInput
SelectOption
} from '../../../../../state/shared';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { PropertyTable } from '../../../../../ui/common/property-table/property-table.component';
@ -197,13 +196,6 @@ export class EditReportingTask {
});
}
getPropertyTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
schedulingStrategyChanged(value: string): void {
this.schedulingStrategy = value;

View File

@ -41,7 +41,7 @@
[delayClose]="false"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getCommentsTipData(item)"></div>
[tooltipInputData]="item.component.comments"></div>
}
@if (hasErrors(item)) {
<div

View File

@ -23,7 +23,7 @@ import { TextTip } from '../../../../../ui/common/tooltips/text-tip/text-tip.com
import { BulletinsTip } from '../../../../../ui/common/tooltips/bulletins-tip/bulletins-tip.component';
import { ValidationErrorsTip } from '../../../../../ui/common/tooltips/validation-errors-tip/validation-errors-tip.component';
import { NiFiCommon } from '../../../../../service/nifi-common.service';
import { BulletinsTipInput, TextTipInput, ValidationErrorsTipInput } from '../../../../../state/shared';
import { BulletinsTipInput, ValidationErrorsTipInput } from '../../../../../state/shared';
import { FlowConfiguration } from '../../../../../state/flow-configuration';
import { CurrentUser } from '../../../../../state/current-user';
@ -92,12 +92,6 @@ export class ReportingTaskTable {
return !this.nifiCommon.isBlank(entity.component.comments);
}
getCommentsTipData(entity: ReportingTaskEntity): TextTipInput {
return {
text: entity.component.comments
};
}
hasErrors(entity: ReportingTaskEntity): boolean {
return !this.nifiCommon.isEmpty(entity.component.validationErrors);
}

View File

@ -224,10 +224,6 @@ export interface ComponentHistoryEntity {
componentHistory: ComponentHistory;
}
export interface TextTipInput {
text: string;
}
export interface UnorderedListTipInput {
items: string[];
}

View File

@ -42,7 +42,7 @@
nifiTooltip
[delayClose]="false"
[tooltipComponentType]="TextTip"
[tooltipInputData]="getCommentsTipData(item)"></div>
[tooltipInputData]="item.component.comments"></div>
}
@if (hasErrors(item)) {
<div

View File

@ -22,12 +22,7 @@ import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { NiFiCommon } from '../../../../service/nifi-common.service';
import { MatSortModule, Sort } from '@angular/material/sort';
import { NgClass } from '@angular/common';
import {
BulletinsTipInput,
ControllerServiceEntity,
TextTipInput,
ValidationErrorsTipInput
} from '../../../../state/shared';
import { BulletinsTipInput, ControllerServiceEntity, ValidationErrorsTipInput } from '../../../../state/shared';
import { NifiTooltipDirective } from '../../tooltips/nifi-tooltip.directive';
import { TextTip } from '../../tooltips/text-tip/text-tip.component';
import { BulletinsTip } from '../../tooltips/bulletins-tip/bulletins-tip.component';
@ -116,12 +111,6 @@ export class ControllerServiceTable {
return !this.nifiCommon.isBlank(entity.component.comments);
}
getCommentsTipData(entity: ControllerServiceEntity): TextTipInput {
return {
text: entity.component.comments
};
}
viewDocumentationClicked(entity: ControllerServiceEntity, event: MouseEvent): void {
event.stopPropagation();
this.viewControllerServiceDocumentation.next(entity);

View File

@ -33,11 +33,25 @@
</div>
<div class="flex flex-col">
<div>Scope</div>
<div class="accent-color font-medium">Service and referencing components</div>
<div>
<span class="accent-color font-medium">Service and referencing components</span>
<i
class="fa fa-info-circle ml-1"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Referencing components must be disabled/stopped in order to disable this service."></i>
</div>
</div>
</div>
<div class="flex basis-1/3 flex-col">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this controller service."></i>
</div>
<div class="relative h-full border" style="min-height: 320px">
<div class="absolute inset-0 overflow-y-auto p-1">
<controller-service-references
@ -132,7 +146,14 @@
</div>
</div>
<div class="flex basis-1/3 flex-col">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this controller service."></i>
</div>
<div class="relative h-full border" style="min-height: 320px">
<div class="absolute inset-0 overflow-y-auto p-1">
<controller-service-references

View File

@ -75,7 +75,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Bulletin Level</mat-label>
<mat-label>
Bulletin Level
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="The level at which this controller service will generate bulletins."></i>
</mat-label>
<mat-select formControlName="bulletinLevel">
@for (option of bulletinLevels; track option) {
<mat-option [value]="option.value" [disabled]="readonly">
@ -87,7 +94,14 @@
</div>
</div>
<div class="flex flex-col w-full">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this controller service."></i>
</div>
<div class="relative h-full border">
<div class="absolute inset-0 overflow-y-auto p-1">
<controller-service-references

View File

@ -45,6 +45,8 @@ import { ControllerServiceReferences } from '../controller-service-references/co
import { NifiSpinnerDirective } from '../../spinner/nifi-spinner.directive';
import { ErrorBanner } from '../../error-banner/error-banner.component';
import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
import { TextTip } from '../../tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../../tooltips/nifi-tooltip.directive';
@Component({
selector: 'edit-controller-service',
@ -64,7 +66,8 @@ import { ClusterConnectionService } from '../../../../service/cluster-connection
ControllerServiceReferences,
AsyncPipe,
NifiSpinnerDirective,
ErrorBanner
ErrorBanner,
NifiTooltipDirective
],
styleUrls: ['./edit-controller-service.component.scss']
})
@ -172,4 +175,6 @@ export class EditControllerService {
postUpdateNavigation
});
}
protected readonly TextTip = TextTip;
}

View File

@ -40,7 +40,7 @@
[value]="option.value"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getSelectOptionTipData(option)"
[tooltipInputData]="option.description"
[delayClose]="false">
{{ option.text }}
</mat-option>
@ -50,7 +50,14 @@
</div>
</div>
<div class="flex basis-1/3 flex-col">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this controller service."></i>
</div>
<div class="relative h-full border" style="min-height: 320px">
<div class="absolute inset-0 overflow-y-auto p-1">
<controller-service-references
@ -153,7 +160,14 @@
</div>
</div>
<div class="flex basis-1/3 flex-col">
<div>Referencing Components</div>
<div>
Referencing Components
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Other components referencing this controller service."></i>
</div>
<div class="relative h-full border" style="min-height: 320px">
<div class="absolute inset-0 overflow-y-auto p-1">
<controller-service-references

View File

@ -21,8 +21,7 @@ import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators }
import {
ControllerServiceReferencingComponent,
SetEnableControllerServiceDialogRequest,
SelectOption,
TextTipInput
SelectOption
} from '../../../../state/shared';
import { MatInputModule } from '@angular/material/input';
import { MatCheckboxModule } from '@angular/material/checkbox';
@ -114,13 +113,6 @@ export class EnableControllerService implements OnDestroy {
);
}
getSelectOptionTipData(option: SelectOption): TextTipInput {
return {
// @ts-ignore
text: option.description
};
}
submitForm() {
this.store.dispatch(
submitEnableRequest({

View File

@ -29,7 +29,14 @@
</div>
<div>
<mat-form-field>
<mat-label>Value</mat-label>
<mat-label>
Value
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
tooltipInputData="Parameter values do not support Expression Language or embedded parameter references."></i>
</mat-label>
<textarea matInput formControlName="value" type="text"></textarea>
</mat-form-field>
</div>

View File

@ -37,6 +37,8 @@ import { MatCheckboxModule } from '@angular/material/checkbox';
import { NifiSpinnerDirective } from '../spinner/nifi-spinner.directive';
import { AsyncPipe } from '@angular/common';
import { Observable } from 'rxjs';
import { TextTip } from '../tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../tooltips/nifi-tooltip.directive';
@Component({
selector: 'edit-parameter-dialog',
@ -51,7 +53,8 @@ import { Observable } from 'rxjs';
MatRadioModule,
MatCheckboxModule,
NifiSpinnerDirective,
AsyncPipe
AsyncPipe,
NifiTooltipDirective
],
templateUrl: './edit-parameter-dialog.component.html',
styleUrls: ['./edit-parameter-dialog.component.scss']
@ -167,4 +170,6 @@ export class EditParameterDialog {
}
});
}
protected readonly TextTip = TextTip;
}

View File

@ -35,7 +35,7 @@
(mousedown)="preventDrag($event)"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getAllowableValueOptionTipData(allowableValue)"
[tooltipInputData]="allowableValue.description"
[delayClose]="false">
<span
class="option-text"
@ -81,7 +81,7 @@
(mousedown)="preventDrag($event)"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getAllowableValueOptionTipData(parameterAllowableValue)"
[tooltipInputData]="parameterAllowableValue.description"
[delayClose]="false">
<span
class="option-text"

View File

@ -25,7 +25,7 @@ import { MatButtonModule } from '@angular/material/button';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
import { NifiTooltipDirective } from '../../../tooltips/nifi-tooltip.directive';
import { AllowableValue, Parameter, PropertyDescriptor, TextTipInput } from '../../../../../state/shared';
import { AllowableValue, Parameter, PropertyDescriptor } from '../../../../../state/shared';
import { MatOptionModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { MatTooltipModule } from '@angular/material/tooltip';
@ -268,13 +268,6 @@ export class ComboEditor {
return '';
}
getAllowableValueOptionTipData(allowableValue: AllowableValue): TextTipInput {
return {
// @ts-ignore
text: allowableValue.description
};
}
okClicked(): void {
const valueControl: AbstractControl | null = this.comboEditorForm.get('value');
if (valueControl) {

View File

@ -38,12 +38,12 @@
<div>
{{ item.descriptor.displayName }}
</div>
<div
class="fa fa-question-circle primary-color"
<i
class="fa fa-info-circle primary-color"
nifiTooltip
[tooltipComponentType]="PropertyTip"
[tooltipInputData]="getPropertyTipData(item)"
[delayClose]="false"></div>
[delayClose]="false"></i>
</div>
</td>
</ng-container>
@ -89,7 +89,7 @@
class="fa fa-info primary-color"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getExtraWhitespaceTipData()"></div>
tooltipInputData="The specified value contains leading and/or trailing whitespace character(s). This could produce unexpected results if it was not intentional."></div>
}
</div>
</ng-template>

View File

@ -42,8 +42,7 @@ import {
Property,
PropertyDependency,
PropertyDescriptor,
PropertyTipInput,
TextTipInput
PropertyTipInput
} from '../../../state/shared';
import { NifiTooltipDirective } from '../tooltips/nifi-tooltip.directive';
import { TextTip } from '../tooltips/text-tip/text-tip.component';
@ -377,12 +376,6 @@ export class PropertyTable implements AfterViewInit, ControlValueAccessor {
return this.nifiCommon.hasLeadTrailWhitespace(value);
}
getExtraWhitespaceTipData(): TextTipInput {
return {
text: 'The specified value contains leading and/or trailing whitespace character(s). This could produce unexpected results if it was not intentional.'
};
}
getPropertyTipData(item: PropertyItem): PropertyTipInput {
return {
descriptor: item.descriptor,

View File

@ -122,9 +122,7 @@
[value]="descriptor"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="
getSelectOptionTipData(descriptor)
"
[tooltipInputData]="descriptor.description"
[delayClose]="false">
<span class="option-text">{{
descriptor.label

View File

@ -45,7 +45,7 @@ import * as d3 from 'd3';
import { NiFiCommon } from '../../../service/nifi-common.service';
import { TextTip } from '../tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../tooltips/nifi-tooltip.directive';
import { isDefinedAndNotNull, TextTipInput } from '../../../state/shared';
import { isDefinedAndNotNull } from '../../../state/shared';
import { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';
import { Resizable } from '../resizable/resizable.component';
import { Instance, NIFI_NODE_CONFIG, Stats } from './index';
@ -217,12 +217,6 @@ export class StatusHistory implements OnInit, AfterViewInit {
this.store.dispatch(reloadStatusHistory({ request: this.request }));
}
getSelectOptionTipData(descriptor: FieldDescriptor): TextTipInput {
return {
text: descriptor.description
};
}
clusterStatsChanged(stats: Stats) {
this.clusterStats = stats;
}

View File

@ -133,11 +133,11 @@
<div class="flex flex-col">
<div class="flex gap-x-3 items-center">
<div>Core Load Average</div>
<div
class="fa fa-question-circle primary-color"
<i
class="fa fa-info-circle"
nifiTooltip
[tooltipComponentType]="TextTip"
[tooltipInputData]="getCoreLoadTooltip()"></div>
tooltipInputData="Core load average for the last minute. Not available on all platforms."></i>
</div>
<div class="accent-color font-medium">
{{ formatFloat(systemDiagnostics.processorLoadAverage) }}

View File

@ -31,7 +31,7 @@ import { reloadSystemDiagnostics } from '../../../state/system-diagnostics/syste
import { NiFiCommon } from '../../../service/nifi-common.service';
import { TextTip } from '../tooltips/text-tip/text-tip.component';
import { NifiTooltipDirective } from '../tooltips/nifi-tooltip.directive';
import { isDefinedAndNotNull, TextTipInput } from '../../../state/shared';
import { isDefinedAndNotNull } from '../../../state/shared';
import { MatProgressBarModule } from '@angular/material/progress-bar';
@Component({
@ -83,12 +83,6 @@ export class SystemDiagnosticsDialog implements OnInit {
return this.nifiCommon.formatFloat(value);
}
getCoreLoadTooltip(): TextTipInput {
return {
text: 'Core load average for the last minute. Not available on all platforms.'
};
}
getRepositoryStorageUsagePercent(repoStorage: RepositoryStorageUsage): number {
return (repoStorage.usedSpaceBytes / repoStorage.totalSpaceBytes) * 100;
}

View File

@ -15,4 +15,4 @@
~ limitations under the License.
-->
<div class="tooltip">{{ data?.text }}</div>
<div class="tooltip">{{ data }}</div>

View File

@ -16,7 +16,6 @@
*/
import { Component, Input } from '@angular/core';
import { TextTipInput } from '../../../../state/shared';
@Component({
selector: 'text-tip',
@ -25,5 +24,5 @@ import { TextTipInput } from '../../../../state/shared';
styleUrls: ['./text-tip.component.scss']
})
export class TextTip {
@Input() data: TextTipInput | undefined;
@Input() data: string = '';
}