diff --git a/Jenkinsfile b/Jenkinsfile index 3d215370126cfb8ca80d2a10a6269aafe3983b04..cc4b0bfef3628493c850e532b394f4bfcb8caaac 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -211,10 +211,10 @@ pipeline { stage ('OWASP Dependency-Check Vulnerabilities') { steps { - dependencyCheck additionalArguments: ''' - -o "./" + dependencyCheck additionalArguments: ''' + -o "./" -s "./" - -f "ALL" + -f "ALL" -d /dependency-check-data --suppression dependency-check-supressions.xml --disableKnownExploited @@ -258,7 +258,7 @@ String generateHelmChartVersion() { if (isMasterBranch()) { chartVersion += "-${env.GIT_COMMIT.take(7)}" } - else if (env.BRANCH_NAME != 'release') { + else if (!isReleaseBranch()) { chartVersion += "-${env.BRANCH_NAME}" } diff --git a/alfa-client/apps/alfa-e2e/Jenkinsfile b/alfa-client/apps/alfa-e2e/Jenkinsfile index 906adbe4de50ee5216a8b908af46f6cf40b27a54..05098bc162d6dc85dea6ed29bf72c71bdfd75616 100644 --- a/alfa-client/apps/alfa-e2e/Jenkinsfile +++ b/alfa-client/apps/alfa-e2e/Jenkinsfile @@ -759,8 +759,12 @@ Map createUserFromFixture(Map userFixture) { String getKeycloakAccessToken(String realm) { def userManagerApiUserCredentials = getUserManagerApiUserCredentials(realm) + echo "Keycloak ApiUser Credentials: " + userManagerApiUserCredentials + def token = readJSON text: sh (script: "set +x && curl -d \"client_id=admin-cli\" -d \"username=${userManagerApiUserCredentials.user}\" -d \"password=${userManagerApiUserCredentials.password}\" -d \"grant_type=password\" https://$SSO_URL/realms/$realm/protocol/openid-connect/token", returnStdout: true) + echo "Keycloak Access Token: " + token + return token.access_token } diff --git a/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts index 3496fae7f1de53701ae0fc9c091cf50d5aa088da..90527f8a50f6c811c009403c29ae5c68408edecd 100644 --- a/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts @@ -81,7 +81,7 @@ export class KommentareInVorgangE2EComponent { } } -class KommentarInVorgangE2E { +export class KommentarInVorgangE2E {//TODO: Rename to KommentarInVorgangE2EComponent private readonly locatorCreatedAt: string = 'kommentar-created-at'; diff --git a/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail.e2e.component.ts index 6aff70a2ee14d5a996e56e9c07c11ef568b81828..8dac3c2d81e93ba6b52e4811b9c9f783831dada1 100644 --- a/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail.e2e.component.ts +++ b/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail.e2e.component.ts @@ -74,7 +74,7 @@ export class PostfachMailE2EComponent { } } -export class PostfachMailListItem { +export class PostfachMailListItem {//TODO: Rename -> PostfachMailListItemE2EComponent private readonly locatorCreatedAt: string = 'mail-created-at'; private readonly locatorSubject: string = 'mail-subject'; diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts index b292f316cf3d8d6741ff98a452a928099ecc79ce..cde003f7648db8acb2ab860b0ca2d45029d7e433 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-list/vorgang-list.search.cy.ts @@ -35,9 +35,17 @@ import { AntragstellerE2ETestData, EingangE2ETestData, EingangHeaderE2ETestData, import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { backspaceOn, enterWith, exist, haveText, haveValue, notExist } from '../../../support/cypress.util'; import { UserRoleE2E, getUserManagerUserSabine, getUserSabine, getUserSabineInternalId, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util'; - -// TODO initSearchIndex() needs to wait for ElastiSearch - unskip once OZG-4453 is implemented -describe.skip('VorgangList Suche', () => { +import { DirectionE2E, PostfachMailItemE2E, PostfachNachrichtMessageCodeE2E, VorgangAttachedItemE2E } from 'apps/alfa-e2e/src/model/vorgang-attached-item'; +import { WiedervorlageE2E } from 'apps/alfa-e2e/src/model/wiedervorlage'; +import { createPostfachNachrichtAttachedItem, createPostfachNachrichtReplyItem, initVorgangAttachedItem } from 'apps/alfa-e2e/src/support/vorgang-attached-item-util'; +import { createWiedervorlageItem, createWiedervorlageAttachedItem } from 'apps/alfa-e2e/src/support/wiedervorlage-util'; +import { KommentarE2E } from 'apps/alfa-e2e/src/model/kommentar'; +import { createKommentar, createKommentarAttachedItem } from 'apps/alfa-e2e/src/support/kommentar.util'; +import { WiedervorlageInVorgangE2EComponent } from 'apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component'; +import { KommentarInVorgangE2E, KommentareInVorgangE2EComponent } from 'apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component'; +import { PostfachMailListItem } from 'apps/alfa-e2e/src/components/postfach/postfach-mail.e2e.component'; + +describe('VorgangList Suche', () => { const mainPage: MainPage = new MainPage(); const header: HeaderE2EComponent = mainPage.getHeader(); @@ -48,7 +56,7 @@ describe.skip('VorgangList Suche', () => { const vorgangPage: VorgangPage = new VorgangPage(); const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader(); - describe(`on user with role ${UserRoleE2E.VERWALTUNG_USER} by requestId/Eingangskennzeichen`, () => { + describe.skip(`on user with role ${UserRoleE2E.VERWALTUNG_USER} by requestId/Eingangskennzeichen`, () => { const requestId: string = faker.datatype.uuid(); const eingang: EingangE2E = { ...EingangE2ETestData, header: { ...EingangHeaderE2ETestData, requestId } } @@ -113,7 +121,7 @@ describe.skip('VorgangList Suche', () => { }) - describe('Search with hyphen', () => { + describe ('Search with hyphen', () => { it ('should find entry with hyphen', () => { doSearchWith('Vorgang-mit'); waitForSpinnerToDisappear(); @@ -122,7 +130,7 @@ describe.skip('VorgangList Suche', () => { notExist(vorgangWOHyphenInList.getRoot()); }) - it.skip('(should find with hyphen when query without hyphen) should find entry without hyphen', () => { + it ('should find entry without hyphen', () => { doSearchWith('Vorgang mit'); waitForSpinnerToDisappear(); @@ -218,6 +226,7 @@ describe.skip('VorgangList Suche', () => { it('should navigate back to list', () => { vorgangPage.getSubnavigation().getBackButton().click(); + exist(vorgangPage.getSpinner()); waitForSpinnerToDisappear(); exist(vorgangList.getRoot()); @@ -245,15 +254,53 @@ describe.skip('VorgangList Suche', () => { const vorgangName: string = 'VorgangMatchBySearch'; const vorgang: VorgangE2E = { ...createVorgang(), name: vorgangName }; - const vorgangOtherName: string = 'VorgangOther'; - const vorgangOther: VorgangE2E = { ...buildVorgang(objectIds[0], vorgangOtherName), status: VorgangStatusE2E.NEU }; + const wiedervorlageForMatchBySearch: WiedervorlageE2E = { ...createWiedervorlageItem('WiedervorlageMatchBySearch'), done: false }; + const wiedervorlageAttachedItemForMatchBySearch: VorgangAttachedItemE2E = { ...createWiedervorlageAttachedItem(objectIds[0], vorgang._id.$oid), item: wiedervorlageForMatchBySearch }; + + const kommentarForMatchBySearch: KommentarE2E = { ...createKommentar(), text: 'KommentarMatchBySearch' }; + const kommentarAttachedItemForMatchBySearch: VorgangAttachedItemE2E = { ...createKommentarAttachedItem(objectIds[1], vorgang._id.$oid ), item: kommentarForMatchBySearch} + + const postfachNachrichtForMatchBySearch: PostfachMailItemE2E = { + ...createPostfachNachrichtReplyItem(), + createdBy: getUserSabineInternalId(), + subject: 'PostfachNachrichtForMatchBySearch' + } + + const postfachNachrichtAttachedItemForMatchBySearch: VorgangAttachedItemE2E = { ...createPostfachNachrichtAttachedItem(objectIds[2], vorgang._id.$oid), item: postfachNachrichtForMatchBySearch }; const previewListItemVorgang: VorgangSearchPreviewListItemE2EComponent = vorgangSearch.getVorgangSearchPreviewListItem(vorgang.name); - const previewListItemVorgangOther: VorgangSearchPreviewListItemE2EComponent = vorgangSearch.getVorgangSearchPreviewListItem(vorgangOther.name); + + + const vorgangOtherName: string = 'VorgangOther'; + const vorgangOther: VorgangE2E = { ...buildVorgang(objectIds[3], vorgangOtherName), status: VorgangStatusE2E.NEU }; + + const wiedervorlageForOther: WiedervorlageE2E = { ...createWiedervorlageItem('WiedervorlageOther'), done: true }; + const wiedervorlageAttachedItemForOther: VorgangAttachedItemE2E = { ...createWiedervorlageAttachedItem(objectIds[4], vorgangOther._id.$oid), item: wiedervorlageForOther }; + + const kommentarForOther: KommentarE2E = { ...createKommentar(), text: 'KommentarOther' }; + const kommentarAttachedItemForOther: VorgangAttachedItemE2E = { ...createKommentarAttachedItem(objectIds[5], vorgangOther._id.$oid ), item: kommentarForOther }; + + const postfachNachrichtForOther: PostfachMailItemE2E = { + ...createPostfachNachrichtReplyItem(), + createdBy: getUserSabineInternalId(), + subject: 'PostfachNachrichtOther' + } + + const postfachNachrichtAttachedItemForOther: VorgangAttachedItemE2E = { ...createPostfachNachrichtAttachedItem(objectIds[6], vorgangOther._id.$oid), item: postfachNachrichtForOther }; + + const previewListItemVorgangOther: VorgangSearchPreviewListItemE2EComponent = vorgangSearch.getVorgangSearchPreviewListItem(vorgangOther.name); + before(() => { - initVorgaenge([vorgang, vorgangOther]) - initSearchIndex([vorgang, vorgangOther]) + initVorgaenge([vorgang, vorgangOther]); + initVorgangAttachedItem([ + wiedervorlageAttachedItemForMatchBySearch, wiedervorlageAttachedItemForOther, + kommentarAttachedItemForMatchBySearch, + kommentarAttachedItemForOther, + postfachNachrichtAttachedItemForMatchBySearch, + postfachNachrichtAttachedItemForOther + ]); + initSearchIndex([vorgang, vorgangOther]); loginAsSabine(); @@ -317,6 +364,24 @@ describe.skip('VorgangList Suche', () => { exist(vorgangPage.getVorgangDetailHeader().getRoot()); haveText(vorgangPage.getVorgangDetailHeader().getName(), vorgangOtherName); }) + + it('should have wiedervorlage', () => { + const wiedervorlage: WiedervorlageInVorgangE2EComponent = vorgangPage.getWiedervorlagenContainer().getWiedervorlage('WiedervorlageOther'); + + exist(wiedervorlage.getRoot()); + }) + + it('should have kommentar', () => { + const kommentar: KommentarInVorgangE2E = vorgangPage.getKommentarContainer().getKommentar('KommentarOther'); + + exist(kommentar.getRoot()); + }) + + it('should have postfachNachricht', () => { + const postfachNachricht: PostfachMailListItem = vorgangPage.getPostfachMailcontainer().getListItem('PostfachNachrichtOther'); + + exist(postfachNachricht.getRoot()); + }) }) describe('clear preview list if clicking clear button', () => { @@ -334,12 +399,11 @@ describe.skip('VorgangList Suche', () => { }) }) - describe.skip('(Wird in OZG-4711 gefixt) clear preview list on less than 3 character', () => { + describe.skip('clear preview list on less than 3 character', () => { it('should hide preview list', () => { vorgangSearch.getInput().clear().type(vorgangName.substring(0, 3), { delay: 220 }); - exist(vorgangSearch.getVorgangSearchPreviewList()); exist(previewListItemVorgang.getRoot()); exist(previewListItemVorgangOther.getRoot()); @@ -348,19 +412,9 @@ describe.skip('VorgangList Suche', () => { notExist(vorgangSearch.getVorgangSearchPreviewList()); }) }) - - describe('navigate back to vorgang list', () => { - - it('should navigate to vorgang list', () => { - vorgangPage.getSubnavigation().getBackButton().click(); - - exist(vorgangList.getRoot()); - }) - - }) }) - describe('filter by all possible fields', () => { + describe.skip('filter by all possible fields', () => { const NO_MATCH: string = 'no match'; @@ -475,7 +529,7 @@ describe.skip('VorgangList Suche', () => { notExist(byRequestId.getRoot()); }) - it.skip('(Wird in OZG-4711 gefixt) should show result by vorgangnummer', () => { + it('should show result by vorgangnummer', () => { doSearchWith(vorgangNummerToMatch); waitForSpinnerToDisappear(); diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-ea-dev.yaml b/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-ea-dev.yaml index 81741e4dc8e2c9729701176a5c35992d601a9135..119ee06c4213eb9a121e2b64e0606e155230aef9 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-ea-dev.yaml +++ b/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-ea-dev.yaml @@ -42,6 +42,8 @@ vorgang_manager: user_manager: ozgcloud: + usersync: + period: "5s" keycloak: api: password: "Test1234!" diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-main-dev.yaml b/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-main-dev.yaml index 72e4e740f01a5bdb3acfdf6854668e49681ae7cc..33e407ac081b5892464dee74d7b871f2a77c0f86 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-main-dev.yaml +++ b/alfa-client/apps/alfa-e2e/src/fixtures/argocd/by-main-dev.yaml @@ -38,6 +38,8 @@ vorgang_manager: user_manager: ozgcloud: + usersync: + period: "5s" keycloak: api: password: "Test1234!" diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/kommentar/kommentar.json b/alfa-client/apps/alfa-e2e/src/fixtures/kommentar/kommentar.json index 3e0833b92c89f5e1b0b878a1d15aeb436fdc15bf..e8440df0ff024a362f4396fe58886b89932354e5 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/kommentar/kommentar.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/kommentar/kommentar.json @@ -1,7 +1,5 @@ { - "createdAt": { - "$date": "2021-03-17T08:43:52.741Z" - }, - "createdBy": "Karl Kommentar", + "createdAt": "2024-01-10T12:57:35Z[UTC]", + "createdBy": "SetInCode", "text": "Test text to test the test text test" } \ No newline at end of file diff --git a/alfa-client/apps/alfa-e2e/src/fixtures/wiedervorlage/wiedervorlage.json b/alfa-client/apps/alfa-e2e/src/fixtures/wiedervorlage/wiedervorlage.json index 3a78b73740ed97e15cf1a194a4839db59fc16597..70bf44468acee58e5d87ae4b5dd4c31dede7e894 100644 --- a/alfa-client/apps/alfa-e2e/src/fixtures/wiedervorlage/wiedervorlage.json +++ b/alfa-client/apps/alfa-e2e/src/fixtures/wiedervorlage/wiedervorlage.json @@ -2,7 +2,7 @@ "version": 0, "vorgangId": "602566a807bb665df9a86111", "createdAt": "2021-03-17T08:43:52.000Z[UTC]", - "createdBy": "1063f1cb-95ef-48c5-b746-cec6f28e635d", + "createdBy": "SetInCode", "betreff": "Wiedervorlage", "beschreibung": "Dies ist ein Test", "frist": "2020-01-01", diff --git a/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts b/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts index b55fc34594c3f5eed5a0d3ab0e6d91c76f32efee..f4f284aff0f94e21acb50b7d7042d43d1cc6de10 100644 --- a/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts +++ b/alfa-client/apps/alfa-e2e/src/model/vorgang-attached-item.ts @@ -21,6 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { KommentarE2E } from './kommentar'; import { LoeschAnforderungE2E } from './loesch-anforderung'; import { ObjectIdE2E } from './util'; import { WiedervorlageE2E } from './wiedervorlage'; @@ -33,6 +34,7 @@ export enum VorgangAttachedItemClientE2E { export enum VorgangAttachedItemNameE2E { POSTFACH_NACHRICHT = 'PostfachMail', WIEDERVORLAGE = 'Wiedervorlage', + KOMMENTAR = 'Kommentar', LOESCH_ANFORDERUNG = 'LoeschAnforderung', } @@ -42,7 +44,7 @@ export class VorgangAttachedItemE2E { client: VorgangAttachedItemClientE2E; vorgangId: string; itemName: VorgangAttachedItemNameE2E; - item: PostfachMailItemE2E | WiedervorlageE2E | LoeschAnforderungE2E; + item: PostfachMailItemE2E | WiedervorlageE2E | LoeschAnforderungE2E | KommentarE2E; deleted: boolean; _class: string; } diff --git a/alfa-client/apps/alfa-e2e/src/support/kommentar.util.ts b/alfa-client/apps/alfa-e2e/src/support/kommentar.util.ts index e1b96f660064425830fd92b8e5893f893a111477..fb3554a7f4243ddbffc928cf5dfd13af14ba547a 100644 --- a/alfa-client/apps/alfa-e2e/src/support/kommentar.util.ts +++ b/alfa-client/apps/alfa-e2e/src/support/kommentar.util.ts @@ -22,9 +22,28 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { KommentarE2E } from '../model/kommentar'; +import { VorgangAttachedItemClientE2E, VorgangAttachedItemE2E, VorgangAttachedItemNameE2E } from '../model/vorgang-attached-item'; +import { getUserSabineInternalId } from './user-util'; +import { VORGANG_ATTACHED_ITEM_CLASS } from './vorgang-attached-item-util'; const kommentarFixture: KommentarE2E = require('../fixtures/kommentar/kommentar.json'); export function createKommentar(): KommentarE2E { - return kommentarFixture; + return { ...kommentarFixture, createdBy: getUserSabineInternalId() }; +} + +export function createKommentarAttachedItem(_id: string, vorgangId: string): VorgangAttachedItemE2E { + return { + _id: { $oid: _id }, + version: 0, + vorgangId, + client: VorgangAttachedItemClientE2E.ALFA, + itemName: VorgangAttachedItemNameE2E.KOMMENTAR, + item: { + ...createKommentar(), + vorgangId + }, + deleted: false, + _class: VORGANG_ATTACHED_ITEM_CLASS + }; } \ No newline at end of file diff --git a/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss b/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss index 15aa22bb30c06184d9d8c563472e8121a9397d42..9a5f0140059c6c5ffc5049d79a46cf4f27ded0b1 100644 --- a/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss +++ b/alfa-client/apps/alfa/src/styles/abstracts/_variables.scss @@ -25,6 +25,7 @@ $grey: #777; $greyLight: rgba(0, 0, 0, 0.08); +$darkModeGreyLight: #c2c2c2; $background: #fafafa; $dark-background: #303030; diff --git a/alfa-client/libs/command-shared/src/lib/command.model.ts b/alfa-client/libs/command-shared/src/lib/command.model.ts index bca910ecd19deac5dcca026d8214f63f7572cdd4..99257455963929e8757f07ee36f1f85877bad8df 100644 --- a/alfa-client/libs/command-shared/src/lib/command.model.ts +++ b/alfa-client/libs/command-shared/src/lib/command.model.ts @@ -89,7 +89,8 @@ export enum CommandOrderType { POSTFACH_NACHRICHT = 'PostfachNachricht', VORGANG = 'Vorgang', WIEDERVORLAGE = 'Wiedervorlage', - LOESCH_ANFORDERUNG = 'LoeschAnforderung' + LOESCH_ANFORDERUNG = 'LoeschAnforderung', + SET_AKTENZEICHEN = 'SetAktenzeichen', } export const ORDER_TYPE_BY_COMMAND_ORDER = { @@ -117,6 +118,7 @@ export const ORDER_TYPE_BY_COMMAND_ORDER = { [CommandOrder.VORGANG_ZUM_LOESCHEN_MARKIEREN]: CommandOrderType.LOESCH_ANFORDERUNG, [CommandOrder.VORGANG_LOESCHEN]: CommandOrderType.LOESCH_ANFORDERUNG, [CommandOrder.LOESCH_ANFORDERUNG_ZURUECKNEHMEN]: CommandOrderType.LOESCH_ANFORDERUNG, + [CommandOrder.SET_AKTENZEICHEN]: CommandOrderType.SET_AKTENZEICHEN, } export interface CreateCommandProps { diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.html b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.html new file mode 100644 index 0000000000000000000000000000000000000000..8173f4e59c04d34c8773723f9f255f0e9687a7d0 --- /dev/null +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.html @@ -0,0 +1,8 @@ +<div class="mat-expansion-panel" *ngIf="aktenzeichenDeleted; else expandable"> + <alfa-historie-item-header [headline]="headline" [resource]="command" data-test-id="historie-item-aktenzeichen-header"></alfa-historie-item-header> +</div> +<ng-template #expandable> + <alfa-expansion-panel-with-user [headline]="headline" [resource]="command"> + <p data-test-class="aktenzeichen-text">Aktenzeichen: {{ aktenzeichen }}</p> + </alfa-expansion-panel-with-user> +</ng-template> \ No newline at end of file diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.scss b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..bd4f6bc887a23bad0e174ef5644e7e5ce01462d7 --- /dev/null +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.scss @@ -0,0 +1 @@ +@import 'expansion-panel'; diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.spec.ts b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..8adb768803ff01696e1fa9acff65647346e00328 --- /dev/null +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.spec.ts @@ -0,0 +1,111 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { CommandOrder, CommandResource } from '@alfa-client/command-shared'; +import { createCommandResource } from 'libs/command-shared/test/command'; +import { MockComponent } from 'ng-mocks'; +import { ExpansionPanelWithUserComponent } from '../expansion-panel-with-user/expansion-panel-with-user.component'; +import { HistorieItemAttachmentComponent } from '../historie-item-attachment/historie-item-attachment.component'; +import { HistorieItemAktenzeichenComponent } from './historie-item-aktenzeichen.component'; +import { getElementFromFixture } from '@alfa-client/test-utils'; +import { getDataTestClassOf, getDataTestIdOf } from '../../../../../../tech-shared/test/data-test'; +import { HistorieItemHeaderComponent } from '../historie-item-header/historie-item-header.component'; + +describe('HistorieItemAktenzeichenComponent', () => { + let component: HistorieItemAktenzeichenComponent; + let fixture: ComponentFixture<HistorieItemAktenzeichenComponent>; + + const kommentarCommand: CommandResource = { + ...createCommandResource(), + order: CommandOrder.CREATE_KOMMENTAR, + body: { item: { text: 'Beispiel text fuer einen Kommentar' } } + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + HistorieItemAktenzeichenComponent, + MockComponent(ExpansionPanelWithUserComponent), + MockComponent(HistorieItemAttachmentComponent), + MockComponent(HistorieItemHeaderComponent), + ], + }).compileComponents(); + }) + + beforeEach(() => { + fixture = TestBed.createComponent(HistorieItemAktenzeichenComponent); + component = fixture.componentInstance; + component.command = kommentarCommand; + fixture.detectChanges(); + }) + + it('should create', () => { + expect(component).toBeTruthy(); + }) + + it('should render non expandable historie item', () => { + component.aktenzeichenDeleted = true; + fixture.detectChanges(); + + const historieItem = getElementFromFixture(fixture, getDataTestIdOf('historie-item-aktenzeichen-header')); + + expect(historieItem).toBeInstanceOf(HTMLElement); + }) + + it('should render expandable historie item', () => { + component.aktenzeichenDeleted = false; + fixture.detectChanges(); + + const aktenzeichenText = getElementFromFixture(fixture, getDataTestClassOf('aktenzeichen-text')); + + expect(aktenzeichenText).toBeInstanceOf(HTMLElement); + }) + + describe('ngOnInit', () => { + + it('should set headline', () => { + component.setHeadline = jest.fn(); + + component.ngOnInit(); + + expect(component.setHeadline).toHaveBeenCalled(); + }) + + it('should mark aktenzeichen as deleted', () => { + component.command.body.aktenzeichen = null; + + component.ngOnInit(); + + expect(component.aktenzeichenDeleted).toBeTruthy(); + }) + + it('should mark aktenzeichen as NOT deleted', () => { + component.command.body.aktenzeichen = '1'; + + component.ngOnInit(); + + expect(component.aktenzeichenDeleted).toBeFalsy(); + }) + + }) + + describe('setHeadline', () => { + + it('should set headline for order ' + CommandOrder.SET_AKTENZEICHEN, () => { + component.aktenzeichenDeleted = false; + component.command = { ...kommentarCommand, order: CommandOrder.SET_AKTENZEICHEN }; + + component.setHeadline() + + expect(component.headline).toBe('das Aktenzeichen geändert.'); + }) + + it('should set headline for deleted aktenzeichen', () => { + component.aktenzeichenDeleted = true; + + component.setHeadline() + + expect(component.headline).toBe('das Aktenzeichen gelöscht.'); + + }) + }) + +}); diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.ts b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..265c2c5c8c9b31bfd7d7f0f072a4ac223c0ee298 --- /dev/null +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component.ts @@ -0,0 +1,39 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { CommandOrder, CommandResource } from '@alfa-client/command-shared'; +import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel'; +import { isEmpty, isNull } from 'lodash-es'; +import { hasContent } from '@alfa-client/tech-shared'; + +@Component({ + selector: 'alfa-historie-item-aktenzeichen', + templateUrl: './historie-item-aktenzeichen.component.html', + styleUrls: ['./historie-item-aktenzeichen.component.scss'], +}) +export class HistorieItemAktenzeichenComponent implements OnInit { + + @Input() command: CommandResource; + + headline: string; + aktenzeichenDeleted = false; + + get aktenzeichen(): any { + return this.command.body.aktenzeichen; + } + + ngOnInit(): void { + this.aktenzeichenDeleted = isEmpty(this.aktenzeichen); + this.setHeadline(); + } + + setHeadline(): void { + if (this.aktenzeichenDeleted) { + this.headline = 'das Aktenzeichen gelöscht.'; + } else { + this.headline = HISTORIE_TEXT_BY_KOMMENTAR_ORDER[this.command.order]; + } + } +} + +const HISTORIE_TEXT_BY_KOMMENTAR_ORDER: { [order: string]: string } = { + [CommandOrder.SET_AKTENZEICHEN]: 'das Aktenzeichen geändert.', +} \ No newline at end of file diff --git a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-list-item/historie-list-item.component.html b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-list-item/historie-list-item.component.html index da770e916a44193c52ca19ac8954403670f8e51a..859ae3c272dd5ab5cd8a956367c1dbbd1199f50f 100644 --- a/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-list-item/historie-list-item.component.html +++ b/alfa-client/libs/historie/src/lib/historie-container/historie-list/historie-list-item/historie-list-item.component.html @@ -45,6 +45,9 @@ <ng-container *ngSwitchCase="commandOrderType.LOESCH_ANFORDERUNG"> <alfa-historie-item-loesch-anforderung [command]="historieCommand" data-test-id="historie-item-loesch-anforderung"></alfa-historie-item-loesch-anforderung> </ng-container> + <ng-container *ngSwitchCase="commandOrderType.SET_AKTENZEICHEN"> + <alfa-historie-item-aktenzeichen [command]="historieCommand" data-test-id="historie-item-aktenzeichen"></alfa-historie-item-aktenzeichen> + </ng-container> <ng-container *ngSwitchDefault> <alfa-historie-item-unknown [headline]="historieCommand.order" [resource]="historieCommand" data-test-id="historie-item-unknown"></alfa-historie-item-unknown> </ng-container> diff --git a/alfa-client/libs/historie/src/lib/historie.module.ts b/alfa-client/libs/historie/src/lib/historie.module.ts index 0ac0d289eee717e16af884bdc1b0fe26efad273a..876c52d9f57b29f4d5b7874d2a61105ae7040a0a 100644 --- a/alfa-client/libs/historie/src/lib/historie.module.ts +++ b/alfa-client/libs/historie/src/lib/historie.module.ts @@ -45,6 +45,7 @@ import { HistorieItemWiedervorlageStatusComponent } from './historie-container/h import { HistorieItemWiedervorlageComponent } from './historie-container/historie-list/historie-item-wiedervorlage/historie-item-wiedervorlage.component'; import { HistorieListItemComponent } from './historie-container/historie-list/historie-list-item/historie-list-item.component'; import { HistorieListComponent } from './historie-container/historie-list/historie-list.component'; +import { HistorieItemAktenzeichenComponent } from './historie-container/historie-list/historie-item-aktenzeichen/historie-item-aktenzeichen.component'; @NgModule({ imports: [ @@ -73,6 +74,7 @@ import { HistorieListComponent } from './historie-container/historie-list/histor HistorieItemWiedervorlageStatusComponent, HistorieItemAttachmentComponent, HistorieItemLoeschAnforderungComponent, + HistorieItemAktenzeichenComponent, ], exports: [HistorieContainerComponent], }) 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 index e388209e45c11042ef2e4440a6fc77438c1dac01..ceefda1d6518547a8bfa71029b54a97835a028c6 100644 --- 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 @@ -23,7 +23,7 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<mat-form-field class="compact-input" appearance="{{appearance}}" [floatLabel]="readOnly || autoFocus ? 'always' : 'auto'"> +<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 @@ -34,7 +34,8 @@ [readonly]="readOnly" (blur)="touch()" [attr.data-test-id]="(label | convertForDataTest) + '-text-input'" - [class.with-clear-button]="showClearButton$ | async"/> + [class.with-clear-button]="showClearButton$ | async" + /> <button *ngIf="showClearButton$ | async" data-test-id="clear-button" class="clear-button" 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/text-editor.component.spec.ts index 310f29a6c72c14d9e8dbcac23a9e91c63856c504..615d7c06fa01f92bb5a5d4f55e58046ce186b5ec 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/text-editor.component.spec.ts @@ -75,4 +75,8 @@ describe('TextEditorComponent', () => { expect(element).toBeInstanceOf(HTMLElement); }) + + it('should use fixed subscription sizing by default', () => { + expect(component.subscriptSizing).toBe('fixed'); + }) }); 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/text-editor.component.ts index cb875a8cc96b268a2e6af8c92ba2b46eaf37b395..c122ccd41cd214b7f1ef71951cd754de4284b8e0 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/text-editor.component.ts @@ -24,7 +24,8 @@ import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstract.component'; import { map, Observable, startWith } from 'rxjs'; -import { hasContent, isNotEmpty } from '@alfa-client/tech-shared'; +import { hasContent } from '@alfa-client/tech-shared'; +import { SubscriptSizing } from '@angular/material/form-field'; @Component({ selector: 'ozgcloud-text-editor', @@ -43,6 +44,7 @@ export class TextEditorComponent extends FormControlEditorAbstractComponent impl @Input() readOnly: boolean; @Input() autoFocus: boolean; @Input() clearable = false; + @Input() subscriptSizing: SubscriptSizing = 'fixed'; showClearButton$: Observable<boolean>; diff --git a/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss b/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss index 71e140af97ad64ff8f1ce254404e6251a1448433..a4e2f1f00d8307aae363a3554220b27a1c770d87 100644 --- a/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss +++ b/alfa-client/libs/ui/src/lib/ui/expansion-panel/_expansion-panel.theme.scss @@ -43,7 +43,7 @@ body.mat-typography ozgcloud-expansion-panel { h3 { margin-bottom: 0; font-weight: 500; - margin-left: 16px; + margin-left: 8px; font-size: 16px; } 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 ac82f2c90bd277444dcb8bca6adada7dd5d2d4c4..fd800b47fd620f96e27880e6f165680d1939e277 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,9 +1,11 @@ <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> diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.scss b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.scss index d1670e97df622f3926526951495809d872106d06..99053feec562dcbc112ae4b253a6dd3b318c3021 100644 --- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.scss +++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-button/shared/ozgcloud-button-content/ozgcloud-button-content.component.scss @@ -6,7 +6,7 @@ $rightMargin: 8px; justify-content: center; } -mat-icon { +mat-icon.with-text { margin-right: $rightMargin; } 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.scss 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.scss index b61513b8658403b0df5a1a098b21f7a37304aac9..03209bebef753f062bb961da45cb2194e949bbd8 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.scss +++ 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.scss @@ -25,7 +25,7 @@ border: 0; background-color: transparent; margin: 0; - padding: 0 0 8px 0; + padding: 0; display: block; outline: 0; cursor: pointer; diff --git a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.html b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.html index 04b5d3b4d8a9937a86f6aeabdc6d337ddd102941..7b4d7ee0b95c53eda80ee0857dbee378a3496067 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.html @@ -11,6 +11,7 @@ [autoFocus]="true" [clearable]="true" appearance="outline" + subscriptSizing="dynamic" [formControlName]="AktenzeichenEditDialogFormservice.AKTENZEICHEN_FIELD"> </ozgcloud-text-editor> <ozgcloud-paste-text-button diff --git a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.scss b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.scss index 3b176140eb99b79b51c4f56011c62915fe36ef43..b7b2aa656dafbd136d784835f7dc0e12fdeaf81c 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.scss +++ b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component.scss @@ -6,10 +6,6 @@ ::ng-deep mat-form-field { width: 100%; } - - ::ng-deep .mat-mdc-form-field-subscript-wrapper { - display: none; - } } .content { @@ -17,7 +13,7 @@ grid-template-columns: min-content auto min-content; grid-column-gap: 0.5rem; grid-row-gap: 0.25rem; - align-items: center; + align-items: flex-start; grid-template-areas: 'az_icon az_text paste_icon' '. hinweis .'; @@ -25,13 +21,24 @@ .az_icon { grid-area: az_icon; - color: #c2c2c2; + color: $darkModeGreyLight; + margin-top: 12px; &--active { color: black; } } +:host-context(.dark) { + .az_icon { + color: $darkModeGreyLight; + + &--active { + color: white; + } + } +} + .az_text { grid-area: az_text; } 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 805a7000f8fe83343363df5b8b1251ace28d3094..a4a889ba613ac86b99ed4bdfedcce4606707a958 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 @@ -1,14 +1,13 @@ +import { COMMAND_ERROR_MESSAGES, CommandResource, hasError, isSuccessfulDone } from '@alfa-client/command-shared'; +import { StateResource, createEmptyStateResource, hasContent, isClipboardReadSupported } 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 { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { Observable, map, of, startWith, tap } from 'rxjs'; import { AktenzeichenEditDialogData } from './aktenzeichen-edit-dialog.data'; import { AktenzeichenEditDialogFormservice } from './aktenzeichen-edit-dialog.formservice'; -import { VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; -import { COMMAND_ERROR_MESSAGES, CommandResource, hasError, isSuccessfulDone } from '@alfa-client/command-shared'; -import { createEmptyStateResource, hasContent, isClipboardReadSupported, isNotNull, StateResource } from '@alfa-client/tech-shared'; -import { filter, map, Observable, of, startWith, tap } from 'rxjs'; -import { SnackBarService } from '@alfa-client/ui'; import { AktenzeichenEditDialogMessages } from './aktenzeichen-edit-dialog.message'; -import { trim } from 'lodash-es'; @Component({ selector: 'alfa-aktenzeichen-edit-dialog', @@ -20,9 +19,9 @@ export class AktenzeichenEditDialogComponent implements OnInit { vorgang: VorgangWithEingangResource; - public setAktenzeichenPending$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>()); - public hasAktenzeichen$: Observable<boolean>; - public isPasteSupported = false; + setAktenzeichenPending$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>()); + hasAktenzeichen$: Observable<boolean>; + isPasteSupported = false; protected readonly AktenzeichenEditDialogFormservice = AktenzeichenEditDialogFormservice; diff --git a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.html b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.html index c80c680a29a8ec0cdf53d52bc99616dbe5c571fe..1d078b33608b5decfc4b631d2db21be15734737c 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.html @@ -24,7 +24,7 @@ --> <div class="horizontal"> - <h1 alfa-aktenzeichen [vorgang]="vorgang" data-test-id="aktenzeichen"></h1> + <div alfa-aktenzeichen class="ellipsis" [vorgang]="vorgang" data-test-id="aktenzeichen"></div> <ng-container *ngIf="vorgang | hasLink: linkRel.SET_AKTENZEICHEN"> <ozgcloud-icon-button-primary svgIcon="edit" tooltip="Aktenzeichen bearbeiten" (clickEmitter)="onEdit()"></ozgcloud-icon-button-primary> </ng-container> diff --git a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.scss b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.scss index 4471409a63037db3a9dbdd2d654c37f633afaa9c..bca48d71779df609342d15745d82b1fd453d7eb5 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.scss +++ b/alfa-client/libs/vorgang-detail/src/lib/aktenzeichen-editable/aktenzeichen-editable.component.scss @@ -25,14 +25,18 @@ .horizontal { display: flex; align-items: center; + font-size: 16px; + font-weight: 300; } -h1 { - margin: 0; - line-height: 1.4; - font-size: 1.5rem; - font-weight: 400; +.ellipsis { + text-overflow: ellipsis; white-space: nowrap; overflow: hidden; - text-overflow:ellipsis; +} + +// Workaround Material's fixed 48px height +:host ::ng-deep ozgcloud-icon-button-primary button { + position: absolute; + top: -24px; } \ No newline at end of file diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.scss b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.scss index b5b56914f09e62caff0d9854980aea66191ec939..7ad83ad65ca0e5a1355392f0a95cfcf0a4a69417 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.scss +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-area.component.scss @@ -56,14 +56,7 @@ .section { width: auto; - padding: 0 16px; - - &:first-child { - padding-left: 0.75rem; - } - &:last-child { - margin-right: 8px; - } + padding: 0 16px 16px 16px; } .two-column { diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html index 1613b7e5beb3f38869c74e72515ccac9c10c0325..ef6a1b7579181d0d7aed400cfceedba2141f3d71 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html @@ -23,23 +23,23 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<alfa-vorgang-status-dot [status]="vorgangWithEingang.status" class="status-dot"></alfa-vorgang-status-dot> +<alfa-vorgang-status-dot [status]="vorgang.status" class="status-dot"></alfa-vorgang-status-dot> -<alfa-vorgang-status-text [status]="vorgangWithEingang.status" data-test-id="status-text" +<alfa-vorgang-status-text [status]="vorgang.status" data-test-id="status-text" class="status-text"></alfa-vorgang-status-text> -<div class="initial-date" data-test-id="created-at">{{ vorgangWithEingang.createdAt | date : 'EEEE, d. LLLL y, H:mm'}}</div> +<div class="initial-date" data-test-id="created-at">{{ vorgang.createdAt | date : 'EEEE, d. LLLL y, H:mm'}}</div> -<div class="aktenzeichen"> +<alfa-vorgang-nummer class="vorgang-nummer big" [vorgang]="vorgang"></alfa-vorgang-nummer> + +<div class="aktenzeichen" [class.aktenzeichen--active]="hasAktenzeichen"> <mat-icon svgIcon="az"></mat-icon> - <alfa-aktenzeichen-editable class="aktenzeichen-editable" [vorgang]="vorgangWithEingang"></alfa-aktenzeichen-editable> + <alfa-aktenzeichen-editable class="aktenzeichen-editable" [vorgang]="vorgang"></alfa-aktenzeichen-editable> </div> -<alfa-vorgang-nummer class="vorgang-nummer big" [vorgang]="vorgangWithEingang"></alfa-vorgang-nummer> - -<h2 data-test-id="name" class="name">{{ vorgangWithEingang.name }}</h2> +<div data-test-id="name" class="name">{{ vorgang.name }}</div> -<alfa-user-profile-in-vorgang-container *ngIf="vorgangWithEingang | hasLink: linkRel.ASSIGN" data-test-id="vorgang-header-user-icon" - [vorgang]="vorgangWithEingang" +<alfa-user-profile-in-vorgang-container *ngIf="vorgang | hasLink: linkRel.ASSIGN" data-test-id="vorgang-header-user-icon" + [vorgang]="vorgang" class="user"> </alfa-user-profile-in-vorgang-container> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.scss b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.scss index 42aebc398293ab23392f334822f8a6fc8fa32e09..e93e5ba611a2bace877622f9d9178825c80e9d21 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.scss +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.scss @@ -27,60 +27,23 @@ :host { display: grid; - row-gap: 0.5rem; - min-width: 22rem; + row-gap: 10px; align-items: center; - grid-template-columns: 8% 80% 12%; + grid-template-columns: 48px 1fr 8%; grid-template-areas: "status-dot status-text initial-date" - ". aktenzeichen aktenzeichen" - ". vorgang-nummer vorgang-nummer" - ". name user"; - - @include media('>desktop') { - grid-template-columns: 5% 20% 52% 23%; - grid-template-areas: - "status-dot status-text name initial-date" - ". aktenzeichen aktenzeichen aktenzeichen" - ". vorgang-nummer vorgang-nummer user"; - - .name { - margin-right: 5rem; - } - .user { - margin-top: -0.25rem; - } - .vorgang-nummer { - align-self: start; - } - } - - @include media('>xxlDesktop') { - grid-template-columns: 4% 13% 34% 34% 15%; - grid-template-areas: - "status-dot status-text name name initial-date" - ". aktenzeichen aktenzeichen vorgang-nummer user"; - - .aktenzeichen, .vorgang-nummer, .user { - align-self: center; - } - } + ". name user" + ". vorgang-nummer user" + ". aktenzeichen aktenzeichen"; padding: 1rem 1.5rem; } -h1 { - margin: 0; - line-height: 1.4; - font-size: 1.5rem; - font-weight: 400; -} - -h2 { +.name { line-height: 1.4; - margin: 0; - font-size: 1rem; - font-weight: 400; + margin: 8px 0 4px 0; + font-size: 16px; + font-weight: 500; } .ellipsis { @@ -116,14 +79,20 @@ mat-icon { margin-left: -2px; display: flex; align-items: center; + color: #c2c2c2; + + &--active { + color: unset; + } .aktenzeichen-editable { - width: calc(100% - 48px); + width: calc(100% - 82px); } } .vorgang-nummer { grid-area: vorgang-nummer; + margin-left: -2px; } .name { @@ -135,5 +104,4 @@ mat-icon { grid-area: user; align-self: start; justify-self: end; - margin-top: -1.5rem; } diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.spec.ts index e3c6b8704c8308d6f5a16c00e6abe98129fd1382..968591200b6c1739d36b8a204a0974de4cfb5e10 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.spec.ts @@ -24,14 +24,16 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; import { MatIconTestingModule } from '@angular/material/icon/testing'; -import { EnumToLabelPipe, HasLinkPipe } from '@alfa-client/tech-shared'; +import { EMPTY_STRING, EnumToLabelPipe, HasLinkPipe } from '@alfa-client/tech-shared'; import { VorgangHeaderLinkRel } from '@alfa-client/vorgang-shared'; -import { AktenzeichenComponent, VorgangNummerComponent, VorgangStatusDotComponent, VorgangStatusTextComponent } from '@alfa-client/vorgang-shared-ui'; +import { VorgangNummerComponent, VorgangStatusDotComponent, VorgangStatusTextComponent } from '@alfa-client/vorgang-shared-ui'; import { UserProfileInVorgangContainerComponent } from 'libs/user-profile/src/lib/user-profile-in-vorgang-container/user-profile-in-vorgang-container.component'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { MockComponent } from 'ng-mocks'; import { VorgangDetailHeaderComponent } from './vorgang-detail-header.component'; import { AktenzeichenEditableComponent } from '@alfa-client/vorgang-detail'; +import { getDebugElementFromFixtureByCss } from '@alfa-client/test-utils'; +import { DebugElement } from '@angular/core'; describe('VorgangDetailHeaderComponent', () => { let component: VorgangDetailHeaderComponent; @@ -67,7 +69,7 @@ describe('VorgangDetailHeaderComponent', () => { it('should create', () => { expect(component).toBeTruthy(); - }); + }) describe('bearbeiter/user icon', () => { @@ -89,4 +91,41 @@ describe('VorgangDetailHeaderComponent', () => { expect(userElement).not.toBeInstanceOf(HTMLElement); }) }) + + describe('set vorgangWithEingang', () => { + + it('should have Aktenzeichen', () => { + expect(component.hasAktenzeichen).toBeTruthy(); + }) + + it.each([null, EMPTY_STRING])('should NOT have aktenzeichen for %s', (aktenzeichen: string) => { + const vorgangWithEingang = createVorgangWithEingangResource(); + vorgangWithEingang.aktenzeichen = aktenzeichen; + component.vorgangWithEingang = vorgangWithEingang; + + expect(component.hasAktenzeichen).toBeFalsy(); + }) + + it('should set class aktenzeichen--active for aktenzeichen', () => { + fixture.detectChanges(); + + const element = getDebugElementFromFixtureByCss(fixture, 'div.aktenzeichen--active'); + + expect(element).toBeInstanceOf(DebugElement); + }) + + it.each([null, EMPTY_STRING])('should NOT set class aktenzeichen--active for aktenzeichen %s', (aktenzeichen: string) => { + const vorgangWithEingang = createVorgangWithEingangResource(); + vorgangWithEingang.aktenzeichen = aktenzeichen; + component.vorgangWithEingang = vorgangWithEingang; + + fixture.detectChanges(); + + const element = getDebugElementFromFixtureByCss(fixture, 'div.aktenzeichen--active'); + + expect(element).not.toBeInstanceOf(DebugElement); + }) + + }) + }); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.ts index f97ca19141d8eaa969cff243877fbd922c2dafb8..051811750bbb2022878076fe64f0efc8589ac9c3 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.ts @@ -23,6 +23,8 @@ */ import { Component, Input } from '@angular/core'; import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; +import { isNotEmpty } from '@alfa-client/tech-shared'; +import { createVorgangWithEingangResource } from '../../../../../../vorgang-shared/test/vorgang'; @Component({ selector: 'alfa-vorgang-detail-header', @@ -31,7 +33,13 @@ import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-cli }) export class VorgangDetailHeaderComponent { - @Input() vorgangWithEingang: VorgangWithEingangResource; - readonly linkRel = VorgangWithEingangLinkRel; + + vorgang = createVorgangWithEingangResource(); + hasAktenzeichen = false; + + @Input('vorgangWithEingang') set vorgangWithEingang(vorgangWithEingang: VorgangWithEingangResource) { + this.vorgang = vorgangWithEingang; + this.hasAktenzeichen = isNotEmpty(vorgangWithEingang.aktenzeichen); + } } diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.html b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.html index fc537d604edb2a82f141001e23cc51f48ee4a9d6..76fbd0fcdad0369b636ee22e55d8cab06cbbff52 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.html +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.html @@ -23,8 +23,8 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<h1 *ngIf="vorgangStateResource.resource as vorgang"> +<span *ngIf="vorgangStateResource.resource as vorgang"> <a routerLink='/vorgang/{{ vorgang | toResourceUri }}' alfa-aktenzeichen [vorgang]="vorgang"></a> <span>/</span> <span>Nachrichten</span> -</h1> \ No newline at end of file +</span> \ No newline at end of file diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.scss b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.scss index fc20de9113991e7e70654e30b5f19da9be8e3bdb..e464165e3caa071427d0d983d92f8eeff45c0bf1 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.scss +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-in-postfach-breadcrumb-container/vorgang-in-postfach-breadcrumb/vorgang-in-postfach-breadcrumb.component.scss @@ -43,12 +43,4 @@ background-color: rgba(#777, 0.16); } } - - h1 { - font-size: inherit; - font-weight: inherit; - display: inline-block; - margin: 0 4px; - padding: 0; - } } diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-nummer/_vorgang-nummer.component.theme.scss b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-nummer/_vorgang-nummer.component.theme.scss index 651503abe17fffaa0e5422e634d324c0a0536ea8..7178db5371302f28f93ffa26899f2019bd041a18 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-nummer/_vorgang-nummer.component.theme.scss +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-nummer/_vorgang-nummer.component.theme.scss @@ -44,9 +44,8 @@ alfa-vorgang-nummer { &.big { div { - line-height: 1.4; - font-size: 1.5rem; - font-weight: 400; + font-size: 16px; + font-weight: 300; } mat-icon { margin-right: 0.5rem; diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html index 860374bb3078ebbf41ace4d6763afde0250908b8..a3550647c7bd0fa071ca29f7ea3794a53a171992 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search-autocomplete-options-content/vorgang-search-autocomplete-options-content.component.html @@ -30,12 +30,12 @@ <span data-test-id="preview-list-item-created-at">{{ vorgang.createdAt | formatToPrettyDate }}</span> </div> </div> +<div class="line full-width"> + <alfa-vorgang-nummer [vorgang]="vorgang"></alfa-vorgang-nummer> +</div> <div class="line full-width"> <div class="aktenzeichen" data-test-id="preview-list-item-vorgang-aktenzeichen"> <mat-icon svgIcon="az"></mat-icon> <span alfa-aktenzeichen [vorgang]="vorgang"></span> </div> -</div> -<div class="line full-width"> - <alfa-vorgang-nummer [vorgang]="vorgang"></alfa-vorgang-nummer> </div> \ No newline at end of file diff --git a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts index 7524d26b1f97cc415a7896b81f0d7f94b689a9de..3f6d94d69827013b000156f8996e06e24b324439 100644 --- a/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts +++ b/alfa-client/libs/vorgang-shared-ui/src/lib/vorgang-util.ts @@ -23,7 +23,7 @@ */ import { Vorgang } from "@alfa-client/vorgang-shared"; -export const VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN = 'kein Aktenzeichen zugewiesen'; +export const VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN = 'kein Aktenzeichen'; export function getAktenzeichenText(vorgang: Vorgang): string { return vorgang.aktenzeichen || VORGANG_KEIN_AKTENZEICHEN_ZUGEWIESEN; diff --git a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts index 3b69c644dade6cdcc196569aad14377ff56e3263..e70ab295d76c1406d39d653e0cbecf2708fd53f3 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts @@ -21,13 +21,13 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { HttpErrorResponse } from '@angular/common/http'; -import { UrlSegment } from '@angular/router'; import { ApiRootResource } from '@alfa-client/api-root-shared'; import { BinaryFileListResource } from '@alfa-client/binary-file-shared'; import { CommandListResource, CommandOrder, CommandResource, CreateCommand } from '@alfa-client/command-shared'; import { RouteData } from '@alfa-client/navigation-shared'; import { ApiError, ApiErrorAction, EMPTY_ARRAY, EMPTY_STRING, StateResource, createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared'; +import { HttpErrorResponse } from '@angular/common/http'; +import { UrlSegment } from '@angular/router'; import { Action } from '@ngrx/store'; import { TypedAction } from '@ngrx/store/src/models'; import { Resource, ResourceUri } from '@ngxp/rest'; @@ -383,6 +383,24 @@ describe('Vorgang Reducer', () => { expect(state.vorgangWithEingang.resource).toStrictEqual(vorgangWithEingang); }) + + it('should set reload representationList', () => { + const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource(); + const action = VorgangActions.loadVorgangWithEingangSuccess({ vorgangWithEingang }); + + const state: VorgangState = reducer(initialState, action); + + expect(state.representationList.reload).toBeTruthy(); + }) + + it('should set reload attachmentList', () => { + const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource(); + const action = VorgangActions.loadVorgangWithEingangSuccess({ vorgangWithEingang }); + + const state: VorgangState = reducer(initialState, action); + + expect(state.attachmentList.reload).toBeTruthy(); + }) }) describe('on "setReloadVorgangWithEingang" action', () => { @@ -907,19 +925,7 @@ describe('Vorgang Reducer', () => { it('should set reload to vorgangWithEingang', () => { const state: VorgangState = Reducer.updateByRouteData(initialState, routeData); - expect(state.vorgangWithEingang.reload).toBeTruthy(); - }) - - it('should clear attachmentList', () => { - const state: VorgangState = Reducer.updateByRouteData(initialState, routeData); - - expect(state.attachmentList).toEqual(createEmptyStateResource()); - }) - - it('should clear representationList', () => { - const state: VorgangState = Reducer.updateByRouteData(initialState, routeData); - - expect(state.representationList).toEqual(createEmptyStateResource()); + expect(state.vorgangWithEingang).toEqual(createEmptyStateResource()); }) it('should clear forwardPendingCommand', () => { 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 4e59588e6f4e4f5278b88c7ea697764f585c0187..8f46f23cfe60e9f62f37b10c19aac25d7d7dcd84 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 @@ -198,6 +198,8 @@ const vorgangReducer: ActionReducer<VorgangState, Action> = createReducer( on(VorgangActions.loadVorgangWithEingangSuccess, (state: VorgangState, props: VorgangWithEingangAction): VorgangState => ({ ...state, vorgangWithEingang: createStateResource(props.vorgangWithEingang), + representationList: { ...state.representationList, reload: true }, + attachmentList: { ...state.attachmentList, reload: true } })), on(VorgangActions.loadVorgangWithEingangFailure, (state: VorgangState, props: ApiErrorAction): VorgangState => ({ ...state, @@ -372,9 +374,7 @@ function prepareStateOnVorgangListNavigation(state: VorgangState, routeData: Rou function prepareStateOnVorgangNavigation(state: VorgangState): VorgangState { return {...state, - vorgangWithEingang: { ...state.vorgangWithEingang, reload: true }, - attachmentList: createEmptyStateResource(), - representationList: createEmptyStateResource(), + vorgangWithEingang: createEmptyStateResource(), forwardPendingCommand: createEmptyStateResource(), sendPostfachNachrichtPendingCommand: createEmptyStateResource() } diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html index 0f367da8886615808c22aceab48e7316113dc6a5..3c7d3096c197d259cd7bbb915d254a9d9c9e0247 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html @@ -41,11 +41,6 @@ class="postfach-icon"> </ozgcloud-postfach-icon> - <div class="aktenzeichen"> - <mat-icon svgIcon="az"></mat-icon> - <span class="ellipsis" alfa-aktenzeichen [vorgang]="vorgang"></span> - </div> - <alfa-vorgang-created-at class="eingang" [vorgang]="vorgang"></alfa-vorgang-created-at> <div class="name"> @@ -54,6 +49,11 @@ <alfa-vorgang-nummer class="vorgang-nummer" [vorgang]="vorgang"></alfa-vorgang-nummer> + <div class="aktenzeichen"> + <mat-icon svgIcon="az"></mat-icon> + <span class="ellipsis" alfa-aktenzeichen [vorgang]="vorgang"></span> + </div> + <alfa-vorgang-next-frist-button *ngIf="vorgang | hasLink: vorgangLinkRel.WIEDERVORLAGEN" [vorgang]="vorgang" class="wiedervorlagen"></alfa-vorgang-next-frist-button> diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.scss b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.scss index 8e4c58375615c99fe1b7563db6e976983305c646..a2039b4fb2ea81ca773c7ec973304bbb4c108c10 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.scss +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.scss @@ -31,7 +31,7 @@ grid-template-areas: "status postfach-icon wiedervorlagen eingang" "name name name name" - "aktenzeichen aktenzeichen vorgang-nummer user-icon"; + "vorgang-nummer vorgang-nummer aktenzeichen user-icon"; row-gap: 8px; align-items: center; padding: 16px 24px; @@ -78,8 +78,8 @@ @include media('>desktop') { grid-template-columns: 23% 25% 30% 12% 10%; grid-template-areas: - "status postfach-icon aktenzeichen eingang user-icon" - "name name vorgang-nummer wiedervorlagen user-icon"; + "status postfach-icon vorgang-nummer eingang user-icon" + "name name aktenzeichen wiedervorlagen user-icon"; padding: 16px 24px; .eingang { @@ -90,7 +90,7 @@ @include media('>xxlDesktop') { grid-template-columns: 15% 8% 16% 16% 20% 10% 12% 3%; grid-template-areas: - "status postfach-icon aktenzeichen vorgang-nummer name wiedervorlagen eingang user-icon"; + "status postfach-icon name vorgang-nummer aktenzeichen wiedervorlagen eingang user-icon"; .name { margin-right: 24px; diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts index a8bb0fc01aabb33bd31bf355eae54e03dc7a9707..737a87bdb0a26e836ec3b24145173747495e17b3 100644 --- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts +++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.spec.ts @@ -144,17 +144,17 @@ describe('WiedervorlageService', () => { const wiedervorlageListResource: WiedervorlageListResource = createWiedervorlageListResource(); const wiedervorlageListStateResource: StateResource<WiedervorlageListResource> = createStateResource(wiedervorlageListResource); - it('should return initial values', () => { + it('should return initial value', () => { service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(hot('-a', { a: wiedervorlageListResource })); const result = service.getWiedervorlageListByGivenVorgang(vorgang); - expect(result).toBeObservable(cold('ab', { a: createEmptyStateResource(true), b: wiedervorlageListResource })); + expect(result).toBeObservable(cold('-a', { a: wiedervorlageListResource })); }) it('should load wiedervorlagen by vorgang if required', () => { service.loadWiedervorlagenByVorgang = jest.fn(); - service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(of(createEmptyStateResource())); + service.wiedervorlageList$.next(createEmptyStateResource()); service.getWiedervorlageListByGivenVorgang(vorgang).subscribe(); @@ -163,7 +163,7 @@ describe('WiedervorlageService', () => { it('should NOT load wiedervorlagen by vorgang if already loaded', () => { service.loadWiedervorlagenByVorgang = jest.fn(); - service.wiedervorlageList$.asObservable = jest.fn().mockReturnValue(of(wiedervorlageListStateResource)); + service.wiedervorlageList$.next(wiedervorlageListStateResource); service.getWiedervorlageListByGivenVorgang(vorgang).subscribe(); diff --git a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts index 8b6e371c039d27e693bb0c51e22d86351c4503e7..ecb26ca5932e88f29d05b33b826df8dbeb0fdabf 100644 --- a/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts +++ b/alfa-client/libs/wiedervorlage-shared/src/lib/wiedervorlage.service.ts @@ -21,14 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Injectable, OnDestroy } from '@angular/core'; -import { Params } from '@angular/router'; import { BinaryFileListResource, BinaryFileService } from '@alfa-client/binary-file-shared'; import { Command, CommandOrder, CommandResource, CommandService, CreateCommand, isDone } from '@alfa-client/command-shared'; import { NavigationService } from '@alfa-client/navigation-shared'; import { StateResource, createEmptyStateResource, createStateResource, decodeUrlFromEmbedding, doIfLoadingRequired, hasError, isNotNull, isNotUndefined, replacePlaceholder } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; import { VorgangHeaderLinkRel, VorgangResource, VorgangService } from '@alfa-client/vorgang-shared'; +import { Injectable, OnDestroy } from '@angular/core'; +import { Params } from '@angular/router'; import { ResourceUri, getUrl, hasLink } from '@ngxp/rest'; import { isEqual, isNil, isNull, isUndefined } from 'lodash-es'; import { BehaviorSubject, Observable, Subscription, combineLatest } from 'rxjs'; @@ -83,10 +83,8 @@ export class WiedervorlageService implements OnDestroy { } public getWiedervorlageListByGivenVorgang(vorgangResource: VorgangResource): Observable<StateResource<WiedervorlageListResource>> { - return this.wiedervorlageList$.asObservable().pipe( - tap((wiedervorlageList) => doIfLoadingRequired(wiedervorlageList, () => this.loadWiedervorlagenByVorgang(vorgangResource))), - startWith(createEmptyStateResource<WiedervorlageListResource>(true)) - ) + doIfLoadingRequired(this.wiedervorlageList$.value, () => this.loadWiedervorlagenByVorgang(vorgangResource)); + return this.wiedervorlageList$.asObservable(); } loadWiedervorlagenByVorgang(vorgangResource: VorgangResource): void { diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.html index e5c5cf7e66bd2e1dcd04bf93f546e2a565ad77ec..c9ba19672327f65810cbf341f1509d9d35efb768 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.html +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.html @@ -27,4 +27,4 @@ <span>/</span> <span>Wiedervorlagen</span> <span>/</span> -<h1>{{ betreff }}</h1> +<span>{{ betreff }}</span> diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.scss b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.scss index 45b498dd7d0a306d64a8b956c39e928bcbf8142c..799ca154698da0a9bcc0d552f4364bb9d05f2442 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.scss +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-breadcrumb-container/wiedervorlage-breadcrumb/wiedervorlage-breadcrumb.component.scss @@ -43,12 +43,4 @@ background-color: rgba(#777, 0.16); } } - - h1 { - font-size: inherit; - font-weight: inherit; - display: inline-block; - margin: 0 4px; - padding: 0; - } } \ No newline at end of file diff --git a/src/main/helm/templates/network_policy.yaml b/src/main/helm/templates/network_policy.yaml index e5dc19013b7951904275b9b9f46f66df151cfbcf..ce4d6d32503339499c8aa2f171dd809cd5613ef4 100644 --- a/src/main/helm/templates/network_policy.yaml +++ b/src/main/helm/templates/network_policy.yaml @@ -14,10 +14,9 @@ spec: ingress: - ports: - port: 8080 - {{- with (.Values.networkPolicy).additionalIngressConfig }} - - from: -{{ toYaml . | indent 8 }} - {{- end }} +{{- with (.Values.networkPolicy).additionalIngressConfig }} +{{ toYaml . | indent 2 }} +{{- end }} egress: - to: - podSelector: @@ -43,4 +42,15 @@ spec: protocol: UDP - port: 5353 protocol: TCP + - to: + - podSelector: + matchLabels: + component: user-manager + ports: + - port: 9000 + protocol: TCP +{{- with (.Values.networkPolicy).additionalEgressConfig }} +{{ toYaml . | indent 2 }} +{{- end }} + {{- end }} \ No newline at end of file diff --git a/src/test/helm/network_policy_test.yaml b/src/test/helm/network_policy_test.yaml index 48ff2afe0c20aafdfba64aa464173ee75711db37..31383e6c2292aca35cae21bd543f7b9a506dfe23 100644 --- a/src/test/helm/network_policy_test.yaml +++ b/src/test/helm/network_policy_test.yaml @@ -91,25 +91,50 @@ tests: protocol: UDP - port: 5353 protocol: TCP + - to: + - podSelector: + matchLabels: + component: user-manager + ports: + - port: 9000 + protocol: TCP + - it: add ingress rule by values set: networkPolicy: - ssoPublicIp: 1.1.1.1 - dnsServerNamespace: kube-system + ssoPublicIp: 51.89.117.53/32 + dnsServerNamespace: test-namespace-dns additionalIngressConfig: - - podSelector: - matchLabels: - component: client2 + - from: + - podSelector: + matchLabels: + component: client2 asserts: - - equal: + - contains: path: spec.ingress - value: - - ports: - - port: 8080 - - from: - - podSelector: - matchLabels: - component: client2 + content: + from: + - podSelector: + matchLabels: + component: client2 + + - it: add egress rules by values + set: + networkPolicy: + ssoPublicIp: 51.89.117.53/32 + dnsServerNamespace: test-dns-namespace + additionalEgressConfig: + - to: + - ipBlock: + cidr: 1.2.3.4/32 + asserts: + - contains: + path: spec.egress + content: + to: + - ipBlock: + cidr: 1.2.3.4/32 + - it: test network policy disabled set: