UI: Fix bugs
This commit is contained in:
parent
0bf8749ca5
commit
c377f80caa
@ -20,12 +20,26 @@
|
|||||||
*ngFor="let queuesControl of queuesFormArray.controls; trackBy: trackByQueue;
|
*ngFor="let queuesControl of queuesFormArray.controls; trackBy: trackByQueue;
|
||||||
let $index = index; last as isLast;"
|
let $index = index; last as isLast;"
|
||||||
[ngStyle]="!isLast ? {paddingBottom: '8px'} : {}">
|
[ngStyle]="!isLast ? {paddingBottom: '8px'} : {}">
|
||||||
<tb-queue-form [formControl]="queuesControl"
|
<mat-expansion-panel fxFlex [expanded]="true">
|
||||||
(removeQueue)="removeQueue($index)"
|
<mat-expansion-panel-header>
|
||||||
[mainQueue]="$index === 0"
|
<div fxFlex fxLayout="row" fxLayoutAlign="start center">
|
||||||
[expanded]="$index === 0"
|
<mat-panel-title>
|
||||||
[newQueue]="newQueue">
|
{{ queuesControl.value.name }}
|
||||||
</tb-queue-form>
|
</mat-panel-title>
|
||||||
|
<span fxFlex></span>
|
||||||
|
<button *ngIf="!($index === 0) && !disabled" mat-icon-button style="min-width: 40px;"
|
||||||
|
type="button"
|
||||||
|
(click)="removeQueue($index)"
|
||||||
|
matTooltip="{{ 'action.remove' | translate }}"
|
||||||
|
matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</mat-expansion-panel-header>
|
||||||
|
<ng-template matExpansionPanelContent>
|
||||||
|
<tb-queue-form [formControl]="queuesControl"></tb-queue-form>
|
||||||
|
</ng-template>
|
||||||
|
</mat-expansion-panel>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!queuesFormArray.controls.length">
|
<div *ngIf="!queuesFormArray.controls.length">
|
||||||
<span translate fxLayoutAlign="center center"
|
<span translate fxLayoutAlign="center center"
|
||||||
|
|||||||
@ -126,9 +126,9 @@ export class TenantProfileQueuesComponent implements ControlValueAccessor, Valid
|
|||||||
} else {
|
} else {
|
||||||
this.tenantProfileQueuesFormGroup.enable({emitEvent: false});
|
this.tenantProfileQueuesFormGroup.enable({emitEvent: false});
|
||||||
}
|
}
|
||||||
this.valueChangeSubscription$ = this.tenantProfileQueuesFormGroup.valueChanges.subscribe(value => {
|
this.valueChangeSubscription$ = this.tenantProfileQueuesFormGroup.valueChanges.subscribe(() =>
|
||||||
this.updateModel();
|
this.updateModel()
|
||||||
});
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public trackByQueue(index: number, queueControl: AbstractControl) {
|
public trackByQueue(index: number, queueControl: AbstractControl) {
|
||||||
@ -183,10 +183,6 @@ export class TenantProfileQueuesComponent implements ControlValueAccessor, Valid
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
getName(value) {
|
|
||||||
return this.utils.customTranslation(value, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
private updateModel() {
|
private updateModel() {
|
||||||
const queues: Array<QueueInfo> = this.tenantProfileQueuesFormGroup.get('queues').value;
|
const queues: Array<QueueInfo> = this.tenantProfileQueuesFormGroup.get('queues').value;
|
||||||
this.propagateChange(queues);
|
this.propagateChange(queues);
|
||||||
|
|||||||
@ -109,7 +109,9 @@ export class TenantProfileComponent extends EntityComponent<TenantProfile> {
|
|||||||
this.entityForm.patchValue({name: entity.name}, {emitEvent: false});
|
this.entityForm.patchValue({name: entity.name}, {emitEvent: false});
|
||||||
this.entityForm.patchValue({isolatedTbCore: entity.isolatedTbCore}, {emitEvent: false});
|
this.entityForm.patchValue({isolatedTbCore: entity.isolatedTbCore}, {emitEvent: false});
|
||||||
this.entityForm.patchValue({isolatedTbRuleEngine: entity.isolatedTbRuleEngine}, {emitEvent: false});
|
this.entityForm.patchValue({isolatedTbRuleEngine: entity.isolatedTbRuleEngine}, {emitEvent: false});
|
||||||
this.entityForm.get('profileData').patchValue({configuration: entity.profileData?.configuration}, {emitEvent: false});
|
this.entityForm.get('profileData').patchValue({
|
||||||
|
configuration: !this.isAdd ? entity.profileData?.configuration : createTenantProfileConfiguration(TenantProfileType.DEFAULT)
|
||||||
|
}, {emitEvent: false});
|
||||||
this.entityForm.get('profileData').patchValue({queueConfiguration: entity.profileData?.queueConfiguration}, {emitEvent: false});
|
this.entityForm.get('profileData').patchValue({queueConfiguration: entity.profileData?.queueConfiguration}, {emitEvent: false});
|
||||||
this.entityForm.patchValue({description: entity.description}, {emitEvent: false});
|
this.entityForm.patchValue({description: entity.description}, {emitEvent: false});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,23 +15,7 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<mat-expansion-panel fxFlex [(expanded)]="expanded">
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<div fxFlex fxLayout="row" fxLayoutAlign="start center">
|
|
||||||
<mat-panel-title>
|
|
||||||
{{ queueTitle }}
|
|
||||||
</mat-panel-title>
|
|
||||||
<span fxFlex></span>
|
|
||||||
<button *ngIf="!mainQueue && !disabled" mat-icon-button style="min-width: 40px;"
|
|
||||||
type="button"
|
|
||||||
(click)="removeQueue.emit()"
|
|
||||||
matTooltip="{{ 'action.remove' | translate }}"
|
|
||||||
matTooltipPosition="above">
|
|
||||||
<mat-icon>delete</mat-icon>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
<form [formGroup]="queueFormGroup" fxLayout="column" fxLayoutGap="0.5em">
|
<form [formGroup]="queueFormGroup" fxLayout="column" fxLayoutGap="0.5em">
|
||||||
<mat-form-field class="mat-block">
|
<mat-form-field class="mat-block">
|
||||||
<mat-label translate>admin.queue-name</mat-label>
|
<mat-label translate>admin.queue-name</mat-label>
|
||||||
@ -93,7 +77,7 @@
|
|||||||
<mat-label translate>queue.submit-strategy</mat-label>
|
<mat-label translate>queue.submit-strategy</mat-label>
|
||||||
<mat-select formControlName="type" required>
|
<mat-select formControlName="type" required>
|
||||||
<mat-option *ngFor="let strategy of submitStrategies" [value]="strategy">
|
<mat-option *ngFor="let strategy of submitStrategies" [value]="strategy">
|
||||||
{{ strategy }}
|
{{ queueSubmitStrategyTypesMap.get(queueSubmitStrategyTypes[strategy]).label | translate }}
|
||||||
</mat-option>
|
</mat-option>
|
||||||
</mat-select>
|
</mat-select>
|
||||||
<mat-error *ngIf="queueFormGroup.get('submitStrategy.type').hasError('required')">
|
<mat-error *ngIf="queueFormGroup.get('submitStrategy.type').hasError('required')">
|
||||||
@ -126,7 +110,7 @@
|
|||||||
<mat-label translate>queue.processing-strategy</mat-label>
|
<mat-label translate>queue.processing-strategy</mat-label>
|
||||||
<mat-select formControlName="type" required>
|
<mat-select formControlName="type" required>
|
||||||
<mat-option *ngFor="let strategy of processingStrategies" [value]="strategy">
|
<mat-option *ngFor="let strategy of processingStrategies" [value]="strategy">
|
||||||
{{ strategy }}
|
{{ queueProcessingStrategyTypesMap.get(queueProcessingStrategyTypes[strategy]).label | translate }}
|
||||||
</mat-option>
|
</mat-option>
|
||||||
</mat-select>
|
</mat-select>
|
||||||
<mat-error *ngIf="queueFormGroup.get('processingStrategy.type').hasError('required')">
|
<mat-error *ngIf="queueFormGroup.get('processingStrategy.type').hasError('required')">
|
||||||
@ -190,7 +174,6 @@
|
|||||||
<mat-form-field class="mat-block" formGroupName="additionalInfo">
|
<mat-form-field class="mat-block" formGroupName="additionalInfo">
|
||||||
<mat-label translate>queue.description</mat-label>
|
<mat-label translate>queue.description</mat-label>
|
||||||
<textarea matInput formControlName="description" rows="2"></textarea>
|
<textarea matInput formControlName="description" rows="2"></textarea>
|
||||||
|
<mat-hint translate>queue.description-hint</mat-hint>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</form>
|
</form>
|
||||||
</ng-template>
|
|
||||||
</mat-expansion-panel>
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
/// limitations under the License.
|
/// limitations under the License.
|
||||||
///
|
///
|
||||||
|
|
||||||
import { Component, forwardRef, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';
|
import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
ControlValueAccessor,
|
ControlValueAccessor,
|
||||||
FormBuilder,
|
FormBuilder,
|
||||||
@ -25,9 +25,14 @@ import {
|
|||||||
Validator,
|
Validator,
|
||||||
Validators
|
Validators
|
||||||
} from '@angular/forms';
|
} from '@angular/forms';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
|
||||||
import { UtilsService } from '@core/services/utils.service';
|
import { UtilsService } from '@core/services/utils.service';
|
||||||
import { QueueInfo, QueueProcessingStrategyTypes, QueueSubmitStrategyTypes } from '@shared/models/queue.models';
|
import {
|
||||||
|
QueueInfo,
|
||||||
|
QueueProcessingStrategyTypes,
|
||||||
|
QueueProcessingStrategyTypesMap,
|
||||||
|
QueueSubmitStrategyTypes,
|
||||||
|
QueueSubmitStrategyTypesMap
|
||||||
|
} from '@shared/models/queue.models';
|
||||||
import { isDefinedAndNotNull } from '@core/utils';
|
import { isDefinedAndNotNull } from '@core/utils';
|
||||||
import { Subscription } from 'rxjs';
|
import { Subscription } from 'rxjs';
|
||||||
|
|
||||||
@ -56,31 +61,25 @@ export class QueueFormComponent implements ControlValueAccessor, OnInit, OnDestr
|
|||||||
@Input()
|
@Input()
|
||||||
newQueue = false;
|
newQueue = false;
|
||||||
|
|
||||||
@Input()
|
|
||||||
mainQueue = false;
|
|
||||||
|
|
||||||
@Input()
|
@Input()
|
||||||
systemQueue = false;
|
systemQueue = false;
|
||||||
|
|
||||||
@Input()
|
|
||||||
expanded = false;
|
|
||||||
|
|
||||||
@Output()
|
|
||||||
removeQueue = new EventEmitter();
|
|
||||||
|
|
||||||
queueFormGroup: FormGroup;
|
queueFormGroup: FormGroup;
|
||||||
submitStrategies: string[] = [];
|
|
||||||
processingStrategies: string[] = [];
|
|
||||||
queueTitle = '';
|
|
||||||
hideBatchSize = false;
|
hideBatchSize = false;
|
||||||
|
|
||||||
|
queueSubmitStrategyTypes = QueueSubmitStrategyTypes;
|
||||||
|
queueProcessingStrategyTypes = QueueProcessingStrategyTypes;
|
||||||
|
submitStrategies: string[] = Object.values(this.queueSubmitStrategyTypes);
|
||||||
|
processingStrategies: string[] = Object.values(this.queueProcessingStrategyTypes);
|
||||||
|
queueSubmitStrategyTypesMap = QueueSubmitStrategyTypesMap;
|
||||||
|
queueProcessingStrategyTypesMap = QueueProcessingStrategyTypesMap;
|
||||||
|
|
||||||
private modelValue: QueueInfo;
|
private modelValue: QueueInfo;
|
||||||
private propagateChange = null;
|
private propagateChange = null;
|
||||||
private propagateChangePending = false;
|
private propagateChangePending = false;
|
||||||
private valueChange$: Subscription = null;
|
private valueChange$: Subscription = null;
|
||||||
|
|
||||||
constructor(private dialog: MatDialog,
|
constructor(private utils: UtilsService,
|
||||||
private utils: UtilsService,
|
|
||||||
private fb: FormBuilder) {
|
private fb: FormBuilder) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,8 +97,6 @@ export class QueueFormComponent implements ControlValueAccessor, OnInit, OnDestr
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.submitStrategies = Object.values(QueueSubmitStrategyTypes);
|
|
||||||
this.processingStrategies = Object.values(QueueProcessingStrategyTypes);
|
|
||||||
this.queueFormGroup = this.fb.group(
|
this.queueFormGroup = this.fb.group(
|
||||||
{
|
{
|
||||||
name: ['', [Validators.required]],
|
name: ['', [Validators.required]],
|
||||||
@ -128,7 +125,6 @@ export class QueueFormComponent implements ControlValueAccessor, OnInit, OnDestr
|
|||||||
});
|
});
|
||||||
this.queueFormGroup.get('name').valueChanges.subscribe((value) => {
|
this.queueFormGroup.get('name').valueChanges.subscribe((value) => {
|
||||||
this.queueFormGroup.patchValue({topic: `tb_rule_engine.${value}`});
|
this.queueFormGroup.patchValue({topic: `tb_rule_engine.${value}`});
|
||||||
this.queueTitle = this.utils.customTranslation(value, value);
|
|
||||||
});
|
});
|
||||||
this.queueFormGroup.get('submitStrategy').get('type').valueChanges.subscribe(() => {
|
this.queueFormGroup.get('submitStrategy').get('type').valueChanges.subscribe(() => {
|
||||||
this.submitStrategyTypeChanged();
|
this.submitStrategyTypeChanged();
|
||||||
@ -160,14 +156,13 @@ export class QueueFormComponent implements ControlValueAccessor, OnInit, OnDestr
|
|||||||
writeValue(value: QueueInfo): void {
|
writeValue(value: QueueInfo): void {
|
||||||
this.propagateChangePending = false;
|
this.propagateChangePending = false;
|
||||||
this.modelValue = value;
|
this.modelValue = value;
|
||||||
if (!this.modelValue.name) {
|
|
||||||
this.expanded = true;
|
|
||||||
}
|
|
||||||
this.queueTitle = this.utils.customTranslation(value.name, value.name);
|
|
||||||
if (isDefinedAndNotNull(this.modelValue)) {
|
if (isDefinedAndNotNull(this.modelValue)) {
|
||||||
this.queueFormGroup.patchValue(this.modelValue, {emitEvent: false});
|
this.queueFormGroup.patchValue(this.modelValue, {emitEvent: false});
|
||||||
}
|
|
||||||
this.submitStrategyTypeChanged();
|
this.submitStrategyTypeChanged();
|
||||||
|
if (!this.modelValue.name) {
|
||||||
|
this.queueFormGroup.get('name').enable({emitEvent: false});
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!this.disabled && !this.queueFormGroup.valid) {
|
if (!this.disabled && !this.queueFormGroup.valid) {
|
||||||
this.updateModel();
|
this.updateModel();
|
||||||
}
|
}
|
||||||
@ -209,13 +204,11 @@ export class QueueFormComponent implements ControlValueAccessor, OnInit, OnDestr
|
|||||||
const type: QueueSubmitStrategyTypes = form.get('type').value;
|
const type: QueueSubmitStrategyTypes = form.get('type').value;
|
||||||
const batchSizeField = form.get('batchSize');
|
const batchSizeField = form.get('batchSize');
|
||||||
if (type === QueueSubmitStrategyTypes.BATCH) {
|
if (type === QueueSubmitStrategyTypes.BATCH) {
|
||||||
batchSizeField.enable({emitEvent: false});
|
|
||||||
batchSizeField.patchValue(1000, {emitEvent: false});
|
batchSizeField.patchValue(1000, {emitEvent: false});
|
||||||
batchSizeField.setValidators([Validators.min(1), Validators.required]);
|
batchSizeField.setValidators([Validators.min(1), Validators.required]);
|
||||||
this.hideBatchSize = true;
|
this.hideBatchSize = true;
|
||||||
} else {
|
} else {
|
||||||
batchSizeField.patchValue(null, {emitEvent: false});
|
batchSizeField.patchValue(null, {emitEvent: false});
|
||||||
batchSizeField.disable({emitEvent: false});
|
|
||||||
batchSizeField.clearValidators();
|
batchSizeField.clearValidators();
|
||||||
this.hideBatchSize = false;
|
this.hideBatchSize = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -101,6 +101,7 @@ export class TenantProfilesTableConfigResolver implements Resolve<EntityTableCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
addId(queues) {
|
addId(queues) {
|
||||||
|
if (queues) {
|
||||||
const queuesWithId = [];
|
const queuesWithId = [];
|
||||||
queues.forEach(value => {
|
queues.forEach(value => {
|
||||||
value.id = guid();
|
value.id = guid();
|
||||||
@ -108,6 +109,8 @@ export class TenantProfilesTableConfigResolver implements Resolve<EntityTableCon
|
|||||||
});
|
});
|
||||||
return queuesWithId;
|
return queuesWithId;
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
resolve(): EntityTableConfig<TenantProfile> {
|
resolve(): EntityTableConfig<TenantProfile> {
|
||||||
this.config.tableTitle = this.translate.instant('tenant-profile.tenant-profiles');
|
this.config.tableTitle = this.translate.instant('tenant-profile.tenant-profiles');
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
/// limitations under the License.
|
/// limitations under the License.
|
||||||
///
|
///
|
||||||
|
|
||||||
import { BaseData, HasId } from '@shared/models/base-data';
|
import { BaseData } from '@shared/models/base-data';
|
||||||
import { TenantId } from '@shared/models/id/tenant-id';
|
import { TenantId } from '@shared/models/id/tenant-id';
|
||||||
import { QueueId } from '@shared/models/id/queue-id';
|
import { QueueId } from '@shared/models/id/queue-id';
|
||||||
|
|
||||||
@ -33,6 +33,35 @@ export enum QueueSubmitStrategyTypes {
|
|||||||
BATCH = 'BATCH'
|
BATCH = 'BATCH'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface QueueStrategyData {
|
||||||
|
label: string;
|
||||||
|
hint: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const QueueSubmitStrategyTypesMap = new Map<QueueSubmitStrategyTypes, QueueStrategyData>(
|
||||||
|
[
|
||||||
|
[QueueSubmitStrategyTypes.SEQUENTIAL_BY_ORIGINATOR, {
|
||||||
|
label: 'queue.strategies.sequential-by-originator-label',
|
||||||
|
hint: 'queue.strategies.sequential-by-originator-hint',
|
||||||
|
}],
|
||||||
|
[QueueSubmitStrategyTypes.SEQUENTIAL_BY_TENANT, {
|
||||||
|
label: 'queue.strategies.sequential-by-tenant-label',
|
||||||
|
hint: 'queue.strategies.sequential-by-tenant-hint',
|
||||||
|
}],
|
||||||
|
[QueueSubmitStrategyTypes.SEQUENTIAL, {
|
||||||
|
label: 'queue.strategies.sequential-label',
|
||||||
|
hint: 'queue.strategies.sequential-hint',
|
||||||
|
}],
|
||||||
|
[QueueSubmitStrategyTypes.BURST, {
|
||||||
|
label: 'queue.strategies.burst-label',
|
||||||
|
hint: 'queue.strategies.burst-hint',
|
||||||
|
}],
|
||||||
|
[QueueSubmitStrategyTypes.BATCH, {
|
||||||
|
label: 'queue.strategies.batch-label',
|
||||||
|
hint: 'queue.strategies.batch-hint',
|
||||||
|
}]
|
||||||
|
]);
|
||||||
|
|
||||||
export enum QueueProcessingStrategyTypes {
|
export enum QueueProcessingStrategyTypes {
|
||||||
RETRY_FAILED_AND_TIMED_OUT = 'RETRY_FAILED_AND_TIMED_OUT',
|
RETRY_FAILED_AND_TIMED_OUT = 'RETRY_FAILED_AND_TIMED_OUT',
|
||||||
SKIP_ALL_FAILURES = 'SKIP_ALL_FAILURES',
|
SKIP_ALL_FAILURES = 'SKIP_ALL_FAILURES',
|
||||||
@ -42,6 +71,34 @@ export enum QueueProcessingStrategyTypes {
|
|||||||
RETRY_TIMED_OUT = 'RETRY_TIMED_OUT'
|
RETRY_TIMED_OUT = 'RETRY_TIMED_OUT'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const QueueProcessingStrategyTypesMap = new Map<QueueProcessingStrategyTypes, QueueStrategyData>(
|
||||||
|
[
|
||||||
|
[QueueProcessingStrategyTypes.RETRY_FAILED_AND_TIMED_OUT, {
|
||||||
|
label: 'queue.strategies.retry-failed-and-timeout-label',
|
||||||
|
hint: 'queue.strategies.retry-failed-and-timout-hint',
|
||||||
|
}],
|
||||||
|
[QueueProcessingStrategyTypes.SKIP_ALL_FAILURES, {
|
||||||
|
label: 'queue.strategies.skip-all-failures-label',
|
||||||
|
hint: 'queue.strategies.skip-all-failures-hint',
|
||||||
|
}],
|
||||||
|
[QueueProcessingStrategyTypes.SKIP_ALL_FAILURES_AND_TIMED_OUT, {
|
||||||
|
label: 'queue.strategies.skip-all-failures-and-timeouts-label',
|
||||||
|
hint: 'queue.strategies.skip-all-failures-and-timeouts-hint',
|
||||||
|
}],
|
||||||
|
[QueueProcessingStrategyTypes.RETRY_ALL, {
|
||||||
|
label: 'queue.strategies.retry-all-label',
|
||||||
|
hint: 'queue.strategies.retry-all-hint',
|
||||||
|
}],
|
||||||
|
[QueueProcessingStrategyTypes.RETRY_FAILED, {
|
||||||
|
label: 'queue.strategies.retry-failed-label',
|
||||||
|
hint: 'queue.strategies.retry-failed-hint',
|
||||||
|
}],
|
||||||
|
[QueueProcessingStrategyTypes.RETRY_TIMED_OUT, {
|
||||||
|
label: 'queue.strategies.retry-timeout-label',
|
||||||
|
hint: 'queue.strategies.retry-timeout-hint',
|
||||||
|
}]
|
||||||
|
]);
|
||||||
|
|
||||||
export interface QueueInfo extends BaseData<QueueId> {
|
export interface QueueInfo extends BaseData<QueueId> {
|
||||||
generatedId?: string;
|
generatedId?: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@ -2821,7 +2821,32 @@
|
|||||||
"copyId": "Copy queue Id",
|
"copyId": "Copy queue Id",
|
||||||
"idCopiedMessage": "Queue Id has been copied to clipboard",
|
"idCopiedMessage": "Queue Id has been copied to clipboard",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"alt-description": "Submit Strategy: {{submitStrategy}}, Processing Strategy: {{processingStrategy}}"
|
"description-hint": "This text will be displayed in the Queue description instead of the selected strategy",
|
||||||
|
"alt-description": "Submit Strategy: {{submitStrategy}}, Processing Strategy: {{processingStrategy}}",
|
||||||
|
"strategies": {
|
||||||
|
"sequential-by-originator-label": "Sequential by originator",
|
||||||
|
"sequential-by-originator-hint": "New message for e.g. device A is not submitted until previous message for device A is acknowledged",
|
||||||
|
"sequential-by-tenant-label": "Sequential by tenant",
|
||||||
|
"sequential-by-tenant-hint": "New message for e.g tenant A is not submitted until previous message for tenant A is acknowledged",
|
||||||
|
"sequential-label": "Sequential",
|
||||||
|
"sequential-hint": "New message is not submitted until previous message is acknowledged",
|
||||||
|
"burst-label": "Burst",
|
||||||
|
"burst-hint": "All messages are submitted to the rule chains in the order they arrive",
|
||||||
|
"batch-label": "Batch",
|
||||||
|
"batch-hint": "New batch is not submitted until previous batch is acknowledged",
|
||||||
|
"skip-all-failures-label": "Skip all failures",
|
||||||
|
"skip-all-failures-hint": "Ignore all failures",
|
||||||
|
"skip-all-failures-and-timeouts-label": "Skip all failures and timeouts",
|
||||||
|
"skip-all-failures-and-timeouts-hint": "Ignore all failures and timeouts",
|
||||||
|
"retry-all-label": "Retry all",
|
||||||
|
"retry-all-hint": "Retry all messages from processing pack",
|
||||||
|
"retry-failed-label": "Retry failed",
|
||||||
|
"retry-failed-hint": "Retry all failed messages from processing pack",
|
||||||
|
"retry-timeout-label": "Retry timeout",
|
||||||
|
"retry-timeout-hint": "Retry all timed-out messages from processing pack",
|
||||||
|
"retry-failed-and-timeout-label": "Retry failed and timeout",
|
||||||
|
"retry-failed-and-timeout-hint": "Retry all failed and timed-out messages from processing pack"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"tenant": {
|
"tenant": {
|
||||||
"tenant": "Tenant",
|
"tenant": "Tenant",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user