AAE-12240: Form save button enable/disable management (#8502)

* AAE-12240: Form save button enable/disable management

* AAE-12240: Code improvement
This commit is contained in:
Ehsan Rezaei
2023-05-03 13:03:08 +02:00
committed by GitHub
parent bcd0b66c96
commit 2d55bbf58a
3 changed files with 32 additions and 1 deletions

View File

@@ -169,6 +169,7 @@ export abstract class FormBaseComponent {
if (outcome.isSystem) {
if (outcome.id === FormBaseComponent.SAVE_OUTCOME_ID) {
this.disableSaveButton = true;
this.saveTaskForm();
return true;
}

View File

@@ -1079,6 +1079,20 @@ describe('FormCloudComponent', () => {
expect(formComponent.showTitle).toBeTruthy();
});
it('should disable save button on [save] outcome click', () => {
const formModel = new FormModel();
const outcome = new FormOutcomeModel(formModel, {
id: FormCloudComponent.SAVE_OUTCOME_ID,
name: 'SAVE',
isSystem: true
});
formComponent.form = formModel;
formComponent.onOutcomeClicked(outcome);
expect(formComponent.disableSaveButton).toBeTrue();
});
describe('form validations', () => {
it('should be able to set visibility conditions for Attach File widget', async () => {
spyOn(formCloudService, 'getForm').and.returnValue(of(conditionalUploadWidgetsMock));
@@ -1316,4 +1330,12 @@ describe('retrieve metadata on submit', () => {
expect(stopPropagationSpy).toHaveBeenCalled();
});
it('should enable save button when form field value changed', () => {
formComponent.disableSaveButton = true;
formService.formFieldValueChanged.next();
expect(formComponent.disableSaveButton).toBeFalse();
});
});

View File

@@ -132,6 +132,14 @@ export class FormCloudComponent extends FormBaseComponent implements OnChanges,
this.form.addValuesNotPresent(valuesToSetIfNotPresent);
this.onFormDataRefreshed(this.form);
});
this.formService.formFieldValueChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe(() => {
if (this.disableSaveButton) {
this.disableSaveButton = false;
}
});
}
@HostListener('keydown', ['$event'])
@@ -314,7 +322,7 @@ export class FormCloudComponent extends FormBaseComponent implements OnChanges,
formValues[variable.name] = variable.value;
});
const form = new FormModel(formCloudRepresentationJSON, formValues, this.readOnly);
const form = new FormModel(formCloudRepresentationJSON, formValues, this.readOnly, this.formService);
if (!form) {
form.outcomes = this.getFormDefinitionOutcomes(form);
}