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 d8a70c20e7bccf6401fe08087ee4508002b14288..f4f18e65571d33e43ad0c3ea9f27a30107b9c463 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 @@ -51,6 +51,9 @@ export enum ApiRootLinkRel { ALL_WIEDERVORLAGEN = 'vorgaenge_wiedervorlagen_all', MY_WIEDERVORLAGEN = 'vorgaenge_wiedervorlagen_my', UNASSIGNED_WIEDERVORLAGEN = 'vorgaenge_wiedervorlagen_unassigned', + ALL_UNGELESENE_NACHRICHTEN = 'vorgaenge_ungelesene_nachrichten_all', + MY_UNGELESENE_NACHRICHTEN = 'vorgaenge_ungelesene_nachrichten_my', + UNASSIGNED_UNGELESENE_NACHRICHTEN = 'vorgaenge_ungelesene_nachrichten_unassigned', ALLE_VORGAENGE_ZU_LOESCHEN = 'vorgaenge_zu_loeschen_all', MEINE_VORGAENGE_ZU_LOESCHEN = 'vorgaenge_zu_loeschen_my', UNASSIGNED_ZU_LOESCHEN = 'vorgaenge_zu_loeschen_unassigned', diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts index 94216faa5f7884f6fa1252e711f49e26d957462c..c7a5be544eed27c2ee84715549bd578f02b079c7 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts @@ -143,6 +143,7 @@ function createEmptyVorgangStatistic(): VorgangStatistic { }, wiedervorlagen: null, existsWiedervorlageOverdue: false, + ungeleseneNachrichten: 0, }; } diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts index 41b412c9839bb98940bbdd55ea74e8fcd1e47cb3..c18d952fcec598790bc40eee1a0522742c0eccd3 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts @@ -109,6 +109,7 @@ export interface VorgangStatistic { byStatus: ByStatus; wiedervorlagen: number; existsWiedervorlageOverdue: boolean; + ungeleseneNachrichten: number; } export interface ByStatus { @@ -163,6 +164,7 @@ export enum VorgangView { WIEDERVORLAGEN, SEARCH, ZU_LOESCHEN, + UNGELESENE_NACHRICHTEN, } export interface StatusCommandMap { diff --git a/alfa-client/libs/vorgang-shared/test/vorgang.ts b/alfa-client/libs/vorgang-shared/test/vorgang.ts index 743c5e65339cfc65091a3db158cdbf8664863b3c..8bddc8cc501bf26b18890d8106b0eef67dc3a3ff 100644 --- a/alfa-client/libs/vorgang-shared/test/vorgang.ts +++ b/alfa-client/libs/vorgang-shared/test/vorgang.ts @@ -145,6 +145,7 @@ export function createVorgangStatistic(): VorgangStatistic { byStatus: createByStatus(), wiedervorlagen: faker.datatype.number(), existsWiedervorlageOverdue: false, + ungeleseneNachrichten: faker.datatype.number(), }; } diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html index c7d9d6fc8850a44c562412d25b77ea4a0c2cda83..6c874f1b35f4c2e6ea7955504a4dc69a5937fa6b 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html @@ -130,6 +130,22 @@ > <div class="dot zu-loeschen"></div> </alfa-vorgang-view-item-container> + <alfa-vorgang-view-item-container + *ngIf=" + apiRootResource + | hasAnyLink + : apiRootLinkRel.ALL_UNGELESENE_NACHRICHTEN + : apiRootLinkRel.MY_UNGELESENE_NACHRICHTEN + : apiRootLinkRel.UNASSIGNED_UNGELESENE_NACHRICHTEN + " + data-test-id="vorgang-ungelesene-nachrichten-view" + label="Ungelesen" + [view]="vorgangView.UNGELESENE_NACHRICHTEN" + [count]="statistic.ungeleseneNachrichten" + class="top-border" + > + <ozgcloud-postfach-icon [showBadge]="true"></ozgcloud-postfach-icon> + </alfa-vorgang-view-item-container> <alfa-vorgang-view-item-container *ngIf=" apiRootResource @@ -142,7 +158,6 @@ label="Wiedervorlagen" [view]="vorgangView.WIEDERVORLAGEN" [count]="statistic.wiedervorlagen" - class="top-border" > <alfa-wiedervorlage-icon [isOverdue]="statistic.existsWiedervorlageOverdue" diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.scss b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.scss index 4b089df917f623d3d02d1f44fcca2dc9e7ba79c1..e6328b2c2a8d60b60bd8a536fe854ad19450a9e6 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.scss +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.scss @@ -70,6 +70,7 @@ body.dark :host { } } -ozgcloud-icon { +ozgcloud-icon, +ozgcloud-postfach-icon { margin-right: 6px; } diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts index cf4f8bd301a92a054afbf9e6c3d22c7c1af0b5fe..2d312f19021b016c3985e0b17b487fc982210f79 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-page-container/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts @@ -25,7 +25,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ApiRootLinkRel } from '@alfa-client/api-root-shared'; import { HasLinkPipe, createStateResource } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; -import { OzgcloudIconComponent } from '@alfa-client/ui'; +import { OzgcloudIconComponent, PostfachIconComponent } from '@alfa-client/ui'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { HasAnyLinkPipe } from 'libs/tech-shared/src/lib/pipe/has-any-link.pipe'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -48,6 +48,7 @@ describe('VorgangViewsMenuComponent', () => { const abgeschlossenView: string = getDataTestIdOf('vorgang-abgeschlossen-view'); const verworfenView: string = getDataTestIdOf('vorgang-verworfen-view'); const wiedervorlagenView: string = getDataTestIdOf('vorgang-wiedervorlagen-view'); + const ungeleseneNachrichtenView: string = getDataTestIdOf('vorgang-ungelesene-nachrichten-view'); const vorgangListView: string = getDataTestIdOf('vorgang-vorgang-list-view'); const searchView: string = getDataTestIdOf('vorgang-search-view'); @@ -62,6 +63,7 @@ describe('VorgangViewsMenuComponent', () => { MockComponent(VorgangViewItemComponent), MockComponent(VorgangSearchViewItemContainerComponent), MockComponent(OzgcloudIconComponent), + MockComponent(PostfachIconComponent), ], }).compileComponents(); @@ -215,6 +217,26 @@ describe('VorgangViewsMenuComponent', () => { }); }); + describe('ungelesene nachrichten view', () => { + it.each([ + ApiRootLinkRel.ALL_UNGELESENE_NACHRICHTEN, + ApiRootLinkRel.MY_UNGELESENE_NACHRICHTEN, + ApiRootLinkRel.UNASSIGNED_UNGELESENE_NACHRICHTEN, + ])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, ungeleseneNachrichtenView); + }); + + it('should hide if link not exists', () => { + component.apiRootResource = createApiRootResource(); + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, ungeleseneNachrichtenView); + }); + }); + describe('vorgangList view', () => { it.each([ ApiRootLinkRel.ALLE_VORGAENGE,