Allow empty input values in recommendation

Allows the client to send empty values as workflow
recommendation label in the workflow detail view.
This is required to remove a recommendation from a
workflow
This commit is contained in:
Sean 2020-03-23 15:42:32 +01:00 committed by FinnStutzenstein
parent fe71322199
commit 6fddddd9f4
2 changed files with 19 additions and 11 deletions

View File

@ -34,7 +34,10 @@
</td> </td>
</ng-container> </ng-container>
<ng-container [matColumnDef]="getColumnDef(state)" *ngFor="let state of workflow.states; trackBy: trackByIndex"> <ng-container
[matColumnDef]="getColumnDef(state)"
*ngFor="let state of workflow.states; trackBy: trackByIndex"
>
<th mat-header-cell *matHeaderCellDef (click)="onClickStateName(state)"> <th mat-header-cell *matHeaderCellDef (click)="onClickStateName(state)">
<div class="clickable-cell stretch-to-fill-parent"> <div class="clickable-cell stretch-to-fill-parent">
<div class="inner-table"> <div class="inner-table">
@ -49,9 +52,7 @@
(change)="onToggleStatePerm(state, perm.selector, $event)" (change)="onToggleStatePerm(state, perm.selector, $event)"
></mat-checkbox> ></mat-checkbox>
</div> </div>
<div <div *ngIf="perm.type === 'input'">
*ngIf="perm.type === 'input'"
>
<div class="inner-table"> <div class="inner-table">
{{ (state[perm.selector] | translate) || '' }} {{ (state[perm.selector] | translate) || '' }}
</div> </div>
@ -104,8 +105,8 @@
</div> </div>
<div *ngIf="state.restriction.length"> <div *ngIf="state.restriction.length">
<div *ngFor="let restriction of state.restriction; let last = last"> <div *ngFor="let restriction of state.restriction; let last = last">
{{ getRestrictionLabel(restriction) | translate {{ getRestrictionLabel(restriction) | translate }}
}}<span *ngIf="!last">,&nbsp;</span> <span *ngIf="!last">,&nbsp;</span>
</div> </div>
</div> </div>
</div> </div>
@ -138,7 +139,7 @@
<div mat-dialog-actions> <div mat-dialog-actions>
<button <button
type="submit" type="submit"
[disabled]="dialogData.value === ''" [disabled]="dialogData.value === '' && !dialogData.allowEmpty"
mat-button mat-button
color="primary" color="primary"
[mat-dialog-close]="{ action: 'update', value: dialogData.value }" [mat-dialog-close]="{ action: 'update', value: dialogData.value }"

View File

@ -27,6 +27,7 @@ interface DialogData {
description: string; description: string;
value: string; value: string;
deletable?: boolean; deletable?: boolean;
allowEmpty?: boolean;
} }
/** /**
@ -256,7 +257,10 @@ export class WorkflowDetailComponent extends BaseViewComponent implements OnInit
* @param state The selected workflow state * @param state The selected workflow state
*/ */
public onClickInputPerm(perm: StatePerm, state: ViewState): void { public onClickInputPerm(perm: StatePerm, state: ViewState): void {
this.openEditDialog(state[perm.selector], 'Edit', perm.name).subscribe(result => { this.openEditDialog(state[perm.selector], 'Edit', perm.name, false, true).subscribe(result => {
if (result.value === '') {
result.value = null;
}
if (result && result.action === 'update') { if (result && result.action === 'update') {
this.stateRepo.update({ [perm.selector]: result.value }, state).then(() => {}, this.raiseError); this.stateRepo.update({ [perm.selector]: result.value }, state).then(() => {}, this.raiseError);
} }
@ -347,18 +351,21 @@ export class WorkflowDetailComponent extends BaseViewComponent implements OnInit
* @param title The title of the dialog * @param title The title of the dialog
* @param description The description of the dialog * @param description The description of the dialog
* @param deletable determine if a delete button should be offered * @param deletable determine if a delete button should be offered
* @param allowEmpty to allow empty values
*/ */
private openEditDialog( private openEditDialog(
value: string, value: string,
title?: string, title?: string,
description?: string, description?: string,
deletable?: boolean deletable?: boolean,
allowEmpty?: boolean
): Observable<DialogResult> { ): Observable<DialogResult> {
this.dialogData = { this.dialogData = {
title: title || '', title: title || '',
description: description || '', description: description || '',
value: value, value: value,
deletable: deletable deletable: deletable,
allowEmpty: allowEmpty
}; };
const dialogRef = this.dialog.open(this.workflowDialog, infoDialogSettings); const dialogRef = this.dialog.open(this.workflowDialog, infoDialogSettings);