diff --git a/alfa-client/apps/admin/src/app/app.module.ts b/alfa-client/apps/admin/src/app/app.module.ts index 01643aecf53c02179b296544043e2dd10f3fca65..e0119b50c1c65576cf26e2e509f0829e5c88e92d 100644 --- a/alfa-client/apps/admin/src/app/app.module.ts +++ b/alfa-client/apps/admin/src/app/app.module.ts @@ -32,6 +32,7 @@ import { OrganisationsEinheitFormPageComponent } from '../pages/organisationsein import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component'; import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; +import { UserAddPageComponent } from '../pages/users-roles/user-add-page/user-add-page.component'; import { UserRolesPageComponent } from '../pages/users-roles/user-roles-page/user-roles-page.component'; import { AppComponent } from './app.component'; import { appRoutes } from './app.routes'; @@ -45,6 +46,7 @@ import { appRoutes } from './app.routes'; OrganisationsEinheitFormPageComponent, UserProfileButtonContainerComponent, UnavailablePageComponent, + UserAddPageComponent, ], imports: [ CommonModule, diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html index 5b55139c64069ae18445a2fc1899a2a6d5eeff99..e250d918ada26e686d0b469614579efd32beb7df 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html +++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html @@ -1 +1 @@ -<admin-user-add-form-container /> +<admin-user-add /> diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts index 3d8b9a9ff3bbc4552a0dd55934564ef6d80215f4..72e8eb19d601683042989f84b29caf5da2ddc3aa 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts +++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts @@ -1,11 +1,7 @@ -import { UserAddFormContainerComponent } from '@admin-client/admin-settings'; -import { CommonModule } from '@angular/common'; import { Component } from '@angular/core'; @Component({ selector: 'app-user-add-page', - standalone: true, - imports: [CommonModule, UserAddFormContainerComponent], templateUrl: './user-add-page.component.html', }) export class UserAddPageComponent {} diff --git a/alfa-client/libs/admin/settings/src/index.ts b/alfa-client/libs/admin/settings/src/index.ts index eefbb630917ef17ff05cb104b1f12bc2a0aedbe3..f1c455ed1cf6fbdc434e14c6c3caae47eeecf9d5 100644 --- a/alfa-client/libs/admin/settings/src/index.ts +++ b/alfa-client/libs/admin/settings/src/index.ts @@ -4,5 +4,5 @@ export * from './lib/organisationseinheit/organisationseinheit-container/organis export * from './lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component'; export * from './lib/postfach/postfach-container/postfach-container.component'; export * from './lib/shared/navigation-item/navigation-item.component'; -export * from './lib/users-roles/user-add-form-container/user-add-form-container.component'; +export * from './lib/users-roles/user-add-form/user-add-form.component'; export * from './lib/users-roles/users-roles.component'; diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts index e83ec64a3baf624dcc8ca6eb297ad69444b5975e..f805d962ecf79fe204627ef990be3e9142879d19 100644 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts +++ b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts @@ -8,7 +8,12 @@ import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; import KcAdminClient from '@keycloak/keycloak-admin-client'; -import { ButtonWithSpinnerComponent, TextareaEditorComponent } from '@ods/component'; +import { + ButtonWithSpinnerComponent, + CheckboxEditorComponent, + TextareaEditorComponent, + TextEditorComponent, +} from '@ods/component'; import { ExclamationIconComponent, ListComponent, @@ -47,6 +52,7 @@ import { SecondaryButtonComponent } from './shared/secondary-button/secondary-bu import { SpinnerComponent } from './shared/spinner/spinner.component'; import { TextFieldComponent } from './shared/text-field/text-field.component'; import { ToUserNamePipe } from './user/to-user-name.pipe'; +import { UserAddFormComponent } from './users-roles/user-add-form/user-add-form.component'; import { UsersRolesComponent } from './users-roles/users-roles.component'; @NgModule({ @@ -67,6 +73,7 @@ import { UsersRolesComponent } from './users-roles/users-roles.component'; MoreItemButtonComponent, SpinnerComponent, UsersRolesComponent, + UserAddFormComponent, ], imports: [ CommonModule, @@ -74,6 +81,7 @@ import { UsersRolesComponent } from './users-roles/users-roles.component'; RouterModule, ReactiveFormsModule, TextInputComponent, + CheckboxEditorComponent, ButtonWithSpinnerComponent, TextareaEditorComponent, MailboxIconComponent, @@ -84,6 +92,7 @@ import { UsersRolesComponent } from './users-roles/users-roles.component'; ExclamationIconComponent, UiModule, NavigationSharedModule, + TextEditorComponent, ], exports: [ PostfachContainerComponent, @@ -92,6 +101,7 @@ import { UsersRolesComponent } from './users-roles/users-roles.component'; NavigationItemComponent, UsersRolesComponent, SecondaryButtonComponent, + UserAddFormComponent, ], providers: [ ConfigurationService, diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts index 7ac55113ec028463983d6e823f2e7842fbf9e53a..ba1b3c8bfa751c7711220edb3d4a91e3c887e8d6 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts @@ -1,6 +1,6 @@ -import { getElementFromFixture, mock, useFromMock } from '@alfa-client/test-utils'; +import { getElementFromFixture, mock, Mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { ReactiveFormsModule } from '@angular/forms'; import { TextareaEditorComponent } from '@ods/component'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; @@ -13,14 +13,13 @@ describe('PostfachSignaturComponent', () => { let component: PostfachSignaturComponent; let fixture: ComponentFixture<PostfachSignaturComponent>; - const formService: PostfachFormService = new PostfachFormService( - new FormBuilder(), - useFromMock(mock(PostfachService)), - ); - + let formService: Mock<PostfachFormService>; + let postFachService: Mock<PostfachService>; const signaturTextarea = getDataTestIdOf('signatur-text'); beforeEach(async () => { + formService = mock(PostfachFormService); + postFachService = mock(PostfachService); await TestBed.configureTestingModule({ imports: [ReactiveFormsModule], declarations: [PostfachFormComponent, MockComponent(TextareaEditorComponent)], @@ -29,9 +28,14 @@ describe('PostfachSignaturComponent', () => { provide: PostfachFormService, useValue: formService, }, + { + provide: PostfachService, + useValue: postFachService, + }, ], }).compileComponents(); fixture = TestBed.createComponent(PostfachSignaturComponent); + TestBed.inject(PostfachService); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.html b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.html deleted file mode 100644 index a61a18299e54d6d5a1f3cf617fa1687f25be658a..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.html +++ /dev/null @@ -1 +0,0 @@ -<admin-user-add /> \ No newline at end of file diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.spec.ts deleted file mode 100644 index 83fba7fd43d4d6d21573634c67ce2b3ae4b074ed..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { UserAddFormContainerComponent } from './user-add-form-container.component'; - -describe('UserAddFormContainerComponent', () => { - let component: UserAddFormContainerComponent; - let fixture: ComponentFixture<UserAddFormContainerComponent>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [UserAddFormContainerComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(UserAddFormContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.ts deleted file mode 100644 index c77e59c49bfb7138a5c7446b4a07d3772a5e3583..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-container.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; -import { UserAddFormComponent } from './user-add-form/user-add-form.component'; - -@Component({ - selector: 'admin-user-add-form-container', - standalone: true, - imports: [CommonModule, UserAddFormComponent], - templateUrl: './user-add-form-container.component.html', -}) -export class UserAddFormContainerComponent {} diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.ts deleted file mode 100644 index 6edd68af4abeb2a2eed85490536faf702f78f3d5..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { AdminSettingsModule } from '@admin-client/admin-settings'; -import { CommonModule } from '@angular/common'; -import { Component, inject } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; -import { ButtonWithSpinnerComponent, CheckboxEditorComponent, TextEditorComponent } from '@ods/component'; -import { UserAddFormService } from '../user-add-form-service'; - -@Component({ - selector: 'admin-user-add', - standalone: true, - imports: [ - CommonModule, - ButtonWithSpinnerComponent, - AdminSettingsModule, - ReactiveFormsModule, - TextEditorComponent, - CheckboxEditorComponent, - ], - providers: [UserAddFormService], - templateUrl: './user-add-form.component.html', -}) -export class UserAddFormComponent { - formService = inject(UserAddFormService); - protected readonly UserAddFormService = UserAddFormService; -} diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-service.spec.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form-service.spec.ts similarity index 67% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-service.spec.ts rename to alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form-service.spec.ts index e3297a695e1dd771668126f7bdb0589e0662e114..1f9991ca63cfe0b61b41c49374b6d1c402b7766d 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-service.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form-service.spec.ts @@ -1,5 +1,5 @@ import { fakeAsync, TestBed, tick } from '@angular/core/testing'; -import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { UserAddFormService } from './user-add-form-service'; import SpyInstance = jest.SpyInstance; @@ -33,22 +33,22 @@ describe('UserAddFormService', () => { }); describe('handleAlfaGroupChange', () => { - it('should call updateCheckboxStates if any checkbox is checked', () => { + it('should call disableUncheckedCheckboxes if any checkbox is checked', () => { jest.spyOn(formService as any, 'isAnyChecked').mockReturnValue(true); - const updateCheckboxStatesSpy: SpyInstance = jest.spyOn(formService as any, 'updateCheckboxStates'); + const disableUncheckedCheckboxesSpy: SpyInstance = jest.spyOn(formService as any, 'disableUncheckedCheckboxes'); formService.handleAlfaGroupChange(alfaGroup); - expect(updateCheckboxStatesSpy).toHaveBeenCalled(); + expect(disableUncheckedCheckboxesSpy).toHaveBeenCalled(); }); - it('should NOT call updateCheckboxStates if not any checkbox is checked', () => { + it('should call enableAllCheckboxes if not any checkbox is checked', () => { jest.spyOn(formService as any, 'isAnyChecked').mockReturnValue(false); - const updateCheckboxStatesSpy: SpyInstance = jest.spyOn(formService as any, 'updateCheckboxStates'); + const enableAllCheckboxesSpy: SpyInstance = jest.spyOn(formService as any, 'enableAllCheckboxes'); formService.handleAlfaGroupChange(alfaGroup); - expect(updateCheckboxStatesSpy).not.toHaveBeenCalled(); + expect(enableAllCheckboxesSpy).toHaveBeenCalled(); }); }); @@ -69,22 +69,24 @@ describe('UserAddFormService', () => { }); describe('updateCheckboxStates', () => { - it('if control value is true then control should be enabled', () => { - const control = alfaGroup.get(UserAddFormService.LOESCHEN); - control.setValue(true); + it('if control value is false then control should be disabled', () => { + const control: AbstractControl = alfaGroup.get(UserAddFormService.LOESCHEN); + control.setValue(false); - formService.updateCheckboxStates(alfaGroup); + formService.disableUncheckedCheckboxes(alfaGroup); - expect(control.enabled).toBe(true); + expect(control.disabled).toBe(true); }); + }); - it('if control value is false then control should be disabled', () => { - const control = alfaGroup.get(UserAddFormService.LOESCHEN); - control.setValue(false); + describe('enableAllCheckboxes', () => { + it('if control value is true then control should be enabled', () => { + const control: AbstractControl = alfaGroup.get(UserAddFormService.LOESCHEN); + const enableSpy = jest.spyOn(control, 'enable'); - formService.updateCheckboxStates(alfaGroup); + formService.enableAllCheckboxes(alfaGroup); - expect(control.disabled).toBe(true); + expect(enableSpy).toHaveBeenCalled(); }); }); }); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-service.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form-service.ts similarity index 87% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-service.ts rename to alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form-service.ts index 783d9bfd1a3f91dc17c471c3605e7115fc58dd72..dadf58f31bf42880f19814bd8c2993d354cac6bf 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form-service.ts +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form-service.ts @@ -59,7 +59,9 @@ export class UserAddFormService extends AbstractFormService { handleAlfaGroupChange(group: UntypedFormGroup): void { const anyChecked: boolean = this.isAnyChecked(group); if (anyChecked) { - this.updateCheckboxStates(group); + this.disableUncheckedCheckboxes(group); + } else { + this.enableAllCheckboxes(group); } } @@ -67,9 +69,15 @@ export class UserAddFormService extends AbstractFormService { return Object.keys(group.controls).some((key) => group.controls[key].value === true); } - updateCheckboxStates(alfaGroup: UntypedFormGroup): void { + disableUncheckedCheckboxes(alfaGroup: UntypedFormGroup): void { for (const control of Object.values<AbstractControl>(alfaGroup.controls)) { - control[!!control.value ? 'enable' : 'disable']({ emitEvent: false }); + if (!control.value) control.disable({ emitEvent: false }); + } + } + + enableAllCheckboxes(group: UntypedFormGroup): void { + for (const control of Object.values<AbstractControl>(group.controls)) { + control.enable({ emitEvent: false }); } } diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.html b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.html similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.html rename to alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.html diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.spec.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts similarity index 51% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.spec.ts rename to alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts index fb837e53f6e9a30bbd805cb6b010625c0668fa86..079e9ce8630f1e18fe93ba2d48d55997e9c6d378 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form-container/user-add-form/user-add-form.component.spec.ts +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts @@ -1,9 +1,7 @@ -import { AdminSettingsModule } from '@admin-client/admin-settings'; import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ButtonWithSpinnerComponent } from '@ods/component'; -import { CheckboxComponent, TextInputComponent } from '@ods/system'; -import { SecondaryButtonComponent } from '../../../shared/secondary-button/secondary-button.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { ButtonWithSpinnerComponent, CheckboxEditorComponent, TextEditorComponent } from '@ods/component'; import { UserAddFormComponent } from './user-add-form.component'; describe('UserAddFormComponent', () => { @@ -12,17 +10,8 @@ describe('UserAddFormComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - UserAddFormComponent, - CommonModule, - TextInputComponent, - ButtonWithSpinnerComponent, - AdminSettingsModule, - CheckboxComponent, - SecondaryButtonComponent, - CommonModule, - UserAddFormComponent, - ], + declarations: [UserAddFormComponent], + imports: [CommonModule, ButtonWithSpinnerComponent, ReactiveFormsModule, TextEditorComponent, CheckboxEditorComponent], }).compileComponents(); fixture = TestBed.createComponent(UserAddFormComponent); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..d1d34c5758b1a1dbc29bfc85f5e3a5ac803a3880 --- /dev/null +++ b/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts @@ -0,0 +1,13 @@ +import { Component, inject } from '@angular/core'; +import { UserAddFormService } from './user-add-form-service'; + +@Component({ + selector: 'admin-user-add', + providers: [UserAddFormService], + templateUrl: './user-add-form.component.html', +}) +export class UserAddFormComponent { + formService = inject(UserAddFormService); + + protected readonly UserAddFormService = UserAddFormService; +} diff --git a/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts index 077f3bb17bae7287560261b9601e5b9044fddc68..3fbc1b80bfb06f3aac9a6af622920803a313100b 100644 --- a/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/checkbox/checkbox.component.ts @@ -20,7 +20,7 @@ import { FormControl, ReactiveFormsModule } from '@angular/forms'; " [formControl]="fieldControl" [attr.id]="inputId" - [attr.disabled]="disabled" + [attr.disabled]="disabled ? true : null" [attr.data-test-id]="(label | convertForDataTest) + '-checkbox-editor'" /> <label class="leading-5 text-text" [attr.for]="inputId">{{ label }}</label>