diff --git a/alfa-client/apps/admin/src/app/app.component.html b/alfa-client/apps/admin/src/app/app.component.html index fc2286b2d6554ba362fd9bf8f8b85db6b68dedde..6409e8398c47509d3cfa668979eb5d0e1cd91b26 100644 --- a/alfa-client/apps/admin/src/app/app.component.html +++ b/alfa-client/apps/admin/src/app/app.component.html @@ -58,11 +58,6 @@ @if (apiRoot | hasLink: apiRootLinkRel.CONFIGURATION) { <admin-menu-container data-test-id="menu-container"></admin-menu-container> } - @if (apiRoot | hasLink: apiRootLinkRel.AGGREGATION_MAPPING) { - <ods-nav-item data-test-id="statistik-navigation" caption="Statistik" path="/statistik"> - <ods-statistic-icon icon /> - </ods-nav-item> - } </ods-navbar> <main class="flex-1 overflow-y-auto bg-white px-6 py-4"> <router-outlet diff --git a/alfa-client/apps/admin/src/app/app.component.spec.ts b/alfa-client/apps/admin/src/app/app.component.spec.ts index 287f06ad16468e0ef7f6241b004e728aa4de10d5..54c0b68df01382aeda9158d6b8b348db958f1360 100644 --- a/alfa-client/apps/admin/src/app/app.component.spec.ts +++ b/alfa-client/apps/admin/src/app/app.component.spec.ts @@ -27,6 +27,7 @@ import { HasLinkPipe, createEmptyStateResource, createStateResource } from '@alf import { Mock, dispatchEventFromFixture, existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ActivatedRoute, Router, RouterOutlet } from '@angular/router'; +import { AuthenticationService } from '@authentication'; import { AdminLogoIconComponent, MailboxIconComponent, @@ -35,7 +36,6 @@ import { OrgaUnitIconComponent, UsersIconComponent, } from '@ods/system'; -import { AuthenticationService } from '@authentication'; import { MenuContainerComponent } from 'libs/admin/configuration/src/lib/menu-container/menu-container.component'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -53,7 +53,7 @@ describe('AppComponent', () => { const buildInfoSelector: string = getDataTestIdOf('build-info'); const userProfileButtonSelector: string = getDataTestIdOf('user-profile-button'); const usersRolesNavigationSelector: string = getDataTestIdOf('users-roles-navigation'); - const statistikNavigationSelector: string = getDataTestIdOf('statistik-navigation'); + const organisationsEinheitenNavigationSelector: string = getDataTestIdOf('organisations-einheiten-navigation'); const logoLink: string = getDataTestIdOf('logo-link'); const routerOutletSelector: string = getDataTestIdOf('router-outlet'); @@ -241,21 +241,6 @@ describe('AppComponent', () => { notExistsAsHtmlElement(fixture, organisationsEinheitenNavigationSelector); }); - - it('should show statistik if link in apiRoot exists', () => { - component.apiRootStateResource$ = of( - createStateResource(createApiRootResource([ApiRootLinkRel.AGGREGATION_MAPPING, ApiRootLinkRel.CONFIGURATION])), - ); - fixture.detectChanges(); - - existsAsHtmlElement(fixture, statistikNavigationSelector); - }); - - it('should not show statistik if link in apiRoot does not exists', () => { - fixture.detectChanges(); - - notExistsAsHtmlElement(fixture, statistikNavigationSelector); - }); }); describe('menu', () => { diff --git a/alfa-client/apps/admin/src/app/app.routes.ts b/alfa-client/apps/admin/src/app/app.routes.ts index 89e0d74789cbb18d799b3819a7ef77d94f998f84..e26615b6c170bfc1cf6924e3bcf9e5f19a4defbe 100644 --- a/alfa-client/apps/admin/src/app/app.routes.ts +++ b/alfa-client/apps/admin/src/app/app.routes.ts @@ -28,8 +28,8 @@ import { Route } from '@angular/router'; import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component'; import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component'; -import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; import { StatistikPageComponent } from '../pages/statistik/statistik-page/statistik-page.component'; +import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; import { UserAddPageComponent } from '../pages/users-roles/user-add-page/user-add-page.component'; import { UserRolesPageComponent } from '../pages/users-roles/user-roles-page/user-roles-page.component'; import { apiRootGuard, configurationGuard } from './app.guard'; @@ -83,5 +83,7 @@ export const appRoutes: Route[] = [ path: ROUTES.STATISTIK, component: StatistikPageComponent, title: 'Admin | Statistik', + canActivate: [configurationGuard], + data: <GuardData>{ linkRelName: ConfigurationLinkRel.AGGREGATION_MAPPINGS }, }, ]; diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html index cb9bf3ffd04a1caacde740c71fc98b9ead6a057e..676e114ce2927e1c3fec27e3f602d572b1c9f978 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html @@ -23,8 +23,4 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> - @if (apiRoot | hasLink: apiRootLinkRel.ORGANISATIONS_EINHEIT) { - <admin-organisations-einheit-form-container data-test-id="organisations-einheit-form" /> - } -</ng-container> \ No newline at end of file +<admin-organisations-einheit-form-container data-test-id="organisations-einheit-form" /> \ No newline at end of file diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts index 081e864d889b4390e5951d5ae3a757b687cde6ab..4777b881b3bbf511f7effed9cfb8d48bf355fbe7 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts @@ -22,33 +22,18 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit'; -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { createStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared'; -import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; -import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { singleColdCompleted } from 'libs/tech-shared/test/marbles'; import { MockComponent } from 'ng-mocks'; -import { Observable, of } from 'rxjs'; import { OrganisationsEinheitFormPageComponent } from './organisationseinheit-form-page.component'; describe('OrganisationsEinheitFormPageComponent', () => { let component: OrganisationsEinheitFormPageComponent; let fixture: ComponentFixture<OrganisationsEinheitFormPageComponent>; - const organisationsEinheitFormSelector: string = getDataTestIdOf('organisations-einheit-form'); - - let apiRootService: Mock<ApiRootService>; - beforeEach(async () => { - apiRootService = mock(ApiRootService); - await TestBed.configureTestingModule({ - imports: [CommonModule, TechSharedModule], + imports: [], declarations: [OrganisationsEinheitFormPageComponent, MockComponent(OrganisationsEinheitFormContainerComponent)], - providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); }); @@ -62,45 +47,4 @@ describe('OrganisationsEinheitFormPageComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); - - describe('component', () => { - describe('ngOnInit', () => { - const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(createApiRootResource()); - const apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(apiRootStateResource); - - beforeEach(() => { - apiRootService.getApiRoot.mockReturnValue(apiRootStateResource$); - }); - - it('should call apiRootService getApiRoot', () => { - component.ngOnInit(); - - expect(apiRootService.getApiRoot).toHaveBeenCalled(); - }); - - it('should get apiRootStateResource$', () => { - component.ngOnInit(); - - expect(component.apiRootStateResource$).toBeObservable(singleColdCompleted(apiRootStateResource)); - }); - }); - }); - - describe('template', () => { - describe('admin-organisationseinheit-form-container', () => { - it('should be rendered if apiRootState has link', () => { - component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.ORGANISATIONS_EINHEIT]))); - fixture.detectChanges(); - - existsAsHtmlElement(fixture, organisationsEinheitFormSelector); - }); - - it('should not be rendered if apiRootState has no link', () => { - component.apiRootStateResource$ = of(createStateResource(createApiRootResource())); - fixture.detectChanges(); - - notExistsAsHtmlElement(fixture, organisationsEinheitFormSelector); - }); - }); - }); }); diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts index d92144b1e58138e50682790bfdede8198bb1ebbb..109509a3721d88b943d87b35ab75c76be7cd202c 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts @@ -22,27 +22,12 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit'; -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; -import { CommonModule } from '@angular/common'; -import { Component, inject, OnInit } from '@angular/core'; -import { Observable, of } from 'rxjs'; +import { Component } from '@angular/core'; @Component({ selector: 'organisationseinheit-form-page', templateUrl: './organisationseinheit-form-page.component.html', standalone: true, - imports: [CommonModule, UiModule, OrganisationsEinheitFormContainerComponent], + imports: [OrganisationsEinheitFormContainerComponent], }) -export class OrganisationsEinheitFormPageComponent implements OnInit { - private apiRootService = inject(ApiRootService); - - public apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(createEmptyStateResource<ApiRootResource>()); - - public readonly apiRootLinkRel = ApiRootLinkRel; - - ngOnInit(): void { - this.apiRootStateResource$ = this.apiRootService.getApiRoot(); - } -} +export class OrganisationsEinheitFormPageComponent {} diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html index f1c8abdc407045cf77eb1b673b22fe82c31ff1c7..33d2af56ffabe4eb1148b6b1f4feaf6f8a8c06e3 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html @@ -23,8 +23,4 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> - @if (apiRoot | hasLink: apiRootLinkRel.ORGANISATIONS_EINHEIT) { - <admin-organisations-einheit-container data-test-id="organisations-einheit-container" /> - } -</ng-container> +<admin-organisations-einheit-container data-test-id="organisations-einheit-container" /> diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts index d6b708a413afe74806a4e040ec5c5affc7490678..b106381fa75af3ab154e376ced46f3a288d7364b 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts @@ -22,33 +22,18 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit'; -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { createStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared'; -import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; -import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { singleColdCompleted } from 'libs/tech-shared/test/marbles'; import { MockComponent } from 'ng-mocks'; -import { Observable, of } from 'rxjs'; import { OrganisationsEinheitPageComponent } from './organisationseinheit-page.component'; describe('OrganisationsEinheitPageComponent', () => { let component: OrganisationsEinheitPageComponent; let fixture: ComponentFixture<OrganisationsEinheitPageComponent>; - const organisationsEinheitContainerSelector: string = getDataTestIdOf('organisations-einheit-container'); - - let apiRootService: Mock<ApiRootService>; - beforeEach(async () => { - apiRootService = mock(ApiRootService); - await TestBed.configureTestingModule({ - imports: [CommonModule, TechSharedModule], + imports: [], declarations: [OrganisationsEinheitPageComponent, MockComponent(OrganisationsEinheitContainerComponent)], - providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); }); @@ -62,45 +47,4 @@ describe('OrganisationsEinheitPageComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); - - describe('component', () => { - describe('ngOnInit', () => { - const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(createApiRootResource()); - const apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(apiRootStateResource); - - beforeEach(() => { - apiRootService.getApiRoot.mockReturnValue(apiRootStateResource$); - }); - - it('should call apiRootService getApiRoot', () => { - component.ngOnInit(); - - expect(apiRootService.getApiRoot).toHaveBeenCalled(); - }); - - it('should get apiRootStateResource$', () => { - component.ngOnInit(); - - expect(component.apiRootStateResource$).toBeObservable(singleColdCompleted(apiRootStateResource)); - }); - }); - }); - - describe('template', () => { - describe('admin-organisationseinheit-container', () => { - it('should be rendered if apiRootState has link', () => { - component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.ORGANISATIONS_EINHEIT]))); - fixture.detectChanges(); - - existsAsHtmlElement(fixture, organisationsEinheitContainerSelector); - }); - - it('should not be rendered if apiRootState has no link', () => { - component.apiRootStateResource$ = of(createStateResource(createApiRootResource())); - fixture.detectChanges(); - - notExistsAsHtmlElement(fixture, organisationsEinheitContainerSelector); - }); - }); - }); }); 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 031470f244f8776ca9d4448a1e55c1464a8ae2fe..d2d9e1334032279c2fd0aa5b32ffc76a89944534 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,27 +22,12 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit'; -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; -import { CommonModule } from '@angular/common'; -import { Component, inject, OnInit } from '@angular/core'; -import { Observable, of } from 'rxjs'; +import { Component } from '@angular/core'; @Component({ selector: 'organisationseinheit-page', templateUrl: './organisationseinheit-page.component.html', standalone: true, - imports: [CommonModule, OrganisationsEinheitContainerComponent, UiModule], + imports: [OrganisationsEinheitContainerComponent], }) -export class OrganisationsEinheitPageComponent implements OnInit { - private apiRootService = inject(ApiRootService); - - public apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(createEmptyStateResource<ApiRootResource>()); - - public readonly apiRootLinkRel = ApiRootLinkRel; - - ngOnInit(): void { - this.apiRootStateResource$ = this.apiRootService.getApiRoot(); - } -} +export class OrganisationsEinheitPageComponent {} diff --git a/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.html b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.html index f0b1dd3ea6189175f52d702634ea73e120c1cc08..5213f512591359ed5e619f95d17e27b36dc4d3a7 100644 --- a/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.html +++ b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.html @@ -23,8 +23,4 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> - @if (apiRoot | hasLink: apiRootLinkRel.AGGREGATION_MAPPING) { - <admin-statistik-container data-test-id="statistik-container" /> - } -</ng-container> +<admin-statistik-container data-test-id="statistik-container" /> diff --git a/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.spec.ts b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.spec.ts index 39c25df53fc4ff350d824716dbf2dfb16ce51f9c..2166339888793c63b712e4b4d67cd286002ac6b0 100644 --- a/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.spec.ts @@ -22,33 +22,18 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { StatistikContainerComponent } from '@admin-client/statistik'; -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { createStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared'; -import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; -import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; -import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { singleColdCompleted } from 'libs/tech-shared/test/marbles'; import { MockComponent } from 'ng-mocks'; -import { Observable, of } from 'rxjs'; import { StatistikPageComponent } from './statistik-page.component'; describe('StatistikPageComponent', () => { let component: StatistikPageComponent; let fixture: ComponentFixture<StatistikPageComponent>; - const statistikContainerSelector: string = getDataTestIdOf('statistik-container'); - - let apiRootService: Mock<ApiRootService>; - beforeEach(async () => { - apiRootService = mock(ApiRootService); - await TestBed.configureTestingModule({ - imports: [CommonModule, TechSharedModule], + imports: [], declarations: [StatistikPageComponent, MockComponent(StatistikContainerComponent)], - providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); }); @@ -62,45 +47,4 @@ describe('StatistikPageComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); - - describe('component', () => { - describe('ngOnInit', () => { - const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(createApiRootResource()); - const apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(apiRootStateResource); - - beforeEach(() => { - apiRootService.getApiRoot.mockReturnValue(apiRootStateResource$); - }); - - it('should call apiRootService getApiRoot', () => { - component.ngOnInit(); - - expect(apiRootService.getApiRoot).toHaveBeenCalled(); - }); - - it('should get apiRootStateResource$', () => { - component.ngOnInit(); - - expect(component.apiRootStateResource$).toBeObservable(singleColdCompleted(apiRootStateResource)); - }); - }); - }); - - describe('template', () => { - describe('statistik-organisationseinheit-container', () => { - it('should be rendered if apiRootState has link', () => { - component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.AGGREGATION_MAPPING]))); - fixture.detectChanges(); - - existsAsHtmlElement(fixture, statistikContainerSelector); - }); - - it('should not be rendered if apiRootState has no link', () => { - component.apiRootStateResource$ = of(createStateResource(createApiRootResource())); - fixture.detectChanges(); - - notExistsAsHtmlElement(fixture, statistikContainerSelector); - }); - }); - }); }); diff --git a/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.ts b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.ts index 94ab9abca8035f201bf5d5c5c19615dd428ad13f..1e74b105df36af783a691e857f71f8697c4c95b2 100644 --- a/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.ts +++ b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.ts @@ -22,26 +22,12 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { StatistikContainerComponent } from '@admin-client/statistik'; -import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; -import { createEmptyStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared'; -import { CommonModule } from '@angular/common'; -import { Component, inject, OnInit } from '@angular/core'; -import { Observable, of } from 'rxjs'; +import { Component } from '@angular/core'; @Component({ selector: 'app-statistik-page', standalone: true, - imports: [CommonModule, StatistikContainerComponent, TechSharedModule], + imports: [StatistikContainerComponent], templateUrl: './statistik-page.component.html', }) -export class StatistikPageComponent implements OnInit { - private readonly apiRootService = inject(ApiRootService); - - public apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(createEmptyStateResource<ApiRootResource>()); - - public readonly apiRootLinkRel = ApiRootLinkRel; - - ngOnInit(): void { - this.apiRootStateResource$ = this.apiRootService.getApiRoot(); - } -} +export class StatistikPageComponent {} diff --git a/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts index 1468b2b4e4354bd245f83cc28dd6f6c2c5fb00f3..f38803351591db0d6ac7fb13c7bef7c0a9ce7a34 100644 --- a/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts +++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts @@ -23,4 +23,5 @@ */ export enum ConfigurationLinkRel { SETTING = 'settings', + AGGREGATION_MAPPINGS = 'aggregationMappings', } diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html index bf9513687239c5acecad436b3d9d6983a4f9d03c..fd97589d60cd2ca0c583ca7ae1a143f7bba98121 100644 --- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html +++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html @@ -1 +1 @@ -<admin-menu [configurationStateResource]="configurationStateResource$ | async"></admin-menu> +<admin-menu [configurationStateResource]="configurationStateResource$ | async"></admin-menu> \ No newline at end of file diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.html b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.html index cc5f5a3bd88842d999e990fd850861892eec9c93..0c1102a4c22c1603d4cc93f6baaaf5fcb2f94d40 100644 --- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.html +++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu/menu.component.html @@ -3,3 +3,8 @@ <ods-mailbox-icon icon /> </ods-nav-item> } +@if (configurationStateResource.resource | hasLink: configurationLinkRel.AGGREGATION_MAPPINGS) { + <ods-nav-item data-test-id="statistik-navigation" caption="Statistik" path="/statistik"> + <ods-statistic-icon icon /> + </ods-nav-item> +} 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 fee2b3f7aa6377ce1829b18470d9c7c5b2b720d3..1f417e5febf09fcf523cd7c2d01a273d65630e79 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 @@ -13,6 +13,7 @@ describe('MenuComponent', () => { let fixture: ComponentFixture<MenuComponent>; const postfachNavigation: string = getDataTestIdOf('postfach-navigation'); + const statistikNavigationSelector: string = getDataTestIdOf('statistik-navigation'); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -47,4 +48,24 @@ describe('MenuComponent', () => { notExistsAsHtmlElement(fixture, postfachNavigation); }); }); + + describe('statistic navigation', () => { + it('should show if settings link is present', () => { + component.configurationStateResource = createStateResource( + createConfigurationResource([ConfigurationLinkRel.AGGREGATION_MAPPINGS]), + ); + + fixture.detectChanges(); + + existsAsHtmlElement(fixture, statistikNavigationSelector); + }); + + it('should hide if settings link is missing', () => { + component.configurationStateResource = createStateResource(createConfigurationResource()); + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, statistikNavigationSelector); + }); + }); }); 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 2100ae17525d4f62461f9798ce885113e31db1b8..19cc60bab45d9e098ace89450e3c7efa50e96c30 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 @@ -2,12 +2,12 @@ import { ConfigurationLinkRel, ConfigurationResource } from '@admin-client/confi import { StateResource, TechSharedModule } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; -import { MailboxIconComponent, NavItemComponent } from '@ods/system'; +import { MailboxIconComponent, NavItemComponent, StatisticIconComponent } from '@ods/system'; @Component({ selector: 'admin-menu', standalone: true, - imports: [CommonModule, NavItemComponent, MailboxIconComponent, TechSharedModule], + imports: [CommonModule, NavItemComponent, MailboxIconComponent, TechSharedModule, StatisticIconComponent], templateUrl: './menu.component.html', }) export class MenuComponent { diff --git a/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts b/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts index b0103ba04936d419ca55366b59a5c3dd1c78b5b5..8628c7d5a2ad48b0e493e132d66c77ff3d8970b9 100644 --- a/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts +++ b/alfa-client/libs/api-root-shared/src/lib/api-root.linkrel.ts @@ -63,5 +63,4 @@ export enum ApiRootLinkRel { RESOURCE = 'resource', ORGANISATIONS_EINHEIT = 'organisationsEinheiten', USERS = 'users', - AGGREGATION_MAPPING = 'aggregationMapping', }