Skip to content

Commit cd16c11

Browse files
makdenissmakdeniss
authored andcommitted
fix: fixes per PR comments (#339)
1 parent c5d0d4c commit cd16c11

File tree

2 files changed

+39
-9
lines changed

2 files changed

+39
-9
lines changed

projects/wc/src/app/components/generic-ui/list-view/delete-resource-confirmation-modal/delete-resource-modal.component.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,23 @@ describe('DeleteResourceModalComponent', () => {
182182
fixture.detectChanges();
183183
expect(mockDialog.open).toBeFalsy();
184184
});
185+
186+
it('should reset control state on close (pristine, untouched, revalidated)', () => {
187+
component.open(resource);
188+
const control = component.form.controls['resource'];
189+
control.setValue('wrong');
190+
control.markAsTouched();
191+
control.markAsDirty();
192+
fixture.detectChanges();
193+
expect(control.invalid).toBeTruthy();
194+
195+
component.close();
196+
fixture.detectChanges();
197+
198+
expect(control.value).toBeNull();
199+
expect(control.pristine).toBeTruthy();
200+
expect(control.touched).toBeFalsy();
201+
expect(control.invalid).toBeTruthy();
202+
expect(control.hasError('invalidResource')).toBeTruthy();
203+
});
185204
});

projects/wc/src/app/components/generic-ui/list-view/delete-resource-confirmation-modal/delete-resource-modal.component.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
Validators,
1717
} from '@angular/forms';
1818
import { Resource } from '@openmfp/portal-ui-lib';
19+
import { ResourceNodeContext } from '@platform-mesh/portal-ui-lib/services';
1920
import {
2021
BarComponent,
2122
DialogComponent,
@@ -26,7 +27,6 @@ import {
2627
ToolbarButtonComponent,
2728
ToolbarComponent,
2829
} from '@ui5/webcomponents-ngx';
29-
import {ResourceNodeContext} from '@platform-mesh/portal-ui-lib/services';
3030

3131
@Component({
3232
selector: 'delete-resource-modal',
@@ -58,27 +58,24 @@ export class DeleteResourceModalComponent implements OnInit {
5858

5959
ngOnInit(): void {
6060
this.form = this.fb.group(this.createControls());
61-
this.form.controls.resource.valueChanges.subscribe((value) => {
62-
if (!value || this.innerResource()?.metadata?.name !== value) {
63-
this.form.controls.resource.setErrors({ invalidResource: true });
64-
} else {
65-
this.form.controls.resource.setErrors(null);
66-
}
67-
});
6861
}
6962

7063
open(resource: Resource): void {
7164
const dialog = this.dialog();
7265
if (dialog) {
7366
dialog.open = true;
7467
this.innerResource.set(resource);
68+
this.form?.controls?.resource?.updateValueAndValidity();
7569
}
7670
}
7771

7872
close(): void {
7973
const dialog = this.dialog();
8074
if (dialog) {
8175
this.form.controls.resource.setValue(null);
76+
this.form.controls.resource.markAsPristine();
77+
this.form.controls.resource.markAsUntouched();
78+
this.form.controls.resource.updateValueAndValidity();
8279
dialog.open = false;
8380
}
8481
}
@@ -107,8 +104,22 @@ export class DeleteResourceModalComponent implements OnInit {
107104
}
108105

109106
private createControls() {
107+
const resourceNameValidator = () => {
108+
return (control: FormControl) => {
109+
const expected = this.innerResource()?.metadata?.name?.toLowerCase();
110+
const value = (control.value ?? '').toString().toLowerCase();
111+
if (!value || !expected || value !== expected) {
112+
return { invalidResource: true };
113+
}
114+
return null;
115+
};
116+
};
117+
110118
return {
111-
resource: new FormControl(null, Validators.required),
119+
resource: new FormControl(null, [
120+
Validators.required,
121+
resourceNameValidator(),
122+
]),
112123
};
113124
}
114125
}

0 commit comments

Comments
 (0)