From 1b3b419f72f4a6cfeeb883ebf4c92618cb364489 Mon Sep 17 00:00:00 2001 From: Robert Duda Date: Wed, 14 Feb 2024 16:25:30 +0100 Subject: [PATCH] AAE-20282 fix submit button enabled when required people/groups widget empty (#9334) --- .../widgets/group/group-cloud.widget.spec.ts | 17 +++++++++++++++++ .../widgets/group/group-cloud.widget.ts | 6 +++--- .../widgets/people/people-cloud.widget.spec.ts | 17 +++++++++++++++++ .../widgets/people/people-cloud.widget.ts | 6 +++--- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.spec.ts b/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.spec.ts index ecf65dc5cc..5f71cb0f3d 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.spec.ts @@ -130,6 +130,23 @@ describe('GroupCloudWidgetComponent', () => { expect(element.querySelector('.adf-invalid')).toBeTruthy(); }); + + it('should be invalid after deselecting all groups', async () => { + widget.onChangedGroup([{id: 'test-id', name: 'test-name'}]); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(element.querySelector('.adf-error-text')).toBeFalsy(); + + const removeGroupIcon = element.querySelector('[data-automation-id="adf-cloud-group-chip-remove-icon-test-name"]'); + removeGroupIcon.dispatchEvent(new Event('click')); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(element.querySelector('.adf-error-text')).toBeTruthy(); + expect(element.querySelector('.adf-error-text').textContent).toContain('ADF_CLOUD_GROUPS.ERROR.NOT_FOUND'); + }); }); describe('when is readOnly', () => { diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.ts b/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.ts index 1fcbe830e2..b9addc9226 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/group/group-cloud.widget.ts @@ -89,13 +89,13 @@ export class GroupCloudWidgetComponent extends WidgetComponent implements OnInit }); } - ngOnDestroy() { + ngOnDestroy(): void { this.onDestroy$.next(true); this.onDestroy$.complete(); } - onChangedGroup(groups) { - this.field.value = [...groups]; + onChangedGroup(groups: IdentityGroupModel[]): void { + this.field.value = groups?.length ? [...groups] : null; this.onFieldChanged(this.field); } diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.spec.ts b/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.spec.ts index 61b3c5d94d..62cbc4f74f 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.spec.ts @@ -158,6 +158,23 @@ describe('PeopleCloudWidgetComponent', () => { expect(element.querySelector('.adf-invalid')).toBeTruthy(); }); + + it('should be invalid after deselecting all people', async () => { + widget.onChangedUser([{id: 'test-id', username: 'test-name'}]); + fixture.detectChanges(); + await fixture.whenStable(); + + expect(element.querySelector('.adf-error-text')).toBeFalsy(); + + const removeGroupIcon = element.querySelector('[data-automation-id="adf-people-cloud-chip-remove-icon-test-name"]'); + removeGroupIcon.dispatchEvent(new Event('click')); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(element.querySelector('.adf-error-text')).toBeTruthy(); + expect(element.querySelector('.adf-error-text').textContent).toContain('ADF_CLOUD_USERS.ERROR.NOT_FOUND'); + }); }); describe('when is readOnly', () => { diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.ts b/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.ts index f0b2aa1dc4..a345122284 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/people/people-cloud.widget.ts @@ -99,13 +99,13 @@ export class PeopleCloudWidgetComponent extends WidgetComponent implements OnIni } } - ngOnDestroy() { + ngOnDestroy(): void { this.onDestroy$.next(true); this.onDestroy$.complete(); } - onChangedUser(users) { - this.field.value = [...users]; + onChangedUser(users: IdentityUserModel[]): void { + this.field.value = users?.length ? [...users] : null; this.onFieldChanged(this.field); }