diff --git a/alfa-client/apps/admin-e2e/src/components/statistik/statistik-component.ts b/alfa-client/apps/admin-e2e/src/components/statistik/statistik-component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c088cd85910ceafc4c0f4df93edc403abfd4a630 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/components/statistik/statistik-component.ts @@ -0,0 +1,9 @@ +import { exist } from '../../support/cypress.util'; + +export class StatistikE2EComponent { + private readonly headerText: string = 'statistik-header-text'; + + public isHeaderTextVisible(): void { + exist(cy.getTestElement(this.headerText)); + } +} diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/ariane.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/ariane.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..10be61e410d4b9332e05ce3efdd12e65bfd6dc4b --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/ariane.cy.ts @@ -0,0 +1,31 @@ +import { MainPage, waitForSpinnerToDisappear } from 'apps/admin-e2e/src/page-objects/main.po'; +import { exist, notExist } from 'apps/admin-e2e/src/support/cypress.util'; +import { loginAsAriane } from 'apps/admin-e2e/src/support/user-util'; + +describe('Navigation', () => { + const mainPage: MainPage = new MainPage(); + + describe('with user ariane', () => { + before(() => { + loginAsAriane(); + + waitForSpinnerToDisappear(); + }); + + it('should show benutzer navigation item', () => { + exist(mainPage.getBenutzerTab()); + }); + + it('should show postfach navigation item', () => { + exist(mainPage.getPostfachNavigationItem()); + }); + + it('should hide organisationseinheiten navigation item', () => { + notExist(mainPage.getOrganisationEinheitNavigationItem()); + }); + + it('should hide statistik navigation item', () => { + notExist(mainPage.getStatistikNavigationItem()); + }); + }); +}); diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/daria.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/daria.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..7082da14ad51b94c655f92de71e898742c07a15d --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/daria.cy.ts @@ -0,0 +1,44 @@ +import { StatistikE2EComponent } from 'apps/admin-e2e/src/components/statistik/statistik-component'; +import { MainPage, waitForSpinnerToDisappear } from 'apps/admin-e2e/src/page-objects/main.po'; +import { exist, notExist } from 'apps/admin-e2e/src/support/cypress.util'; +import { loginAsDaria } from 'apps/admin-e2e/src/support/user-util'; + +describe('Navigation', () => { + const mainPage: MainPage = new MainPage(); + + const statistikPage: StatistikE2EComponent = new StatistikE2EComponent(); + + describe('with user daria', () => { + before(() => { + loginAsDaria(); + + waitForSpinnerToDisappear(); + }); + + it('should hide other navigation item', () => { + notExist(mainPage.getBenutzerTab()); + }); + + it('should hide postfach navigation item', () => { + notExist(mainPage.getPostfachNavigationItem()); + }); + + it('should hide organisationseinheiten navigation item', () => { + notExist(mainPage.getOrganisationEinheitNavigationItem()); + }); + + describe('statistik', () => { + it('should be visible', () => { + exist(mainPage.getStatistikNavigationItem()); + }); + + it('should be initial selected', () => { + mainPage.isStatistikNavigationItemSelected(); + }); + + it('should show header text', () => { + statistikPage.isHeaderTextVisible(); + }); + }); + }); +}); diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/safira.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/safira.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..2b1c1023b9ba8d3bb73e34ce2c36a937816ca716 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/navigation/safira.cy.ts @@ -0,0 +1,50 @@ +import { StatistikE2EComponent } from 'apps/admin-e2e/src/components/statistik/statistik-component'; +import { MainPage, waitForSpinnerToDisappear } from 'apps/admin-e2e/src/page-objects/main.po'; +import { exist } from 'apps/admin-e2e/src/support/cypress.util'; +import { loginAsSafira } from 'apps/admin-e2e/src/support/user-util'; + +describe('Navigation', () => { + const mainPage: MainPage = new MainPage(); + + const statistikPage: StatistikE2EComponent = new StatistikE2EComponent(); + + describe('with user safira', () => { + before(() => { + loginAsSafira(); + + waitForSpinnerToDisappear(); + }); + + it('should show benutzer navigation item', () => { + exist(mainPage.getBenutzerTab()); + }); + + it('should show postfach navigation item', () => { + exist(mainPage.getPostfachNavigationItem()); + }); + + it('should show organisationseinheiten navigation item', () => { + exist(mainPage.getOrganisationEinheitNavigationItem()); + }); + + describe('statistik', () => { + it('should be visible', () => { + exist(mainPage.getStatistikNavigationItem()); + }); + + describe('on selection', () => { + before(() => { + mainPage.openStatistik(); + }); + + it('should show page on selection', () => { + statistikPage.isHeaderTextVisible(); + }); + + it('should mark navigation item as selected', () => { + mainPage.isStatistikNavigationItemSelected(); + }); + }); + }); + }); +}); diff --git a/alfa-client/apps/admin-e2e/src/fixtures/user/user_daria.json b/alfa-client/apps/admin-e2e/src/fixtures/user/user_daria.json new file mode 100644 index 0000000000000000000000000000000000000000..0ac9cc99af58292dfa0c13ffac4c7f36d49fef93 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/fixtures/user/user_daria.json @@ -0,0 +1,12 @@ +{ + "name": "daria", + "password": "Y9nk43yrQ_zzIPpfFU-I", + "firstName": "Daria", + "lastName": "Data", + "fullName": "Daria Data", + "email": "daria.data@ozg-sh.de", + "initials": "DD", + "dataTestId": "DARIA_DATENBEAUFTRAGUNG", + "clientRoles": ["DATENBEAUFTRAGUNG"], + "groups": ["E2E Tests"] +} diff --git a/alfa-client/apps/admin-e2e/src/fixtures/user/user_safira.json b/alfa-client/apps/admin-e2e/src/fixtures/user/user_safira.json new file mode 100644 index 0000000000000000000000000000000000000000..1a978c211c729ec44d0d827034d07bf7cd9d9745 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/fixtures/user/user_safira.json @@ -0,0 +1,12 @@ +{ + "name": "safira", + "password": "Y9nk43yrQ_zzIPpfFU-I", + "firstName": "Safira", + "lastName": "Super", + "fullName": "Safira Super", + "email": "safira.super@ozg-sh.de", + "initials": "SS", + "dataTestId": "SAFIRA_ADMIN_DATENBEAUFTRAGUNG", + "clientRoles": ["DATENBEAUFTRAGUNG", "ADMIN_ADMIN"], + "groups": ["E2E Tests"] +} diff --git a/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts b/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts index 8137fc536242c75461320a28b5d49f2e056f52d0..360f51ce884d2e15ec285c10d7b7c2d8eb66856e 100644 --- a/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts +++ b/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts @@ -22,15 +22,21 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { BuildInfoE2EComponent } from '../components/buildinfo/buildinfo.e2e.component'; +import { containClass } from '../support/cypress.util'; import { HeaderE2EComponent } from './header.po'; export class MainPage { private readonly buildInfo: BuildInfoE2EComponent = new BuildInfoE2EComponent(); private readonly header: HeaderE2EComponent = new HeaderE2EComponent(); + private readonly benutzerTab: string = 'caption-Benutzer__Rollen'; private readonly postfachTab: string = 'caption-Postfach'; private readonly organisationsEinheitenTab: string = 'caption-Organisationseinheiten'; + private readonly postfachNavigationItem: string = 'postfach-navigation'; + private readonly organisationEinheitNavigation: string = 'organisations-einheiten-navigation'; + private readonly statistikNavigationItem: string = 'statistik-navigation'; + public getBuildInfo(): BuildInfoE2EComponent { return this.buildInfo; } @@ -47,6 +53,14 @@ export class MainPage { this.getBenutzerTab().click(); } + public getPostfachNavigationItem(): Cypress.Chainable<Element> { + return cy.getTestElement(this.postfachNavigationItem); + } + + public getOrganisationEinheitNavigationItem(): Cypress.Chainable<Element> { + return cy.getTestElement(this.organisationEinheitNavigation); + } + public getOrganisationsEinheitenMenu(): Cypress.Chainable<Element> { return cy.getTestElement(this.organisationsEinheitenTab); } @@ -54,6 +68,18 @@ export class MainPage { public openOrganisationsEinheiten(): void { this.getOrganisationsEinheitenMenu().click(); } + + public getStatistikNavigationItem(): Cypress.Chainable<Element> { + return cy.getTestElement(this.statistikNavigationItem); + } + + public isStatistikNavigationItemSelected(): void { + containClass(this.getStatistikNavigationItem().get('a'), 'border-selected'); + } + + public openStatistik(): void { + this.getStatistikNavigationItem().click(); + } } export function waitForSpinnerToDisappear(): boolean { diff --git a/alfa-client/apps/admin-e2e/src/support/cypress.util.ts b/alfa-client/apps/admin-e2e/src/support/cypress.util.ts index 60db5d0f8610ec03e2cd6c0c34a71e45555612ca..505762fe8f5193921ee7b5bffb76234f5b21393b 100644 --- a/alfa-client/apps/admin-e2e/src/support/cypress.util.ts +++ b/alfa-client/apps/admin-e2e/src/support/cypress.util.ts @@ -25,7 +25,7 @@ import { wait } from './cypress-helper'; //TODO Naming der Methoden geradeziehen -export function containClass(element: Cypress.Chainable<Element>, cssClass: string): void { +export function containClass(element: Cypress.Chainable<any>, cssClass: string): void { element.should('have.class', cssClass); } diff --git a/alfa-client/apps/admin-e2e/src/support/user-util.ts b/alfa-client/apps/admin-e2e/src/support/user-util.ts index e05c80cd5947165fef7e2fd7a3dfca65885a0fe2..4177cabffc48fd97470a3a8a9d78b0585630f5cf 100644 --- a/alfa-client/apps/admin-e2e/src/support/user-util.ts +++ b/alfa-client/apps/admin-e2e/src/support/user-util.ts @@ -26,15 +26,23 @@ import { HeaderE2EComponent } from '../page-objects/header.po'; import { MainPage } from '../page-objects/main.po'; export function loginAsAriane(): void { - cy.fixture('user/user_ariane.json').then((user) => { - loginByUi(user); - }); + login(UserJsonPath.ARIANE); +} + +export function loginAsDaria(): void { + login(UserJsonPath.DARIA); } export function loginAsSabine(): void { - cy.fixture('user/user_sabine.json').then((user) => { - loginByUi(user); - }); + login(UserJsonPath.SABINE); +} + +export function loginAsSafira(): void { + login(UserJsonPath.SAFIRA); +} + +function login(userJson: string): void { + cy.fixture(userJson).then((user) => loginByUi(user)); } // Hinweis: cacheAcrossSpecs: true lässt Tests umfallen @@ -60,6 +68,13 @@ export function loginByUi(user: UserE2E): void { ); } +enum UserJsonPath { + ARIANE = 'user/user_ariane.json', + DARIA = 'user/user_daria.json', + SABINE = 'user/user_sabine.json', + SAFIRA = 'user/user_safira.json', +} + export function logout(): void { const mainPage: MainPage = new MainPage(); const header: HeaderE2EComponent = mainPage.getHeader(); diff --git a/alfa-client/apps/admin/src/app/app.component.html b/alfa-client/apps/admin/src/app/app.component.html index 1bf3181be49c2b39c5f0273266c0f5a07cf75d57..0c78fb8075c6f3199e55df679d00288523d96895 100644 --- a/alfa-client/apps/admin/src/app/app.component.html +++ b/alfa-client/apps/admin/src/app/app.component.html @@ -45,8 +45,8 @@ <ods-nav-item data-test-id="users-roles-navigation" caption="Benutzer & Rollen" path="/benutzer_und_rollen"> <ods-users-icon class="stroke-text" icon /> </ods-nav-item> - <hr /> </ng-container> + <hr /> <ng-container *ngIf="environment.features.postfach"> <ods-nav-item data-test-id="postfach-navigation" caption="Postfach" path="/postfach"> <ods-mailbox-icon icon /> @@ -61,6 +61,12 @@ <ods-orga-unit-icon icon /> </ods-nav-item> </ng-container> + <hr /> + @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> + } </ng-container> </ods-navbar> <main class="flex-1 overflow-y-auto bg-white px-6 py-4"> 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 47e52ca32268a84cd26ea728858fad6b0265e96a..534238c7f09350f62db59a1f5c3569ff8d6b4d06 100644 --- a/alfa-client/apps/admin/src/app/app.component.spec.ts +++ b/alfa-client/apps/admin/src/app/app.component.spec.ts @@ -65,6 +65,7 @@ describe('AppComponent', () => { const navigationSelector: string = getDataTestIdOf('navigation'); const usersRolesNavigationSelector: string = getDataTestIdOf('users-roles-navigation'); const postfachNavigationSelector: string = getDataTestIdOf('postfach-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'); @@ -281,6 +282,21 @@ 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('build version', () => { diff --git a/alfa-client/apps/admin/src/app/app.component.ts b/alfa-client/apps/admin/src/app/app.component.ts index 11944356c6944e3fcd7faf4a6e1cbb030ddc90a0..99c00041cae4dda1679a8a0ef0bf5b9236e44411 100644 --- a/alfa-client/apps/admin/src/app/app.component.ts +++ b/alfa-client/apps/admin/src/app/app.component.ts @@ -34,6 +34,7 @@ import { NavbarComponent, NavItemComponent, OrgaUnitIconComponent, + StatisticIconComponent, UsersIconComponent, } from '@ods/system'; import { AuthenticationService } from 'libs/authentication/src/lib/authentication.service'; @@ -55,6 +56,7 @@ import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/ AdminLogoIconComponent, MailboxIconComponent, OrgaUnitIconComponent, + StatisticIconComponent, RouterOutlet, UnavailablePageComponent, BuildInfoComponent, diff --git a/alfa-client/apps/admin/src/app/app.routes.ts b/alfa-client/apps/admin/src/app/app.routes.ts index 0886fc15cf87a9708f8939ce22e603b1bf312cf1..5d05f9e7915635df01c118572b853a8e87adf25a 100644 --- a/alfa-client/apps/admin/src/app/app.routes.ts +++ b/alfa-client/apps/admin/src/app/app.routes.ts @@ -26,6 +26,7 @@ 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 { StatistikPageComponent } from '../pages/statistik/statistik-page/statistik-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'; @@ -60,4 +61,9 @@ export const appRoutes: Route[] = [ component: OrganisationsEinheitFormPageComponent, title: 'Admin | Organisationseinheit', }, + { + path: ROUTES.STATISTIK, + component: StatistikPageComponent, + title: 'Admin | Statistik', + }, ]; 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 new file mode 100644 index 0000000000000000000000000000000000000000..f0b1dd3ea6189175f52d702634ea73e120c1cc08 --- /dev/null +++ b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.html @@ -0,0 +1,30 @@ +<!-- + + Copyright (C) 2025 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 *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> + @if (apiRoot | hasLink: apiRootLinkRel.AGGREGATION_MAPPING) { + <admin-statistik-container data-test-id="statistik-container" /> + } +</ng-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 new file mode 100644 index 0000000000000000000000000000000000000000..39c25df53fc4ff350d824716dbf2dfb16ce51f9c --- /dev/null +++ b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.spec.ts @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2025 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 { 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], + declarations: [StatistikPageComponent, MockComponent(StatistikContainerComponent)], + providers: [{ provide: ApiRootService, useValue: apiRootService }], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(StatistikPageComponent); + component = fixture.componentInstance; + + fixture.detectChanges(); + }); + + 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 new file mode 100644 index 0000000000000000000000000000000000000000..94ab9abca8035f201bf5d5c5c19615dd428ad13f --- /dev/null +++ b/alfa-client/apps/admin/src/pages/statistik/statistik-page/statistik-page.component.ts @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2025 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 { 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'; + +@Component({ + selector: 'app-statistik-page', + standalone: true, + imports: [CommonModule, StatistikContainerComponent, TechSharedModule], + 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(); + } +} diff --git a/alfa-client/libs/admin/shared/src/lib/routes.ts b/alfa-client/libs/admin/shared/src/lib/routes.ts index 4867284b8af315446b304fac9496612723910aaa..485e71ee1224c40796859d855e1f9ff02ef98081 100644 --- a/alfa-client/libs/admin/shared/src/lib/routes.ts +++ b/alfa-client/libs/admin/shared/src/lib/routes.ts @@ -26,4 +26,5 @@ export const ROUTES = { BENUTZER_UND_ROLLEN: 'benutzer_und_rollen', BENUTZER_UND_ROLLEN_NEU: 'benutzer_und_rollen/neu', ORGANISATIONSEINHEITEN: 'organisationseinheiten', + STATISTIK: 'statistik', }; diff --git a/alfa-client/libs/admin/statistik/.eslintrc.json b/alfa-client/libs/admin/statistik/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/statistik/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/statistik/README.md b/alfa-client/libs/admin/statistik/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ad651ba5c6b2577aae0af1c1ac56ca839db65022 --- /dev/null +++ b/alfa-client/libs/admin/statistik/README.md @@ -0,0 +1,7 @@ +# statistik + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test statistik` to execute the unit tests. diff --git a/alfa-client/libs/admin/statistik/jest.config.ts b/alfa-client/libs/admin/statistik/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..fc41bd8816868cdd6f860b9908d0f06dbc9defc9 --- /dev/null +++ b/alfa-client/libs/admin/statistik/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'admin-statistik', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/statistik', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/statistik/project.json b/alfa-client/libs/admin/statistik/project.json new file mode 100644 index 0000000000000000000000000000000000000000..a5c36fc013da6fcc3504172dad9627628b42cfd9 --- /dev/null +++ b/alfa-client/libs/admin/statistik/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-statistik", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/statistik/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin/statistik/tsconfig.lib.json", + "jestConfig": "libs/admin/statistik/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/statistik/src/index.ts b/alfa-client/libs/admin/statistik/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..cdc5d7b64f24d50920b721f3ab01c5b69cb41b99 --- /dev/null +++ b/alfa-client/libs/admin/statistik/src/index.ts @@ -0,0 +1 @@ +export * from './lib/statistik-container/statistik-container.component'; diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.html b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..eb8c0eaa7fd1b08d5028ff9abbd5001ba0f89ea4 --- /dev/null +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.html @@ -0,0 +1,26 @@ +<!-- + + Copyright (C) 2025 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. + +--> +<h1 class="heading-1" data-test-id="statistik-header-text">Statistik</h1> diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.spec.ts b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..84b58ee0de584e0b5445a79865b4154cc60bb4c7 --- /dev/null +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.spec.ts @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2025 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 { ComponentFixture, TestBed } from '@angular/core/testing'; +import { StatistikContainerComponent } from './statistik-container.component'; + +describe('StatistikContainerComponent', () => { + let component: StatistikContainerComponent; + let fixture: ComponentFixture<StatistikContainerComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [StatistikContainerComponent], + }); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(StatistikContainerComponent); + component = fixture.componentInstance; + + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.ts b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..05e7e9db912474d8f6991acdf8f20d480b309fe2 --- /dev/null +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-container.component.ts @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2025 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 { Component } from '@angular/core'; + +@Component({ + selector: 'admin-statistik-container', + templateUrl: './statistik-container.component.html', + standalone: true, + imports: [CommonModule], +}) +export class StatistikContainerComponent {} diff --git a/alfa-client/libs/admin/statistik/src/test-setup.ts b/alfa-client/libs/admin/statistik/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef358fbdf02a6bfc0ca9a7c2f5c73766b01ef584 --- /dev/null +++ b/alfa-client/libs/admin/statistik/src/test-setup.ts @@ -0,0 +1,7 @@ +globalThis.ngJest = { + testEnvironmentOptions: { + errorOnUnknownElements: true, + errorOnUnknownProperties: true, + }, +}; +import 'jest-preset-angular/setup-jest'; diff --git a/alfa-client/libs/admin/statistik/tsconfig.json b/alfa-client/libs/admin/statistik/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/statistik/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/statistik/tsconfig.lib.json b/alfa-client/libs/admin/statistik/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/statistik/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/statistik/tsconfig.spec.json b/alfa-client/libs/admin/statistik/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/statistik/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} 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 4e39dc6551fae399b2557a29e47c88b329fc6a39..d91b167f8a7280a09745b40936f79c0367c4c3b4 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 @@ -62,4 +62,5 @@ export enum ApiRootLinkRel { HINTS = 'hints', RESOURCE = 'resource', ORGANISATIONS_EINHEIT = 'organisationsEinheiten', + AGGREGATION_MAPPING = 'aggregationMapping', } diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts index 886dbc3377ed2be0887f68565cf76d1c6af61413..4c577c9087024d16b200f280a1ab6b90d3a8a32d 100644 --- a/alfa-client/libs/design-system/src/index.ts +++ b/alfa-client/libs/design-system/src/index.ts @@ -68,6 +68,7 @@ export * from './lib/icons/search-icon/search-icon.component'; export * from './lib/icons/send-icon/send-icon.component'; export * from './lib/icons/spinner-icon/spinner-icon.component'; export * from './lib/icons/stamp-icon/stamp-icon.component'; +export * from './lib/icons/statistic-icon/statistic-icon.component'; export * from './lib/icons/user-icon/user-icon.component'; export * from './lib/icons/users-icon/users-icon.component'; export * from './lib/instant-search/instant-search/instant-search.component'; diff --git a/alfa-client/libs/design-system/src/lib/icons/settings-icon/settengs-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/settings-icon/settengs-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..790a794f4807fcc24841e66aac74a84846d9ec86 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/settings-icon/settengs-icon.stories.ts @@ -0,0 +1,50 @@ +/* + * 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: + * + * 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 type { Meta, StoryObj } from '@storybook/angular'; + +import { SettingsIconComponent } from './settings-icon.component'; + +const meta: Meta<SettingsIconComponent> = { + title: 'Icons/Settings icon', + component: SettingsIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<SettingsIconComponent>; + +export const Default: Story = { + args: { size: 'large' }, + argTypes: { + size: { + control: 'select', + options: ['small', 'medium', 'large', 'extra-large', 'full'], + description: 'Size of icon. Property "full" means 100%', + table: { + defaultValue: { summary: 'medium' }, + }, + }, + }, +}; diff --git a/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.component.spec.ts b/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f6bddf811de36b7005098584a3c436010fc9bb3 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { StatisticIconComponent } from './statistic-icon.component'; + +describe('StatisticIconComponent', () => { + let component: StatisticIconComponent; + let fixture: ComponentFixture<StatisticIconComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [StatisticIconComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(StatisticIconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.component.ts b/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..df5d2b5bdcba9549b60cea9ee4b04d7e8bc4d8c4 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.component.ts @@ -0,0 +1,24 @@ +import { NgClass } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { twMerge } from 'tailwind-merge'; +import { iconVariants, IconVariants } from '../iconVariants'; + +@Component({ + selector: 'ods-statistic-icon', + standalone: true, + imports: [NgClass], + template: `<svg + viewBox="0 0 24 24" + xmlns="http://www.w3.org/2000/svg" + [ngClass]="twMerge(iconVariants({ size }), 'fill-black', class)" + > + <path d="M2 21V19H22V21H2ZM3 18V11H6V18H3ZM8 18V6H11V18H8ZM13 18V9H16V18H13ZM18 18V3H21V18H18Z" /> + </svg>`, +}) +export class StatisticIconComponent { + @Input() size: IconVariants['size'] = 'medium'; + @Input() class: string = undefined; + + readonly iconVariants = iconVariants; + readonly twMerge = twMerge; +} diff --git a/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.stories.ts b/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..272f6fe850c3862c1a7c8212bf2807369a41064b --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/icons/statistic-icon/statistic-icon.stories.ts @@ -0,0 +1,50 @@ +/* + * 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: + * + * 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 type { Meta, StoryObj } from '@storybook/angular'; + +import { StatisticIconComponent } from './statistic-icon.component'; + +const meta: Meta<StatisticIconComponent> = { + title: 'Icons/Statistic icon', + component: StatisticIconComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj<StatisticIconComponent>; + +export const Default: Story = { + args: { size: 'large' }, + argTypes: { + size: { + control: 'select', + options: ['small', 'medium', 'large', 'extra-large', 'full'], + description: 'Size of icon. Property "full" means 100%', + table: { + defaultValue: { summary: 'medium' }, + }, + }, + }, +}; diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json index f6e9e575c23782986c485ac2912154cf9ed224a7..249e37d8a638fddfa5473c84b59f2686e32b08ef 100644 --- a/alfa-client/tsconfig.base.json +++ b/alfa-client/tsconfig.base.json @@ -23,6 +23,7 @@ "@admin-client/postfach-shared": ["libs/admin/postfach-shared/src/index.ts"], "@admin-client/settings-shared": ["libs/admin/settings-shared/src/index.ts"], "@admin-client/shared": ["libs/admin/shared/src/index.ts"], + "@admin-client/statistik": ["libs/admin/statistik/src/index.ts"], "@admin-client/user": ["libs/admin/user/src/index.ts"], "@admin-client/user-shared": ["libs/admin/user-shared/src/index.ts"], "@alfa-client/api-root-shared": ["libs/api-root-shared/src/index.ts"],