From bd59911956f5527213bb501fe5efddee7986c6d8 Mon Sep 17 00:00:00 2001 From: Albert Bruns <albert.bruns@mgm-tp.com> Date: Mon, 17 Feb 2025 17:05:09 +0000 Subject: [PATCH] Ozg 7413 modules ui and tech shared modernisieren --- .../apps/admin/src/app/app.component.ts | 12 +- alfa-client/apps/admin/src/main.ts | 26 +- .../organisationseinheit-page.component.ts | 3 +- alfa-client/apps/alfa-e2e/docker-compose.yml | 4 +- .../apps/alfa/src/app/app.component.ts | 3 +- alfa-client/apps/alfa/src/app/app.module.ts | 66 ++++- .../menu/menu.component.spec.ts | 4 +- .../lib/menu-container/menu/menu.component.ts | 4 +- ...ations-einheit-container.component.spec.ts | 15 +- ...ganisations-einheit-container.component.ts | 6 +- ...ganisations-einheit-list.component.spec.ts | 9 +- .../organisations-einheit-list.component.ts | 12 +- .../libs/bescheid/src/lib/bescheid.module.ts | 40 ++- .../src/lib/binary-file.repository.spec.ts | 26 +- .../binary-file/src/lib/binary-file.module.ts | 20 +- .../src/lib/collaboration.module.ts | 8 +- .../build-info/build-info.component.spec.ts | 3 +- .../checkbox-editor.component.ts | 4 +- .../file-upload-editor.component.spec.ts | 17 +- .../file-upload-editor.component.ts | 27 +- .../single-file-upload-editor.component.ts | 4 +- .../form/text-editor/text-editor.component.ts | 10 +- .../textarea-editor.component.ts | 10 +- .../libs/design-system/run_helm_test.sh | 0 .../dropdown-menu-link-item.component.ts | 2 +- .../lib/form/checkbox/checkbox.component.ts | 4 +- .../file-upload-button.component.spec.ts | 4 +- .../file-upload-button.component.ts | 4 +- .../text-input/text-input.component.spec.ts | 4 +- .../form/text-input/text-input.component.ts | 4 +- .../form/textarea/textarea.component.spec.ts | 4 +- .../lib/form/textarea/textarea.component.ts | 4 +- .../nav-item/nav-item.component.spec.ts | 4 +- .../lib/navbar/nav-item/nav-item.component.ts | 8 +- .../externe-fachstelle-list-item.component.ts | 4 +- ...zgcloud-button-container.component.spec.ts | 3 +- ...-by-ozgcloud-button-container.component.ts | 4 +- .../forwarding/src/lib/forwarding.module.ts | 30 +- .../vorgang-forward-form.component.spec.ts | 13 +- .../hint-shared/src/lib/hint-shared.module.ts | 4 +- alfa-client/libs/hint/src/lib/hint.module.ts | 7 +- ...rie-item-bescheid-status.component.spec.ts | 3 +- ...rie-item-vorgang-created.component.spec.ts | 9 +- .../libs/historie/src/lib/historie.module.ts | 27 +- .../src/lib/kommentar-shared.module.ts | 5 +- .../kommentar/src/lib/kommentar.module.ts | 18 +- .../src/lib/loesch-anforderung.module.ts | 9 +- .../src/lib/navigation-shared.module.ts | 2 - .../header/header.component.spec.ts | 2 - .../src/lib/navigation.module.spec.ts | 2 +- .../navigation/src/lib/navigation.module.ts | 2 - ...ganisations-einheit-list-item.component.ts | 4 +- .../postfach-mail-form.component.spec.ts | 9 +- .../postfach-mail-date.component.spec.ts | 9 +- .../libs/postfach/src/lib/postfach.module.ts | 31 ++- .../lib/resource-redirect-shared.module.ts | 5 +- alfa-client/libs/tech-shared/src/index.ts | 2 +- .../src/lib/decorator/error.decorator.util.ts | 4 +- .../src/lib/injector/injector.service.spec.ts | 30 ++ .../src/lib/injector/injector.service.ts | 16 ++ .../tech-shared/src/lib/keyboard.util.spec.ts | 2 +- ...onvert-api-error-to-error-messages.pipe.ts | 5 +- .../lib/pipe/convert-for-data-test.pipe.ts | 5 +- ...t-problem-detail-to-error-messages.pipe.ts | 9 +- .../src/lib/pipe/convert-to-boolean.pipe.ts | 5 +- .../src/lib/pipe/enum-to-label.pipe.ts | 5 +- .../src/lib/pipe/file-size-plain.pipe.ts | 5 +- .../src/lib/pipe/file-size.pipe.ts | 5 +- .../lib/pipe/format-date-with-time.pipe.ts | 9 +- ...format-date-without-year-with-time.pipe.ts | 5 +- .../src/lib/pipe/format-full-date.pipe.ts | 5 +- .../lib/pipe/format-to-pretty-date.pipe.ts | 5 +- .../tech-shared/src/lib/pipe/get-url.pipe.ts | 5 +- .../src/lib/pipe/has-any-link.pipe.ts | 5 +- .../tech-shared/src/lib/pipe/has-link.pipe.ts | 5 +- .../src/lib/pipe/not-has-any-link.pipe.ts | 5 +- .../src/lib/pipe/not-has-link.pipe.ts | 5 +- .../src/lib/pipe/to-embedded-resource.pipe.ts | 5 +- .../src/lib/pipe/to-resource-uri.pipe.ts | 5 +- .../lib/pipe/to-traffic-light-tooltip.pipe.ts | 5 +- .../src/lib/pipe/to-traffic-light.pipe.ts | 5 +- .../resource/list-resource.service.spec.ts | 10 +- .../src/lib/resource/list-resource.service.ts | 3 +- .../lib/resource/resource.repository.spec.ts | 7 +- .../src/lib/resource/resource.repository.ts | 8 +- .../src/lib/resource/resource.service.spec.ts | 10 +- .../src/lib/resource/resource.service.ts | 16 +- .../src/lib/resource/resource.util.spec.ts | 2 +- .../lib/service/formservice.abstract.spec.ts | 2 +- .../src/lib/tech-shared.module.spec.ts | 37 --- .../tech-shared/src/lib/tech-shared.module.ts | 121 -------- alfa-client/libs/ui/src/index.ts | 5 +- .../icon/app-icon/app-icon.component.spec.ts | 3 +- .../lib/icon/app-icon/app-icon.component.ts | 3 + .../postfach-icon.component.spec.ts | 3 +- .../postfach-icon/postfach-icon.component.ts | 4 + .../snackbar-close-button.component.spec.ts | 3 +- .../snackbar-close-button.component.ts | 4 + .../snackbar-error.component.spec.ts | 5 +- .../snackbar-error.component.ts | 11 +- .../snackbar-info.component.html | 12 +- .../snackbar-info.component.spec.ts | 5 +- .../snackbar-info/snackbar-info.component.ts | 14 +- .../ui/src/lib/snackbar/snackbar.service.ts | 10 +- .../ui/accordion/accordion.component.spec.ts | 3 +- .../lib/ui/accordion/accordion.component.ts | 3 + .../ui/back-button/back-button.component.ts | 7 + .../basic-dialog.component.spec.ts | 9 +- .../ui/basic-dialog/basic-dialog.component.ts | 28 +- .../ui/src/lib/ui/dialog/dialog.service.ts | 15 +- .../download-button.component.spec.ts | 4 +- .../download-button.component.ts | 6 + .../autocomplete-editor.component.html | 61 ++-- .../autocomplete-editor.component.spec.ts | 10 +- .../autocomplete-editor.component.ts | 40 +-- .../checkbox-enum-editor.component.spec.ts | 13 +- .../checkbox-enum-editor.component.ts | 9 +- .../date-editor/date-editor.component.spec.ts | 13 +- .../date-editor/date-editor.component.ts | 20 +- .../file-upload-editor.component.html | 53 ++-- .../file-upload-editor.component.spec.ts | 25 +- .../file-upload-editor.component.ts | 46 +-- .../ozgcloud-text-editor.component.html | 66 +++++ ...ss => ozgcloud-text-editor.component.scss} | 0 ...=> ozgcloud-text-editor.component.spec.ts} | 26 +- ...t.ts => ozgcloud-text-editor.component.ts} | 33 ++- .../text-editor/text-editor.component.html | 65 ----- .../textarea-editor.component.spec.ts | 13 +- .../textarea-editor.component.ts | 22 +- .../expansion-panel.component.spec.ts | 9 +- .../expansion-panel.component.ts | 6 + .../ui/file-upload/file-upload.component.html | 56 ++-- .../file-upload/file-upload.component.spec.ts | 6 +- .../ui/file-upload/file-upload.component.ts | 8 +- .../fixed-dialog.component.spec.ts | 3 +- .../ui/fixed-dialog/fixed-dialog.component.ts | 22 +- ...ion-timeout-retry-dialog.component.spec.ts | 6 +- ...nnection-timeout-retry-dialog.component.ts | 5 + ...imeout-retry-fail-dialog.component.spec.ts | 6 +- ...ion-timeout-retry-fail-dialog.component.ts | 6 + .../icon-button-with-spinner.component.html | 12 +- ...icon-button-with-spinner.component.spec.ts | 15 +- .../icon-button-with-spinner.component.ts | 8 + ...nternal-server-error-dialog.component.html | 47 ++-- ...rnal-server-error-dialog.component.spec.ts | 12 +- .../internal-server-error-dialog.component.ts | 15 +- .../open-url-button.component.spec.ts | 4 +- .../open-url-button.component.ts | 5 + ...loud-button-with-spinner.component.spec.ts | 2 +- .../ozgcloud-button-with-spinner.component.ts | 8 +- ...loud-icon-button-primary.component.spec.ts | 5 +- .../ozgcloud-icon-button-primary.component.ts | 8 +- ...oked-button-with-spinner.component.spec.ts | 2 +- ...d-stroked-button-with-spinner.component.ts | 8 +- .../ozgcloud-button-content.component.html | 85 +++--- .../ozgcloud-button-content.component.spec.ts | 2 +- .../ozgcloud-button-content.component.ts | 6 +- .../ozgcloud-dialog.service.ts | 6 +- .../ozgcloud-icon.component.spec.ts | 3 +- .../ozgcloud-icon/ozgcloud-icon.component.ts | 3 + .../ozgcloud-menu.component.spec.ts | 3 +- .../ozgcloud-menu/ozgcloud-menu.component.ts | 2 + .../ozgcloud-paste-text-button.component.html | 55 ++-- ...gcloud-paste-text-button.component.spec.ts | 4 +- .../ozgcloud-paste-text-button.component.ts | 5 +- .../ozgcloud-routing-button.component.spec.ts | 3 +- .../ozgcloud-routing-button.component.ts | 4 + .../ozgcloud-svgicon-big.component.spec.ts | 3 +- .../ozgcloud-svgicon-big.component.ts | 3 + .../ozgcloud-svgicon.component.spec.ts | 3 +- .../ozgcloud-svgicon.component.ts | 3 + .../progress-bar/progress-bar.component.html | 44 +-- .../progress-bar.component.spec.ts | 3 +- .../ui/progress-bar/progress-bar.component.ts | 5 +- .../ui/slide-toggle/slide-toggle.component.ts | 7 +- .../spinner-transparency.component.html | 53 ++-- .../spinner-transparency.component.spec.ts | 3 +- .../spinner-transparency.component.ts | 5 +- .../src/lib/ui/spinner/spinner.component.html | 52 ++-- .../lib/ui/spinner/spinner.component.spec.ts | 3 +- .../src/lib/ui/spinner/spinner.component.ts | 3 + .../subnavigation.component.spec.ts | 2 +- .../subnavigation/subnavigation.component.ts | 1 + .../libs/ui/src/lib/ui/ui.module.spec.ts | 37 --- alfa-client/libs/ui/src/lib/ui/ui.module.ts | 263 ------------------ .../validation-error.component.html | 40 +-- .../validation-error.component.spec.ts | 2 +- .../validation-error.component.ts | 1 + .../open-documentation-button.component.html | 2 +- .../lib/help-menu/help-menu.component.spec.ts | 11 +- .../src/lib/user-assistance.module.ts | 13 +- .../src/lib/user-profile.repository.spec.ts | 10 +- .../user-profile-in-header.component.spec.ts | 2 + ...profile-button-container.component.spec.ts | 4 +- .../src/lib/user-profile.module.ts | 24 +- .../user-settings.component.spec.ts | 3 +- .../src/lib/user-settings.module.ts | 13 +- ...aktenzeichen-edit-dialog.component.spec.ts | 41 +-- .../aktenzeichen-edit-dialog.component.ts | 39 +-- ...eiden-dokument-hochladen.component.spec.ts | 9 +- .../src/lib/vorgang-detail.module.ts | 54 +++- .../src/lib/vorgang-shared-ui.module.ts | 38 ++- .../vorgang-status-dot.component.spec.ts | 5 +- .../vorgang-status-text.component.spec.ts | 3 +- .../src/lib/+state/vorgang.repository.spec.ts | 145 +++------- .../src/lib/vorgang-shared.module.ts | 2 - .../libs/vorgang/src/lib/vorgang.module.ts | 32 ++- .../wiedervorlage-form.component.spec.ts | 29 +- .../wiedervorlage-status.component.spec.ts | 4 +- .../src/lib/wiedervorlage.module.ts | 46 ++- .../src/lib/zustaendige-stelle.module.ts | 2 - alfa-client/nx.json | 1 + 212 files changed, 1600 insertions(+), 1560 deletions(-) mode change 100755 => 100644 alfa-client/libs/design-system/run_helm_test.sh create mode 100644 alfa-client/libs/tech-shared/src/lib/injector/injector.service.spec.ts create mode 100644 alfa-client/libs/tech-shared/src/lib/injector/injector.service.ts delete mode 100644 alfa-client/libs/tech-shared/src/lib/tech-shared.module.spec.ts delete mode 100644 alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts create mode 100644 alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.html rename alfa-client/libs/ui/src/lib/ui/editor/text-editor/{text-editor.component.scss => ozgcloud-text-editor.component.scss} (100%) rename alfa-client/libs/ui/src/lib/ui/editor/text-editor/{text-editor.component.spec.ts => ozgcloud-text-editor.component.spec.ts} (84%) rename alfa-client/libs/ui/src/lib/ui/editor/text-editor/{text-editor.component.ts => ozgcloud-text-editor.component.ts} (69%) delete mode 100644 alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html delete mode 100644 alfa-client/libs/ui/src/lib/ui/ui.module.spec.ts delete mode 100644 alfa-client/libs/ui/src/lib/ui/ui.module.ts diff --git a/alfa-client/apps/admin/src/app/app.component.ts b/alfa-client/apps/admin/src/app/app.component.ts index fe6c276c6d..6de5c0ab4d 100644 --- a/alfa-client/apps/admin/src/app/app.component.ts +++ b/alfa-client/apps/admin/src/app/app.component.ts @@ -27,13 +27,19 @@ import { ROUTES } from '@admin-client/shared'; import { KeycloakTokenService } from '@admin/keycloak-shared'; import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; import { BuildInfoComponent } from '@alfa-client/common'; -import { isLoaded, isNotUndefined, mapToResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { HasLinkPipe, isLoaded, isNotUndefined, mapToResource, StateResource } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { Router, RouterLink, RouterOutlet } from '@angular/router'; import { AuthenticationService } from '@authentication'; import { hasLink } from '@ngxp/rest'; -import { AdminLogoIconComponent, NavbarComponent, NavItemComponent, OrgaUnitIconComponent, UsersIconComponent, } from '@ods/system'; +import { + AdminLogoIconComponent, + NavbarComponent, + NavItemComponent, + OrgaUnitIconComponent, + UsersIconComponent, +} from '@ods/system'; import { filter, Observable, Subscription } from 'rxjs'; import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component'; import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; @@ -54,9 +60,9 @@ import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/ RouterOutlet, UnavailablePageComponent, BuildInfoComponent, - TechSharedModule, MenuContainerComponent, RouterLink, + HasLinkPipe, ], }) export class AppComponent implements OnInit { diff --git a/alfa-client/apps/admin/src/main.ts b/alfa-client/apps/admin/src/main.ts index 517ab0538b..7f198e2f54 100644 --- a/alfa-client/apps/admin/src/main.ts +++ b/alfa-client/apps/admin/src/main.ts @@ -32,7 +32,13 @@ import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@a import localeDe from '@angular/common/locales/de'; import { bootstrapApplication, BrowserModule } from '@angular/platform-browser'; import { provideAnimations } from '@angular/platform-browser/animations'; -import { ActivatedRouteSnapshot, BaseRouteReuseStrategy, provideRouter, RouteReuseStrategy, withRouterConfig, } from '@angular/router'; +import { + ActivatedRouteSnapshot, + BaseRouteReuseStrategy, + provideRouter, + RouteReuseStrategy, + withRouterConfig, +} from '@angular/router'; import { HttpUnauthorizedInterceptor } from '@authentication'; import { EffectsModule } from '@ngrx/effects'; import { StoreRouterConnectingModule } from '@ngrx/router-store'; @@ -43,6 +49,9 @@ import { ConfigurationsProviders } from 'libs/admin/configuration-shared/src/lib import { PostfachProviders } from 'libs/admin/postfach-shared/src/lib/postfach.providers'; import { SettingsProviders } from 'libs/admin/settings-shared/src/lib/settings.providers'; import { UserProviders } from 'libs/admin/user/src/lib/user.providers'; +import { HttpBinaryFileInterceptor } from '../../../libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor'; +import { HttpXsrfInterceptor } from '../../../libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor'; +import { XhrInterceptor } from '../../../libs/tech-shared/src/lib/interceptor/xhr.interceptor'; import { AppComponent } from './app/app.component'; import { appRoutes } from './app/app.routes'; import { environment } from './environments/environment'; @@ -69,6 +78,21 @@ loadEnvironment(environment.environmentUrl).then((env) => { bootstrapApplication(AppComponent, { providers: [ { provide: RouteReuseStrategy, useClass: NoRouteReuseStrategy }, + { + provide: HTTP_INTERCEPTORS, + useClass: XhrInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpXsrfInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpBinaryFileInterceptor, + multi: true, + }, ConfigurationsProviders, PostfachProviders, SettingsProviders, diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts index d2d9e13340..431f26bb8d 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts @@ -22,12 +22,13 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; import { Component } from '@angular/core'; @Component({ selector: 'organisationseinheit-page', templateUrl: './organisationseinheit-page.component.html', standalone: true, - imports: [OrganisationsEinheitContainerComponent], + imports: [ OrganisationsEinheitContainerComponent, HasLinkPipe], }) export class OrganisationsEinheitPageComponent {} diff --git a/alfa-client/apps/alfa-e2e/docker-compose.yml b/alfa-client/apps/alfa-e2e/docker-compose.yml index efbb27de90..cb3cff0ebb 100644 --- a/alfa-client/apps/alfa-e2e/docker-compose.yml +++ b/alfa-client/apps/alfa-e2e/docker-compose.yml @@ -154,7 +154,7 @@ services: soft: 65536 hard: 65536 healthcheck: - test: [ 'CMD-SHELL', "curl -s 'http://localhost:9200/_cat/health?h=status' | egrep -q '(green|yellow)'" ] + test: ['CMD-SHELL', "curl -s 'http://localhost:9200/_cat/health?h=status' | egrep -q '(green|yellow)'"] interval: 10s timeout: 10s retries: 5 @@ -195,7 +195,7 @@ services: - 7080:8080 - 7081:8081 healthcheck: - test: [ 'CMD-SHELL', 'wget --spider localhost:8081/version' ] + test: ['CMD-SHELL', 'wget --spider localhost:8081/version'] interval: 5s timeout: 5s retries: 5 diff --git a/alfa-client/apps/alfa/src/app/app.component.ts b/alfa-client/apps/alfa/src/app/app.component.ts index 559dcfd6e2..6a4820c703 100644 --- a/alfa-client/apps/alfa/src/app/app.component.ts +++ b/alfa-client/apps/alfa/src/app/app.component.ts @@ -24,7 +24,7 @@ import { ApiRootFacade, ApiRootResource } from '@alfa-client/api-root-shared'; import { ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; -import { StateResource, isNotNull } from '@alfa-client/tech-shared'; +import { InjectorService, StateResource, isNotNull } from '@alfa-client/tech-shared'; import { IconService } from '@alfa-client/ui'; import { buildPathSegmentsFromLocalStorage } from '@alfa-client/vorgang-shared'; import { Component, Inject, OnInit } from '@angular/core'; @@ -49,6 +49,7 @@ export class AppComponent implements OnInit { private iconService: IconService, private oAuthService: OAuthService, private navigationService: NavigationService, + private injectorService: InjectorService, ) { this.iconService.registerIcons(); } diff --git a/alfa-client/apps/alfa/src/app/app.module.ts b/alfa-client/apps/alfa/src/app/app.module.ts index d8e90a9d20..566ebc0b3f 100644 --- a/alfa-client/apps/alfa/src/app/app.module.ts +++ b/alfa-client/apps/alfa/src/app/app.module.ts @@ -29,11 +29,14 @@ import { HintSharedModule } from '@alfa-client/hint-shared'; import { NavigationModule } from '@alfa-client/navigation'; import { OzgCloudUrlSerializer } from '@alfa-client/navigation-shared'; import { ResourceRedirectComponent } from '@alfa-client/resource-redirect'; -import { UiModule } from '@alfa-client/ui'; +import { SpinnerComponent } from '@alfa-client/ui'; import { registerLocaleData } from '@angular/common'; -import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; +import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import localeDe from '@angular/common/locales/de'; import { LOCALE_ID, NgModule } from '@angular/core'; +import { DateFnsAdapter } from '@angular/material-date-fns-adapter'; +import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core'; +import { MatIconModule } from '@angular/material/icon'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { RouterModule, Routes, UrlSerializer } from '@angular/router'; @@ -42,11 +45,29 @@ import { StoreRouterConnectingModule } from '@ngrx/router-store'; import { StoreModule } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { OAuthModule } from 'angular-oauth2-oidc'; +import { de } from 'date-fns/locale'; +import { HttpBinaryFileInterceptor } from '../../../../libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor'; +import { HttpXsrfInterceptor } from '../../../../libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor'; +import { XhrInterceptor } from '../../../../libs/tech-shared/src/lib/interceptor/xhr.interceptor'; +import { HttpConnectionTimeoutInterceptor } from '../../../../libs/ui/src/lib/interceptor/http-connection-timeout.interceptor'; +import { HttpErrorInterceptor } from '../../../../libs/ui/src/lib/interceptor/http-error.interceptor'; import { environment } from '../environments/environment'; import { AppComponent } from './app.component'; registerLocaleData(localeDe); +export const CUSTOM_DATE_FORMATS = { + parse: { + dateInput: 'dd.MM.yyyy', + }, + display: { + dateInput: 'dd.MM.yyyy', + monthYearLabel: 'MMM yyyy', + dateA11yLabel: 'dd.MM.yyyy', + monthYearA11yLabel: 'MM yyyy', + }, +}; + const routes: Routes = [ { path: '', @@ -61,13 +82,13 @@ const routes: Routes = [ @NgModule({ declarations: [AppComponent], imports: [ + MatIconModule, BrowserModule, BrowserAnimationsModule, RouterModule.forRoot(routes, { initialNavigation: 'disabled', onSameUrlNavigation: 'reload', }), - UiModule, EnvironmentModule, OAuthModule.forRoot({ resourceServer: { @@ -94,10 +115,49 @@ const routes: Routes = [ // Workaround: load any module depending on ApiRootActions.loadApiRootSuccess // TODO Check if a future NgRx version will solve Lazy Loading + Effects.forFeature() HintSharedModule, + SpinnerComponent, ], providers: [ { provide: LOCALE_ID, useValue: 'de' }, { provide: UrlSerializer, useClass: OzgCloudUrlSerializer }, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpErrorInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpConnectionTimeoutInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: XhrInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpXsrfInterceptor, + multi: true, + }, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpBinaryFileInterceptor, + multi: true, + }, + { + provide: MAT_DATE_LOCALE, + useValue: de, + }, + { + provide: MAT_DATE_FORMATS, + useValue: CUSTOM_DATE_FORMATS, + }, + { + provide: DateAdapter, + useClass: DateFnsAdapter, + deps: [MAT_DATE_LOCALE], + }, provideHttpClient(withInterceptorsFromDi()), ], bootstrap: [AppComponent], diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.spec.ts b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.spec.ts index 1f417e5feb..6fe7f6ec6a 100644 --- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.spec.ts +++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.spec.ts @@ -17,8 +17,8 @@ describe('MenuComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [MenuComponent], - declarations: [HasLinkPipe, MockComponent(NavItemComponent), MockComponent(MailboxIconComponent)], + imports: [MenuComponent, HasLinkPipe], + declarations: [MockComponent(NavItemComponent), MockComponent(MailboxIconComponent)], }).compileComponents(); fixture = TestBed.createComponent(MenuComponent); diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.ts b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.ts index 19cc60bab4..0c9cddefff 100644 --- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.ts +++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.ts @@ -1,5 +1,5 @@ import { ConfigurationLinkRel, ConfigurationResource } from '@admin-client/configuration-shared'; -import { StateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { HasLinkPipe, StateResource } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import { MailboxIconComponent, NavItemComponent, StatisticIconComponent } from '@ods/system'; @@ -7,7 +7,7 @@ import { MailboxIconComponent, NavItemComponent, StatisticIconComponent } from ' @Component({ selector: 'admin-menu', standalone: true, - imports: [CommonModule, NavItemComponent, MailboxIconComponent, TechSharedModule, StatisticIconComponent], + imports: [CommonModule, NavItemComponent, MailboxIconComponent, StatisticIconComponent, HasLinkPipe], templateUrl: './menu.component.html', }) export class MenuComponent { diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts index 5fd68cc789..562b00dafa 100644 --- a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts @@ -25,7 +25,7 @@ import { OrganisationsEinheitContainerComponent } from '@admin-client/organisati import { AdminOrganisationsEinheit, AdminOrganisationsEinheitService } from '@admin-client/organisations-einheit-shared'; import { createStateResource, StateResource, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, getMockComponent, Mock, mock } from '@alfa-client/test-utils'; -import { OzgcloudDialogService, UiModule } from '@alfa-client/ui'; +import { OzgcloudDialogService } from '@alfa-client/ui'; import { OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; import { CommonModule } from '@angular/common'; import { ViewContainerRef } from '@angular/core'; @@ -66,7 +66,7 @@ describe('OrganisationsEinheitContainerComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ToEmbeddedResourcesPipe], - imports: [CommonModule, UiModule, OrganisationsEinheitContainerComponent, MockComponent(OrganisationsEinheitListComponent)], + imports: [CommonModule, OrganisationsEinheitContainerComponent, MockComponent(OrganisationsEinheitListComponent)], providers: [ { provide: AdminOrganisationsEinheitService, useValue: organisationsEinheitService }, { provide: OzgcloudDialogService, useValue: dialogService }, @@ -85,7 +85,16 @@ describe('OrganisationsEinheitContainerComponent', () => { describe('component', () => { describe('ngOnInit', () => { - it('should call organisationsEinheitService getAll', (done) => { + it('should call organisationsEinheitService getList', (done) => { + component.ngOnInit(); + + component.organisationsEinheitenStateResource$.subscribe(() => { + expect(organisationsEinheitService.getAll).toHaveBeenCalled(); + done(); + }); + }); + + it('should set organisationsEinheitListStateResource$', (done) => { component.ngOnInit(); component.organisationsEinheitenStateResource$.subscribe(() => { diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts index a1b124b07e..e12a8a85f7 100644 --- a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts @@ -7,9 +7,8 @@ import { ResourceSearchService, SearchResourceServiceConfig, StateResource, - TechSharedModule, } from '@alfa-client/tech-shared'; -import { OzgcloudDialogService, UiModule } from '@alfa-client/ui'; +import { OzgcloudDialogService, SpinnerComponent } from '@alfa-client/ui'; import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle'; import { OrganisationsEinheitListResource, @@ -31,12 +30,11 @@ import { OrganisationsEinheitListComponent } from './organisations-einheit-list/ standalone: true, imports: [ CommonModule, - UiModule, ZustaendigeStelleModule, ZustaendigeStelleSharedModule, OrganisationsEinheitListComponent, - TechSharedModule, ButtonComponent, + SpinnerComponent, ], providers: [ { diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts index 6fd9e1d7f9..dd2fba6125 100644 --- a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts @@ -22,14 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { AdminOrganisationsEinheit } from '@admin-client/organisations-einheit-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, getElementFromFixture, mock } from '@alfa-client/test-utils'; import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { MatTooltipModule } from '@angular/material/tooltip'; import { ActivatedRoute } from '@angular/router'; import { ExclamationIconComponent, ListComponent, ListItemComponent } from '@ods/system'; import { getConvertedDataTestIdOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { MockComponent, MockModule } from 'ng-mocks'; +import { MockComponent } from 'ng-mocks'; import { createAdminOrganisationsEinheit } from '../../../../../organisations-einheit-shared/src/test/organisations-einheit'; import { OrganisationsEinheitListComponent } from './organisations-einheit-list.component'; @@ -48,13 +48,12 @@ describe('OrganisationsEinheitListComponent', () => { useValue: mock(ActivatedRoute), }, ], - imports: [ - CommonModule, + imports: [CommonModule, ConvertForDataTestPipe], + declarations: [ OrganisationsEinheitListComponent, MockComponent(ListComponent), MockComponent(ListItemComponent), MockComponent(ExclamationIconComponent), - MockModule(MatTooltipModule), ], }).compileComponents(); diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts index 349085056b..7efc0bbbe6 100644 --- a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { AdminOrganisationsEinheit } from '@admin-client/organisations-einheit-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe, ToResourceUriPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import { ExclamationIconComponent, ListComponent, ListItemComponent, TooltipDirective } from '@ods/system'; @@ -31,7 +31,15 @@ import { ExclamationIconComponent, ListComponent, ListItemComponent, TooltipDire selector: 'admin-organisations-einheit-list', templateUrl: './organisations-einheit-list.component.html', standalone: true, - imports: [CommonModule, ListComponent, ListItemComponent, ExclamationIconComponent, TooltipDirective, TechSharedModule], + imports: [ + CommonModule, + ListComponent, + ListItemComponent, + ExclamationIconComponent, + TooltipDirective, + ToResourceUriPipe, + ConvertForDataTestPipe, + ], }) export class OrganisationsEinheitListComponent { @Input() public organisationsEinheitList: AdminOrganisationsEinheit[] = []; diff --git a/alfa-client/libs/bescheid/src/lib/bescheid.module.ts b/alfa-client/libs/bescheid/src/lib/bescheid.module.ts index 1e6f131245..f6df6b162c 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid.module.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid.module.ts @@ -24,8 +24,7 @@ import { BescheidSharedModule } from '@alfa-client/bescheid-shared'; import { BinaryFileModule } from '@alfa-client/binary-file'; import { CommandSharedModule } from '@alfa-client/command-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { GetUrlPipe, HasLinkPipe, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { @@ -35,6 +34,22 @@ import { TextareaEditorComponent, TextEditorComponent, } from '@ods/component'; +import { BescheidInVorgangContainerComponent } from './bescheid-in-vorgang-container/bescheid-in-vorgang-container.component'; +import { BescheidInVorgangComponent } from './bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component'; +import { BescheidListInVorgangContainerComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang-container.component'; +import { BescheidListInVorgangComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/bescheid-list-in-vorgang.component'; +import { DocumentInBescheidContainerComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component'; +import { BeschiedenDateContainerComponent } from './beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component'; +import { BeschiedenDateInVorgangContainerComponent } from './beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component'; + +import { + DateEditorComponent, + ExpansionPanelComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + SpinnerComponent, +} from '@alfa-client/ui'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatIcon } from '@angular/material/icon'; import { AttachmentComponent, AttachmentWrapperComponent, @@ -51,11 +66,7 @@ import { SpinnerIconComponent, StampIconComponent, } from '@ods/system'; -import { BescheidInVorgangContainerComponent } from './bescheid-in-vorgang-container/bescheid-in-vorgang-container.component'; -import { BescheidInVorgangComponent } from './bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component'; -import { BescheidListInVorgangContainerComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang-container.component'; -import { BescheidListInVorgangComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/bescheid-list-in-vorgang.component'; -import { DocumentInBescheidContainerComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component'; +import { FormatFullDatePipe } from '../../../tech-shared/src/lib/pipe/format-full-date.pipe'; import { BescheidWizardContainerComponent } from './bescheid-wizard-container/bescheid-wizard-container.component'; import { BescheidWizardAbschliessenButtonComponent } from './bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-button/bescheid-wizard-abschliessen-button.component'; import { BescheidWizardAbschliessenDialogContainerComponent } from './bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component'; @@ -88,16 +99,12 @@ import { BescheidWizardUploadAttachmentButtonComponent } from './bescheid-wizard import { BescheidWizardUploadDocumentButtonContainerComponent } from './bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component'; import { BescheidWizardUploadDocumentButtonComponent } from './bescheid-wizard-container/bescheid-wizard/upload-document-button-container/upload-document-button/bescheid-wizard-upload-document-button.component'; import { BescheidWizardWeiterButtonComponent } from './bescheid-wizard-container/bescheid-wizard/weiter-button/bescheid-wizard-weiter-button.component'; -import { BeschiedenDateContainerComponent } from './beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component'; -import { BeschiedenDateInVorgangContainerComponent } from './beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component'; @NgModule({ imports: [ CommonModule, BescheidSharedModule, BinaryFileModule, - TechSharedModule, - UiModule, CommandSharedModule, BescheidStatusTextComponent, BescheidWrapperComponent, @@ -106,6 +113,17 @@ import { BeschiedenDateInVorgangContainerComponent } from './beschieden-date-in- ButtonWithSpinnerComponent, RadioButtonCardComponent, ButtonComponent, + FormatFullDatePipe, + HasLinkPipe, + GetUrlPipe, + ToEmbeddedResourcesPipe, + SpinnerComponent, + ExpansionPanelComponent, + AttachmentWrapperComponent, + MatIcon, + DateEditorComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + ReactiveFormsModule, ButtonCardComponent, BescheidGenerateIconComponent, SingleFileUploadEditorComponent, diff --git a/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts b/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts index 98650f90ed..27377b3854 100644 --- a/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts +++ b/alfa-client/libs/binary-file-shared/src/lib/binary-file.repository.spec.ts @@ -28,26 +28,22 @@ import { HttpErrorHandler, HttpHeader, ListResource, - TechSharedModule, } from '@alfa-client/tech-shared'; import { mock, mockClass, useFromMock } from '@alfa-client/test-utils'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { faker } from '@faker-js/faker'; import { Resource, ResourceFactory, ResourceUri, getUrl } from '@ngxp/rest'; import { cold, hot } from 'jest-marbles'; +import { InjectorService } from 'libs/tech-shared/src/lib/injector/injector.service'; import { DummyLinkRel } from 'libs/tech-shared/test/dummy'; import { createDummyListResource, createDummyResource } from 'libs/tech-shared/test/resource'; import { Observable, of } from 'rxjs'; -import { - createBinaryFileResource, - createBlob, - createGetRequestOptions, -} from '../../test/binary-file'; +import { createBinaryFileResource, createBlob, createGetRequestOptions } from '../../test/binary-file'; import { BinaryFileLinkRel } from './binary-file.linkrel'; import { BinaryFileResource } from './binary-file.model'; import { BinaryFileRepository } from './binary-file.repository'; -import * as HttpUtil from '../../../tech-shared/src/lib/http.util'; +import * as HttpUtil from 'libs/tech-shared/src/lib/http.util'; describe('BinaryFileRepository', () => { let repository: BinaryFileRepository; @@ -66,7 +62,7 @@ describe('BinaryFileRepository', () => { }); function mockInterceptor(): void { - mockClass(TechSharedModule).injector = <any>{ get: () => useFromMock(mock(HttpErrorHandler)) }; + mockClass(InjectorService).injector = <any>{ get: () => useFromMock(mock(HttpErrorHandler)) }; } it('should be created', () => { @@ -102,9 +98,7 @@ describe('BinaryFileRepository', () => { describe('download', () => { const blob = {}; - const binaryFileResource: BinaryFileResource = createBinaryFileResource([ - BinaryFileLinkRel.DOWNLOAD, - ]); + const binaryFileResource: BinaryFileResource = createBinaryFileResource([BinaryFileLinkRel.DOWNLOAD]); beforeEach(() => { httpClient.get.mockReturnValue(hot('a', { a: blob })); @@ -117,10 +111,7 @@ describe('BinaryFileRepository', () => { repository.download(binaryFileResource); - expect(httpClient.get).toHaveBeenCalledWith( - getUrl(binaryFileResource, BinaryFileLinkRel.DOWNLOAD), - requestOptions, - ); + expect(httpClient.get).toHaveBeenCalledWith(getUrl(binaryFileResource, BinaryFileLinkRel.DOWNLOAD), requestOptions); }); it('should return value', () => { @@ -189,10 +180,7 @@ describe('BinaryFileRepository', () => { }); function getExpectedRequestOptions(): HttpHeaders { - return new HttpHeaders().set(HttpHeader.ACCEPT, [ - ContentType.APPLICATION_PDF, - ContentType.APPLICATION_JSON, - ]); + return new HttpHeaders().set(HttpHeader.ACCEPT, [ContentType.APPLICATION_PDF, ContentType.APPLICATION_JSON]); } }); diff --git a/alfa-client/libs/binary-file/src/lib/binary-file.module.ts b/alfa-client/libs/binary-file/src/lib/binary-file.module.ts index ee4cacdb5f..9327cbb0be 100644 --- a/alfa-client/libs/binary-file/src/lib/binary-file.module.ts +++ b/alfa-client/libs/binary-file/src/lib/binary-file.module.ts @@ -21,10 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { ConvertForDataTestPipe, FileSizePipe, HasLinkPipe, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; +import { IconButtonWithSpinnerComponent, SpinnerComponent } from '@alfa-client/ui'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; import { DownloadButtonComponent } from '@ods/component'; import { AttachmentComponent, @@ -34,6 +36,8 @@ import { SpinnerIconComponent, TooltipDirective, } from '@ods/system'; +import { FileSizePlainPipe } from '../../../tech-shared/src/lib/pipe/file-size-plain.pipe'; +import { FileUploadEditorComponent } from '../../../ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component'; import { BinaryFileAttachmentContainerComponent } from './binary-file-attachment-container/binary-file-attachment-container.component'; import { BinaryFileContainerComponent } from './binary-file-container/binary-file-container.component'; import { BinaryFileComponent } from './binary-file-container/binary-file/binary-file.component'; @@ -49,14 +53,22 @@ import { VerticalBinaryFileListComponent } from './vertical-binary-file-list/ver @NgModule({ imports: [ CommonModule, - UiModule, - TechSharedModule, AttachmentComponent, AttachmentHeaderComponent, AttachmentWrapperComponent, SpinnerIconComponent, CloseIconComponent, DownloadButtonComponent, + FileUploadEditorComponent, + HasLinkPipe, + MatTooltip, + MatIcon, + SpinnerComponent, + IconButtonWithSpinnerComponent, + FileSizePipe, + ConvertForDataTestPipe, + ToEmbeddedResourcesPipe, + FileSizePlainPipe, TooltipDirective, ], declarations: [ diff --git a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts index a99b23f737..62308b9704 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts @@ -22,8 +22,8 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { CollaborationSharedModule } from '@alfa-client/collaboration-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { SpinnerComponent } from '@alfa-client/ui'; import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; @@ -63,7 +63,6 @@ import { CollaborationRequestFormComponent } from './collaboration-in-vorgang-co TextareaEditorComponent, FormsModule, ReactiveFormsModule, - TechSharedModule, ButtonWithSpinnerComponent, ZustaendigeStelleModule, OfficeIconComponent, @@ -71,7 +70,8 @@ import { CollaborationRequestFormComponent } from './collaboration-in-vorgang-co PublicAdministrationIconComponent, OrganisationsEinheitListItemContainerComponent, ExterneFachstelleListItemContainerComponent, - UiModule, + HasLinkPipe, + SpinnerComponent, ], declarations: [ CollaborationInVorgangContainerComponent, diff --git a/alfa-client/libs/common/src/lib/build-info/build-info.component.spec.ts b/alfa-client/libs/common/src/lib/build-info/build-info.component.spec.ts index 0f8d5ff013..a47f70b4bf 100644 --- a/alfa-client/libs/common/src/lib/build-info/build-info.component.spec.ts +++ b/alfa-client/libs/common/src/lib/build-info/build-info.component.spec.ts @@ -47,8 +47,7 @@ describe('BuildInfoComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [BuildInfoComponent], - declarations: [FormatDateWithTimePipe], + imports: [BuildInfoComponent, FormatDateWithTimePipe], }).compileComponents(); }); diff --git a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts index 121f52bb8d..dfab859671 100644 --- a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts +++ b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { Component, Input } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { CheckboxComponent } from '@ods/system'; @@ -31,7 +31,7 @@ import { ValidationErrorComponent } from '../validation-error/validation-error.c @Component({ selector: 'ods-checkbox-editor', standalone: true, - imports: [CheckboxComponent, ValidationErrorComponent, TechSharedModule, ReactiveFormsModule], + imports: [CheckboxComponent, ValidationErrorComponent, ReactiveFormsModule, ConvertForDataTestPipe], templateUrl: './checkbox-editor.component.html', }) export class CheckboxEditorComponent extends FormControlEditorAbstractComponent { diff --git a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.spec.ts b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.spec.ts index e23d68f4fd..9bb05063e4 100644 --- a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.spec.ts +++ b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.spec.ts @@ -21,15 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule, createEmptyStateResource } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe, createEmptyStateResource } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { - AbstractControl, - FormGroupDirective, - ReactiveFormsModule, - UntypedFormBuilder, -} from '@angular/forms'; +import { AbstractControl, FormGroupDirective, ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; import { FileUploadButtonComponent, SpinnerIconComponent } from '@ods/system'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; @@ -48,12 +43,8 @@ describe('FileUploadEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - FileUploadEditorComponent, - MockComponent(SpinnerIconComponent), - MockComponent(FileUploadButtonComponent), - ], - imports: [ReactiveFormsModule, TechSharedModule], + declarations: [FileUploadEditorComponent, MockComponent(SpinnerIconComponent), MockComponent(FileUploadButtonComponent)], + imports: [ReactiveFormsModule, ConvertForDataTestPipe], providers: [ { provide: FormGroupDirective, diff --git a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.ts b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.ts index 0a9f5a53ef..2a412d827f 100644 --- a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.ts +++ b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.ts @@ -21,22 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { StateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe, StateResource } from '@alfa-client/tech-shared'; import { NgForOf } from '@angular/common'; import { Component, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core'; -import { - ControlContainer, - FormGroupDirective, - ReactiveFormsModule, - UntypedFormArray, - UntypedFormControl, -} from '@angular/forms'; +import { ControlContainer, FormGroupDirective, ReactiveFormsModule, UntypedFormArray, UntypedFormControl } from '@angular/forms'; import { Resource } from '@ngxp/rest'; -import { - AttachmentIconComponent, - FileUploadButtonComponent, - SpinnerIconComponent, -} from '@ods/system'; +import { AttachmentIconComponent, FileUploadButtonComponent, SpinnerIconComponent } from '@ods/system'; import { uniqueId } from 'lodash-es'; import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstract.component'; @@ -51,13 +41,10 @@ import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstra SpinnerIconComponent, ReactiveFormsModule, NgForOf, - TechSharedModule, + ConvertForDataTestPipe, ], }) -export class FileUploadEditorComponent - extends FormControlEditorAbstractComponent - implements OnInit -{ +export class FileUploadEditorComponent extends FormControlEditorAbstractComponent implements OnInit { @Input() label: string = ''; @Input() parentFormArrayName: string; @Input() accept: string = '*/*'; @@ -88,9 +75,7 @@ export class FileUploadEditorComponent buildFormArray(fileLinkList: string[]): void { this.fileLinkControls.clear(); - fileLinkList.forEach((link: string) => - this.fileLinkControls.push(new UntypedFormControl(link)), - ); + fileLinkList.forEach((link: string) => this.fileLinkControls.push(new UntypedFormControl(link))); } upload(file: File): void { diff --git a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.ts b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.ts index 4ae84174d1..a62e384fb3 100644 --- a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.ts +++ b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule, isNotNil } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe, isNotNil } from '@alfa-client/tech-shared'; import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { FileUploadButtonComponent, SpinnerIconComponent } from '@ods/system'; @@ -32,7 +32,7 @@ import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstra selector: 'ods-single-file-upload-editor', templateUrl: './single-file-upload-editor.component.html', standalone: true, - imports: [FileUploadButtonComponent, SpinnerIconComponent, ReactiveFormsModule, TechSharedModule], + imports: [FileUploadButtonComponent, SpinnerIconComponent, ReactiveFormsModule, ConvertForDataTestPipe], }) export class SingleFileUploadEditorComponent extends FormControlEditorAbstractComponent { @Input() label: string = ''; diff --git a/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.ts b/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.ts index 88059147b4..cfdd66512d 100644 --- a/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.ts +++ b/alfa-client/libs/design-component/src/lib/form/text-editor/text-editor.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; @@ -32,13 +32,7 @@ import { ValidationErrorComponent } from '../validation-error/validation-error.c @Component({ selector: 'ods-text-editor', standalone: true, - imports: [ - CommonModule, - ReactiveFormsModule, - TechSharedModule, - TextInputComponent, - ValidationErrorComponent, - ], + imports: [CommonModule, ReactiveFormsModule, TextInputComponent, ValidationErrorComponent, ConvertForDataTestPipe], templateUrl: './text-editor.component.html', }) export class TextEditorComponent extends FormControlEditorAbstractComponent { diff --git a/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.ts b/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.ts index be0fc9b4f3..c7032ef03b 100644 --- a/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.ts +++ b/alfa-client/libs/design-component/src/lib/form/textarea-editor/textarea-editor.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; @@ -32,13 +32,7 @@ import { ValidationErrorComponent } from '../validation-error/validation-error.c @Component({ selector: 'ods-textarea-editor', standalone: true, - imports: [ - CommonModule, - ReactiveFormsModule, - TechSharedModule, - TextareaComponent, - ValidationErrorComponent, - ], + imports: [CommonModule, ReactiveFormsModule, TextareaComponent, ValidationErrorComponent, ConvertForDataTestPipe], templateUrl: './textarea-editor.component.html', }) export class TextareaEditorComponent extends FormControlEditorAbstractComponent { diff --git a/alfa-client/libs/design-system/run_helm_test.sh b/alfa-client/libs/design-system/run_helm_test.sh old mode 100755 new mode 100644 diff --git a/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-link-item/dropdown-menu-link-item.component.ts b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-link-item/dropdown-menu-link-item.component.ts index 52b3e46d6a..045191b56a 100644 --- a/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-link-item/dropdown-menu-link-item.component.ts +++ b/alfa-client/libs/design-system/src/lib/dropdown-menu/dropdown-menu-link-item/dropdown-menu-link-item.component.ts @@ -5,7 +5,7 @@ import { LinkComponent } from '../../link/link.component'; @Component({ selector: 'ods-dropdown-menu-link-item', standalone: true, - imports: [LinkComponent, OpenLinkIconComponent], + imports: [OpenLinkIconComponent, LinkComponent], styles: [':host {@apply first:mt-2}'], template: ` <ods-link [url]="url" class="bg-whitetext" [openInNewTab]="true"> <div class="flex items-center gap-2 px-4 py-3"> 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 120fa956bb..ffadf796c9 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -29,7 +29,7 @@ import { FormControl, ReactiveFormsModule } from '@angular/forms'; @Component({ selector: 'ods-checkbox', standalone: true, - imports: [CommonModule, ReactiveFormsModule, TechSharedModule], + imports: [CommonModule, ReactiveFormsModule, ConvertForDataTestPipe], template: ` <div> <div class="relative flex items-start gap-3 text-start"> diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts index 0972a93d2b..fee4fa492f 100644 --- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { faker } from '@faker-js/faker'; @@ -37,7 +37,7 @@ describe('FileUploadButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [FileUploadButtonComponent, TechSharedModule], + imports: [FileUploadButtonComponent, ConvertForDataTestPipe], }).compileComponents(); fixture = TestBed.createComponent(FileUploadButtonComponent); diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts index 8a1f968b27..3e111b19ad 100644 --- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts @@ -21,14 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, ElementRef, Input, ViewChild } from '@angular/core'; @Component({ selector: 'ods-file-upload-button', standalone: true, - imports: [CommonModule, TechSharedModule], + imports: [CommonModule, ConvertForDataTestPipe], styles: [':host {@apply inline-flex}'], templateUrl: './file-upload-button.component.html', }) diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts index 6d1f5b7eb8..974db9b7c5 100644 --- a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { convertForDataTest } from '@alfa-client/tech-shared'; +import { convertForDataTest, ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -37,7 +37,7 @@ describe('TextInputComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ReactiveFormsModule, TextInputComponent], + imports: [ReactiveFormsModule, TextInputComponent, ConvertForDataTestPipe], }).compileComponents(); fixture = TestBed.createComponent(TextInputComponent); diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts index 1b038667fb..5de77014fc 100644 --- a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { convertForDataTest, EMPTY_STRING, TechSharedModule } from '@alfa-client/tech-shared'; +import { convertForDataTest, ConvertForDataTestPipe, EMPTY_STRING } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -50,7 +50,7 @@ type TextInputVariants = VariantProps<typeof textInputVariants>; @Component({ selector: 'ods-text-input', standalone: true, - imports: [CommonModule, ReactiveFormsModule, TechSharedModule], + imports: [CommonModule, ReactiveFormsModule, ConvertForDataTestPipe], template: ` <div class="relative"> <label *ngIf="showLabel" [for]="id" class="text-md mb-2 block font-medium text-text"> diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts index 872bec5354..580f9cab71 100644 --- a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { convertForDataTest } from '@alfa-client/tech-shared'; +import { convertForDataTest, ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -37,7 +37,7 @@ describe('TextareaComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ReactiveFormsModule, TextareaComponent], + imports: [ReactiveFormsModule, TextareaComponent, ConvertForDataTestPipe], }).compileComponents(); fixture = TestBed.createComponent(TextareaComponent); diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts index d586185f3b..f3eb84af9d 100644 --- a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { EMPTY_STRING, TechSharedModule, convertForDataTest } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe, EMPTY_STRING, convertForDataTest } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, ElementRef, Input, ViewChild } from '@angular/core'; import { FormControl, ReactiveFormsModule } from '@angular/forms'; @@ -50,7 +50,7 @@ type TextareaVariants = VariantProps<typeof textareaVariants>; @Component({ selector: 'ods-textarea', standalone: true, - imports: [CommonModule, ReactiveFormsModule, TechSharedModule], + imports: [CommonModule, ReactiveFormsModule, ConvertForDataTestPipe], template: ` <div class="mt-2"> <label *ngIf="showLabel" [for]="id" class="text-md mb-2 block font-medium text-text"> diff --git a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts index 81485f802c..f4fd0fc39d 100644 --- a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts +++ b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { convertForDataTest, TechSharedModule } from '@alfa-client/tech-shared'; +import { convertForDataTest, ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture, Mock, mock } from '@alfa-client/test-utils'; import { importProvidersFrom } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; @@ -37,7 +37,7 @@ describe('NavItemComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [NavItemComponent, TechSharedModule], + imports: [NavItemComponent, ConvertForDataTestPipe], providers: [ { provide: Router, diff --git a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts index ac28440c04..a3bd688e81 100644 --- a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts +++ b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, HostBinding, Input } from '@angular/core'; import { RouterLink, RouterLinkActive } from '@angular/router'; @@ -29,13 +29,11 @@ import { RouterLink, RouterLinkActive } from '@angular/router'; @Component({ selector: 'ods-nav-item', standalone: true, - imports: [CommonModule, RouterLink, RouterLinkActive, TechSharedModule], + imports: [CommonModule, RouterLink, RouterLinkActive, ConvertForDataTestPipe], template: `<a [routerLink]="path" routerLinkActive="bg-selected-light border-selected" - class="flex min-h-8 items-center gap-2 rounded-2xl border border-transparent - px-4 py-2 outline-2 outline-offset-2 outline-focus hover:border-primary - focus-visible:border-background-200 focus-visible:outline" + class="flex min-h-8 items-center gap-2 rounded-2xl border border-transparent px-4 py-2 outline-2 outline-offset-2 outline-focus hover:border-primary focus-visible:border-background-200 focus-visible:outline" [attr.data-test-id]="'link-path-' + path | convertForDataTest" > <ng-content select="[icon]" /> diff --git a/alfa-client/libs/externe-fachstelle/src/lib/externe-fachstelle-list-item-container/externe-fachstelle-list-item/externe-fachstelle-list-item.component.ts b/alfa-client/libs/externe-fachstelle/src/lib/externe-fachstelle-list-item-container/externe-fachstelle-list-item/externe-fachstelle-list-item.component.ts index 51d26eecb5..274c1b9090 100644 --- a/alfa-client/libs/externe-fachstelle/src/lib/externe-fachstelle-list-item-container/externe-fachstelle-list-item/externe-fachstelle-list-item.component.ts +++ b/alfa-client/libs/externe-fachstelle/src/lib/externe-fachstelle-list-item-container/externe-fachstelle-list-item/externe-fachstelle-list-item.component.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { StateResource } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { SpinnerComponent } from '@alfa-client/ui'; import { ExterneFachstelleResource } from '@alfa-client/zustaendige-stelle-shared'; import { Component, Input } from '@angular/core'; import { ExternalUnitIconComponent, PublicAdministrationIconComponent } from '@ods/system'; @@ -30,7 +30,7 @@ import { ExternalUnitIconComponent, PublicAdministrationIconComponent } from '@o @Component({ selector: 'alfa-externe-fachstelle-list-item', standalone: true, - imports: [PublicAdministrationIconComponent, ExternalUnitIconComponent, UiModule], + imports: [PublicAdministrationIconComponent, ExternalUnitIconComponent, SpinnerComponent], templateUrl: './externe-fachstelle-list-item.component.html', }) export class ExterneFachstelleListItemComponent { diff --git a/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.spec.ts b/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.spec.ts index 0bdb21fd38..8aab319a28 100644 --- a/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.spec.ts +++ b/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.spec.ts @@ -1,3 +1,4 @@ +import { HasLinkPipe } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; @@ -17,7 +18,7 @@ describe('ForwardByOzgcloudButtonContainerComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ForwardByOzgcloudButtonContainerComponent], + imports: [ForwardByOzgcloudButtonContainerComponent, HasLinkPipe], declarations: [ MockComponent(ButtonWithSpinnerComponent), MockComponent(ForwardVorgangIconComponent), diff --git a/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.ts b/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.ts index b00da7ddb3..f5fbad7ed1 100644 --- a/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.ts +++ b/alfa-client/libs/forwarding/src/lib/forward-by-ozgcloud-button-container/forward-by-ozgcloud-button-container.component.ts @@ -1,4 +1,4 @@ -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; @@ -8,7 +8,7 @@ import { ForwardVorgangIconComponent, TooltipDirective } from '@ods/system'; @Component({ selector: 'alfa-forward-by-ozgcloud-button-container', standalone: true, - imports: [CommonModule, TechSharedModule, ButtonWithSpinnerComponent, ForwardVorgangIconComponent, TooltipDirective], + imports: [CommonModule, ButtonWithSpinnerComponent, ForwardVorgangIconComponent, TooltipDirective, HasLinkPipe], templateUrl: './forward-by-ozgcloud-button-container.component.html', styles: [':host {@apply empty:hidden}'], }) diff --git a/alfa-client/libs/forwarding/src/lib/forwarding.module.ts b/alfa-client/libs/forwarding/src/lib/forwarding.module.ts index 56ba3f3ad8..973cf7b7a1 100644 --- a/alfa-client/libs/forwarding/src/lib/forwarding.module.ts +++ b/alfa-client/libs/forwarding/src/lib/forwarding.module.ts @@ -21,12 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; import { CommandSharedModule } from '@alfa-client/command-shared'; import { ForwardingSharedModule } from '@alfa-client/forwarding-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { FormatDateWithTimePipe, HasLinkPipe, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; +import { + ExpansionPanelComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudTextEditorComponent, + SpinnerComponent, +} from '@alfa-client/ui'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatIcon } from '@angular/material/icon'; import { VorgangForwardFormComponent } from './vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component'; import { VorgangForwardFormularComponent } from './vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-formular.component'; import { VorgangForwardingContainerComponent } from './vorgang-forwarding-container/vorgang-forwarding-container.component'; @@ -35,7 +42,20 @@ import { VorgangForwardingInfoComponent } from './vorgang-forwarding-container/v import { VorgangForwardZustellenContainerComponent } from './vorgang-forwarding-zustellen-container/vorgang-forward-zustellen-container.component'; @NgModule({ - imports: [CommonModule, TechSharedModule, ForwardingSharedModule, CommandSharedModule, UiModule], + imports: [ + CommonModule, + ForwardingSharedModule, + CommandSharedModule, + OzgcloudTextEditorComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + SpinnerComponent, + FormatDateWithTimePipe, + MatIcon, + HasLinkPipe, + ToEmbeddedResourcesPipe, + ExpansionPanelComponent, + ReactiveFormsModule, + ], declarations: [ VorgangForwardZustellenContainerComponent, VorgangForwardingContainerComponent, diff --git a/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.spec.ts b/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.spec.ts index 19d141bc8d..d4de767de8 100644 --- a/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.spec.ts +++ b/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.spec.ts @@ -21,15 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { mock } from '@alfa-client/test-utils'; +import { OzgcloudStrokedButtonWithSpinnerComponent, OzgcloudTextEditorComponent } from '@alfa-client/ui'; +import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { mock } from '@alfa-client/test-utils'; -import { OzgcloudStrokedButtonWithSpinnerComponent, TextEditorComponent } from '@alfa-client/ui'; -import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { MockComponent } from 'ng-mocks'; import { VorgangForwardFormComponent } from './vorgang-forward-form.component'; @@ -54,7 +54,7 @@ describe('VorgangForwardFormComponent', () => { VorgangForwardFormComponent, MatIcon, MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), - MockComponent(TextEditorComponent), + MockComponent(OzgcloudTextEditorComponent), ], imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, BrowserAnimationsModule], providers: [ @@ -112,10 +112,7 @@ describe('VorgangForwardFormComponent', () => { component.patchEmail(); - expect(formService.patchField).toHaveBeenCalledWith( - 'email', - vorgangWithEingang.eingang.zustaendigeStelle.email, - ); + expect(formService.patchField).toHaveBeenCalledWith('email', vorgangWithEingang.eingang.zustaendigeStelle.email); }); }); }); diff --git a/alfa-client/libs/hint-shared/src/lib/hint-shared.module.ts b/alfa-client/libs/hint-shared/src/lib/hint-shared.module.ts index e0304dd1d6..482c311a15 100644 --- a/alfa-client/libs/hint-shared/src/lib/hint-shared.module.ts +++ b/alfa-client/libs/hint-shared/src/lib/hint-shared.module.ts @@ -21,10 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ApiRootModule } from '@alfa-client/api-root-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { ApiRootModule } from '@alfa-client/api-root-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; import { EffectsModule } from '@ngrx/effects'; import { StoreModule } from '@ngrx/store'; import { HintEffects } from './+state/hint.effects'; @@ -38,7 +37,6 @@ import { HintService } from './hint.service'; CommonModule, StoreModule.forFeature(HINT_FEATURE_KEY, reducer), EffectsModule.forFeature([HintEffects]), - TechSharedModule, ApiRootModule, ], providers: [HintService, HintFacade, HintRepository], diff --git a/alfa-client/libs/hint/src/lib/hint.module.ts b/alfa-client/libs/hint/src/lib/hint.module.ts index 37fa3fb082..d72695756d 100644 --- a/alfa-client/libs/hint/src/lib/hint.module.ts +++ b/alfa-client/libs/hint/src/lib/hint.module.ts @@ -21,16 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; import { ApiRootModule } from '@alfa-client/api-root-shared'; import { HintSharedModule } from '@alfa-client/hint-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; import { HintContainerComponent } from './hint-container/hint-container.component'; import { UserNoOrganisationsEinheitIdHintComponent } from './hint-container/user-no-organisations-einheit-id-hint/user-no-organisations-einheit-id-hint.component'; @NgModule({ - imports: [CommonModule, TechSharedModule, ApiRootModule, HintSharedModule], + imports: [CommonModule, ApiRootModule, HintSharedModule], declarations: [UserNoOrganisationsEinheitIdHintComponent, HintContainerComponent], exports: [HintContainerComponent], }) diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid-status/historie-item-bescheid-status.component.spec.ts b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid-status/historie-item-bescheid-status.component.spec.ts index a47331f870..cea37b23a9 100644 --- a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid-status/historie-item-bescheid-status.component.spec.ts +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-bescheid/historie-item-bescheid-status/historie-item-bescheid-status.component.spec.ts @@ -42,7 +42,8 @@ describe('HistorieItemBescheidStatusComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [HistorieItemBescheidStatusComponent, ConvertToBooleanPipe, FormatFullDatePipe], + imports: [ConvertToBooleanPipe, FormatFullDatePipe], + declarations: [HistorieItemBescheidStatusComponent], }).compileComponents(); fixture = TestBed.createComponent(HistorieItemBescheidStatusComponent); diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-vorgang-created/historie-item-vorgang-created.component.spec.ts b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-vorgang-created/historie-item-vorgang-created.component.spec.ts index 97a6910287..1fb501bf07 100644 --- a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-vorgang-created/historie-item-vorgang-created.component.spec.ts +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-vorgang-created/historie-item-vorgang-created.component.spec.ts @@ -21,12 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { registerLocaleData } from '@angular/common'; -import localeDe from '@angular/common/locales/de'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormatDateWithTimePipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { HistorieItemVorgangCreatedComponent } from './historie-item-vorgang-created.component'; @@ -43,7 +43,8 @@ describe('HistorieItemVorgangCreatedComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [FormatDateWithTimePipe, HistorieItemVorgangCreatedComponent], + imports: [FormatDateWithTimePipe], + declarations: [HistorieItemVorgangCreatedComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/historie/src/lib/historie.module.ts b/alfa-client/libs/historie/src/lib/historie.module.ts index 7c064391c2..c9675a3642 100644 --- a/alfa-client/libs/historie/src/lib/historie.module.ts +++ b/alfa-client/libs/historie/src/lib/historie.module.ts @@ -23,11 +23,20 @@ */ import { CommandSharedModule } from '@alfa-client/command-shared'; import { HistorieSharedModule } from '@alfa-client/historie-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { + ConvertToBooleanPipe, + FormatDateWithTimePipe, + FormatToPrettyDatePipe, + HasLinkPipe, + ToEmbeddedResourcesPipe, +} from '@alfa-client/tech-shared'; +import { AccordionComponent, AppIconComponent, SpinnerComponent } from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { MatExpansionPanel, MatExpansionPanelTitle } from '@angular/material/expansion'; +import { MatIcon } from '@angular/material/icon'; +import { FormatFullDatePipe } from '../../../tech-shared/src/lib/pipe/format-full-date.pipe'; import { HistorieContainerComponent } from './historie-container/historie-container.component'; import { ExpansionPanelWithUserComponent } from './historie-container/historie-list/expansion-panel-with-user/expansion-panel-with-user.component'; import { HistorieItemAktenzeichenComponent } from './historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component'; @@ -52,11 +61,21 @@ import { HistorieListComponent } from './historie-container/historie-list/histor @NgModule({ imports: [ CommonModule, - TechSharedModule, HistorieSharedModule, UserProfileModule, - UiModule, CommandSharedModule, + MatExpansionPanel, + MatExpansionPanelTitle, + MatIcon, + ConvertToBooleanPipe, + FormatFullDatePipe, + HasLinkPipe, + AppIconComponent, + FormatDateWithTimePipe, + FormatToPrettyDatePipe, + SpinnerComponent, + AccordionComponent, + ToEmbeddedResourcesPipe, ], declarations: [ HistorieContainerComponent, diff --git a/alfa-client/libs/kommentar-shared/src/lib/kommentar-shared.module.ts b/alfa-client/libs/kommentar-shared/src/lib/kommentar-shared.module.ts index f87a70b3cb..de0954a3f8 100644 --- a/alfa-client/libs/kommentar-shared/src/lib/kommentar-shared.module.ts +++ b/alfa-client/libs/kommentar-shared/src/lib/kommentar-shared.module.ts @@ -21,12 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; @NgModule({ - imports: [CommonModule, TechSharedModule, VorgangSharedModule], + imports: [CommonModule, VorgangSharedModule], }) export class KommentarSharedModule {} diff --git a/alfa-client/libs/kommentar/src/lib/kommentar.module.ts b/alfa-client/libs/kommentar/src/lib/kommentar.module.ts index 978a2bf16d..4c9da054be 100644 --- a/alfa-client/libs/kommentar/src/lib/kommentar.module.ts +++ b/alfa-client/libs/kommentar/src/lib/kommentar.module.ts @@ -21,14 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; import { BinaryFileModule } from '@alfa-client/binary-file'; import { KommentarSharedModule } from '@alfa-client/kommentar-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { ConvertForDataTestPipe, FormatDateWithTimePipe, HasLinkPipe } from '@alfa-client/tech-shared'; +import { ExpansionPanelComponent, OzgcloudStrokedButtonWithSpinnerComponent, TextAreaEditorComponent } from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { KommentarFormComponent } from './kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component'; import { KommentarListInVorgangContainerComponent } from './kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component'; import { KommentarListInVorgangComponent } from './kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-in-vorgang.component'; @@ -38,11 +39,16 @@ import { KommentarListItemInVorgangComponent } from './kommentar-list-in-vorgang imports: [ CommonModule, VorgangSharedModule, - UiModule, KommentarSharedModule, - TechSharedModule, UserProfileModule, BinaryFileModule, + ReactiveFormsModule, + TextAreaEditorComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + ConvertForDataTestPipe, + HasLinkPipe, + FormatDateWithTimePipe, + ExpansionPanelComponent, ], declarations: [ KommentarListInVorgangContainerComponent, diff --git a/alfa-client/libs/loesch-anforderung/src/lib/loesch-anforderung.module.ts b/alfa-client/libs/loesch-anforderung/src/lib/loesch-anforderung.module.ts index 4841c7b2b2..ff527cfc47 100644 --- a/alfa-client/libs/loesch-anforderung/src/lib/loesch-anforderung.module.ts +++ b/alfa-client/libs/loesch-anforderung/src/lib/loesch-anforderung.module.ts @@ -22,8 +22,8 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { LoeschAnforderungSharedModule } from '@alfa-client/loesch-anforderung-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; @@ -45,9 +45,10 @@ import { LoeschenAnfordernButtonComponent } from './loeschen-anfordern-button-co imports: [ CommonModule, LoeschAnforderungSharedModule, - TechSharedModule, - UiModule, VorgangSharedModule, + OzgcloudStrokedButtonWithSpinnerComponent, + IconButtonWithSpinnerComponent, + HasLinkPipe, RequestVorgangDeletionIconComponent, ButtonWithSpinnerComponent, DeleteVorgangFinallyIconComponent, diff --git a/alfa-client/libs/navigation-shared/src/lib/navigation-shared.module.ts b/alfa-client/libs/navigation-shared/src/lib/navigation-shared.module.ts index b596ca2b99..16fde28370 100644 --- a/alfa-client/libs/navigation-shared/src/lib/navigation-shared.module.ts +++ b/alfa-client/libs/navigation-shared/src/lib/navigation-shared.module.ts @@ -23,7 +23,6 @@ */ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { TechSharedModule } from '@alfa-client/tech-shared'; import { EffectsModule } from '@ngrx/effects'; import { StoreModule } from '@ngrx/store'; import { NavigationEffects } from './+state/navigation.effects'; @@ -36,7 +35,6 @@ import { NavigationService } from './navigation.service'; CommonModule, StoreModule.forFeature(fromNavigation.NAVIGATION_FEATURE_KEY, fromNavigation.reducer), EffectsModule.forFeature([NavigationEffects]), - TechSharedModule, ], providers: [NavigationFacade, NavigationService], }) diff --git a/alfa-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts b/alfa-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts index 34bfb94cc2..3566cb04a6 100644 --- a/alfa-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts +++ b/alfa-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts @@ -22,7 +22,6 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { AccessibilityButtonComponent } from '@alfa-client/common'; -import { UiModule } from '@alfa-client/ui'; import { HelpMenuComponent } from '@alfa-client/user-assistance'; import { UserProfileInHeaderContainerComponent } from '@alfa-client/user-profile'; import { UserSettingsContainerComponent } from '@alfa-client/user-settings'; @@ -38,7 +37,6 @@ describe('HeaderComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [UiModule], declarations: [ HeaderComponent, MockComponent(HeaderLogoComponent), diff --git a/alfa-client/libs/navigation/src/lib/navigation.module.spec.ts b/alfa-client/libs/navigation/src/lib/navigation.module.spec.ts index 8cb65e6da4..a4f111d64e 100644 --- a/alfa-client/libs/navigation/src/lib/navigation.module.spec.ts +++ b/alfa-client/libs/navigation/src/lib/navigation.module.spec.ts @@ -24,7 +24,7 @@ import { TestBed } from '@angular/core/testing'; import { NavigationModule } from './navigation.module'; -describe('UiModule', () => { +describe('NavigationModule', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [NavigationModule], diff --git a/alfa-client/libs/navigation/src/lib/navigation.module.ts b/alfa-client/libs/navigation/src/lib/navigation.module.ts index 67cd2f216c..37ee717862 100644 --- a/alfa-client/libs/navigation/src/lib/navigation.module.ts +++ b/alfa-client/libs/navigation/src/lib/navigation.module.ts @@ -22,7 +22,6 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { AccessibilityButtonComponent } from '@alfa-client/common'; -import { UiModule } from '@alfa-client/ui'; import { UserAssistanceModule } from '@alfa-client/user-assistance'; import { UserProfileModule } from '@alfa-client/user-profile'; import { UserSettingsModule } from '@alfa-client/user-settings'; @@ -38,7 +37,6 @@ import { HeaderComponent } from './header-container/header/header.component'; declarations: [HeaderComponent, HeaderContainerComponent, HeaderLogoComponent], imports: [ CommonModule, - UiModule, RouterModule, VorgangSharedUiModule, UserProfileModule, diff --git a/alfa-client/libs/organisations-einheit/src/lib/organisations-einheit-list-item-container/organisations-einheit-list-item/organisations-einheit-list-item.component.ts b/alfa-client/libs/organisations-einheit/src/lib/organisations-einheit-list-item-container/organisations-einheit-list-item/organisations-einheit-list-item.component.ts index f4fc21b66b..05558ae4b7 100644 --- a/alfa-client/libs/organisations-einheit/src/lib/organisations-einheit-list-item-container/organisations-einheit-list-item/organisations-einheit-list-item.component.ts +++ b/alfa-client/libs/organisations-einheit/src/lib/organisations-einheit-list-item-container/organisations-einheit-list-item/organisations-einheit-list-item.component.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { StateResource } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { SpinnerComponent } from '@alfa-client/ui'; import { OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared'; import { Component, Input } from '@angular/core'; import { ExternalUnitIconComponent, PublicAdministrationIconComponent } from '@ods/system'; @@ -30,7 +30,7 @@ import { ExternalUnitIconComponent, PublicAdministrationIconComponent } from '@o @Component({ selector: 'alfa-organisations-einheit-list-item', standalone: true, - imports: [ExternalUnitIconComponent, PublicAdministrationIconComponent, UiModule], + imports: [ExternalUnitIconComponent, PublicAdministrationIconComponent, SpinnerComponent], templateUrl: './organisations-einheit-list-item.component.html', }) export class OrganisationsEinheitListItemComponent { diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.spec.ts index c3fd2f97ae..5b5beec8bf 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.spec.ts +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.spec.ts @@ -29,9 +29,9 @@ import { FileUploadComponent, IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudTextEditorComponent, SpinnerComponent, TextAreaEditorComponent, - TextEditorComponent, } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; @@ -58,10 +58,7 @@ describe('PostfachMailFormComponent', () => { ...mock(PostfachService), getSettings: jest.fn().mockReturnValue(of(createPostfachSettings())), }; - const formService: PostfachMailFormservice = new PostfachMailFormservice( - new FormBuilder(), - useFromMock(postfachService), - ); + const formService: PostfachMailFormservice = new PostfachMailFormservice(new FormBuilder(), useFromMock(postfachService)); const dialogService: Mock<DialogService> = mock(DialogService); beforeEach(async () => { @@ -69,7 +66,7 @@ describe('PostfachMailFormComponent', () => { declarations: [ PostfachMailFormComponent, MockComponent(TextAreaEditorComponent), - MockComponent(TextEditorComponent), + MockComponent(OzgcloudTextEditorComponent), MockComponent(IconButtonWithSpinnerComponent), MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), MockComponent(PostfachNachrichtReplyEditorContainerComponent), diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-date/postfach-mail-date.component.spec.ts b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-date/postfach-mail-date.component.spec.ts index 5a48882242..ca8fd42b29 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-date/postfach-mail-date.component.spec.ts +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-list-container/postfach-mail-list/postfach-mail/postfach-mail-date/postfach-mail-date.component.spec.ts @@ -21,12 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { registerLocaleData } from '@angular/common'; -import localeDe from '@angular/common/locales/de'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Direction } from '@alfa-client/postfach-shared'; import { FormatDateWithTimePipe, HasLinkPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; +import { registerLocaleData } from '@angular/common'; +import localeDe from '@angular/common/locales/de'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { createPostfachMailResource } from 'libs/postfach-shared/test/postfach'; import { PostfachMailDateComponent } from './postfach-mail-date.component'; @@ -41,7 +41,8 @@ describe('PostfachMailDateComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [PostfachMailDateComponent, HasLinkPipe, FormatDateWithTimePipe], + imports: [HasLinkPipe, FormatDateWithTimePipe], + declarations: [PostfachMailDateComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/postfach/src/lib/postfach.module.ts b/alfa-client/libs/postfach/src/lib/postfach.module.ts index e206c35d6c..2a6fe82af2 100644 --- a/alfa-client/libs/postfach/src/lib/postfach.module.ts +++ b/alfa-client/libs/postfach/src/lib/postfach.module.ts @@ -23,11 +23,24 @@ */ import { BinaryFileModule } from '@alfa-client/binary-file'; import { ON_PAGE, PostfachSharedModule } from '@alfa-client/postfach-shared'; -import { UiModule } from '@alfa-client/ui'; +import { ConvertForDataTestPipe, FormatDateWithTimePipe, HasLinkPipe, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared'; +import { + BackButtonComponent, + CheckboxEnumEditorComponent, + IconButtonWithSpinnerComponent, + OzgcloudIconComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudTextEditorComponent, + SpinnerComponent, + SubnavigationComponent, + TextAreaEditorComponent, +} from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatIcon } from '@angular/material/icon'; import { RouterModule, Routes } from '@angular/router'; import { ButtonComponent, MailboxIconComponent, PlusIconComponent, TooltipDirective } from '@ods/system'; import { PostfachMailButtonContainerComponent } from './postfach-mail-button-container/postfach-mail-button-container.component'; @@ -63,11 +76,25 @@ const routes: Routes = [ imports: [ CommonModule, RouterModule.forChild(routes), - UiModule, PostfachSharedModule, UserProfileModule, VorgangSharedUiModule, BinaryFileModule, + OzgcloudStrokedButtonWithSpinnerComponent, + HasLinkPipe, + CheckboxEnumEditorComponent, + ReactiveFormsModule, + OzgcloudTextEditorComponent, + TextAreaEditorComponent, + MatIcon, + OzgcloudIconComponent, + FormatDateWithTimePipe, + SpinnerComponent, + ToEmbeddedResourcesPipe, + ConvertForDataTestPipe, + SubnavigationComponent, + BackButtonComponent, + IconButtonWithSpinnerComponent, ButtonComponent, PlusIconComponent, MailboxIconComponent, diff --git a/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts index c595c6eed1..33ef83703d 100644 --- a/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts +++ b/alfa-client/libs/resource-redirect-shared/src/lib/resource-redirect-shared.module.ts @@ -21,10 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; import { NgModule } from '@angular/core'; -@NgModule({ - imports: [TechSharedModule], -}) +@NgModule({}) export class ResourceRedirectSharedModule {} diff --git a/alfa-client/libs/tech-shared/src/index.ts b/alfa-client/libs/tech-shared/src/index.ts index f2c01ec546..6fbc4e5294 100644 --- a/alfa-client/libs/tech-shared/src/index.ts +++ b/alfa-client/libs/tech-shared/src/index.ts @@ -29,6 +29,7 @@ export * from './lib/error/error.handler'; export * from './lib/error/error.util'; export * from './lib/form.util'; export * from './lib/http.util'; +export * from './lib/injector/injector.service'; export * from './lib/keyboard.util'; export * from './lib/message-code'; export * from './lib/ngrx/actions'; @@ -57,7 +58,6 @@ export * from './lib/resource/resource.rxjs.operator'; export * from './lib/resource/resource.service'; export * from './lib/resource/resource.util'; export * from './lib/service/formservice.abstract'; -export * from './lib/tech-shared.module'; export * from './lib/tech.model'; export * from './lib/tech.util'; export * from './lib/validation/tech.validation.util'; diff --git a/alfa-client/libs/tech-shared/src/lib/decorator/error.decorator.util.ts b/alfa-client/libs/tech-shared/src/lib/decorator/error.decorator.util.ts index 669b687239..f02936d4fb 100644 --- a/alfa-client/libs/tech-shared/src/lib/decorator/error.decorator.util.ts +++ b/alfa-client/libs/tech-shared/src/lib/decorator/error.decorator.util.ts @@ -22,10 +22,10 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { HttpErrorHandler } from '../error/error.handler'; -import { TechSharedModule } from '../tech-shared.module'; +import { InjectorService } from '../injector/injector.service'; export function injectHttpErrorHandler(): HttpErrorHandler { - return TechSharedModule.injector.get(HttpErrorHandler); + return InjectorService.getInjector().get(HttpErrorHandler); } export function enableInterceptorDefaultHandling(httpErrorHandler: HttpErrorHandler): void { diff --git a/alfa-client/libs/tech-shared/src/lib/injector/injector.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/injector/injector.service.spec.ts new file mode 100644 index 0000000000..1833f3fd12 --- /dev/null +++ b/alfa-client/libs/tech-shared/src/lib/injector/injector.service.spec.ts @@ -0,0 +1,30 @@ +import { Injector } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import { InjectorService } from './injector.service'; + +describe('InjectorService', () => { + let injector: Injector; + let injectorService: InjectorService; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [InjectorService, { provide: Injector, useValue: {} }], + }); + injector = TestBed.inject(Injector); + injectorService = TestBed.inject(InjectorService); + }); + + it('should be created', () => { + expect(injectorService).toBeTruthy(); + }); + + it('should set and get the injector', () => { + expect(InjectorService.getInjector()).toBe(injector); + }); + + describe('getInjector', () => { + it('should return the injector', () => { + expect(InjectorService.getInjector()).toBe(injector); + }); + }); +}); diff --git a/alfa-client/libs/tech-shared/src/lib/injector/injector.service.ts b/alfa-client/libs/tech-shared/src/lib/injector/injector.service.ts new file mode 100644 index 0000000000..eb2ad9d101 --- /dev/null +++ b/alfa-client/libs/tech-shared/src/lib/injector/injector.service.ts @@ -0,0 +1,16 @@ +import { Injectable, Injector } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class InjectorService { + private static injector: Injector; + + constructor(injector: Injector) { + InjectorService.injector = injector; + } + + public static getInjector(): Injector { + return InjectorService.injector; + } +} diff --git a/alfa-client/libs/tech-shared/src/lib/keyboard.util.spec.ts b/alfa-client/libs/tech-shared/src/lib/keyboard.util.spec.ts index 10b46493b6..92ba5f3e69 100644 --- a/alfa-client/libs/tech-shared/src/lib/keyboard.util.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/keyboard.util.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { createKeydownKeyboardEvent } from '../../../test-utils/src/lib/keyboard'; +import { createKeydownKeyboardEvent } from 'libs/test-utils/src/lib/keyboard'; import { ARROW_DOWN_KEY, ARROW_UP_KEY, diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts index 20392c34d7..e57e531260 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts @@ -25,7 +25,10 @@ import { ApiError, EMPTY_STRING, getMessageForIssue, Issue } from '@alfa-client/ import { Pipe, PipeTransform } from '@angular/core'; import { isNil } from 'lodash-es'; -@Pipe({ name: 'convertApiErrorToErrorMessages' }) +@Pipe({ + name: 'convertApiErrorToErrorMessages', + standalone: true, +}) export class ConvertApiErrorToErrorMessagesPipe implements PipeTransform { transform(value: ApiError) { if (isNil(value)) { diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/convert-for-data-test.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/convert-for-data-test.pipe.ts index b187390164..dd6bb93c51 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/convert-for-data-test.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/convert-for-data-test.pipe.ts @@ -25,7 +25,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { isNil } from 'lodash-es'; import { convertForDataTest } from '../tech.util'; -@Pipe({ name: 'convertForDataTest' }) +@Pipe({ + name: 'convertForDataTest', + standalone: true, +}) export class ConvertForDataTestPipe implements PipeTransform { transform(value: string): string { return isNil(value) ? null : convertForDataTest(value); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/convert-problem-detail-to-error-messages.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/convert-problem-detail-to-error-messages.pipe.ts index 24f50446e2..7ce05836fe 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/convert-problem-detail-to-error-messages.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/convert-problem-detail-to-error-messages.pipe.ts @@ -27,14 +27,15 @@ import { InvalidParam, ProblemDetail } from '../tech.model'; import { EMPTY_STRING } from '../tech.util'; import { getMessageForInvalidParam } from '../validation/tech.validation.util'; -@Pipe({ name: 'convertProblemDetailToErrorMessages' }) +@Pipe({ + name: 'convertProblemDetailToErrorMessages', + standalone: true, +}) export class ConvertProblemDetailToErrorMessagesPipe implements PipeTransform { transform(value: ProblemDetail) { if (isNil(value)) { return []; } - return value.invalidParams.map((invalidParam: InvalidParam) => - getMessageForInvalidParam(EMPTY_STRING, invalidParam), - ); + return value.invalidParams.map((invalidParam: InvalidParam) => getMessageForInvalidParam(EMPTY_STRING, invalidParam)); } } diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/convert-to-boolean.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/convert-to-boolean.pipe.ts index daac6384c2..ad5da3e078 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/convert-to-boolean.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/convert-to-boolean.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { convertToBoolean } from '../tech.util'; -@Pipe({ name: 'convertToBoolean' }) +@Pipe({ + name: 'convertToBoolean', + standalone: true, +}) export class ConvertToBooleanPipe implements PipeTransform { public transform(booleanStr: string): boolean { return convertToBoolean(booleanStr); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/enum-to-label.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/enum-to-label.pipe.ts index 194e92483d..38033a7182 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/enum-to-label.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/enum-to-label.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { isNil } from 'lodash-es'; -@Pipe({ name: 'enumToLabel' }) +@Pipe({ + name: 'enumToLabel', + standalone: true, +}) export class EnumToLabelPipe implements PipeTransform { transform(enumValue: any, enumLabel: any) { return isNil(enumValue) || isNil(enumLabel) ? null : enumLabel[enumValue]; diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/file-size-plain.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/file-size-plain.pipe.ts index 1863262788..d18d294fa3 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/file-size-plain.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/file-size-plain.pipe.ts @@ -23,7 +23,10 @@ */ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'fileSizePlain' }) +@Pipe({ + name: 'fileSizePlain', + standalone: true, +}) export class FileSizePlainPipe implements PipeTransform { readonly kB = 1024; readonly MB = Math.pow(this.kB, 2); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/file-size.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/file-size.pipe.ts index 327058ea9c..db4f547063 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/file-size.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/file-size.pipe.ts @@ -23,7 +23,10 @@ */ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'fileSize' }) +@Pipe({ + name: 'fileSize', + standalone: true, +}) export class FileSizePipe implements PipeTransform { readonly kB = 1024; readonly MB = Math.pow(this.kB, 2); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/format-date-with-time.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/format-date-with-time.pipe.ts index fc33dcc8a3..7d95383257 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/format-date-with-time.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/format-date-with-time.pipe.ts @@ -24,11 +24,12 @@ import { Pipe, PipeTransform } from '@angular/core'; import { formatFullDateWithTimeAndDay, formatFullDateWithTimeWithoutSeconds } from '../date.util'; -@Pipe({ name: 'formatDateWithTimePipe' }) +@Pipe({ + name: 'formatDateWithTimePipe', + standalone: true, +}) export class FormatDateWithTimePipe implements PipeTransform { transform(date: Date, withSeconds: boolean = true): string { - return withSeconds ? - formatFullDateWithTimeAndDay(date) - : formatFullDateWithTimeWithoutSeconds(date); + return withSeconds ? formatFullDateWithTimeAndDay(date) : formatFullDateWithTimeWithoutSeconds(date); } } diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/format-date-without-year-with-time.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/format-date-without-year-with-time.pipe.ts index 42694b05a7..f2835bd7e6 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/format-date-without-year-with-time.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/format-date-without-year-with-time.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { formatDateWithoutYearWithTime } from '../date.util'; -@Pipe({ name: 'formatDateWithoutYearWithTime' }) +@Pipe({ + name: 'formatDateWithoutYearWithTime', + standalone: true, +}) export class FormatDateWithoutYearWithTimePipe implements PipeTransform { transform(date: Date): string { return formatDateWithoutYearWithTime(date); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/format-full-date.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/format-full-date.pipe.ts index 250167b0bc..c9bec878f1 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/format-full-date.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/format-full-date.pipe.ts @@ -25,7 +25,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { isString } from 'lodash-es'; import { formatFullDate } from '../date.util'; -@Pipe({ name: 'formatFullDatePipe' }) +@Pipe({ + name: 'formatFullDatePipe', + standalone: true, +}) export class FormatFullDatePipe implements PipeTransform { transform(date: Date | string): string { date = isString(date) ? new Date(date) : date; diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/format-to-pretty-date.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/format-to-pretty-date.pipe.ts index 054f4f8b9c..0d16ccd7a7 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/format-to-pretty-date.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/format-to-pretty-date.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { formatToPrettyDate } from '../date.util'; -@Pipe({ name: 'formatToPrettyDate' }) +@Pipe({ + name: 'formatToPrettyDate', + standalone: true, +}) export class FormatToPrettyDatePipe implements PipeTransform { transform(date: Date): string { return formatToPrettyDate(date); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.ts index c41e3024cd..d936124c61 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/get-url.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { Resource, ResourceUri, getUrl } from '@ngxp/rest'; -@Pipe({ name: 'getUrl' }) +@Pipe({ + name: 'getUrl', + standalone: true, +}) export class GetUrlPipe implements PipeTransform { transform(resource: Resource, link: string): ResourceUri { return getUrl(resource, link); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/has-any-link.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/has-any-link.pipe.ts index 1bf5a803a8..ec9083014c 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/has-any-link.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/has-any-link.pipe.ts @@ -26,7 +26,10 @@ import { Resource } from '@ngxp/rest'; import { LinkRelationName } from '../resource/resource.model'; import { hasAnyLink } from '../tech.util'; -@Pipe({ name: 'hasAnyLink' }) +@Pipe({ + name: 'hasAnyLink', + standalone: true, +}) export class HasAnyLinkPipe implements PipeTransform { transform(resource: Resource, ...links: LinkRelationName[]): boolean { return hasAnyLink(resource, ...links); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/has-link.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/has-link.pipe.ts index d2d15cb1ea..34abe1a2f2 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/has-link.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/has-link.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { Resource, hasLink } from '@ngxp/rest'; -@Pipe({ name: 'hasLink' }) +@Pipe({ + name: 'hasLink', + standalone: true, +}) export class HasLinkPipe implements PipeTransform { transform(resource: Resource, link: string): boolean { return hasLink(resource, link); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/not-has-any-link.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/not-has-any-link.pipe.ts index 19d64e5599..b04c9a7b61 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/not-has-any-link.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/not-has-any-link.pipe.ts @@ -26,7 +26,10 @@ import { Resource } from '@ngxp/rest'; import { LinkRelationName } from '../resource/resource.model'; import { notHasAnyLink } from '../tech.util'; -@Pipe({ name: 'notHasAnyLink' }) +@Pipe({ + name: 'notHasAnyLink', + standalone: true, +}) export class NotHasAnyLinkPipe implements PipeTransform { transform(resource: Resource, ...links: LinkRelationName[]): boolean { return notHasAnyLink(resource, ...links); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/not-has-link.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/not-has-link.pipe.ts index 8c8f879b03..018d49e877 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/not-has-link.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/not-has-link.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { Resource, hasLink } from '@ngxp/rest'; -@Pipe({ name: 'notHasLink' }) +@Pipe({ + name: 'notHasLink', + standalone: true, +}) export class NotHasLinkPipe implements PipeTransform { transform(resource: Resource, link: string): boolean { return !hasLink(resource, link); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/to-embedded-resource.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/to-embedded-resource.pipe.ts index 537bd91348..dbb7025753 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/to-embedded-resource.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/to-embedded-resource.pipe.ts @@ -28,7 +28,10 @@ import { LinkRelationName } from '../resource/resource.model'; import { ListResource } from '../resource/resource.util'; import { EMPTY_ARRAY } from '../tech.util'; -@Pipe({ name: 'toEmbeddedResources' }) +@Pipe({ + name: 'toEmbeddedResources', + standalone: true, +}) export class ToEmbeddedResourcesPipe implements PipeTransform { transform(listResource: ListResource, linkRel: LinkRelationName): Resource[] { if (isNil(listResource) || isNil(linkRel)) return EMPTY_ARRAY; diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/to-resource-uri.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/to-resource-uri.pipe.ts index d102cc2012..9ac1e3aaa4 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/to-resource-uri.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/to-resource-uri.pipe.ts @@ -26,7 +26,10 @@ import { Resource, ResourceUri } from '@ngxp/rest'; import { isNil } from 'lodash-es'; import { toResourceUri } from '../resource/resource.util'; -@Pipe({ name: 'toResourceUri' }) +@Pipe({ + name: 'toResourceUri', + standalone: true, +}) export class ToResourceUriPipe implements PipeTransform { transform(resource: Resource, linkRel?: string): ResourceUri { if (isNil(resource)) { diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light-tooltip.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light-tooltip.pipe.ts index f0e66e4fd8..ab1c286a7c 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light-tooltip.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light-tooltip.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { isPast, isToday, isValid, parseISO } from 'date-fns'; -@Pipe({ name: 'toTrafficLightTooltip' }) +@Pipe({ + name: 'toTrafficLightTooltip', + standalone: true, +}) export class ToTrafficLightTooltipPipe implements PipeTransform { transform(date: Date): string { date = isValid(date) ? date : parseISO(date as unknown as string); diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light.pipe.ts index 83f4e421d1..1763a26143 100644 --- a/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light.pipe.ts +++ b/alfa-client/libs/tech-shared/src/lib/pipe/to-traffic-light.pipe.ts @@ -24,7 +24,10 @@ import { Pipe, PipeTransform } from '@angular/core'; import { isPast, isToday, isValid, parseISO } from 'date-fns'; -@Pipe({ name: 'toTrafficLight' }) +@Pipe({ + name: 'toTrafficLight', + standalone: true, +}) export class ToTrafficLightPipe implements PipeTransform { transform(date: Date): string { date = isValid(date) ? date : parseISO(date as unknown as string); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts index 76fac14c0b..02e4ff7ccc 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts @@ -84,16 +84,22 @@ describe('ListResourceService', () => { isInvalidResourceCombinationSpy = jest.spyOn(ResourceUtil, 'isInvalidResourceCombination').mockReturnValue(true); }); + it('should have debounce', () => { + service.getList().subscribe(); + + expect(service.handleChanges).not.toHaveBeenCalled(); + }); + it('should handle config resource changed', fakeAsync(() => { service.getList().subscribe(); - tick(); + tick(50); expect(service.handleChanges).toHaveBeenCalledWith(listStateResource, baseResource); })); it('should call isInvalidResourceCombinationSpy', fakeAsync(() => { service.getList().subscribe(); - tick(); + tick(50); expect(isInvalidResourceCombinationSpy).toHaveBeenCalled(); })); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts index 50cee3aa72..13df5d4cf6 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts @@ -23,7 +23,7 @@ */ import { Resource, ResourceUri, getUrl, hasLink } from '@ngxp/rest'; import { isEqual, isNil, isNull } from 'lodash-es'; -import { BehaviorSubject, Observable, combineLatest, filter, first, map, startWith, tap } from 'rxjs'; +import { BehaviorSubject, Observable, combineLatest, debounceTime, filter, first, map, startWith, tap } from 'rxjs'; import { isNotNull, isNotUndefined } from '../tech.util'; import { CreateResourceData, ListItemResource, ListResourceServiceConfig } from './resource.model'; import { ResourceRepository } from './resource.repository'; @@ -63,6 +63,7 @@ export class ResourceListService<B extends Resource, T extends ListResource, I e public getList(): Observable<StateResource<T>> { return combineLatest([this.listResource.asObservable(), this.getConfigResource()]).pipe( + debounceTime(50), tap(([stateResource, configResource]) => { this.handleChanges(stateResource, configResource); }), diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts index bbd264a358..cade44ce12 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.spec.ts @@ -22,6 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { mock, useFromMock } from '@alfa-client/test-utils'; +import { TestBed } from '@angular/core/testing'; import { faker } from '@faker-js/faker'; import { Resource, ResourceFactory, ResourceUri, getUrl } from '@ngxp/rest'; import { DummyLinkRel, DummyListLinkRel } from 'libs/tech-shared/test/dummy'; @@ -42,7 +43,11 @@ describe('ResourceRepository', () => { resourceFactory.from.mockReturnValue(resourceWrapper); resourceFactory.fromId.mockReturnValue(resourceWrapper); - repository = new ResourceRepository(useFromMock(resourceFactory)); + TestBed.configureTestingModule({ + providers: [{ provide: ResourceFactory, useValue: useFromMock(resourceFactory) }], + }); + + repository = TestBed.inject(ResourceRepository); }); it('should be created', () => { diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts index d8f90a78eb..8a4081f31b 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.repository.ts @@ -21,17 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Injectable } from '@angular/core'; -import { Resource, ResourceFactory, ResourceUri, getUrl } from '@ngxp/rest'; +import { inject, Injectable } from '@angular/core'; +import { getUrl, Resource, ResourceFactory, ResourceUri } from '@ngxp/rest'; import { Observable } from 'rxjs'; import { CreateResourceData, LinkRelationName, SaveResourceData } from './resource.model'; import { ListResource } from './resource.util'; @Injectable({ providedIn: 'root' }) export class ResourceRepository { - static SEARCH_PARAM: string = 'searchBy'; + private resourceFactory = inject(ResourceFactory); - constructor(private resourceFactory: ResourceFactory) {} + static SEARCH_PARAM: string = 'searchBy'; public getListResource(resource: Resource, linkRel: string): Observable<ListResource> { const uriWithoutParameter: string = this.getUrlWithoutParameter(getUrl(resource, linkRel)); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts index 7a045fa751..d7d188b8c5 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.spec.ts @@ -82,16 +82,22 @@ describe('ResourceService', () => { isInvalidResourceCombinationSpy = jest.spyOn(ResourceUtil, 'isInvalidResourceCombination').mockReturnValue(true); }); + it('should have debounce', () => { + service.get().subscribe(); + + expect(service.handleResourceChanges).not.toHaveBeenCalled(); + }); + it('should handle config resource changed', fakeAsync(() => { service.get().subscribe(); - tick(); + tick(50); expect(service.handleResourceChanges).toHaveBeenCalledWith(stateResource, configResource); })); it('should call isInvalidResourceCombinationSpy', fakeAsync(() => { service.get().subscribe(); - tick(); + tick(50); expect(isInvalidResourceCombinationSpy).toHaveBeenCalled(); })); diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts index 9900059919..1953e85ff4 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.service.ts @@ -24,7 +24,20 @@ import { HttpErrorResponse } from '@angular/common/http'; import { getUrl, hasLink, Resource, ResourceUri } from '@ngxp/rest'; import { isEqual, isNull } from 'lodash-es'; -import { BehaviorSubject, catchError, combineLatest, filter, first, map, Observable, of, startWith, tap, throwError } from 'rxjs'; +import { + BehaviorSubject, + catchError, + combineLatest, + debounceTime, + filter, + first, + map, + Observable, + of, + startWith, + tap, + throwError, +} from 'rxjs'; import { isUnprocessableEntity } from '../http.util'; import { HttpError } from '../tech.model'; import { isNotNull } from '../tech.util'; @@ -57,6 +70,7 @@ export abstract class ResourceService<B extends Resource, T extends Resource> { public get(): Observable<StateResource<T>> { return combineLatest([this.stateResource.asObservable(), this.getConfigResource()]).pipe( + debounceTime(50), tap(([stateResource, configResource]) => this.handleResourceChanges(stateResource, configResource)), filter(([stateResource]) => !isInvalidResourceCombination(stateResource, this.configResource)), mapToFirst<T, B>(), diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.spec.ts index 068bdad458..3bfc293f96 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Resource } from '@ngxp/rest'; -import { createCommandStateResource } from '../../../../command-shared/test/command'; +import { createCommandStateResource } from 'libs/command-shared/test/command'; import { DummyListLinkRel } from '../../../test/dummy'; import { createApiError } from '../../../test/error'; import { createDummyListResource, createDummyResource, toResource } from '../../../test/resource'; diff --git a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts index 47119c7a1b..05e53e161d 100644 --- a/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/service/formservice.abstract.spec.ts @@ -25,9 +25,9 @@ import { CommandResource } from '@alfa-client/command-shared'; import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { Resource } from '@ngxp/rest'; import { cold } from 'jest-marbles'; +import { createCommandResource } from 'libs/command-shared/test/command'; import { createInvalidParam, createProblemDetail } from 'libs/tech-shared/test/error'; import { Observable, of } from 'rxjs'; -import { createCommandResource } from '../../../../command-shared/test/command'; import { StateResource, createEmptyStateResource, diff --git a/alfa-client/libs/tech-shared/src/lib/tech-shared.module.spec.ts b/alfa-client/libs/tech-shared/src/lib/tech-shared.module.spec.ts deleted file mode 100644 index 740aaee232..0000000000 --- a/alfa-client/libs/tech-shared/src/lib/tech-shared.module.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { TechSharedModule } from './tech-shared.module'; -import { TestBed } from '@angular/core/testing'; - -describe('TechSharedModule', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [TechSharedModule], - }).compileComponents(); - }); - - it('should create', () => { - expect(TechSharedModule).toBeDefined(); - }); -}); diff --git a/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts b/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts deleted file mode 100644 index be795a66c9..0000000000 --- a/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { CommonModule } from '@angular/common'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { Injector, NgModule } from '@angular/core'; -import { HttpBinaryFileInterceptor } from './interceptor/http-binary-file.interceptor'; -import { HttpXsrfInterceptor } from './interceptor/http-xsrf.interceptor'; -import { XhrInterceptor } from './interceptor/xhr.interceptor'; -import { ConvertApiErrorToErrorMessagesPipe } from './pipe/convert-api-error-to-error-messages.pipe'; -import { ConvertForDataTestPipe } from './pipe/convert-for-data-test.pipe'; -import { ConvertProblemDetailToErrorMessagesPipe } from './pipe/convert-problem-detail-to-error-messages.pipe'; -import { ConvertToBooleanPipe } from './pipe/convert-to-boolean.pipe'; -import { EnumToLabelPipe } from './pipe/enum-to-label.pipe'; -import { FileSizePlainPipe } from './pipe/file-size-plain.pipe'; -import { FileSizePipe } from './pipe/file-size.pipe'; -import { FormatDateWithTimePipe } from './pipe/format-date-with-time.pipe'; -import { FormatDateWithoutYearWithTimePipe } from './pipe/format-date-without-year-with-time.pipe'; -import { FormatFullDatePipe } from './pipe/format-full-date.pipe'; -import { FormatToPrettyDatePipe } from './pipe/format-to-pretty-date.pipe'; -import { GetUrlPipe } from './pipe/get-url.pipe'; -import { HasAnyLinkPipe } from './pipe/has-any-link.pipe'; -import { HasLinkPipe } from './pipe/has-link.pipe'; -import { NotHasAnyLinkPipe } from './pipe/not-has-any-link.pipe'; -import { NotHasLinkPipe } from './pipe/not-has-link.pipe'; -import { ToEmbeddedResourcesPipe } from './pipe/to-embedded-resource.pipe'; -import { ToResourceUriPipe } from './pipe/to-resource-uri.pipe'; -import { ToTrafficLightTooltipPipe } from './pipe/to-traffic-light-tooltip.pipe'; -import { ToTrafficLightPipe } from './pipe/to-traffic-light.pipe'; - -@NgModule({ - imports: [CommonModule], - declarations: [ - FormatToPrettyDatePipe, - FormatFullDatePipe, - EnumToLabelPipe, - FormatDateWithTimePipe, - FormatDateWithoutYearWithTimePipe, - HasLinkPipe, - HasAnyLinkPipe, - NotHasLinkPipe, - NotHasAnyLinkPipe, - ToResourceUriPipe, - ToTrafficLightPipe, - ToTrafficLightTooltipPipe, - ToEmbeddedResourcesPipe, - ConvertForDataTestPipe, - FileSizePipe, - FileSizePlainPipe, - GetUrlPipe, - ConvertToBooleanPipe, - ConvertApiErrorToErrorMessagesPipe, - ConvertProblemDetailToErrorMessagesPipe, - ], - exports: [ - FormatToPrettyDatePipe, - FormatFullDatePipe, - EnumToLabelPipe, - FormatDateWithTimePipe, - FormatDateWithoutYearWithTimePipe, - HasLinkPipe, - HasAnyLinkPipe, - NotHasLinkPipe, - NotHasAnyLinkPipe, - ToResourceUriPipe, - ToTrafficLightPipe, - ToTrafficLightTooltipPipe, - ToEmbeddedResourcesPipe, - ConvertForDataTestPipe, - FileSizePipe, - FileSizePlainPipe, - GetUrlPipe, - ConvertToBooleanPipe, - ConvertApiErrorToErrorMessagesPipe, - ConvertProblemDetailToErrorMessagesPipe, - ], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: XhrInterceptor, - multi: true, - }, - { - provide: HTTP_INTERCEPTORS, - useClass: HttpXsrfInterceptor, - multi: true, - }, - { - provide: HTTP_INTERCEPTORS, - useClass: HttpBinaryFileInterceptor, - multi: true, - }, - ], -}) -export class TechSharedModule { - public static injector: Injector; - - constructor(private injector: Injector) { - TechSharedModule.injector = this.injector; - } -} diff --git a/alfa-client/libs/ui/src/index.ts b/alfa-client/libs/ui/src/index.ts index 8571055878..2db371a18e 100644 --- a/alfa-client/libs/ui/src/index.ts +++ b/alfa-client/libs/ui/src/index.ts @@ -35,7 +35,7 @@ export * from './lib/ui/editor/autocomplete-editor/autocomplete-editor.component export * from './lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component'; export * from './lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.model'; export * from './lib/ui/editor/date-editor/date-editor.component'; -export * from './lib/ui/editor/text-editor/text-editor.component'; +export * from './lib/ui/editor/text-editor/ozgcloud-text-editor.component'; export * from './lib/ui/editor/textarea-editor/textarea-editor.component'; export * from './lib/ui/expansion-panel/expansion-panel.component'; export * from './lib/ui/file-upload/file-upload.component'; @@ -50,10 +50,11 @@ export * from './lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozg export * from './lib/ui/ozgcloud-dialog/ozgcloud-dialog.result'; export * from './lib/ui/ozgcloud-dialog/ozgcloud-dialog.service'; export * from './lib/ui/ozgcloud-icon/ozgcloud-icon.component'; +export * from './lib/ui/ozgcloud-menu/ozgcloud-menu.component'; export * from './lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component'; export * from './lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component'; export * from './lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component'; +export * from './lib/ui/slide-toggle/slide-toggle.component'; export * from './lib/ui/spinner-transparency/spinner-transparency.component'; export * from './lib/ui/spinner/spinner.component'; export * from './lib/ui/subnavigation/subnavigation.component'; -export * from './lib/ui/ui.module'; diff --git a/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.spec.ts b/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.spec.ts index b39b315dbd..c773235e92 100644 --- a/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.spec.ts @@ -32,8 +32,7 @@ describe('AppIconComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [AppIconComponent], - imports: [MatIcon, MatIconTestingModule], + imports: [MatIcon, MatIconTestingModule, AppIconComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.ts b/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.ts index 0b93d2c244..a09417be79 100644 --- a/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.ts +++ b/alfa-client/libs/ui/src/lib/icon/app-icon/app-icon.component.ts @@ -22,10 +22,13 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-app-icon', templateUrl: './app-icon.component.html', styleUrls: ['./app-icon.component.scss'], + standalone: true, + imports: [MatIcon], }) export class AppIconComponent {} diff --git a/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.spec.ts b/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.spec.ts index 7d0696427c..a5ce3c8c70 100644 --- a/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.spec.ts @@ -37,8 +37,7 @@ describe('PostfachIconComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [PostfachIconComponent], - imports: [MatIconTestingModule, MatBadgeModule, MatBadge, MatIcon], + imports: [MatIconTestingModule, MatBadgeModule, MatBadge, MatIcon, PostfachIconComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.ts b/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.ts index 3ad4d01502..684c8781ea 100644 --- a/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.ts +++ b/alfa-client/libs/ui/src/lib/icon/postfach-icon/postfach-icon.component.ts @@ -22,11 +22,15 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatBadge } from '@angular/material/badge'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-postfach-icon', templateUrl: './postfach-icon.component.html', styleUrls: ['./postfach-icon.component.scss'], + standalone: true, + imports: [MatIcon, MatBadge], }) export class PostfachIconComponent { @Input() showBadge: boolean = false; diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.spec.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.spec.ts index a591c897b1..51f5f1b134 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.spec.ts @@ -36,8 +36,7 @@ describe('SnackbarCloseButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [SnackbarCloseButtonComponent], - imports: [MatIcon], + imports: [MatIcon, SnackbarCloseButtonComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.ts index 53d5bc4018..6a4ea9b58c 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-close-button/snackbar-close-button.component.ts @@ -22,11 +22,15 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, EventEmitter, Output } from '@angular/core'; +import { MatIconButton } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-snackbar-close-button', templateUrl: './snackbar-close-button.component.html', styleUrls: ['./snackbar-close-button.component.scss'], + standalone: true, + imports: [MatIconButton, MatIcon], }) export class SnackbarCloseButtonComponent { @Output() close: EventEmitter<void> = new EventEmitter(); diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.spec.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.spec.ts index 1421a91855..c18e96c89e 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.spec.ts @@ -21,10 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIconModule } from '@angular/material/icon'; import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'; -import { mock } from '@alfa-client/test-utils'; import { MockComponent } from 'ng-mocks'; import { SnackbarCloseButtonComponent } from '../snackbar-close-button/snackbar-close-button.component'; import { SnackBarData } from '../snackbar.model'; @@ -39,8 +39,7 @@ describe('SnackbarErrorComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [MatIconModule], - declarations: [SnackbarErrorComponent, MockComponent(SnackbarCloseButtonComponent)], + imports: [MatIconModule, SnackbarErrorComponent, MockComponent(SnackbarCloseButtonComponent)], providers: [ { provide: MAT_SNACK_BAR_DATA, diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.ts index 19a27fa8e5..06b3709ca3 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-error/snackbar-error.component.ts @@ -21,20 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Inject } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'; +import { SnackbarCloseButtonComponent } from '../snackbar-close-button/snackbar-close-button.component'; import { SnackBarData } from '../snackbar.model'; @Component({ selector: 'ozgcloud-snackbar-error', templateUrl: './snackbar-error.component.html', styleUrls: ['./snackbar-error.component.scss'], + standalone: true, + imports: [SnackbarCloseButtonComponent], }) export class SnackbarErrorComponent { - constructor( - @Inject(MAT_SNACK_BAR_DATA) public data: SnackBarData, - public snackBarRef: MatSnackBarRef<SnackbarErrorComponent>, - ) {} + public snackBarRef = inject(MatSnackBarRef<SnackbarErrorComponent>); + public data = inject<SnackBarData>(MAT_SNACK_BAR_DATA); get message(): string { return this.data.message; diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.html b/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.html index 82103c833a..fbf8300ce5 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.html +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.html @@ -25,14 +25,8 @@ --> <div data-test-id="snackbar-message">{{ message }}</div> -<button - *ngIf="showRevokeButton()" - data-test-id="snackbar-revoke-button" - mat-button - color="primary" - (click)="revoke()" -> - Rückgängig -</button> +@if (showRevokeButton()) { + <button data-test-id="snackbar-revoke-button" mat-button color="primary" (click)="revoke()">Rückgängig</button> +} <ozgcloud-snackbar-close-button (close)="close()"></ozgcloud-snackbar-close-button> diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.spec.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.spec.ts index 55ce0007b6..62d87fd9bf 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.spec.ts @@ -21,10 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIconModule } from '@angular/material/icon'; import { MAT_SNACK_BAR_DATA, MatSnackBarModule, MatSnackBarRef } from '@angular/material/snack-bar'; -import { mock } from '@alfa-client/test-utils'; import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel'; import { createCommandResource } from 'libs/command-shared/test/command'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -47,8 +47,7 @@ describe('SnackbarInfoComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - imports: [MatSnackBarModule, MatIconModule], - declarations: [SnackbarInfoComponent, MockComponent(SnackbarCloseButtonComponent)], + imports: [MatSnackBarModule, MatIconModule, SnackbarInfoComponent, MockComponent(SnackbarCloseButtonComponent)], providers: [ { provide: MAT_SNACK_BAR_DATA, diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.ts index e1431695e2..cad0471768 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar-info/snackbar-info.component.ts @@ -21,22 +21,24 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Inject } from '@angular/core'; -import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'; import { isRevokeable } from '@alfa-client/command-shared'; +import { Component, inject } from '@angular/core'; +import { MatButton } from '@angular/material/button'; +import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'; import { isUndefined } from 'lodash-es'; +import { SnackbarCloseButtonComponent } from '../snackbar-close-button/snackbar-close-button.component'; import { SnackBarData } from '../snackbar.model'; @Component({ selector: 'ozgcloud-snackbar-info', templateUrl: './snackbar-info.component.html', styleUrls: ['./snackbar-info.component.scss'], + standalone: true, + imports: [MatButton, SnackbarCloseButtonComponent], }) export class SnackbarInfoComponent { - constructor( - @Inject(MAT_SNACK_BAR_DATA) public data: SnackBarData, - public snackBarRef: MatSnackBarRef<SnackbarInfoComponent>, - ) {} + public snackBarRef = inject(MatSnackBarRef<SnackbarInfoComponent>); + public data = inject<SnackBarData>(MAT_SNACK_BAR_DATA); get message(): string { return this.data.message; diff --git a/alfa-client/libs/ui/src/lib/snackbar/snackbar.service.ts b/alfa-client/libs/ui/src/lib/snackbar/snackbar.service.ts index 98b7170fe7..6e0ecf60e6 100644 --- a/alfa-client/libs/ui/src/lib/snackbar/snackbar.service.ts +++ b/alfa-client/libs/ui/src/lib/snackbar/snackbar.service.ts @@ -21,11 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ComponentType } from '@angular/cdk/overlay'; -import { Injectable } from '@angular/core'; -import { MatSnackBar, MatSnackBarConfig, MatSnackBarRef } from '@angular/material/snack-bar'; import { CommandResource, CommandStatus } from '@alfa-client/command-shared'; import { isNotUndefined } from '@alfa-client/tech-shared'; +import { ComponentType } from '@angular/cdk/overlay'; +import { inject, Injectable } from '@angular/core'; +import { MatSnackBar, MatSnackBarConfig, MatSnackBarRef } from '@angular/material/snack-bar'; import { isUndefined } from 'lodash-es'; import { Subscription } from 'rxjs'; import { SnackbarErrorComponent } from './snackbar-error/snackbar-error.component'; @@ -33,14 +33,14 @@ import { SnackbarInfoComponent } from './snackbar-info/snackbar-info.component'; @Injectable({ providedIn: 'root' }) export class SnackBarService { + private snackBar = inject(MatSnackBar); + private subscription: Subscription; snackBarRef: MatSnackBarRef<SnackbarInfoComponent | SnackbarErrorComponent>; private durationTime: number = 10000; - constructor(private snackBar: MatSnackBar) {} - public show(commandResource: CommandResource, message: string, revokeAction?: () => void): void { if (commandResource.status === CommandStatus.ERROR) { this.showError(message); diff --git a/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.spec.ts index 8c9259c77a..7a5b60d6c3 100644 --- a/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.spec.ts @@ -31,8 +31,7 @@ describe('AccordionComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [AccordionComponent], - imports: [MatAccordion], + imports: [MatAccordion, AccordionComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.ts b/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.ts index 36001957eb..2327c0401e 100644 --- a/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/accordion/accordion.component.ts @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatAccordion } from '@angular/material/expansion'; @Component({ selector: 'ozgcloud-accordion', templateUrl: './accordion.component.html', styleUrls: ['./accordion.component.scss'], + standalone: true, + imports: [MatAccordion], }) export class AccordionComponent { @Input() multi: boolean = false; diff --git a/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.ts b/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.ts index 14ad27f618..a5c00893b3 100644 --- a/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/back-button/back-button.component.ts @@ -22,11 +22,18 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatIconAnchor } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; +import { RouterLink } from '@angular/router'; +import { ArrowBackIconComponent, ButtonComponent, TooltipDirective } from '@ods/system'; @Component({ selector: 'ozgcloud-back-button', templateUrl: './back-button.component.html', styleUrls: ['./back-button.component.scss'], + standalone: true, + imports: [MatIconAnchor, RouterLink, MatTooltip, MatIcon, TooltipDirective, ButtonComponent, ArrowBackIconComponent], }) export class BackButtonComponent { @Input() label: string; diff --git a/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.spec.ts index ec797a1c52..23ca3dbbc8 100644 --- a/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.spec.ts @@ -21,13 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatIcon } from '@angular/material/icon'; -import { - IconButtonWithSpinnerComponent, - OzgcloudStrokedButtonWithSpinnerComponent, -} from '@alfa-client/ui'; import { MockComponent } from 'ng-mocks'; import { BasicDialogComponent } from './basic-dialog.component'; @@ -37,8 +34,8 @@ describe('BasicDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [MatDialogModule], - declarations: [ + imports: [ + MatDialogModule, BasicDialogComponent, MatIcon, MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), diff --git a/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.ts b/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.ts index e9519e8042..cbe53ff122 100644 --- a/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/basic-dialog/basic-dialog.component.ts @@ -21,20 +21,36 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Inject } from '@angular/core'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { CdkScrollable } from '@angular/cdk/scrolling'; +import { Component, inject } from '@angular/core'; +import { + MAT_DIALOG_DATA, + MatDialogActions, + MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, +} from '@angular/material/dialog'; +import { OzgcloudStrokedButtonWithSpinnerComponent } from '../ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component'; import { BasicDialogData } from './basic-dialog-data.model'; @Component({ selector: 'ozgcloud-basic-dialog', templateUrl: './basic-dialog.component.html', styleUrls: ['./basic-dialog.component.scss'], + standalone: true, + imports: [ + MatDialogTitle, + CdkScrollable, + MatDialogContent, + MatDialogActions, + OzgcloudStrokedButtonWithSpinnerComponent, + MatDialogClose, + ], }) export class BasicDialogComponent { - constructor( - public dialogRef: MatDialogRef<BasicDialogComponent>, - @Inject(MAT_DIALOG_DATA) public data: BasicDialogData, - ) {} + public dialogRef = inject(MatDialogRef<BasicDialogComponent>); + public data = inject<BasicDialogData>(MAT_DIALOG_DATA); onNoClick(): void { this.dialogRef.close(); diff --git a/alfa-client/libs/ui/src/lib/ui/dialog/dialog.service.ts b/alfa-client/libs/ui/src/lib/ui/dialog/dialog.service.ts index dfe376a9f5..cd72feef7d 100644 --- a/alfa-client/libs/ui/src/lib/ui/dialog/dialog.service.ts +++ b/alfa-client/libs/ui/src/lib/ui/dialog/dialog.service.ts @@ -21,22 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ApiError, isNotUndefined } from '@alfa-client/tech-shared'; +import { BasicDialogComponent, BasicDialogData, FixedDialogComponent, FixedDialogData } from '@alfa-client/ui'; import { NoopScrollStrategy } from '@angular/cdk/overlay'; import { ComponentType } from '@angular/cdk/portal'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog'; -import { ApiError, isNotUndefined } from '@alfa-client/tech-shared'; -import { - BasicDialogComponent, - BasicDialogData, - FixedDialogComponent, - FixedDialogData, -} from '@alfa-client/ui'; import { InternalServerErrorDialogComponent } from '../notification/internal-server-error-dialog/internal-server-error-dialog.component'; import { RetryInTimeDialog } from './retry-in-time.dialog'; @Injectable({ providedIn: 'root' }) export class DialogService { + private dialog = inject(MatDialog); + fixedSingleDialogRef: MatDialogRef<FixedDialogComponent>; readonly FIXED_DIALOG_CONFIG: MatDialogConfig = { @@ -67,8 +64,6 @@ export class DialogService { restoreFocus: false, }; - constructor(private dialog: MatDialog) {} - public openWidely<T>(component: ComponentType<T>, config?: MatDialogConfig): MatDialogRef<T> { return this.open<T>(component, { ...config, ...this.WIDE_DIALOG_CONFIG }); } diff --git a/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.spec.ts index d1215dcb80..2771e50313 100644 --- a/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.spec.ts @@ -23,8 +23,8 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { DownloadButtonComponent } from './download-button.component'; import { MockComponent } from 'ng-mocks'; +import { DownloadButtonComponent } from './download-button.component'; describe('DownloadButtonComponent', () => { let component: DownloadButtonComponent; @@ -32,7 +32,7 @@ describe('DownloadButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [DownloadButtonComponent, MockComponent(DownloadButtonComponent)], + imports: [DownloadButtonComponent, MockComponent(DownloadButtonComponent)], }).compileComponents(); fixture = TestBed.createComponent(DownloadButtonComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.ts b/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.ts index d1b4e7fed8..be55bf7f0d 100644 --- a/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/download-button/download-button.component.ts @@ -22,11 +22,17 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatAnchor } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; +import { TooltipDirective } from '@ods/system'; @Component({ selector: 'ozgcloud-download-button', templateUrl: './download-button.component.html', styleUrls: ['./download-button.component.scss'], + standalone: true, + imports: [MatAnchor, MatTooltip, MatIcon, TooltipDirective], }) export class DownloadButtonComponent { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html index b60743ee96..43edcd913d 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html +++ b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html @@ -1,26 +1,26 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: + +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> <mat-form-field appearance="outline"> @@ -40,15 +40,16 @@ /> <mat-autocomplete autoActiveFirstOption #auto="matAutocomplete"> - <mat-option - *ngFor="let value of values" - [attr.data-test-id]="(value.label | convertForDataTest) + '-autocomplete-option'" - [value]="value.value" - (keyup.enter)="onSelection(value)" - (onSelectionChange)="onSelection(value)" - > - {{ value.label }} - </mat-option> + @for (value of values; track value) { + <mat-option + [attr.data-test-id]="(value.label | convertForDataTest) + '-autocomplete-option'" + [value]="value.value" + (keyup.enter)="onSelection(value)" + (onSelectionChange)="onSelection(value)" + > + {{ value.label }} + </mat-option> + } </mat-autocomplete> <mat-error> diff --git a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.spec.ts index 609ef74f56..c590cbe105 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.spec.ts @@ -21,13 +21,13 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { NgControl, ReactiveFormsModule, UntypedFormControl } from '@angular/forms'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { MockComponent } from 'ng-mocks'; import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; import { AutocompleteEditorComponent } from './autocomplete-editor.component'; @@ -38,17 +38,15 @@ describe('AutocompleteEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - AutocompleteEditorComponent, - ConvertForDataTestPipe, - MockComponent(ValidationErrorComponent), - ], imports: [ MatAutocompleteModule, MatFormFieldModule, MatInputModule, ReactiveFormsModule, BrowserAnimationsModule, + AutocompleteEditorComponent, + ConvertForDataTestPipe, + MockComponent(ValidationErrorComponent), ], providers: [ { diff --git a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts index 1cb488f0f7..87aba70b53 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts @@ -21,28 +21,38 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - AfterViewInit, - Component, - ElementRef, - EventEmitter, - Input, - Output, - ViewChild, -} from '@angular/core'; +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; +import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatAutocomplete, MatAutocompleteTrigger } from '@angular/material/autocomplete'; +import { MatOption } from '@angular/material/core'; +import { MatError, MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { ResourceUri } from '@ngxp/rest'; import { FormControlEditorAbstractComponent } from 'libs/design-component/src/lib/form/formcontrol-editor.abstract.component'; import { isEmpty, isEqual, isNil } from 'lodash-es'; +import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; @Component({ selector: 'ozgcloud-autocomplete-editor', templateUrl: './autocomplete-editor.component.html', styleUrls: ['./autocomplete-editor.component.scss'], + standalone: true, + imports: [ + MatFormField, + MatLabel, + MatInput, + MatAutocompleteTrigger, + FormsModule, + ReactiveFormsModule, + MatAutocomplete, + MatOption, + MatError, + ValidationErrorComponent, + ConvertForDataTestPipe, + ], }) -export class AutocompleteEditorComponent - extends FormControlEditorAbstractComponent - implements AfterViewInit -{ +export class AutocompleteEditorComponent extends FormControlEditorAbstractComponent implements AfterViewInit { @Input() label: string; @Input() values: Selectable[] = []; @Input() required: boolean = false; @@ -64,9 +74,7 @@ export class AutocompleteEditorComponent onEnter(): void { const selectedValue: ResourceUri = this.fieldControl.value; - isEmpty(selectedValue) ? - this.enterOnNoSelection.emit() - : this.onSelection(this.getUserProfile()); + isEmpty(selectedValue) ? this.enterOnNoSelection.emit() : this.onSelection(this.getUserProfile()); } private getUserProfile(): Selectable { diff --git a/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.spec.ts index 2a7caecd0e..91a6537c22 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.spec.ts @@ -21,16 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; -import { MatIcon } from '@angular/material/icon'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { MockComponent } from 'ng-mocks'; import { IconButtonWithSpinnerComponent } from '../../icon-button-with-spinner/icon-button-with-spinner.component'; import { CheckboxEnumEditorComponent } from './checkbox-enum-editor.component'; -import { UiModule } from '../../ui.module'; describe('CheckboxEnumEditorComponent', () => { let component: CheckboxEnumEditorComponent; @@ -38,13 +37,15 @@ describe('CheckboxEnumEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ + declarations: [ConvertForDataTestPipe], + imports: [ + MatFormFieldModule, + ReactiveFormsModule, + BrowserAnimationsModule, CheckboxEnumEditorComponent, MatIcon, - ConvertForDataTestPipe, MockComponent(IconButtonWithSpinnerComponent), ], - imports: [UiModule, MatFormFieldModule, ReactiveFormsModule, BrowserAnimationsModule], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.ts index 26e505719f..0943452372 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/checkbox-enum-editor/checkbox-enum-editor.component.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input, OnInit } from '@angular/core'; -import { MatCheckboxChange } from '@angular/material/checkbox'; +import { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox'; import { FormControlEditorAbstractComponent } from 'libs/design-component/src/lib/form/formcontrol-editor.abstract.component'; import { CheckboxEnumEditorItem } from './checkbox-enum-editor.model'; @@ -34,11 +34,10 @@ import { CheckboxEnumEditorItem } from './checkbox-enum-editor.model'; selector: 'ozgcloud-checkbox-enum-editor', templateUrl: './checkbox-enum-editor.component.html', styleUrls: ['./checkbox-enum-editor.component.scss'], + standalone: true, + imports: [MatCheckbox], }) -export class CheckboxEnumEditorComponent - extends FormControlEditorAbstractComponent - implements OnInit -{ +export class CheckboxEnumEditorComponent extends FormControlEditorAbstractComponent implements OnInit { @Input() label: string; @Input() defaultItem: CheckboxEnumEditorItem; @Input() checkedItem: CheckboxEnumEditorItem; diff --git a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts index 2af7293846..e8fb9e83f6 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.spec.ts @@ -43,12 +43,9 @@ describe('DateEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - DateEditorComponent, - ConvertForDataTestPipe, - MockComponent(ValidationErrorComponent), - ], + declarations: [ConvertForDataTestPipe], imports: [ + ConvertForDataTestPipe, MatFormFieldModule, MatInputModule, MatIconModule, @@ -56,6 +53,8 @@ describe('DateEditorComponent', () => { MatNativeDateModule, ReactiveFormsModule, BrowserAnimationsModule, + DateEditorComponent, + MockComponent(ValidationErrorComponent), ], }).compileComponents(); }); @@ -75,9 +74,7 @@ describe('DateEditorComponent', () => { component.label = 'Ein Label'; fixture.detectChanges(); - const element: HTMLElement = fixture.nativeElement.querySelector( - '[data-test-id="Ein_Label-date-input"]', - ); + const element: HTMLElement = fixture.nativeElement.querySelector('[data-test-id="Ein_Label-date-input"]'); expect(element).toBeInstanceOf(HTMLElement); }); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts index c632ccf07f..b7dd27fb2f 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts @@ -21,16 +21,32 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { add2000Years } from '@alfa-client/tech-shared'; +import { add2000Years, ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { Component, Input } from '@angular/core'; -import { MatDatepickerInputEvent } from '@angular/material/datepicker'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatDatepickerInputEvent, MatDatepickerModule } from '@angular/material/datepicker'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; import { isDate } from 'date-fns'; import { FormControlEditorAbstractComponent } from 'libs/design-component/src/lib/form/formcontrol-editor.abstract.component'; +import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; @Component({ selector: 'ozgcloud-date-editor', templateUrl: './date-editor.component.html', styleUrls: ['./date-editor.component.scss'], + standalone: true, + imports: [ + MatFormFieldModule, + MatInputModule, + FormsModule, + ReactiveFormsModule, + MatIcon, + ValidationErrorComponent, + MatDatepickerModule, + ConvertForDataTestPipe, + ], }) export class DateEditorComponent extends FormControlEditorAbstractComponent { @Input() label: string; diff --git a/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.html index 123269b8cb..c8501ddaa8 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.html +++ b/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.html @@ -1,32 +1,32 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: + +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> <ng-container [formArrayName]="parentFormArrayName"> - <ng-container *ngFor="let hiddenInput of fileLinkControls.controls; let i = index"> + @for (hiddenInput of fileLinkControls.controls; track hiddenInput; let i = $index) { <input id="file-link-{{ i }}" type="hidden" [formControlName]="i" /> - </ng-container> + } </ng-container> <input @@ -39,10 +39,11 @@ /> <label [attr.for]="uploadFileId" matRipple [attr.aria-label]="label"> - <mat-icon *ngIf="!uploadInProgress.loading">attach_file</mat-icon> + @if (!uploadInProgress.loading) { + <mat-icon>attach_file</mat-icon> + } - <ozgcloud-spinner [stateResource]="uploadInProgress" [diameter]="22" padding="0"> - </ozgcloud-spinner> + <ozgcloud-spinner [stateResource]="uploadInProgress" [diameter]="22" padding="0"> </ozgcloud-spinner> </label> <mat-error> diff --git a/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.spec.ts index a6c2b5c8d8..2dc06d2e3d 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.spec.ts @@ -21,20 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ConvertForDataTestPipe, createEmptyStateResource } from '@alfa-client/tech-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { - AbstractControl, - FormGroupDirective, - ReactiveFormsModule, - UntypedFormBuilder, -} from '@angular/forms'; +import { AbstractControl, FormGroupDirective, ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; import { MatNativeDateModule } from '@angular/material/core'; import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatIconModule } from '@angular/material/icon'; import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ConvertForDataTestPipe, createEmptyStateResource } from '@alfa-client/tech-shared'; import { MockComponent } from 'ng-mocks'; import { SpinnerComponent } from '../../spinner/spinner.component'; import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; @@ -51,12 +46,6 @@ describe('FileUploadEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ - FileUploadEditorComponent, - ConvertForDataTestPipe, - MockComponent(ValidationErrorComponent), - MockComponent(SpinnerComponent), - ], imports: [ MatFormFieldModule, MatInputModule, @@ -65,6 +54,10 @@ describe('FileUploadEditorComponent', () => { MatNativeDateModule, ReactiveFormsModule, BrowserAnimationsModule, + FileUploadEditorComponent, + ConvertForDataTestPipe, + MockComponent(ValidationErrorComponent), + MockComponent(SpinnerComponent), ], providers: [ FormGroupDirective, @@ -100,9 +93,7 @@ describe('FileUploadEditorComponent', () => { component.label = 'Ein Label'; fixture.detectChanges(); - const element: HTMLElement = fixture.nativeElement.querySelector( - '[data-test-id="Ein_Label-file-upload-input"]', - ); + const element: HTMLElement = fixture.nativeElement.querySelector('[data-test-id="Ein_Label-file-upload-input"]'); expect(element).toBeInstanceOf(HTMLElement); }); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.ts index 148f7d0dd0..5c75b22163 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/file-upload-editor/file-upload-editor.component.ts @@ -21,36 +21,44 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { StateResource } from '@alfa-client/tech-shared'; -import { - Component, - ElementRef, - EventEmitter, - HostListener, - Input, - OnInit, - Output, - ViewChild, -} from '@angular/core'; +import { ConvertForDataTestPipe, StateResource } from '@alfa-client/tech-shared'; +import { Component, ElementRef, EventEmitter, HostListener, inject, Input, OnInit, Output, ViewChild } from '@angular/core'; import { ControlContainer, FormGroupDirective, + FormsModule, + ReactiveFormsModule, UntypedFormArray, UntypedFormControl, } from '@angular/forms'; +import { MatRipple } from '@angular/material/core'; +import { MatError } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; import { FormControlEditorAbstractComponent } from 'libs/design-component/src/lib/form/formcontrol-editor.abstract.component'; import { uniqueId } from 'lodash-es'; +import { SpinnerComponent } from '../../spinner/spinner.component'; +import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; @Component({ selector: 'ozgcloud-file-upload-editor', templateUrl: './file-upload-editor.component.html', styleUrls: ['./file-upload-editor.component.scss'], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + MatRipple, + MatIcon, + SpinnerComponent, + MatError, + ValidationErrorComponent, + ConvertForDataTestPipe, + ], }) -export class FileUploadEditorComponent - extends FormControlEditorAbstractComponent - implements OnInit -{ +export class FileUploadEditorComponent extends FormControlEditorAbstractComponent implements OnInit { + public parentForm = inject(FormGroupDirective); + @Input() label: string = ''; @Input() parentFormArrayName: string; @Input() accept: string = '*/*'; @@ -72,19 +80,13 @@ export class FileUploadEditorComponent this.setErrors(); } - constructor(public parentForm: FormGroupDirective) { - super(null); - } - override ngOnInit(): void { this.fileLinkControls = this.parentForm.form.get(this.parentFormArrayName) as UntypedFormArray; } buildFormArray(fileLinkList: string[]): void { this.fileLinkControls.clear(); - fileLinkList.forEach((link: string) => - this.fileLinkControls.push(new UntypedFormControl(link)), - ); + fileLinkList.forEach((link: string) => this.fileLinkControls.push(new UntypedFormControl(link))); } resetInput(): void { diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.html new file mode 100644 index 0000000000..8dab6eb918 --- /dev/null +++ b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.html @@ -0,0 +1,66 @@ +<!-- + +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: + +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. + +--> +<mat-form-field + [subscriptSizing]="subscriptSizing" + class="compact-input" + appearance="{{ appearance }}" + [floatLabel]="readOnly || autoFocus ? 'always' : 'auto'" +> + <mat-label>{{ label }}</mat-label> + <div class="wrapper"> + <input + #inputElement + matInput + placeholder="{{ placeholder }}" + [formControl]="fieldControl" + [autocomplete]="autocomplete" + [readonly]="readOnly" + (blur)="touch()" + [required]="required" + [attr.data-test-id]="(label | convertForDataTest) + '-text-input'" + [class.with-clear-button]="showClearButton$ | async" + /> + @if (showClearButton$ | async) { + <button + data-test-id="clear-button" + class="clear-button" + type="button" + (click)="onClear()" + mat-icon-button + aria-label="Leeren" + > + <mat-icon>close</mat-icon> + </button> + } + </div> + <mat-error> + <ozgcloud-validation-error + [attr.data-test-id]="(getPlaceholderLabel() | convertForDataTest) + '-text-error'" + [invalidParams]="invalidParams" + [label]="getPlaceholderLabel()" + ></ozgcloud-validation-error> + </mat-error> +</mat-form-field> diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.scss b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.scss similarity index 100% rename from alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.scss rename to alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.scss diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.spec.ts similarity index 84% rename from alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.spec.ts rename to alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.spec.ts index e2000c8388..52c2e53829 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.spec.ts @@ -29,18 +29,26 @@ import { MatInputModule } from '@angular/material/input'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { MockComponent } from 'ng-mocks'; import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; -import { TextEditorComponent } from './text-editor.component'; +import { OzgcloudTextEditorComponent } from './ozgcloud-text-editor.component'; -describe('TextEditorComponent', () => { - let component: TextEditorComponent; - let fixture: ComponentFixture<TextEditorComponent>; +describe('OzgcloudTextEditorComponent', () => { + let component: OzgcloudTextEditorComponent; + let fixture: ComponentFixture<OzgcloudTextEditorComponent>; const input: string = '[data-test-id="Ein_Label-text-input"]'; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [TextEditorComponent, ConvertForDataTestPipe, MockComponent(ValidationErrorComponent)], - imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, BrowserAnimationsModule], + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + OzgcloudTextEditorComponent, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + BrowserAnimationsModule, + ConvertForDataTestPipe, + MockComponent(ValidationErrorComponent), + ], + imports: [], providers: [ { provide: NgControl, @@ -51,7 +59,7 @@ describe('TextEditorComponent', () => { }); beforeEach(() => { - fixture = TestBed.createComponent(TextEditorComponent); + fixture = TestBed.createComponent(OzgcloudTextEditorComponent); component = fixture.componentInstance; component.label = 'Ein Label'; fixture.detectChanges(); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.ts similarity index 69% rename from alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts rename to alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.ts index 5e3227127c..9e1294a605 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/ozgcloud-text-editor.component.ts @@ -21,21 +21,38 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { hasContent } from '@alfa-client/tech-shared'; +import { ConvertForDataTestPipe, hasContent } from '@alfa-client/tech-shared'; +import { AsyncPipe } from '@angular/common'; import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; -import { SubscriptSizing } from '@angular/material/form-field'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatIconButton } from '@angular/material/button'; +import { MatError, MatFormField, MatLabel, SubscriptSizing } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; +import { MatInput } from '@angular/material/input'; import { FormControlEditorAbstractComponent } from 'libs/design-component/src/lib/form/formcontrol-editor.abstract.component'; import { Observable, map, startWith } from 'rxjs'; +import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; @Component({ selector: 'ozgcloud-text-editor', - templateUrl: './text-editor.component.html', - styleUrls: ['./text-editor.component.scss'], + templateUrl: './ozgcloud-text-editor.component.html', + styleUrls: ['./ozgcloud-text-editor.component.scss'], + standalone: true, + imports: [ + MatFormField, + MatLabel, + MatInput, + FormsModule, + ReactiveFormsModule, + MatIconButton, + MatIcon, + MatError, + ValidationErrorComponent, + AsyncPipe, + ConvertForDataTestPipe, + ], }) -export class TextEditorComponent - extends FormControlEditorAbstractComponent - implements OnInit, AfterViewInit -{ +export class OzgcloudTextEditorComponent extends FormControlEditorAbstractComponent implements OnInit, AfterViewInit { @ViewChild('inputElement') inputElement: ElementRef; @Input() label: string; diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html deleted file mode 100644 index 303e1315d5..0000000000 --- a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html +++ /dev/null @@ -1,65 +0,0 @@ -<!-- - - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. - ---> -<mat-form-field - [subscriptSizing]="subscriptSizing" - class="compact-input" - appearance="{{ appearance }}" - [floatLabel]="readOnly || autoFocus ? 'always' : 'auto'" -> - <mat-label>{{ label }}</mat-label> - <div class="wrapper"> - <input - #inputElement - matInput - placeholder="{{ placeholder }}" - [formControl]="fieldControl" - [autocomplete]="autocomplete" - [readonly]="readOnly" - (blur)="touch()" - [required]="required" - [attr.data-test-id]="(label | convertForDataTest) + '-text-input'" - [class.with-clear-button]="showClearButton$ | async" - /> - <button - *ngIf="showClearButton$ | async" - data-test-id="clear-button" - class="clear-button" - type="button" - (click)="onClear()" - mat-icon-button - aria-label="Leeren" - > - <mat-icon>close</mat-icon> - </button> - </div> - <mat-error> - <ozgcloud-validation-error - [attr.data-test-id]="(getPlaceholderLabel() | convertForDataTest) + '-text-error'" - [invalidParams]="invalidParams" - [label]="getPlaceholderLabel()" - ></ozgcloud-validation-error> - </mat-error> -</mat-form-field> diff --git a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.spec.ts index 49217b8c81..670590d080 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.spec.ts @@ -21,12 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { NgControl, ReactiveFormsModule, UntypedFormControl } from '@angular/forms'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { MockComponent } from 'ng-mocks'; import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; import { TextAreaEditorComponent } from './textarea-editor.component'; @@ -37,12 +37,15 @@ describe('TextAreaEditorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ + imports: [ + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + BrowserAnimationsModule, TextAreaEditorComponent, ConvertForDataTestPipe, MockComponent(ValidationErrorComponent), ], - imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, BrowserAnimationsModule], providers: [ { provide: NgControl, @@ -67,9 +70,7 @@ describe('TextAreaEditorComponent', () => { component.label = 'Ein Label'; fixture.detectChanges(); - const element: HTMLElement = fixture.nativeElement.querySelector( - '[data-test-id="Ein_Label-textarea-input"]', - ); + const element: HTMLElement = fixture.nativeElement.querySelector('[data-test-id="Ein_Label-textarea-input"]'); expect(element).toBeInstanceOf(HTMLElement); }); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts index 27644f1824..a58f6a04d4 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts @@ -21,19 +21,33 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ConvertForDataTestPipe } from '@alfa-client/tech-shared'; import { CdkTextareaAutosize } from '@angular/cdk/text-field'; import { AfterViewInit, Component, Input, ViewChild } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatError, MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { FormControlEditorAbstractComponent } from 'libs/design-component/src/lib/form/formcontrol-editor.abstract.component'; +import { ValidationErrorComponent } from '../../validation-error/validation-error.component'; @Component({ selector: 'ozgcloud-textarea-editor', templateUrl: './textarea-editor.component.html', styleUrls: ['./textarea-editor.component.scss'], + standalone: true, + imports: [ + MatFormField, + MatLabel, + MatInput, + CdkTextareaAutosize, + FormsModule, + ReactiveFormsModule, + MatError, + ValidationErrorComponent, + ConvertForDataTestPipe, + ], }) -export class TextAreaEditorComponent - extends FormControlEditorAbstractComponent - implements AfterViewInit -{ +export class TextAreaEditorComponent extends FormControlEditorAbstractComponent implements AfterViewInit { @ViewChild('autosize') autosize: CdkTextareaAutosize; @Input() placeholder: string; diff --git a/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.spec.ts index 4f5bc141b8..f8b2852312 100644 --- a/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.spec.ts @@ -23,12 +23,7 @@ */ import { PortalModule } from '@angular/cdk/portal'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { - MatAccordion, - MatExpansionPanel, - MatExpansionPanelHeader, - MatExpansionPanelTitle, -} from '@angular/material/expansion'; +import { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion'; import { MatIcon } from '@angular/material/icon'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { ExpansionPanelComponent } from './expansion-panel.component'; @@ -47,8 +42,8 @@ describe('VorgangDetailExpansionPanelComponent', () => { MatAccordion, MatIcon, MatExpansionPanelHeader, + ExpansionPanelComponent, ], - declarations: [ExpansionPanelComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.ts b/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.ts index 451efa2332..c1056c852e 100644 --- a/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/expansion-panel/expansion-panel.component.ts @@ -21,12 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { NgStyle } from '@angular/common'; import { Component, Input } from '@angular/core'; +import { MatIconButton } from '@angular/material/button'; +import { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-expansion-panel', templateUrl: './expansion-panel.component.html', styleUrls: ['./expansion-panel.component.scss'], + standalone: true, + imports: [MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle, MatIconButton, MatIcon, NgStyle], }) export class ExpansionPanelComponent { @Input() headline: string; diff --git a/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.html b/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.html index 3421e95727..6cd69f6200 100644 --- a/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.html +++ b/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.html @@ -1,40 +1,34 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<ng-container *ngIf="uploadInProgress$ | async as uploadInProgress"> - <input - data-test-id="file-upload-input" - [id]="myId" - type="file" - [accept]="accept" - (change)="onFileChanged($event)" - /> +@if (uploadInProgress$ | async; as uploadInProgress) { + <input data-test-id="file-upload-input" [id]="myId" type="file" [accept]="accept" (change)="onFileChanged($event)" /> <label [attr.for]="myId" matRipple aria-label="Anhang hinzufügen"> - <mat-icon *ngIf="!uploadInProgress.loading">attach_file</mat-icon> - - <ozgcloud-spinner [stateResource]="uploadInProgress" [diameter]="22" padding="0"> - </ozgcloud-spinner> + @if (!uploadInProgress.loading) { + <mat-icon>attach_file</mat-icon> + } + <ozgcloud-spinner [stateResource]="uploadInProgress" [diameter]="22" padding="0"> </ozgcloud-spinner> </label> -</ng-container> +} diff --git a/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.spec.ts index b823f373c5..a8ead2a90d 100644 --- a/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.spec.ts @@ -23,10 +23,10 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { FileUploadComponent } from './file-upload.component'; +import { SpinnerComponent } from '@alfa-client/ui'; import { MatIcon } from '@angular/material/icon'; import { MockComponent } from 'ng-mocks'; -import { SpinnerComponent } from '@alfa-client/ui'; +import { FileUploadComponent } from './file-upload.component'; describe('FileUploadComponent', () => { let component: FileUploadComponent; @@ -34,7 +34,7 @@ describe('FileUploadComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [FileUploadComponent, MatIcon, MockComponent(SpinnerComponent)], + imports: [FileUploadComponent, MatIcon, MockComponent(SpinnerComponent)], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.ts b/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.ts index cfafed7120..37c1e62075 100644 --- a/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/file-upload/file-upload.component.ts @@ -21,15 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, Output } from '@angular/core'; import { StateResource } from '@alfa-client/tech-shared'; +import { AsyncPipe } from '@angular/common'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { MatRipple } from '@angular/material/core'; +import { MatIcon } from '@angular/material/icon'; import { uniqueId } from 'lodash-es'; import { Observable } from 'rxjs'; +import { SpinnerComponent } from '../spinner/spinner.component'; @Component({ selector: 'ozgcloud-file-upload', templateUrl: './file-upload.component.html', styleUrls: ['./file-upload.component.scss'], + standalone: true, + imports: [MatRipple, MatIcon, SpinnerComponent, AsyncPipe], }) export class FileUploadComponent { @Input() accept: string = '*/*'; diff --git a/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.spec.ts index f74f63c0b9..119257aa82 100644 --- a/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.spec.ts @@ -32,8 +32,7 @@ describe('FixedDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [MatDialogModule, MatIcon], - declarations: [FixedDialogComponent], + imports: [MatDialogModule, MatIcon, FixedDialogComponent], providers: [ { provide: MatDialogRef, diff --git a/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.ts b/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.ts index 0a0d03890f..a4bb9d6af8 100644 --- a/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/fixed-dialog/fixed-dialog.component.ts @@ -21,26 +21,32 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Inject, Injector } from '@angular/core'; -import { MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { CdkScrollable } from '@angular/cdk/scrolling'; +import { NgClass, NgComponentOutlet } from '@angular/common'; +import { Component, inject, Injector, OnInit } from '@angular/core'; +import { MatIconButton } from '@angular/material/button'; +import { MAT_DIALOG_DATA, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog'; +import { MatIcon } from '@angular/material/icon'; import { FixedDialogData } from './fixed-dialog-data.model'; @Component({ selector: 'ozgcloud-fixed-dialog', templateUrl: './fixed-dialog.component.html', + standalone: true, + imports: [MatDialogTitle, MatIconButton, NgClass, MatIcon, MatDialogClose, CdkScrollable, MatDialogContent, NgComponentOutlet], }) -export class FixedDialogComponent { +export class FixedDialogComponent implements OnInit { + public data = inject<FixedDialogData>(MAT_DIALOG_DATA); + private injector = inject(Injector); + componentInjector: Injector; isMinimized: boolean; - constructor( - @Inject(MAT_DIALOG_DATA) public data: FixedDialogData, - injector: Injector, - ) { + ngOnInit(): void { this.componentInjector = Injector.create({ providers: [], - parent: injector, + parent: this.injector, }); } diff --git a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.spec.ts index 29d0ea1951..650e50ec93 100644 --- a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.spec.ts @@ -21,10 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIcon } from '@angular/material/icon'; -import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { MockComponent } from 'ng-mocks'; import { ConnectionTimeoutRetryDialogComponent } from './connection-timeout-retry-dialog.component'; @@ -34,8 +34,8 @@ describe('ConnectionTimeoutRetryDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [MatDialogModule], - declarations: [ + imports: [ + MatDialogModule, ConnectionTimeoutRetryDialogComponent, MatIcon, MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), diff --git a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.ts b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.ts index eb209e7c7b..c2cc728cf6 100644 --- a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component.ts @@ -21,11 +21,16 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { CdkScrollable } from '@angular/cdk/scrolling'; import { Component } from '@angular/core'; +import { MatDialogContent, MatDialogTitle } from '@angular/material/dialog'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-connection-timeout-retry-dialog', templateUrl: './connection-timeout-retry-dialog.component.html', styleUrls: ['./connection-timeout-retry-dialog.component.scss'], + standalone: true, + imports: [MatDialogTitle, MatIcon, CdkScrollable, MatDialogContent], }) export class ConnectionTimeoutRetryDialogComponent {} diff --git a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.spec.ts index 42d3c9febf..6c41b694c5 100644 --- a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.spec.ts @@ -21,10 +21,10 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialogModule } from '@angular/material/dialog'; import { MatIcon } from '@angular/material/icon'; -import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { MockComponent } from 'ng-mocks'; import { ConnectionTimeoutRetryFailDialogComponent } from './connection-timeout-retry-fail-dialog.component'; @@ -34,8 +34,8 @@ describe('ConnectionTimeoutRetryFailDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [MatDialogModule], - declarations: [ + imports: [ + MatDialogModule, ConnectionTimeoutRetryFailDialogComponent, MatIcon, MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), diff --git a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.ts b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.ts index 858098b7e7..62646a5aad 100644 --- a/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component.ts @@ -21,12 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { CdkScrollable } from '@angular/cdk/scrolling'; import { Component } from '@angular/core'; +import { MatDialogContent, MatDialogTitle } from '@angular/material/dialog'; +import { MatIcon } from '@angular/material/icon'; +import { OzgcloudStrokedButtonWithSpinnerComponent } from '../../ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component'; @Component({ selector: 'ozgcloud-connection-timeout-retry-fail-dialog', templateUrl: './connection-timeout-retry-fail-dialog.component.html', styleUrls: ['./connection-timeout-retry-fail-dialog.component.scss'], + standalone: true, + imports: [MatDialogTitle, MatIcon, CdkScrollable, MatDialogContent, OzgcloudStrokedButtonWithSpinnerComponent], }) export class ConnectionTimeoutRetryFailDialogComponent { reload(): void { diff --git a/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.html b/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.html index 1bb8fb6c94..ce20ce0990 100644 --- a/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.html +++ b/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.html @@ -33,11 +33,15 @@ (click)="clickEmitter.emit($event)" type="button" > - <mat-icon *ngIf="icon" data-test-class="icon" [style.visibility]="isDisabled ? 'hidden' : 'visible'"> - {{ icon }} - </mat-icon> + @if (icon) { + <mat-icon data-test-class="icon" [style.visibility]="isDisabled ? 'hidden' : 'visible'"> + {{ icon }} + </mat-icon> + } - <mat-icon *ngIf="svgIcon" data-test-class="icon" [svgIcon]="svgIcon" [style.visibility]="isDisabled ? 'hidden' : 'visible'" /> + @if (svgIcon) { + <mat-icon data-test-class="icon" [svgIcon]="svgIcon" [style.visibility]="isDisabled ? 'hidden' : 'visible'" /> + } <ozgcloud-spinner [stateResource]="getStateResource()" [diameter]="22" [show]="showSpinner" padding="0" /> </button> diff --git a/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.spec.ts index 7cf06e5752..365f71d7a8 100644 --- a/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.spec.ts @@ -26,7 +26,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; import { TooltipDirective } from '@ods/system'; -import { MockComponent, MockDirective, MockModule } from 'ng-mocks'; +import { MockComponent, MockDirective } from 'ng-mocks'; import { SpinnerComponent } from '../spinner/spinner.component'; import { IconButtonWithSpinnerComponent } from './icon-button-with-spinner.component'; @@ -37,15 +37,10 @@ describe('IconButtonWithSpinnerComponent', () => { const buttonSelector = '[data-test-class="icon-button"]'; const iconSelector = '[data-test-class="icon"]'; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ - IconButtonWithSpinnerComponent, - MatIcon, - MockComponent(SpinnerComponent), - MockDirective(TooltipDirective), - MockModule(MatMenuModule), - ], + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [IconButtonWithSpinnerComponent, MatIcon, MatMenuModule], + declarations: [MockComponent(SpinnerComponent), MockDirective(TooltipDirective)], }); }); diff --git a/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.ts b/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.ts index e2b8c90813..f83e6bfcc7 100644 --- a/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/icon-button-with-spinner/icon-button-with-spinner.component.ts @@ -23,13 +23,21 @@ */ import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { MatIconButton } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; +import { MatMenuTrigger } from '@angular/material/menu'; +import { MatTooltip } from '@angular/material/tooltip'; import { Resource } from '@ngxp/rest'; +import { TooltipDirective } from '@ods/system'; import { isNil } from 'lodash-es'; +import { SpinnerComponent } from '../spinner/spinner.component'; @Component({ selector: 'ozgcloud-icon-button-with-spinner', templateUrl: './icon-button-with-spinner.component.html', styleUrls: ['./icon-button-with-spinner.component.scss'], + standalone: true, + imports: [MatIconButton, MatTooltip, MatMenuTrigger, MatIcon, SpinnerComponent, TooltipDirective], }) export class IconButtonWithSpinnerComponent { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.html b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.html index 3ffd5acf99..7c9621388e 100644 --- a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.html +++ b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.html @@ -1,26 +1,26 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> <h1 mat-dialog-title> @@ -30,14 +30,13 @@ <mat-dialog-content> <p data-test-id="error-message" class="error-message"> Wir sind nicht ganz sicher, was schiefgelaufen ist. Der Fehler - <span *ngIf="showId()">(ID: {{ data.issues[0].exceptionId }})</span> wurde unserem Support - gemeldet. Bitte starten sie die Anwendung neu. + @if (showId()) { + <span>(ID: {{ data.issues[0].exceptionId }})</span> + } + wurde unserem Support gemeldet. Bitte starten sie die Anwendung neu. </p> <a href="/" tabindex="-1" class="button"> - <ozgcloud-stroked-button-with-spinner - icon="refresh" - text="Neu starten" - ></ozgcloud-stroked-button-with-spinner> + <ozgcloud-stroked-button-with-spinner icon="refresh" text="Neu starten"></ozgcloud-stroked-button-with-spinner> </a> <ozgcloud-stroked-button-with-spinner icon="logout" diff --git a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts index ebc6907e4a..3eb87f3f90 100644 --- a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.spec.ts @@ -21,12 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { mock } from '@alfa-client/test-utils'; +import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatIcon } from '@angular/material/icon'; import { faker } from '@faker-js/faker'; -import { mock } from '@alfa-client/test-utils'; -import { OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui'; import { OAuthService } from 'angular-oauth2-oidc'; import { createIssue } from 'libs/tech-shared/test/error'; import { MockComponent } from 'ng-mocks'; @@ -40,12 +40,12 @@ describe('InternalServerErrorDialogComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ + imports: [ + MatDialogModule, InternalServerErrorDialogComponent, MatIcon, MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), ], - imports: [MatDialogModule], providers: [ { provide: MatDialogRef, @@ -83,9 +83,7 @@ describe('InternalServerErrorDialogComponent', () => { dialogData = { error: { ...{ issues: [createIssue()] }, id: exceptionId } }; fixture.detectChanges(); - expect(fixture.nativeElement).not.toHaveTextContent( - `ID: ${dialogData.error.issues[0].exceptionId}`, - ); + expect(fixture.nativeElement).not.toHaveTextContent(`ID: ${dialogData.error.issues[0].exceptionId}`); }); }); }); diff --git a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.ts b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.ts index cfcbff45db..e55158c9e1 100644 --- a/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/notification/internal-server-error-dialog/internal-server-error-dialog.component.ts @@ -21,21 +21,24 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Inject } from '@angular/core'; -import { MAT_DIALOG_DATA } from '@angular/material/dialog'; import { ApiError, hasExceptionId } from '@alfa-client/tech-shared'; +import { CdkScrollable } from '@angular/cdk/scrolling'; +import { Component, inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogContent, MatDialogTitle } from '@angular/material/dialog'; +import { MatIcon } from '@angular/material/icon'; import { OAuthService } from 'angular-oauth2-oidc'; +import { OzgcloudStrokedButtonWithSpinnerComponent } from '../../ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component'; @Component({ selector: 'ozgcloud-internal-server-error-dialog', templateUrl: './internal-server-error-dialog.component.html', styleUrls: ['./internal-server-error-dialog.component.scss'], + standalone: true, + imports: [MatDialogTitle, MatIcon, CdkScrollable, MatDialogContent, OzgcloudStrokedButtonWithSpinnerComponent], }) export class InternalServerErrorDialogComponent { - constructor( - @Inject(MAT_DIALOG_DATA) public data: ApiError, - public authService: OAuthService, - ) {} + public data: ApiError = inject<ApiError>(MAT_DIALOG_DATA); + public authService = inject(OAuthService); showId(): boolean { return hasExceptionId(this.data); diff --git a/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.spec.ts index f5fbf2d6c3..b53d242247 100644 --- a/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.spec.ts @@ -23,8 +23,8 @@ */ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { OpenUrlButtonComponent } from './open-url-button.component'; import { MockComponent } from 'ng-mocks'; +import { OpenUrlButtonComponent } from './open-url-button.component'; describe('OpenUrlButtonComponent', () => { let component: OpenUrlButtonComponent; @@ -32,7 +32,7 @@ describe('OpenUrlButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [OpenUrlButtonComponent, MockComponent(OpenUrlButtonComponent)], + imports: [OpenUrlButtonComponent, MockComponent(OpenUrlButtonComponent)], }).compileComponents(); fixture = TestBed.createComponent(OpenUrlButtonComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.ts b/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.ts index 4663a18ab9..f080acaa27 100644 --- a/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/open-url-button/open-url-button.component.ts @@ -22,11 +22,16 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatAnchor } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; @Component({ selector: 'ozgcloud-open-url-button', templateUrl: './open-url-button.component.html', styleUrls: ['./open-url-button.component.scss'], + standalone: true, + imports: [MatAnchor, MatTooltip, MatIcon], }) export class OpenUrlButtonComponent { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.spec.ts index ee97fa5589..5447abd13a 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.spec.ts @@ -41,7 +41,7 @@ describe('OzgcloudButtonWithSpinnerComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ + imports: [ MatButton, MatRipple, OzgcloudButtonWithSpinnerComponent, diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.ts index 497704e4b9..fb46489bd4 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component.ts @@ -21,15 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { MatButton } from '@angular/material/button'; +import { MatTooltip } from '@angular/material/tooltip'; import { Resource } from '@ngxp/rest'; +import { TooltipDirective } from '@ods/system'; import { isNil } from 'lodash-es'; +import { OzgcloudButtonContentComponent } from '../shared/ozgcloud-button-content/ozgcloud-button-content.component'; @Component({ selector: 'ozgcloud-button-with-spinner', templateUrl: './ozgcloud-button-with-spinner.component.html', styleUrls: ['./ozgcloud-button-with-spinner.component.scss'], + standalone: true, + imports: [MatButton, MatTooltip, OzgcloudButtonContentComponent, TooltipDirective], }) export class OzgcloudButtonWithSpinnerComponent implements OnInit { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.spec.ts index 976c0b0c39..48f65db014 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.spec.ts @@ -61,10 +61,7 @@ describe('IconButtonPrimaryWithSpinnerComponent', () => { it('should create aria label', () => { component.ngOnInit(); - expect(createAriaLabelForIconButtonMock).toHaveBeenCalledWith( - component.tooltip, - component.svgIcon, - ); + expect(createAriaLabelForIconButtonMock).toHaveBeenCalledWith(component.tooltip, component.svgIcon); }); it('should set aria label', () => { diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.ts index f6dd2b5094..d5fc959cc4 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component.ts @@ -21,14 +21,20 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { createAriaLabelForIconButton, StateResource } from '@alfa-client/tech-shared'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { MatIconButton } from '@angular/material/button'; +import { MatIcon } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; import { Resource } from '@ngxp/rest'; +import { TooltipDirective } from '@ods/system'; @Component({ selector: 'ozgcloud-icon-button-primary', templateUrl: './ozgcloud-icon-button-primary.component.html', styleUrls: ['./ozgcloud-icon-button-primary.component.scss'], + standalone: true, + imports: [MatIconButton, MatTooltip, MatIcon, TooltipDirective], }) export class OzgcloudIconButtonPrimaryComponent implements OnInit { @Input() svgIcon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.spec.ts index 208868555e..ac0307f012 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.spec.ts @@ -41,7 +41,7 @@ describe('OzgcloudStrokedButtonWithSpinnerComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ + imports: [ MatButton, MatRipple, OzgcloudStrokedButtonWithSpinnerComponent, diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.ts index 218915f94f..36f102a0d7 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component.ts @@ -21,15 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { MatButton } from '@angular/material/button'; +import { MatTooltip } from '@angular/material/tooltip'; import { Resource } from '@ngxp/rest'; +import { TooltipDirective } from '@ods/system'; import { isNil } from 'lodash-es'; +import { OzgcloudButtonContentComponent } from '../shared/ozgcloud-button-content/ozgcloud-button-content.component'; @Component({ selector: 'ozgcloud-stroked-button-with-spinner', templateUrl: './ozgcloud-stroked-button-with-spinner.component.html', styleUrls: ['./ozgcloud-stroked-button-with-spinner.component.scss'], + standalone: true, + imports: [MatButton, MatTooltip, OzgcloudButtonContentComponent, TooltipDirective], }) export class OzgcloudStrokedButtonWithSpinnerComponent implements OnInit { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.html b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.html index 168a6bfdaa..88d174c6a8 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.html +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.html @@ -1,47 +1,46 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: + +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<mat-icon - *ngIf="icon" - data-test-class="icon" - [class.with-text]="text" - [style.visibility]="isDisabled ? 'hidden' : 'visible'" -> - {{ icon }} -</mat-icon> - -<mat-icon - *ngIf="svgIcon" - data-test-class="icon" - [class.with-text]="text" - [svgIcon]="svgIcon" - [style.visibility]="isDisabled ? 'hidden' : 'visible'" -> -</mat-icon> - -<span *ngIf="text" class="text-sm" data-test-class="button-with-spinner-text">{{ text }}</span> - -<ozgcloud-spinner [diameter]="22" padding="0" [stateResource]="stateResource" [show]="showSpinner"> -</ozgcloud-spinner> +@if (icon) { + <mat-icon data-test-class="icon" [class.with-text]="text" [style.visibility]="isDisabled ? 'hidden' : 'visible'"> + {{ icon }} + </mat-icon> +} + +@if (svgIcon) { + <mat-icon + data-test-class="icon" + [class.with-text]="text" + [svgIcon]="svgIcon" + [style.visibility]="isDisabled ? 'hidden' : 'visible'" + > + </mat-icon> +} + +@if (text) { + <span class="text-sm" data-test-class="button-with-spinner-text">{{ text }}</span> +} + +<ozgcloud-spinner [diameter]="22" padding="0" [stateResource]="stateResource" [show]="showSpinner"> </ozgcloud-spinner> diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.spec.ts index 0a313a7ef6..14e079e54c 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.spec.ts @@ -37,7 +37,7 @@ describe('OzgcloudButtonContentComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [MatIcon, MockComponent(SpinnerComponent), OzgcloudButtonContentComponent], + imports: [MatIcon, MockComponent(SpinnerComponent), OzgcloudButtonContentComponent], }).compileComponents(); fixture = TestBed.createComponent(OzgcloudButtonContentComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.ts index 32283456c7..4e2b5fec9f 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.ts @@ -21,14 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; import { StateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; import { Resource } from '@ngxp/rest'; +import { SpinnerComponent } from '../../../spinner/spinner.component'; @Component({ selector: 'ozgcloud-button-content', templateUrl: './ozgcloud-button-content.component.html', styleUrls: ['./ozgcloud-button-content.component.scss'], + standalone: true, + imports: [MatIcon, SpinnerComponent], }) export class OzgcloudButtonContentComponent { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts index da2fb2923e..077780a3e1 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts @@ -23,13 +23,15 @@ */ import { Dialog, DialogConfig, DialogRef } from '@angular/cdk/dialog'; import { ComponentType } from '@angular/cdk/portal'; -import { Injectable, ViewContainerRef } from '@angular/core'; +import { inject, Injectable, ViewContainerRef } from '@angular/core'; import { isNil } from 'lodash-es'; @Injectable({ providedIn: 'root', }) export class OzgcloudDialogService { + private dialog = inject(Dialog); + readonly WIZARD_DIALOG_CONFIG: DialogConfig = { width: '1000px', restoreFocus: false, @@ -41,8 +43,6 @@ export class OzgcloudDialogService { disableClose: true, }; - constructor(private dialog: Dialog) {} - public openWizard<C, D, R = unknown>(component: ComponentType<C>, data?: D): DialogRef<R> { return this.openDialog<C, R>(component, this.buildDialogConfigWithData<D>(data, this.WIZARD_DIALOG_CONFIG)); } diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.spec.ts index 2f46c2cd4b..348a842ef6 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.spec.ts @@ -31,8 +31,7 @@ describe('OzgcloudIconComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [OzgcloudIconComponent], - imports: [MatIcon], + imports: [MatIcon, OzgcloudIconComponent], }).compileComponents(); fixture = TestBed.createComponent(OzgcloudIconComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.ts index 888c31801b..b2e99d1f83 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-icon/ozgcloud-icon.component.ts @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-icon', templateUrl: './ozgcloud-icon.component.html', styleUrls: ['./ozgcloud-icon.component.scss'], + standalone: true, + imports: [MatIcon], }) export class OzgcloudIconComponent { @Input() icon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.spec.ts index e967e79c2a..454e44cb8d 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.spec.ts @@ -31,8 +31,7 @@ describe('OzgcloudMenuComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [OzgcloudMenuComponent], - imports: [MatMenuModule], + imports: [MatMenuModule, OzgcloudMenuComponent], }).compileComponents(); fixture = TestBed.createComponent(OzgcloudMenuComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.ts index bd007c3069..d267a8ffe0 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component.ts @@ -28,6 +28,8 @@ import { MatMenu } from '@angular/material/menu'; selector: 'ozgcloud-menu', templateUrl: './ozgcloud-menu.component.html', styleUrls: ['./ozgcloud-menu.component.scss'], + standalone: true, + imports: [MatMenu], }) export class OzgcloudMenuComponent { @ViewChild('menu', { static: true }) matMenu: MatMenu; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.html b/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.html index 604b944120..f6dd97a4e5 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.html +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.html @@ -1,34 +1,35 @@ <!-- - Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<ozgcloud-icon-button-primary - *ngIf="isPasteSupported" - [tooltip]="tooltip" - svgIcon="paste_from_clipboard" - class="paste_icon" - (clickEmitter)="onPaste()" - data-test-id="paste_from_clipboard" -> -</ozgcloud-icon-button-primary> +@if (isPasteSupported) { + <ozgcloud-icon-button-primary + [tooltip]="tooltip" + svgIcon="paste_from_clipboard" + class="paste_icon" + (clickEmitter)="onPaste()" + data-test-id="paste_from_clipboard" + > + </ozgcloud-icon-button-primary> +} diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.spec.ts index e91b91840b..918ec8d7c1 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.spec.ts @@ -50,8 +50,8 @@ describe('OzgcloudPasteTextButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [MatIconTestingModule], - declarations: [ + imports: [ + MatIconTestingModule, OzgcloudPasteTextButtonComponent, MockComponent(MatIcon), MockComponent(OzgcloudIconButtonPrimaryComponent), diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.ts index de10060dbe..3fa9c14b0b 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-paste-text-button/ozgcloud-paste-text-button.component.ts @@ -21,13 +21,16 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { isClipboardReadSupported } from '@alfa-client/tech-shared'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { OzgcloudIconButtonPrimaryComponent } from '../ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component'; @Component({ selector: 'ozgcloud-paste-text-button', templateUrl: './ozgcloud-paste-text-button.component.html', styleUrls: ['./ozgcloud-paste-text-button.component.scss'], + standalone: true, + imports: [OzgcloudIconButtonPrimaryComponent], }) export class OzgcloudPasteTextButtonComponent implements OnInit { @Input() tooltip: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.spec.ts index e29ecd69fc..b789f1e69a 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.spec.ts @@ -31,8 +31,7 @@ describe('OzgcloudRoutingButtonComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [OzgcloudRoutingButtonComponent], - imports: [RouterTestingModule], + imports: [RouterTestingModule, OzgcloudRoutingButtonComponent], }).compileComponents(); fixture = TestBed.createComponent(OzgcloudRoutingButtonComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.ts index fa61fa8f60..92d82c8800 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-routing-button/ozgcloud-routing-button.component.ts @@ -22,11 +22,15 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatAnchor } from '@angular/material/button'; +import { RouterLink } from '@angular/router'; @Component({ selector: 'ozgcloud-routing-button', templateUrl: './ozgcloud-routing-button.component.html', styleUrls: ['./ozgcloud-routing-button.component.scss'], + standalone: true, + imports: [MatAnchor, RouterLink], }) export class OzgcloudRoutingButtonComponent { @Input() routerLinkPath: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.spec.ts index 734f2aa0c6..6189dfc0e3 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.spec.ts @@ -31,8 +31,7 @@ describe('OzgcloudSvgIconBigComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [OzgcloudSvgIconBigComponent], - imports: [MatIcon], + imports: [MatIcon, OzgcloudSvgIconBigComponent], }).compileComponents(); fixture = TestBed.createComponent(OzgcloudSvgIconBigComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.ts index e99ad4a83f..5d7c397f0a 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon-big/ozgcloud-svgicon-big.component.ts @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-svgicon-big', templateUrl: './ozgcloud-svgicon-big.component.html', styleUrls: ['./ozgcloud-svgicon-big.component.scss'], + standalone: true, + imports: [MatIcon], }) export class OzgcloudSvgIconBigComponent { @Input() svgIcon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.spec.ts index 9ce6d63d48..d3f63f4b2c 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.spec.ts @@ -31,8 +31,7 @@ describe('OzgcloudSvgIconComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [OzgcloudSvgIconComponent], - imports: [MatIcon], + imports: [MatIcon, OzgcloudSvgIconComponent], }).compileComponents(); fixture = TestBed.createComponent(OzgcloudSvgIconComponent); diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.ts index 7aa1d869fc..c35c9ab18d 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component.ts @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, Input } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'ozgcloud-svgicon', templateUrl: './ozgcloud-svgicon.component.html', styleUrls: ['./ozgcloud-svgicon.component.scss'], + standalone: true, + imports: [MatIcon], }) export class OzgcloudSvgIconComponent { @Input() svgIcon: string; diff --git a/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.html b/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.html index 6f992fe024..3a7dda7133 100644 --- a/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.html +++ b/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.html @@ -1,28 +1,30 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<div *ngIf="isVisible" class="progressbar-overlay" data-test-class="progressbar-overlay"> - <mat-progress-bar data-test-id="progress-bar" mode="indeterminate"></mat-progress-bar> -</div> +@if (isVisible) { + <div class="progressbar-overlay" data-test-class="progressbar-overlay"> + <mat-progress-bar data-test-id="progress-bar" mode="indeterminate"></mat-progress-bar> + </div> +} diff --git a/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.spec.ts index 87b2dca90e..a98db10dc4 100644 --- a/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.spec.ts @@ -34,8 +34,7 @@ describe('ProgressBarComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ProgressBarComponent], - imports: [MatProgressBar], + imports: [MatProgressBar, ProgressBarComponent], }); }); diff --git a/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.ts b/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.ts index 69bf1807b1..0ce2009d9f 100644 --- a/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/progress-bar/progress-bar.component.ts @@ -21,14 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; +import { MatProgressBar } from '@angular/material/progress-bar'; import { Resource } from '@ngxp/rest'; @Component({ selector: 'ozgcloud-progress-bar', templateUrl: './progress-bar.component.html', styleUrls: ['./progress-bar.component.scss'], + standalone: true, + imports: [MatProgressBar], }) export class ProgressBarComponent { @Input() stateResource: StateResource<Resource> = createEmptyStateResource<Resource>(); diff --git a/alfa-client/libs/ui/src/lib/ui/slide-toggle/slide-toggle.component.ts b/alfa-client/libs/ui/src/lib/ui/slide-toggle/slide-toggle.component.ts index 951d47620e..862f4c7ec8 100644 --- a/alfa-client/libs/ui/src/lib/ui/slide-toggle/slide-toggle.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/slide-toggle/slide-toggle.component.ts @@ -21,13 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, EventEmitter, Input, Output } from '@angular/core'; import { EMPTY_STRING } from '@alfa-client/tech-shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { MatSlideToggle } from '@angular/material/slide-toggle'; +import { MatTooltip } from '@angular/material/tooltip'; +import { TooltipDirective } from '@ods/system'; @Component({ selector: 'ozgcloud-slide-toggle', templateUrl: './slide-toggle.component.html', styleUrls: ['./slide-toggle.component.scss'], + standalone: true, + imports: [MatSlideToggle, MatTooltip, TooltipDirective], }) export class SlideToggleComponent { @Input() checked: boolean = false; diff --git a/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.html b/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.html index fa88c4170c..488dfee2c9 100644 --- a/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.html +++ b/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.html @@ -1,35 +1,32 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<div - *ngIf="showSpinner" - data-test-class="spinner-transparency" - class="spinner" - [style.padding]="'16px'" -> - <mat-spinner [diameter]="70"></mat-spinner> -</div> - -<ng-content *ngIf="!showSpinner" data-test-class="spinner-transparency-content"></ng-content> +@if (showSpinner) { + <div data-test-class="spinner-transparency" class="spinner" [style.padding]="'16px'"> + <mat-spinner [diameter]="70"></mat-spinner> + </div> +} @else { + <ng-content data-test-class="spinner-transparency-content"></ng-content> +} diff --git a/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.spec.ts index 2c13950761..c5c81db615 100644 --- a/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.spec.ts @@ -38,8 +38,7 @@ describe('SpinnerTransparencyComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [SpinnerTransparencyComponent, SpinnerComponent], - imports: [MatIcon, MatProgressSpinner], + imports: [MatIcon, MatProgressSpinner, SpinnerTransparencyComponent, SpinnerComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.ts b/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.ts index bf70ce6a77..34fa02963b 100644 --- a/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/spinner-transparency/spinner-transparency.component.ts @@ -21,14 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; +import { MatProgressSpinner } from '@angular/material/progress-spinner'; import { Resource } from '@ngxp/rest'; @Component({ selector: 'ozgcloud-spinner-transparency', templateUrl: './spinner-transparency.component.html', styleUrls: ['./spinner-transparency.component.scss'], + standalone: true, + imports: [MatProgressSpinner], }) export class SpinnerTransparencyComponent { @Input() stateResource: StateResource<Resource> = createEmptyStateResource<Resource>(); diff --git a/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.html b/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.html index eaa2ab4398..5a426212ea 100644 --- a/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.html +++ b/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.html @@ -1,31 +1,37 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<div *ngIf="showSpinner" class="spinner" [style.padding]="padding + 'px'"> - <mat-spinner [diameter]="diameter" data-test-class="spinner"> </mat-spinner> - <span *ngIf="text">{{ text }}</span> -</div> +@if (showSpinner) { + <div class="spinner" [style.padding]="padding + 'px'"> + <mat-spinner [diameter]="diameter" data-test-class="spinner"> </mat-spinner> + @if (text) { + <span>{{ text }}</span> + } + </div> +} -<ng-content *ngIf="!showSpinner" data-test-class="spinner-content"></ng-content> +@if (!showSpinner) { + <ng-content data-test-class="spinner-content"></ng-content> +} diff --git a/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.spec.ts index 8bc40b8d5b..27b80e6f55 100644 --- a/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.spec.ts @@ -37,8 +37,7 @@ describe('SpinnerComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ - declarations: [SpinnerComponent], - imports: [MatIcon, MatProgressSpinner], + imports: [MatIcon, MatProgressSpinner, SpinnerComponent], }); }); diff --git a/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.ts b/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.ts index cfd3cfd4d3..1535029656 100644 --- a/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/spinner/spinner.component.ts @@ -23,11 +23,14 @@ */ import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; import { Component, Input } from '@angular/core'; +import { MatProgressSpinner } from '@angular/material/progress-spinner'; @Component({ selector: 'ozgcloud-spinner', templateUrl: './spinner.component.html', styleUrls: ['./spinner.component.scss'], + standalone: true, + imports: [MatProgressSpinner], }) export class SpinnerComponent { @Input() stateResource: StateResource<unknown> = createEmptyStateResource<unknown>(); diff --git a/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.spec.ts index b021131cd7..6586a17065 100644 --- a/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.spec.ts @@ -30,7 +30,7 @@ describe('SubnavigationComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [SubnavigationComponent], + imports: [SubnavigationComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.ts b/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.ts index 631e4713fa..1e2deca56f 100644 --- a/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/subnavigation/subnavigation.component.ts @@ -27,5 +27,6 @@ import { Component } from '@angular/core'; selector: 'ozgcloud-subnavigation', templateUrl: './subnavigation.component.html', styleUrls: ['./subnavigation.component.scss'], + standalone: true, }) export class SubnavigationComponent {} diff --git a/alfa-client/libs/ui/src/lib/ui/ui.module.spec.ts b/alfa-client/libs/ui/src/lib/ui/ui.module.spec.ts deleted file mode 100644 index 1133667573..0000000000 --- a/alfa-client/libs/ui/src/lib/ui/ui.module.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { TestBed } from '@angular/core/testing'; -import { UiModule } from './ui.module'; - -describe('UiModule', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [UiModule], - }).compileComponents(); - }); - - it('should create', () => { - expect(UiModule).toBeDefined(); - }); -}); diff --git a/alfa-client/libs/ui/src/lib/ui/ui.module.ts b/alfa-client/libs/ui/src/lib/ui/ui.module.ts deleted file mode 100644 index e7c19b188d..0000000000 --- a/alfa-client/libs/ui/src/lib/ui/ui.module.ts +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { CommonModule } from '@angular/common'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { DateFnsAdapter, MatDateFnsModule } from '@angular/material-date-fns-adapter'; -import { MatAutocompleteModule } from '@angular/material/autocomplete'; -import { MatBadgeModule } from '@angular/material/badge'; -import { MatButtonModule } from '@angular/material/button'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { DateAdapter, MAT_DATE_LOCALE, MatRippleModule } from '@angular/material/core'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatListModule } from '@angular/material/list'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { MatSlideToggleModule } from '@angular/material/slide-toggle'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { MatTabsModule } from '@angular/material/tabs'; -import { RouterModule } from '@angular/router'; -import { - ArrowBackIconComponent, - ButtonComponent, - FileUploadButtonComponent, - SpinnerIconComponent, - TooltipDirective, -} from '@ods/system'; -import { de } from 'date-fns/locale'; -import { AppIconComponent } from '../icon/app-icon/app-icon.component'; -import { PostfachIconComponent } from '../icon/postfach-icon/postfach-icon.component'; -import { HttpConnectionTimeoutInterceptor } from '../interceptor/http-connection-timeout.interceptor'; -import { HttpErrorInterceptor } from '../interceptor/http-error.interceptor'; -import { SnackbarCloseButtonComponent } from '../snackbar/snackbar-close-button/snackbar-close-button.component'; -import { SnackbarErrorComponent } from '../snackbar/snackbar-error/snackbar-error.component'; -import { SnackbarInfoComponent } from '../snackbar/snackbar-info/snackbar-info.component'; -import { AccordionComponent } from './accordion/accordion.component'; -import { BackButtonComponent } from './back-button/back-button.component'; -import { BasicDialogComponent } from './basic-dialog/basic-dialog.component'; -import { DownloadButtonComponent } from './download-button/download-button.component'; -import { AutocompleteEditorComponent } from './editor/autocomplete-editor/autocomplete-editor.component'; -import { CheckboxEnumEditorComponent } from './editor/checkbox-enum-editor/checkbox-enum-editor.component'; -import { DateEditorComponent } from './editor/date-editor/date-editor.component'; -import { FileUploadEditorComponent } from './editor/file-upload-editor/file-upload-editor.component'; -import { TextEditorComponent } from './editor/text-editor/text-editor.component'; -import { TextAreaEditorComponent } from './editor/textarea-editor/textarea-editor.component'; -import { ExpansionPanelComponent } from './expansion-panel/expansion-panel.component'; -import { FileUploadComponent } from './file-upload/file-upload.component'; -import { FixedDialogComponent } from './fixed-dialog/fixed-dialog.component'; -import { ConnectionTimeoutRetryDialogComponent } from './http-error-dialog/connection-timeout-retry-dialog/connection-timeout-retry-dialog.component'; -import { ConnectionTimeoutRetryFailDialogComponent } from './http-error-dialog/connection-timeout-retry-fail-dialog/connection-timeout-retry-fail-dialog.component'; -import { IconButtonWithSpinnerComponent } from './icon-button-with-spinner/icon-button-with-spinner.component'; -import { InternalServerErrorDialogComponent } from './notification/internal-server-error-dialog/internal-server-error-dialog.component'; -import { OpenUrlButtonComponent } from './open-url-button/open-url-button.component'; -import { OzgcloudButtonWithSpinnerComponent } from './ozgcloud-button/ozgcloud-button-with-spinner/ozgcloud-button-with-spinner.component'; -import { OzgcloudIconButtonPrimaryComponent } from './ozgcloud-button/ozgcloud-icon-button-primary/ozgcloud-icon-button-primary.component'; -import { OzgcloudStrokedButtonWithSpinnerComponent } from './ozgcloud-button/ozgcloud-stroked-button-with-spinner/ozgcloud-stroked-button-with-spinner.component'; -import { OzgcloudButtonContentComponent } from './ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component'; -import { OzgcloudIconComponent } from './ozgcloud-icon/ozgcloud-icon.component'; -import { OzgcloudMenuComponent } from './ozgcloud-menu/ozgcloud-menu.component'; -import { OzgcloudPasteTextButtonComponent } from './ozgcloud-paste-text-button/ozgcloud-paste-text-button.component'; -import { OzgcloudRoutingButtonComponent } from './ozgcloud-routing-button/ozgcloud-routing-button.component'; -import { OzgcloudSvgIconBigComponent } from './ozgcloud-svgicon-big/ozgcloud-svgicon-big.component'; -import { OzgcloudSvgIconComponent } from './ozgcloud-svgicon/ozgcloud-svgicon.component'; -import { ProgressBarComponent } from './progress-bar/progress-bar.component'; -import { SlideToggleComponent } from './slide-toggle/slide-toggle.component'; -import { SpinnerTransparencyComponent } from './spinner-transparency/spinner-transparency.component'; -import { SpinnerComponent } from './spinner/spinner.component'; -import { SubnavigationComponent } from './subnavigation/subnavigation.component'; -import { ValidationErrorComponent } from './validation-error/validation-error.component'; - -@NgModule({ - declarations: [ - SubnavigationComponent, - SpinnerComponent, - OzgcloudButtonWithSpinnerComponent, - OzgcloudStrokedButtonWithSpinnerComponent, - IconButtonWithSpinnerComponent, - ProgressBarComponent, - ExpansionPanelComponent, - SnackbarInfoComponent, - SnackbarErrorComponent, - FileUploadComponent, - DateEditorComponent, - TextEditorComponent, - TextAreaEditorComponent, - ValidationErrorComponent, - AutocompleteEditorComponent, - FixedDialogComponent, - InternalServerErrorDialogComponent, - FileUploadEditorComponent, - PostfachIconComponent, - AccordionComponent, - AppIconComponent, - SlideToggleComponent, - BackButtonComponent, - OzgcloudIconButtonPrimaryComponent, - OzgcloudIconComponent, - OzgcloudRoutingButtonComponent, - OzgcloudSvgIconComponent, - OzgcloudSvgIconBigComponent, - SpinnerTransparencyComponent, - OpenUrlButtonComponent, - DownloadButtonComponent, - ConnectionTimeoutRetryDialogComponent, - ConnectionTimeoutRetryFailDialogComponent, - SnackbarCloseButtonComponent, - BasicDialogComponent, - OzgcloudButtonContentComponent, - OzgcloudPasteTextButtonComponent, - CheckboxEnumEditorComponent, - OzgcloudMenuComponent, - ], - imports: [ - MatButtonModule, - MatIconModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatMenuModule, - MatSlideToggleModule, - MatExpansionModule, - MatRippleModule, - MatSnackBarModule, - MatCheckboxModule, - MatFormFieldModule, - MatInputModule, - MatListModule, - MatDatepickerModule, - MatDateFnsModule, - FormsModule, - ReactiveFormsModule, - MatAutocompleteModule, - MatDialogModule, - MatTabsModule, - MatBadgeModule, - CommonModule, - TechSharedModule, - RouterModule, - MatButtonToggleModule, - FileUploadButtonComponent, - SpinnerIconComponent, - TooltipDirective, - ButtonComponent, - ArrowBackIconComponent, - ], - exports: [ - MatButtonModule, - MatIconModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatMenuModule, - MatSlideToggleModule, - MatExpansionModule, - MatRippleModule, - MatSnackBarModule, - MatCheckboxModule, - MatFormFieldModule, - MatInputModule, - MatListModule, - MatDatepickerModule, - MatDateFnsModule, - FormsModule, - ReactiveFormsModule, - MatAutocompleteModule, - MatDialogModule, - MatTabsModule, - MatBadgeModule, - CommonModule, - TechSharedModule, - RouterModule, - MatButtonToggleModule, - SubnavigationComponent, - SpinnerComponent, - OzgcloudIconButtonPrimaryComponent, - OzgcloudButtonWithSpinnerComponent, - OzgcloudStrokedButtonWithSpinnerComponent, - IconButtonWithSpinnerComponent, - ProgressBarComponent, - ExpansionPanelComponent, - SnackbarInfoComponent, - SnackbarErrorComponent, - FileUploadComponent, - DateEditorComponent, - TextEditorComponent, - TextAreaEditorComponent, - ValidationErrorComponent, - AutocompleteEditorComponent, - FixedDialogComponent, - InternalServerErrorDialogComponent, - FileUploadEditorComponent, - PostfachIconComponent, - AccordionComponent, - AppIconComponent, - SlideToggleComponent, - BackButtonComponent, - OzgcloudIconComponent, - OzgcloudRoutingButtonComponent, - OzgcloudSvgIconComponent, - OzgcloudSvgIconBigComponent, - SpinnerTransparencyComponent, - OpenUrlButtonComponent, - DownloadButtonComponent, - ConnectionTimeoutRetryDialogComponent, - ConnectionTimeoutRetryFailDialogComponent, - SnackbarCloseButtonComponent, - BasicDialogComponent, - OzgcloudPasteTextButtonComponent, - CheckboxEnumEditorComponent, - FileUploadButtonComponent, - OzgcloudButtonContentComponent, - OzgcloudMenuComponent, - ], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: HttpErrorInterceptor, - multi: true, - }, - { - provide: HTTP_INTERCEPTORS, - useClass: HttpConnectionTimeoutInterceptor, - multi: true, - }, - { - provide: MAT_DATE_LOCALE, - useValue: de, - }, - { - provide: DateAdapter, - useClass: DateFnsAdapter, - deps: [MAT_DATE_LOCALE], - }, - ], -}) -export class UiModule {} diff --git a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html index cdf207ba37..673ecf065e 100644 --- a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html +++ b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html @@ -1,26 +1,28 @@ <!-- - Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den +Ministerpräsidenten des Landes Schleswig-Holstein +Staatskanzlei +Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: +Lizenziert unter der EUPL, Version 1.2 oder - sobald +diese von der Europäischen Kommission genehmigt wurden - +Folgeversionen der EUPL ("Lizenz"); +Sie dürfen dieses Werk ausschließlich gemäß +dieser Lizenz nutzen. +Eine Kopie der Lizenz finden Sie hier: - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. +Sofern nicht durch anwendbare Rechtsvorschriften +gefordert oder in schriftlicher Form vereinbart, wird +die unter der Lizenz verbreitete Software "so wie sie +ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +ausdrücklich oder stillschweigend - verbreitet. +Die sprachspezifischen Genehmigungen und Beschränkungen +unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<span *ngFor="let invalidParam of invalidParams">{{ message(invalidParam) }}</span> +@for (invalidParam of invalidParams; track invalidParam) { + <span>{{ message(invalidParam) }}</span> +} diff --git a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.spec.ts b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.spec.ts index 0b265b44ec..2e851164cb 100644 --- a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.spec.ts +++ b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.spec.ts @@ -33,7 +33,7 @@ describe('ValidationErrorComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ValidationErrorComponent], + imports: [ValidationErrorComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts index 285a9989ed..eae4c1e994 100644 --- a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts @@ -28,6 +28,7 @@ import { Component, Input } from '@angular/core'; selector: 'ozgcloud-validation-error', templateUrl: './validation-error.component.html', styleUrls: ['./validation-error.component.scss'], + standalone: true, }) export class ValidationErrorComponent { @Input() label: string; diff --git a/alfa-client/libs/user-assistance/src/lib/help-menu/documentation/open-documentation-button/open-documentation-button.component.html b/alfa-client/libs/user-assistance/src/lib/help-menu/documentation/open-documentation-button/open-documentation-button.component.html index 0179cbc7aa..d3f460b90b 100644 --- a/alfa-client/libs/user-assistance/src/lib/help-menu/documentation/open-documentation-button/open-documentation-button.component.html +++ b/alfa-client/libs/user-assistance/src/lib/help-menu/documentation/open-documentation-button/open-documentation-button.component.html @@ -29,4 +29,4 @@ [targetName]="'_blank'" [tooltip]="'Öffnet in einem neuen Tab'" data-test-id="open-documentation-button" -></ozgcloud-open-url-button> +/> diff --git a/alfa-client/libs/user-assistance/src/lib/help-menu/help-menu.component.spec.ts b/alfa-client/libs/user-assistance/src/lib/help-menu/help-menu.component.spec.ts index ba0e572d4e..870deee5a2 100644 --- a/alfa-client/libs/user-assistance/src/lib/help-menu/help-menu.component.spec.ts +++ b/alfa-client/libs/user-assistance/src/lib/help-menu/help-menu.component.spec.ts @@ -24,8 +24,9 @@ import { ApiRootLinkRel } from '@alfa-client/api-root-shared'; import { GetUrlPipe, HasLinkPipe, createStateResource } from '@alfa-client/tech-shared'; import { getElementFromDomRoot } from '@alfa-client/test-utils'; -import { UiModule } from '@alfa-client/ui'; +import { OzgcloudIconComponent, OzgcloudMenuComponent } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MatMenuTrigger } from '@angular/material/menu'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { DropdownMenuComponent, @@ -34,9 +35,9 @@ import { FileIconComponent, HelpIconComponent, } from '@ods/system'; +import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; -import { createApiRootResource } from '../../../../../libs/api-root-shared/test/api-root'; import { DocumentationComponent } from './documentation/documentation.component'; import { HelpButtonComponent } from './help-button/help-button.component'; import { HelpMenuComponent } from './help-menu.component'; @@ -54,6 +55,10 @@ describe('HelpMenuComponent', () => { HelpMenuComponent, HasLinkPipe, GetUrlPipe, + MatMenuTrigger, + MockComponent(OzgcloudMenuComponent), + MockComponent(DocumentationComponent), + MockComponent(OzgcloudIconComponent), MockComponent(DocumentationComponent), MockComponent(FileIconComponent), MockComponent(HelpIconComponent), @@ -62,7 +67,7 @@ describe('HelpMenuComponent', () => { MockComponent(DropdownMenuLinkItemComponent), MockComponent(HelpButtonComponent), ], - imports: [NoopAnimationsModule, UiModule], + imports: [NoopAnimationsModule], }).compileComponents(); fixture = TestBed.createComponent(HelpMenuComponent); diff --git a/alfa-client/libs/user-assistance/src/lib/user-assistance.module.ts b/alfa-client/libs/user-assistance/src/lib/user-assistance.module.ts index 1eda492b4f..63fc01ce61 100644 --- a/alfa-client/libs/user-assistance/src/lib/user-assistance.module.ts +++ b/alfa-client/libs/user-assistance/src/lib/user-assistance.module.ts @@ -21,9 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; import { CommonModule } from '@angular/common'; +import { GetUrlPipe, HasLinkPipe } from '@alfa-client/tech-shared'; import { NgModule } from '@angular/core'; import { DropdownMenuComponent, @@ -32,21 +31,27 @@ import { FileIconComponent, HelpIconComponent, } from '@ods/system'; +import { MatFabButton } from '@angular/material/button'; +import { MatMenuTrigger } from '@angular/material/menu'; import { DocumentationComponent } from './help-menu/documentation/documentation.component'; import { OpenDocumentationButtonComponent } from './help-menu/documentation/open-documentation-button/open-documentation-button.component'; import { HelpButtonComponent } from './help-menu/help-button/help-button.component'; import { HelpMenuComponent } from './help-menu/help-menu.component'; +import { OpenUrlButtonComponent } from '@alfa-client/ui'; @NgModule({ imports: [ CommonModule, - TechSharedModule, + MatMenuTrigger, + HasLinkPipe, + GetUrlPipe, + MatFabButton, FileIconComponent, HelpIconComponent, DropdownMenuComponent, DropdownMenuTextItemComponent, - UiModule, DropdownMenuLinkItemComponent, + OpenUrlButtonComponent, ], declarations: [HelpMenuComponent, DocumentationComponent, OpenDocumentationButtonComponent, HelpButtonComponent], exports: [HelpMenuComponent], diff --git a/alfa-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts b/alfa-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts index 844d2d4ad7..9b9cc5c3f6 100644 --- a/alfa-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts +++ b/alfa-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ApiRootLinkRel, ApiRootResource } from '@alfa-client/api-root-shared'; -import { HttpErrorHandler, TechSharedModule } from '@alfa-client/tech-shared'; +import { HttpErrorHandler } from '@alfa-client/tech-shared'; import { mock, mockClass, useFromMock } from '@alfa-client/test-utils'; import { VorgangHeaderLinkRel, @@ -33,10 +33,8 @@ import { import { ResourceFactory } from '@ngxp/rest'; import { cold, hot } from 'jest-marbles'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { - createVorgangResource, - createVorgangWithEingangResource, -} from 'libs/vorgang-shared/test/vorgang'; +import { InjectorService } from 'libs/tech-shared/src/lib/injector/injector.service'; +import { createVorgangResource, createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { createUserProfileListResource, createUserProfileResource } from '../../test/user-profile'; import { UserProfileListResource, UserProfileResource } from './user-profile.model'; import { UserProfileRepository } from './user-profile.repository'; @@ -51,7 +49,7 @@ describe('User profile repository', () => { const userProfile: UserProfileResource = createUserProfileResource(); beforeEach(() => { - const classMock = mockClass(TechSharedModule); + const classMock = mockClass(InjectorService); classMock.injector = <any>{ get: () => useFromMock(mock(HttpErrorHandler)) }; repository = new UserProfileRepository(useFromMock(resourceFactory)); diff --git a/alfa-client/libs/user-profile/src/lib/user-profile-in-header-container/user-profile-in-header/user-profile-in-header.component.spec.ts b/alfa-client/libs/user-profile/src/lib/user-profile-in-header-container/user-profile-in-header/user-profile-in-header.component.spec.ts index 1f91ba4533..ab53c00816 100644 --- a/alfa-client/libs/user-profile/src/lib/user-profile-in-header-container/user-profile-in-header/user-profile-in-header.component.spec.ts +++ b/alfa-client/libs/user-profile/src/lib/user-profile-in-header-container/user-profile-in-header/user-profile-in-header.component.spec.ts @@ -28,6 +28,7 @@ import { getUserName, UserProfileResource } from '@alfa-client/user-profile-shar import { EventEmitter } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; +import { MatMenuTrigger } from '@angular/material/menu'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { DropdownMenuButtonItemComponent, DropdownMenuComponent, LogoutIconComponent } from '@ods/system'; import { getDataTestIdAttributeOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -49,6 +50,7 @@ describe('UserProfileInHeaderComponent', () => { declarations: [ UserProfileInHeaderComponent, MatIcon, + MatMenuTrigger, MockComponent(UserIconComponent), MockComponent(DropdownMenuComponent), MockComponent(DropdownMenuButtonItemComponent), diff --git a/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/user-profile-button-container/user-profile-button-container.component.spec.ts b/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/user-profile-button-container/user-profile-button-container.component.spec.ts index e8c3f33af4..9d67b5fbb3 100644 --- a/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/user-profile-button-container/user-profile-button-container.component.spec.ts +++ b/alfa-client/libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang/user-profile-button-container/user-profile-button-container.component.spec.ts @@ -23,9 +23,9 @@ */ import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; import { mock } from '@alfa-client/test-utils'; -import { UiModule } from '@alfa-client/ui'; import { UserProfileResource, UserProfileService } from '@alfa-client/user-profile-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MatMenuTrigger } from '@angular/material/menu'; import { MockComponent } from 'ng-mocks'; import { BehaviorSubject } from 'rxjs'; import { OzgcloudMenuComponent } from '../../../../../../ui/src/lib/ui/ozgcloud-menu/ozgcloud-menu.component'; @@ -47,6 +47,7 @@ describe('UserProfileButtonContainerComponent', () => { TestBed.configureTestingModule({ declarations: [ UserProfileButtonContainerComponent, + MatMenuTrigger, MockComponent(UserIconComponent), MockComponent(UserProfileSearchContainerComponent), MockComponent(OzgcloudMenuComponent), @@ -57,7 +58,6 @@ describe('UserProfileButtonContainerComponent', () => { useValue: userProfileService, }, ], - imports: [UiModule], }); }); diff --git a/alfa-client/libs/user-profile/src/lib/user-profile.module.ts b/alfa-client/libs/user-profile/src/lib/user-profile.module.ts index 408ace4cfb..0f595e41c3 100644 --- a/alfa-client/libs/user-profile/src/lib/user-profile.module.ts +++ b/alfa-client/libs/user-profile/src/lib/user-profile.module.ts @@ -21,11 +21,20 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { + AutocompleteEditorComponent, + IconButtonWithSpinnerComponent, + OzgcloudMenuComponent, + SpinnerComponent, +} from '@alfa-client/ui'; import { UserProfileSharedModule } from '@alfa-client/user-profile-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatIcon } from '@angular/material/icon'; +import { MatMenuTrigger } from '@angular/material/menu'; +import { MatTooltip } from '@angular/material/tooltip'; import { RouterModule } from '@angular/router'; import { ButtonWithSpinnerComponent } from '@ods/component'; import { @@ -61,13 +70,20 @@ import { UserProfileComponent } from './user-profile/user-profile.component'; @NgModule({ imports: [ CommonModule, - TechSharedModule, - UiModule, UserProfileSharedModule, RouterModule, OdsUserIconComponent, LogoutIconComponent, ErrorIconComponent, + IconButtonWithSpinnerComponent, + HasLinkPipe, + MatTooltip, + SpinnerComponent, + MatMenuTrigger, + OzgcloudMenuComponent, + MatIcon, + AutocompleteEditorComponent, + ReactiveFormsModule, DropdownMenuComponent, DropdownMenuItemComponent, DropdownMenuButtonItemComponent, diff --git a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts index de1ccc1a69..f40d240d63 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings-container/user-settings/user-settings.component.spec.ts @@ -22,7 +22,6 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { HasLinkPipe, createEmptyStateResource } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { DropdownMenuComponent } from '@ods/system'; @@ -37,7 +36,7 @@ describe('UserSettingsComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [NoopAnimationsModule, UiModule], + imports: [NoopAnimationsModule], declarations: [ HasLinkPipe, UserSettingsComponent, diff --git a/alfa-client/libs/user-settings/src/lib/user-settings.module.ts b/alfa-client/libs/user-settings/src/lib/user-settings.module.ts index bafeb748dc..fce1e22c3e 100644 --- a/alfa-client/libs/user-settings/src/lib/user-settings.module.ts +++ b/alfa-client/libs/user-settings/src/lib/user-settings.module.ts @@ -21,7 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { UiModule } from '@alfa-client/ui'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { SlideToggleComponent } from '@alfa-client/ui'; import { UserSettingsSharedModule } from '@alfa-client/user-settings-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; @@ -35,7 +36,15 @@ import { UserSettingsEmailBenachrichtigungComponent } from './user-settings-cont import { UserSettingsComponent } from './user-settings-container/user-settings/user-settings.component'; @NgModule({ - imports: [CommonModule, UiModule, UserSettingsSharedModule, DropdownMenuComponent, CloseIconComponent, SettingsIconComponent], + imports: [ + CommonModule, + UserSettingsSharedModule, + DropdownMenuComponent, + CloseIconComponent, + SettingsIconComponent, + SlideToggleComponent, + HasLinkPipe, + ], declarations: [ UserSettingsContainerComponent, UserSettingsEmailBenachrichtigungComponent, diff --git a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.spec.ts index ebf2fa64f1..174d105fae 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.spec.ts @@ -21,45 +21,28 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AktenzeichenEditDialogComponent } from './aktenzeichen-edit-dialog.component'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { COMMAND_ERROR_MESSAGES, CommandErrorMessage, hasCommandError, isSuccessfulDone } from '@alfa-client/command-shared'; +import { createEmptyStateResource, hasContent, isClipboardReadSupported } from '@alfa-client/tech-shared'; import { mock } from '@alfa-client/test-utils'; import { OzgcloudPasteTextButtonComponent, OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudTextEditorComponent, SnackBarService, - TextEditorComponent, } from '@alfa-client/ui'; -import { MockComponent, MockDirective } from 'ng-mocks'; import { VorgangService } from '@alfa-client/vorgang-shared'; -import { - MAT_DIALOG_DATA, - MatDialogActions, - MatDialogContent, - MatDialogRef, -} from '@angular/material/dialog'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormBuilder, ReactiveFormsModule, UntypedFormControl } from '@angular/forms'; +import { MAT_DIALOG_DATA, MatDialogActions, MatDialogContent, MatDialogRef } from '@angular/material/dialog'; import { MatIcon } from '@angular/material/icon'; +import { cold, hot } from 'jest-marbles'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; -import { - createEmptyStateResource, - hasContent, - isClipboardReadSupported, -} from '@alfa-client/tech-shared'; +import { MockComponent, MockDirective } from 'ng-mocks'; import { EMPTY, NEVER } from 'rxjs'; -import { FormBuilder, ReactiveFormsModule, UntypedFormControl } from '@angular/forms'; -import { cold, hot } from 'jest-marbles'; -import { - createCommandErrorResource, - createCommandResource, -} from '../../../../command-shared/test/command'; -import { - COMMAND_ERROR_MESSAGES, - CommandErrorMessage, - hasCommandError, - isSuccessfulDone, -} from '@alfa-client/command-shared'; -import { AktenzeichenEditDialogMessages } from './aktenzeichen-edit-dialog.message'; +import { createCommandErrorResource, createCommandResource } from '../../../../command-shared/test/command'; +import { AktenzeichenEditDialogComponent } from './aktenzeichen-edit-dialog.component'; import { AktenzeichenEditDialogFormservice } from './aktenzeichen-edit-dialog.formservice'; +import { AktenzeichenEditDialogMessages } from './aktenzeichen-edit-dialog.message'; jest.mock('@alfa-client/tech-shared'); const isClipboardReadSupportedMock = isClipboardReadSupported as jest.Mock; @@ -99,7 +82,7 @@ describe('AktenzeichenEditDialogComponent', () => { MockDirective(MatDialogContent), MockDirective(MatDialogActions), MockComponent(MatIcon), - MockComponent(TextEditorComponent), + MockComponent(OzgcloudTextEditorComponent), MockComponent(OzgcloudPasteTextButtonComponent), MockComponent(OzgcloudStrokedButtonWithSpinnerComponent), ], diff --git a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.ts b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.ts index 79dce7d7da..35789e92ba 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.ts @@ -21,40 +21,27 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - COMMAND_ERROR_MESSAGES, - CommandResource, - hasCommandError, - isSuccessfulDone, -} from '@alfa-client/command-shared'; -import { - createEmptyStateResource, - hasContent, - isClipboardReadSupported, - StateResource, -} from '@alfa-client/tech-shared'; +import { COMMAND_ERROR_MESSAGES, CommandResource, hasCommandError, isSuccessfulDone } from '@alfa-client/command-shared'; +import { createEmptyStateResource, hasContent, isClipboardReadSupported, StateResource } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; import { VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Component, Inject, OnInit } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { map, Observable, of, startWith, tap } from 'rxjs'; import { AktenzeichenEditDialogData } from './aktenzeichen-edit-dialog.data'; -import { AktenzeichenEditDialogMessages } from './aktenzeichen-edit-dialog.message'; -import { UntypedFormGroup } from '@angular/forms'; import { AktenzeichenEditDialogFormservice } from './aktenzeichen-edit-dialog.formservice'; +import { AktenzeichenEditDialogMessages } from './aktenzeichen-edit-dialog.message'; @Component({ selector: 'alfa-aktenzeichen-edit-dialog', templateUrl: './aktenzeichen-edit-dialog.component.html', styleUrls: ['./aktenzeichen-edit-dialog.component.scss'], - providers: [AktenzeichenEditDialogFormservice], }) export class AktenzeichenEditDialogComponent implements OnInit { vorgang: VorgangWithEingangResource; - setAktenzeichenPending$: Observable<StateResource<CommandResource>> = of( - createEmptyStateResource<CommandResource>(), - ); + setAktenzeichenPending$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>()); hasAktenzeichen$: Observable<boolean>; isPasteSupported = false; @@ -73,10 +60,7 @@ export class AktenzeichenEditDialogComponent implements OnInit { ngOnInit(): void { this.isPasteSupported = isClipboardReadSupported(); this.formService.setAktenzeichen(this.vorgang.aktenzeichen); - this.hasAktenzeichen$ = this.formService - .valueChanges() - .pipe(startWith(this.vorgang.aktenzeichen)) - .pipe(map(hasContent)); + this.hasAktenzeichen$ = this.formService.valueChanges().pipe(startWith(this.vorgang.aktenzeichen)).pipe(map(hasContent)); } public onCancel(): void { @@ -88,11 +72,7 @@ export class AktenzeichenEditDialogComponent implements OnInit { this.setAktenzeichenPending$ = this.formService .submit() .pipe(startWith(createEmptyStateResource<CommandResource>(true))) - .pipe( - tap((commandStateResource: StateResource<CommandResource>) => - this.onResponse(commandStateResource.resource), - ), - ); + .pipe(tap((commandStateResource: StateResource<CommandResource>) => this.onResponse(commandStateResource.resource))); } onResponse(commandResource: CommandResource) { @@ -111,10 +91,7 @@ export class AktenzeichenEditDialogComponent implements OnInit { } getErrorMessage(commandResource: CommandResource): string { - return ( - COMMAND_ERROR_MESSAGES[commandResource.errorMessage] || - AktenzeichenEditDialogMessages.SET_FAILED - ); + return COMMAND_ERROR_MESSAGES[commandResource.errorMessage] || AktenzeichenEditDialogMessages.SET_FAILED; } paste(clipboardContent: string) { diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts index 471467b8ea..5b089dac01 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { BescheidService } from '@alfa-client/bescheid-shared'; -import { HasLinkPipe, TechSharedModule } from '@alfa-client/tech-shared'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; @@ -59,7 +59,7 @@ describe('VorgangDetailBescheidenDokumentHochladenComponent', () => { MockComponent(SingleFileUploadEditorComponent), MockComponent(SpinnerIconComponent), ], - imports: [ReactiveFormsModule, TechSharedModule], + imports: [ReactiveFormsModule], providers: [ { provide: BescheidenFormService, @@ -119,10 +119,7 @@ describe('VorgangDetailBescheidenDokumentHochladenComponent', () => { component.uploadFile(file); - expect(bescheidService.uploadBescheidDocument).toHaveBeenCalledWith( - bescheidStateResource.resource, - file, - ); + expect(bescheidService.uploadBescheidDocument).toHaveBeenCalledWith(bescheidStateResource.resource, file); }); }); }); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts index 32aba23140..cd9df94996 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts @@ -31,8 +31,22 @@ import { LoeschAnforderungModule } from '@alfa-client/loesch-anforderung'; import { LoeschAnforderungSharedModule } from '@alfa-client/loesch-anforderung-shared'; import { PostfachModule } from '@alfa-client/postfach'; import { PostfachSharedModule } from '@alfa-client/postfach-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { ConvertForDataTestPipe, ConvertProblemDetailToErrorMessagesPipe, HasLinkPipe } from '@alfa-client/tech-shared'; +import { + BackButtonComponent, + DateEditorComponent, + ExpansionPanelComponent, + IconButtonWithSpinnerComponent, + OzgcloudIconButtonPrimaryComponent, + OzgcloudIconComponent, + OzgcloudMenuComponent, + OzgcloudPasteTextButtonComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudTextEditorComponent, + SpinnerComponent, + SpinnerTransparencyComponent, + SubnavigationComponent, +} from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { UserProfileSharedModule } from '@alfa-client/user-profile-shared'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; @@ -40,13 +54,18 @@ import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui'; import { WiedervorlageModule } from '@alfa-client/wiedervorlage'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatDialogActions, MatDialogContent } from '@angular/material/dialog'; +import { MatIcon } from '@angular/material/icon'; +import { MatMenuTrigger } from '@angular/material/menu'; +import { MatTab, MatTabGroup } from '@angular/material/tabs'; import { RouterModule, Routes } from '@angular/router'; import { ButtonWithSpinnerComponent, FileUploadEditorComponent, SingleFileUploadEditorComponent, - TextEditorComponent, TextareaEditorComponent, + TextEditorComponent, } from '@ods/component'; import { ArchiveIconComponent, @@ -76,6 +95,8 @@ import { TooltipDirective, UndoIconComponent, } from '@ods/system'; +import { NotHasAnyLinkPipe } from '../../../tech-shared/src/lib/pipe/not-has-any-link.pipe'; +import { ProgressBarComponent } from '../../../ui/src/lib/ui/progress-bar/progress-bar.component'; import { AktenzeichenEditDialogComponent } from './aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component'; import { AktenzeichenEditableComponent } from './aktenzeichen-editable/aktenzeichen-editable.component'; import { AbschliessenButtonComponent } from './buttons/abschliessen-button/abschliessen-button.component'; @@ -141,8 +162,6 @@ const routes: Routes = [ CommonModule, RouterModule.forChild(routes), VorgangSharedModule, - UiModule, - TechSharedModule, WiedervorlageModule, BinaryFileModule, ForwardingModule, @@ -182,6 +201,31 @@ const routes: Routes = [ ArchiveIconComponent, CheckCircleIconComponent, CheckIconComponent, + MatDialogContent, + ReactiveFormsModule, + MatIcon, + OzgcloudPasteTextButtonComponent, + MatDialogActions, + OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudIconButtonPrimaryComponent, + HasLinkPipe, + IconButtonWithSpinnerComponent, + ExpansionPanelComponent, + MatTabGroup, + MatTab, + NotHasAnyLinkPipe, + BackButtonComponent, + ConvertForDataTestPipe, + ConvertProblemDetailToErrorMessagesPipe, + DateEditorComponent, + MatMenuTrigger, + OzgcloudIconComponent, + OzgcloudMenuComponent, + SubnavigationComponent, + ProgressBarComponent, + SpinnerTransparencyComponent, + SpinnerComponent, + OzgcloudTextEditorComponent, DropdownMenuComponent, DropdownMenuTextItemComponent, MoreIconComponent, diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-shared-ui.module.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-shared-ui.module.ts index a6549aff7c..1624a50764 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-shared-ui.module.ts +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-shared-ui.module.ts @@ -21,11 +21,22 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { + ConvertForDataTestPipe, + EnumToLabelPipe, + FormatToPrettyDatePipe, + HasLinkPipe, + ToEmbeddedResourcesPipe, +} from '@alfa-client/tech-shared'; +import { OzgcloudSvgIconComponent, SpinnerComponent } from '@alfa-client/ui'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatAutocomplete, MatAutocompleteTrigger, MatOption } from '@angular/material/autocomplete'; +import { MatFormField, MatFormFieldModule } from '@angular/material/form-field'; +import { MatIcon, MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; import { RouterModule } from '@angular/router'; import { TooltipDirective } from '@ods/system'; import { AktenzeichenComponent } from './aktenzeichen/aktenzeichen.component'; @@ -39,7 +50,28 @@ import { VorgangStatusTextComponent } from './vorgang-status-text/vorgang-status import { WiedervorlageIconComponent } from './wiedervorlage-icon/wiedervorlage-icon.component'; @NgModule({ - imports: [CommonModule, VorgangSharedModule, UiModule, RouterModule, TechSharedModule, TooltipDirective], + imports: [ + CommonModule, + VorgangSharedModule, + RouterModule, + FormatToPrettyDatePipe, + MatIcon, + MatIconModule, + MatInputModule, + MatFormField, + MatFormFieldModule, + ReactiveFormsModule, + MatAutocompleteTrigger, + MatAutocomplete, + SpinnerComponent, + MatOption, + ToEmbeddedResourcesPipe, + HasLinkPipe, + ConvertForDataTestPipe, + EnumToLabelPipe, + OzgcloudSvgIconComponent, + TooltipDirective, + ], declarations: [ VorgangSearchContainerComponent, VorgangSearchComponent, diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.spec.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.spec.ts index fc9be609db..9b833b8800 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.spec.ts +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-dot/vorgang-status-dot.component.spec.ts @@ -21,9 +21,9 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { EnumToLabelPipe } from '@alfa-client/tech-shared'; import { VorgangResource } from '@alfa-client/vorgang-shared'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { createVorgangResource } from 'libs/vorgang-shared/test/vorgang'; import { VorgangStatusDotComponent } from './vorgang-status-dot.component'; @@ -37,7 +37,8 @@ describe('VorgangStatusDotComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [VorgangStatusDotComponent, EnumToLabelPipe], + imports: [EnumToLabelPipe], + declarations: [VorgangStatusDotComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-text/vorgang-status-text.component.spec.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-text/vorgang-status-text.component.spec.ts index c49336ccf2..ec5f8e7063 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-text/vorgang-status-text.component.spec.ts +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-status-text/vorgang-status-text.component.spec.ts @@ -37,7 +37,8 @@ describe('VorgangStatusTextComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [EnumToLabelPipe, VorgangStatusTextComponent], + imports: [EnumToLabelPipe], + declarations: [VorgangStatusTextComponent], }).compileComponents(); }); diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.repository.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.repository.spec.ts index fa699a030e..f322aa3551 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.repository.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.repository.spec.ts @@ -21,34 +21,22 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { ApiRootLinkRel, ApiRootResource } from '@alfa-client/api-root-shared'; -import { - ContentType, - GetRequestOptions, - HttpErrorHandler, - HttpHeader, -} from '@alfa-client/tech-shared'; +import { BlobWithFileName, ContentType, GetRequestOptions, HttpErrorHandler, HttpHeader } from '@alfa-client/tech-shared'; import { mock, mockClass, useFromMock } from '@alfa-client/test-utils'; +import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { LinkRel, ResourceFactory, ResourceUri, getUrl } from '@ngxp/rest'; -import { cold, hot } from 'jest-marbles'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { TechSharedModule } from 'libs/tech-shared/src/lib/tech-shared.module'; +import { InjectorService } from 'libs/tech-shared/src/lib/injector/injector.service'; import { createVorgangListResource, createVorgangResource, createVorgangWithEingangResource, } from 'libs/vorgang-shared/test/vorgang'; -import { - VorgangHeaderLinkRel, - VorgangListLinkRel, - VorgangWithEingangLinkRel, -} from './../vorgang.linkrel'; -import { - VorgangListResource, - VorgangResource, - VorgangWithEingangResource, -} from './../vorgang.model'; +import { Observable } from 'rxjs'; +import { singleCold, singleHot } from '../../../../tech-shared/test/marbles'; +import { VorgangHeaderLinkRel, VorgangListLinkRel, VorgangWithEingangLinkRel } from './../vorgang.linkrel'; +import { VorgangListResource, VorgangResource, VorgangWithEingangResource } from './../vorgang.model'; import { VorgangRepository } from './vorgang.repository'; describe('VorgangRepository', () => { @@ -70,7 +58,7 @@ describe('VorgangRepository', () => { const linkRel: string = 'dummyLinkRel'; beforeEach(() => { - resourceWrapper.get.mockReturnValue(hot('a', { a: vorgangListResource })); + resourceWrapper.get.mockReturnValue(singleHot(vorgangListResource)); }); it('should call resourceFactory with resource', () => { @@ -86,20 +74,17 @@ describe('VorgangRepository', () => { }); it('should return result', () => { - let result = repository.loadVorgangList(apiRootResource, linkRel); + let result: Observable<VorgangListResource> = repository.loadVorgangList(apiRootResource, linkRel); - expect(result).not.toBeNull(); - expect(result).toBeObservable(cold('a', { a: vorgangListResource })); + expect(result).toBeObservable(singleCold(vorgangListResource)); }); }); describe('getNextVorgangListPage', () => { - const vorgangListResource: VorgangListResource = createVorgangListResource([ - VorgangListLinkRel.NEXT, - ]); + const vorgangListResource: VorgangListResource = createVorgangListResource([VorgangListLinkRel.NEXT]); beforeEach(() => { - resourceWrapper.get.mockReturnValue(hot('a', { a: vorgangListResource })); + resourceWrapper.get.mockReturnValue(singleHot(vorgangListResource)); }); it('should call resourceFactory with resource', () => { @@ -115,29 +100,22 @@ describe('VorgangRepository', () => { }); it('should return result', () => { - let result = repository.getNextVorgangListPage(vorgangListResource); + let result: Observable<VorgangListResource> = repository.getNextVorgangListPage(vorgangListResource); - expect(result).not.toBeNull(); - expect(result).toBeObservable(cold('a', { a: vorgangListResource })); + expect(result).toBeObservable(singleCold(vorgangListResource)); }); }); describe('getVorgangWithEingang', () => { - const vorgangResource: VorgangResource = createVorgangResource([ - VorgangHeaderLinkRel.VORGANG_WITH_EINGANG, - ]); - const vorgangWithEingangUrl = getUrl( - vorgangResource, - VorgangHeaderLinkRel.VORGANG_WITH_EINGANG, - ); - const vorgangWithEingangResource: VorgangWithEingangResource = - createVorgangWithEingangResource(); + const vorgangResource: VorgangResource = createVorgangResource([VorgangHeaderLinkRel.VORGANG_WITH_EINGANG]); + const vorgangWithEingangUrl: string = getUrl(vorgangResource, VorgangHeaderLinkRel.VORGANG_WITH_EINGANG); + const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource(); beforeEach(() => { - const classMock = mockClass(TechSharedModule); + const classMock = mockClass(InjectorService); classMock.injector = <any>{ get: () => useFromMock(mock(HttpErrorHandler)) }; - resourceWrapper.get.mockReturnValue(hot('a', { a: vorgangWithEingangResource })); + resourceWrapper.get.mockReturnValue(singleHot(vorgangWithEingangResource)); }); it('should call resourceFactory with resource', () => { @@ -155,18 +133,17 @@ describe('VorgangRepository', () => { it('should return result', () => { let result = repository.getVorgang(vorgangWithEingangUrl); - expect(result).not.toBeNull(); - expect(result).toBeObservable(cold('a', { a: vorgangWithEingangResource })); + expect(result).toBeObservable(singleCold(vorgangWithEingangResource)); }); }); describe('getAttachments', () => { - const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource( - [VorgangWithEingangLinkRel.ATTACHMENTS], - ); + const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.ATTACHMENTS, + ]); beforeEach(() => { - resourceWrapper.get.mockReturnValue(hot('a', { a: vorgangWithEingangResource })); + resourceWrapper.get.mockReturnValue(singleHot(vorgangWithEingangResource)); }); it('should call resourceFactory with resource', () => { @@ -185,7 +162,7 @@ describe('VorgangRepository', () => { let result = repository.getAttachments(vorgangWithEingangResource); expect(result).not.toBeNull(); - expect(result).toBeObservable(cold('a', { a: vorgangWithEingangResource })); + expect(result).toBeObservable(singleCold(vorgangWithEingangResource)); }); }); @@ -194,7 +171,7 @@ describe('VorgangRepository', () => { const apiRootResource: ApiRootResource = createApiRootResource(); beforeEach(() => { - resourceWrapper.get.mockReturnValue(hot('a', { a: vorgangListResource })); + resourceWrapper.get.mockReturnValue(singleHot(vorgangListResource)); repository.buildSearchByUrl = jest.fn(); }); @@ -213,19 +190,9 @@ describe('VorgangRepository', () => { it('should call buildSearchByUrl', () => { const searchString: string = 'i search for...'; const limit: number = 7; - repository.searchVorgaengeBy( - apiRootResource, - searchString, - ApiRootLinkRel.SEARCH_ALLE, - limit, - ); - - expect(repository.buildSearchByUrl).toHaveBeenCalledWith( - apiRootResource, - searchString, - ApiRootLinkRel.SEARCH_ALLE, - limit, - ); + repository.searchVorgaengeBy(apiRootResource, searchString, ApiRootLinkRel.SEARCH_ALLE, limit); + + expect(repository.buildSearchByUrl).toHaveBeenCalledWith(apiRootResource, searchString, ApiRootLinkRel.SEARCH_ALLE, limit); }); }); @@ -242,11 +209,7 @@ describe('VorgangRepository', () => { _links, }; - const searchUrl: ResourceUri = repository.buildSearchByUrl( - apiRootResource, - 'searchParam', - ApiRootLinkRel.SEARCH_ALLE, - ); + const searchUrl: ResourceUri = repository.buildSearchByUrl(apiRootResource, 'searchParam', ApiRootLinkRel.SEARCH_ALLE); expect(searchUrl).toEqual(baseUrl + '&' + VorgangRepository.SEARCH_PARAM + '=searchParam'); }); @@ -254,11 +217,7 @@ describe('VorgangRepository', () => { it('should ignore unused, optional parameters', () => { const apiRoot: ApiRootResource = buildLinksWithSearch(baseUrl + '{&searchBy,limit}'); - const searchUrl: ResourceUri = repository.buildSearchByUrl( - apiRoot, - 'search', - ApiRootLinkRel.SEARCH_ALLE, - ); + const searchUrl: ResourceUri = repository.buildSearchByUrl(apiRoot, 'search', ApiRootLinkRel.SEARCH_ALLE); expect(searchUrl).toEqual(baseUrl + '&' + VorgangRepository.SEARCH_PARAM + '=search'); }); @@ -267,16 +226,9 @@ describe('VorgangRepository', () => { const limit = 5; const res = buildLinksWithSearch(baseUrl + '{&searchBy,limit}'); - const searchUrl: ResourceUri = repository.buildSearchByUrl( - res, - 'search', - ApiRootLinkRel.SEARCH_ALLE, - limit, - ); + const searchUrl: ResourceUri = repository.buildSearchByUrl(res, 'search', ApiRootLinkRel.SEARCH_ALLE, limit); - expect(searchUrl).toEqual( - baseUrl + '&' + VorgangRepository.SEARCH_PARAM + '=search&limit=' + limit, - ); + expect(searchUrl).toEqual(baseUrl + '&' + VorgangRepository.SEARCH_PARAM + '=search&limit=' + limit); }); function buildLinksWithSearch(searchHref: string): ApiRootResource { @@ -288,21 +240,16 @@ describe('VorgangRepository', () => { describe('loadMeineVorgaengeList', () => { const vorgangListResource: VorgangListResource = createVorgangListResource(); - const apiRootResource: ApiRootResource = createApiRootResource([ - ApiRootLinkRel.MEINE_VORGAENGE, - ]); + const apiRootResource: ApiRootResource = createApiRootResource([ApiRootLinkRel.MEINE_VORGAENGE]); beforeEach(() => { - resourceWrapper.get.mockReturnValue(hot('a', { a: vorgangListResource })); + resourceWrapper.get.mockReturnValue(singleHot(vorgangListResource)); }); it('should call resourceFactory with uri', () => { repository.loadMeineVorgaengeList(apiRootResource); - const urlWithoutParameter: URL = repository.getUrlWithoutParameter( - apiRootResource, - ApiRootLinkRel.MEINE_VORGAENGE, - ); + const urlWithoutParameter: URL = repository.getUrlWithoutParameter(apiRootResource, ApiRootLinkRel.MEINE_VORGAENGE); expect(resourceFactory.fromId).toHaveBeenCalledWith(urlWithoutParameter.href); }); @@ -313,17 +260,14 @@ describe('VorgangRepository', () => { }); it('should return result', () => { - let result = repository.loadMeineVorgaengeList(apiRootResource); + let result: Observable<VorgangListResource> = repository.loadMeineVorgaengeList(apiRootResource); - expect(result).not.toBeNull(); - expect(result).toBeObservable(cold('a', { a: vorgangListResource })); + expect(result).toBeObservable(singleCold(vorgangListResource)); }); }); describe('export', () => { - const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource([ - VorgangWithEingangLinkRel.EXPORT, - ]); + const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource([VorgangWithEingangLinkRel.EXPORT]); const body: Blob = new Blob(); const fileName: string = '927ee047-0123-4c36-911c-52e984accc87_Abgabe.Abgabe.0401.xdomea'; @@ -331,7 +275,7 @@ describe('VorgangRepository', () => { const httpResponse: HttpResponse<Blob> = <any>{ body, headers: { get: () => headerString } }; beforeEach(() => { - httpClient.get.mockReturnValue(hot('a', { a: httpResponse })); + httpClient.get.mockReturnValue(singleHot(httpResponse)); }); it('should call httpClient', () => { @@ -341,16 +285,13 @@ describe('VorgangRepository', () => { repository.export(vorgangWithEingang); - expect(httpClient.get).toHaveBeenCalledWith( - getUrl(vorgangWithEingang, VorgangWithEingangLinkRel.EXPORT), - requestOptions, - ); + expect(httpClient.get).toHaveBeenCalledWith(getUrl(vorgangWithEingang, VorgangWithEingangLinkRel.EXPORT), requestOptions); }); it('should return value', () => { - const result = repository.export(vorgangWithEingang); + const result: Observable<BlobWithFileName> = repository.export(vorgangWithEingang); - expect(result).toBeObservable(cold('b', { b: { blob: body, fileName } })); + expect(result).toBeObservable(singleCold({ blob: body, fileName })); }); }); diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang-shared.module.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang-shared.module.ts index 57caef2562..b2dd59e658 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang-shared.module.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang-shared.module.ts @@ -24,7 +24,6 @@ import { BinaryFileSharedModule } from '@alfa-client/binary-file-shared'; import { CommandSharedModule } from '@alfa-client/command-shared'; import { NavigationSharedModule } from '@alfa-client/navigation-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; @@ -41,7 +40,6 @@ import * as fromVorgang from './+state/vorgang.reducer'; imports: [ CommonModule, RestModule, - TechSharedModule, CommandSharedModule, BinaryFileSharedModule, RouterModule, diff --git a/alfa-client/libs/vorgang/src/lib/vorgang.module.ts b/alfa-client/libs/vorgang/src/lib/vorgang.module.ts index cf3421cb9e..d1668cea27 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang.module.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang.module.ts @@ -22,8 +22,15 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { HintModule } from '@alfa-client/hint'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { + ConvertForDataTestPipe, + FormatDateWithoutYearWithTimePipe, + FormatDateWithTimePipe, + FormatToPrettyDatePipe, + HasLinkPipe, + ToResourceUriPipe, +} from '@alfa-client/tech-shared'; +import { OzgcloudIconComponent, OzgcloudRoutingButtonComponent, PostfachIconComponent, SpinnerComponent } from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui'; @@ -31,9 +38,13 @@ import { WiedervorlageModule } from '@alfa-client/wiedervorlage'; import { ScrollingModule } from '@angular/cdk/scrolling'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatIcon, MatIconModule } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; import { RouterModule, Routes } from '@angular/router'; import { ButtonToggleGroupComponent } from '@ods/component'; +import { HasAnyLinkPipe } from '../../../tech-shared/src/lib/pipe/has-any-link.pipe'; import { ArchiveIconComponent, ButtonToggleComponent, TooltipDirective } from '@ods/system'; import { vorgangFilterViewGuard } from './vorgang-filter-view.guard'; import { VorgangListContainerComponent } from './vorgang-list-container/vorgang-list-container.component'; @@ -169,9 +180,7 @@ const routes: Routes = [ @NgModule({ imports: [ CommonModule, - TechSharedModule, ScrollingModule, - UiModule, RouterModule.forChild(routes), VorgangSharedModule, WiedervorlageModule, @@ -182,6 +191,21 @@ const routes: Routes = [ ButtonToggleComponent, ButtonToggleGroupComponent, ArchiveIconComponent, + FormatDateWithTimePipe, + FormatDateWithoutYearWithTimePipe, + MatIcon, + MatTooltip, + MatIconModule, + FormatToPrettyDatePipe, + ToResourceUriPipe, + ConvertForDataTestPipe, + HasLinkPipe, + PostfachIconComponent, + SpinnerComponent, + ReactiveFormsModule, + OzgcloudRoutingButtonComponent, + OzgcloudIconComponent, + HasAnyLinkPipe, TooltipDirective, ], declarations: [ diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts index 2d573153c6..f7dfb80e9b 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.spec.ts @@ -21,18 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { SimpleChanges } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; import { BinaryFileAttachmentContainerComponent } from '@alfa-client/binary-file'; import { BinaryFileListResource } from '@alfa-client/binary-file-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; -import { DateEditorComponent, TextAreaEditorComponent, TextEditorComponent } from '@alfa-client/ui'; -import { - WiedervorlageLinkRel, - WiedervorlageResource, - WiedervorlageService, -} from '@alfa-client/wiedervorlage-shared'; +import { DateEditorComponent, OzgcloudTextEditorComponent, TextAreaEditorComponent } from '@alfa-client/ui'; +import { WiedervorlageLinkRel, WiedervorlageResource, WiedervorlageService } from '@alfa-client/wiedervorlage-shared'; +import { SimpleChanges } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; import { createBinaryFileListResource } from 'libs/binary-file-shared/test/binary-file'; import { createWiedervorlageResource } from 'libs/wiedervorlage-shared/test/wiedervorlage'; import { MockComponent } from 'ng-mocks'; @@ -45,10 +41,7 @@ describe('WiedervorlageFormComponent', () => { let component: WiedervorlageFormComponent; let fixture: ComponentFixture<WiedervorlageFormComponent>; - const formService = new WiedervorlageFormService( - new UntypedFormBuilder(), - useFromMock(mock(WiedervorlageService)), - ); + const formService = new WiedervorlageFormService(new UntypedFormBuilder(), useFromMock(mock(WiedervorlageService))); const wiedervorlageService: Mock<WiedervorlageService> = mock(WiedervorlageService); const wiedervorlage: WiedervorlageResource = createWiedervorlageResource(); @@ -57,7 +50,7 @@ describe('WiedervorlageFormComponent', () => { declarations: [ WiedervorlageFormComponent, MockComponent(DateEditorComponent), - MockComponent(TextEditorComponent), + MockComponent(OzgcloudTextEditorComponent), MockComponent(TextAreaEditorComponent), MockComponent(BinaryFileAttachmentContainerComponent), MockComponent(SubmitWiedervorlageButtonComponent), @@ -118,16 +111,12 @@ describe('WiedervorlageFormComponent', () => { }); it('should call wiedervorlage service to get attachments if links exists', () => { - const wiedervorlageWithAttachments: WiedervorlageResource = createWiedervorlageResource([ - WiedervorlageLinkRel.ATTACHMENTS, - ]); + const wiedervorlageWithAttachments: WiedervorlageResource = createWiedervorlageResource([WiedervorlageLinkRel.ATTACHMENTS]); component.wiedervorlage = wiedervorlageWithAttachments; component.updateAttachments(); - expect(wiedervorlageService.getAttachmentList).toHaveBeenCalledWith( - wiedervorlageWithAttachments, - ); + expect(wiedervorlageService.getAttachmentList).toHaveBeenCalledWith(wiedervorlageWithAttachments); }); it('should NOT call wiedervorlage service if link is not present', () => { diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.spec.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.spec.ts index ab2dd54f97..86383128c2 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.spec.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-status/wiedervorlage-status.component.spec.ts @@ -35,8 +35,8 @@ describe('WiedervorlageStatusComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [WiedervorlageStatusComponent, ToTrafficLightPipe], - imports: [MatIcon], + declarations: [WiedervorlageStatusComponent], + imports: [MatIcon, ToTrafficLightPipe], }).compileComponents(); }); diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts index 7729ab5f2f..2057849d9d 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage.module.ts @@ -22,13 +22,34 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { BinaryFileModule } from '@alfa-client/binary-file'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; +import { + ConvertForDataTestPipe, + FormatToPrettyDatePipe, + HasLinkPipe, + ToEmbeddedResourcesPipe, + ToResourceUriPipe, + ToTrafficLightPipe, + ToTrafficLightTooltipPipe, +} from '@alfa-client/tech-shared'; +import { + BackButtonComponent, + DateEditorComponent, + ExpansionPanelComponent, + IconButtonWithSpinnerComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + OzgcloudTextEditorComponent, + SpinnerComponent, + SubnavigationComponent, + TextAreaEditorComponent, +} from '@alfa-client/ui'; import { UserProfileModule } from '@alfa-client/user-profile'; import { VorgangSharedModule } from '@alfa-client/vorgang-shared'; import { VorgangSharedUiModule } from '@alfa-client/vorgang-shared-ui'; import { CommonModule, DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatIcon } from '@angular/material/icon'; +import { MatTooltip } from '@angular/material/tooltip'; import { RouterModule, Routes } from '@angular/router'; import { ButtonWithSpinnerComponent } from '@ods/component'; import { @@ -71,12 +92,29 @@ const routes: Routes = [ imports: [ CommonModule, RouterModule.forChild(routes), - UiModule, VorgangSharedModule, - TechSharedModule, VorgangSharedUiModule, BinaryFileModule, UserProfileModule, + HasLinkPipe, + IconButtonWithSpinnerComponent, + OzgcloudStrokedButtonWithSpinnerComponent, + MatIcon, + MatTooltip, + ToTrafficLightTooltipPipe, + ToResourceUriPipe, + FormatToPrettyDatePipe, + SpinnerComponent, + ExpansionPanelComponent, + ToEmbeddedResourcesPipe, + BackButtonComponent, + ReactiveFormsModule, + OzgcloudTextEditorComponent, + TextAreaEditorComponent, + DateEditorComponent, + SubnavigationComponent, + ToTrafficLightPipe, + ConvertForDataTestPipe, ButtonWithSpinnerComponent, TooltipDirective, UpdateIconComponent, diff --git a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts index 0ca329814a..820da330c9 100644 --- a/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts +++ b/alfa-client/libs/zustaendige-stelle/src/lib/zustaendige-stelle.module.ts @@ -21,7 +21,6 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { TechSharedModule } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -50,7 +49,6 @@ import { ZustaendigeStelleHeaderComponent } from './zustaendige-stelle-header/zu CommonModule, ButtonComponent, CloseIconComponent, - TechSharedModule, InstantSearchComponent, FormsModule, ReactiveFormsModule, diff --git a/alfa-client/nx.json b/alfa-client/nx.json index 45e3e58f41..4153173c19 100644 --- a/alfa-client/nx.json +++ b/alfa-client/nx.json @@ -103,6 +103,7 @@ } }, "useInferencePlugins": false, + "defaultBase": "main", "release": { "projects": ["admin", "alfa", "info"], "projectsRelationship": "independent" -- GitLab