diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts index 8f32eb567802ce78e439567c3cdc4bcfb5c0bfb8..292ad9ca566f8a29f7be1fcbf104757c712eb5cb 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts @@ -116,7 +116,7 @@ describe('PostfachMail', () => { return { ...buildVorgang(objectIds[2], 'VorgangWithoutPostfachId'), eingangs: [...vorgang.eingangs], - header: { serviceKonto: null }, + header: { serviceKonto: null, collaborationLevel: 0 }, }; } diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-nachricht-reply-button.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-nachricht-reply-button.cy.ts index ca29375a29c0d5ce113b82357dca681679efdad5..eca73b26f756e3a3610b82f62299ddbde612e5a3 100644 --- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-nachricht-reply-button.cy.ts +++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-nachricht-reply-button.cy.ts @@ -42,6 +42,7 @@ describe('Postfach Nachricht reply button', () => { }, name: 'BayernID Vorgang', header: { + collaborationLevel: 0, serviceKonto: { type: 'BayernId', postfachAddress: [ diff --git a/alfa-client/apps/alfa-e2e/src/model/vorgang.ts b/alfa-client/apps/alfa-e2e/src/model/vorgang.ts index aca577c4cea54f5d30ca05ca61956be6cb82099b..7fdbcfd62b93935aef7f35cb4a4f7fc1858c4422 100644 --- a/alfa-client/apps/alfa-e2e/src/model/vorgang.ts +++ b/alfa-client/apps/alfa-e2e/src/model/vorgang.ts @@ -67,6 +67,7 @@ export class VorgangE2E { export class VorgangHeaderE2E { serviceKonto: ServiceKontoE2E; + collaborationLevel: number; } export class ServiceKontoE2E { diff --git a/alfa-client/libs/collaboration-shared/.eslintrc.json b/alfa-client/libs/collaboration-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..adbe7ae2dfabd4a42804f00846baec80877f4c5c --- /dev/null +++ b/alfa-client/libs/collaboration-shared/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.json"], + "parser": "jsonc-eslint-parser", + "rules": { + "@nx/dependency-checks": "error" + } + } + ] +} diff --git a/alfa-client/libs/collaboration-shared/README.md b/alfa-client/libs/collaboration-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..84ff0ba5e53fa8755bbc483ca6989a4dd97ba944 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/README.md @@ -0,0 +1,7 @@ +# collaboration-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test collaboration-shared` to execute the unit tests. diff --git a/alfa-client/libs/collaboration-shared/jest.config.ts b/alfa-client/libs/collaboration-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..b295000beb0ccff8274950b36d2b0c08ef7eb11c --- /dev/null +++ b/alfa-client/libs/collaboration-shared/jest.config.ts @@ -0,0 +1,23 @@ +/* eslint-disable */ +export default { + displayName: 'collaboration-shared', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + globals: {}, + coverageDirectory: '../../coverage/libs/collaboration-shared', + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], + transform: { + '^.+.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*.mjs$)'], +}; diff --git a/alfa-client/libs/collaboration-shared/project.json b/alfa-client/libs/collaboration-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..f262eeba5a931ef0e8f50e915af8be561bbf8cd6 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "collaboration-shared", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "library", + "sourceRoot": "libs/collaboration-shared/src", + "prefix": "alfa", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/collaboration-shared/tsconfig.spec.json", + "jestConfig": "libs/collaboration-shared/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/collaboration-shared/src/index.ts b/alfa-client/libs/collaboration-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..31025070b90a52d41484bef72d4299235c0903a8 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/src/index.ts @@ -0,0 +1 @@ +export * from './lib/collaboration-shared.module'; diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.spec.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..4a3a485289dcdf8dc388b32f75c4415104122f46 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.spec.ts @@ -0,0 +1,14 @@ +import { TestBed } from '@angular/core/testing'; +import { CollaborationSharedModule } from './collaboration-shared.module'; + +describe('CollaborationSharedModule', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CollaborationSharedModule], + }).compileComponents(); + }); + + it('should create', () => { + expect(CollaborationSharedModule).toBeDefined(); + }); +}); diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..04110efad0a098ec5eb4b90fcac8fde121093956 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration-shared.module.ts @@ -0,0 +1,9 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { CollaborationService } from './collaboration.service'; + +@NgModule({ + imports: [CommonModule], + providers: [CollaborationService], +}) +export class CollaborationSharedModule {} diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0e2979bbb5773ae0ac729f4f48272bd9071f261 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.spec.ts @@ -0,0 +1,42 @@ +import { CollaborationService } from './collaboration.service'; + +describe('CollaborationService', () => { + let service: CollaborationService; + + beforeEach(() => { + service = new CollaborationService(); + }); + + describe('is request form visible', () => { + it('should return value', (done) => { + service.showRequestForm$.next(false); + + service.isRequestFormVisible().subscribe((isVisible: boolean) => { + expect(isVisible).toBeTruthy(); + done(); + }); + + service.showRequestForm(); + }); + }); + + describe('show anfrage formular', () => { + it('should set "showRequestForm" to true', () => { + service.showRequestForm$.next(false); + + service.showRequestForm(); + + expect(service.showRequestForm$.value).toBeTruthy(); + }); + }); + + describe('hide anfrage formular', () => { + it('should set "showRequestForm" to false', () => { + service.showRequestForm$.next(true); + + service.hideRequestForm(); + + expect(service.showRequestForm$.value).toBeFalsy(); + }); + }); +}); diff --git a/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..825e329acd0761272b43e287cf94cfa94b3bb93b --- /dev/null +++ b/alfa-client/libs/collaboration-shared/src/lib/collaboration.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; + +@Injectable() +export class CollaborationService { + showRequestForm$: BehaviorSubject<boolean> = new BehaviorSubject(false); + + public isRequestFormVisible(): Observable<boolean> { + return this.showRequestForm$.asObservable(); + } + + public showRequestForm(): void { + this.showRequestForm$.next(true); + } + + public hideRequestForm(): void { + this.showRequestForm$.next(false); + } +} diff --git a/alfa-client/libs/collaboration-shared/src/test-setup.ts b/alfa-client/libs/collaboration-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b07c0bac34c40aa6afeef02c18c8db08f79de48 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/src/test-setup.ts @@ -0,0 +1,15 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/collaboration-shared/tsconfig.json b/alfa-client/libs/collaboration-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..7cc6baf2f58ed5ccfba098131996f579979e9f18 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/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/collaboration-shared/tsconfig.lib.json b/alfa-client/libs/collaboration-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..dcc35a71ee8a26bc9394b9cf96b02996be26ec16 --- /dev/null +++ b/alfa-client/libs/collaboration-shared/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/test-setup.ts", "src/**/*.spec.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/collaboration-shared/tsconfig.spec.json b/alfa-client/libs/collaboration-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..c3cb17f784fa2f7b9a4b0e7c9b03663500f4ee3d --- /dev/null +++ b/alfa-client/libs/collaboration-shared/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/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html index 9b55f329b9326a6ebff530a431714165d7a89a0c..0ddd331df0d55bd3167f46812a17d9dcb095b8e3 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.html @@ -1,3 +1,17 @@ -<ods-button variant="outline" text="Anfrage erstellen" dataTestId="anfrage-erstellen-button"> - <ods-collaboration-icon icon /> -</ods-button> +<ng-template #anfrageErstellenButton> + <ods-button + variant="outline" + text="Anfrage erstellen" + data-test-id="anfrage-erstellen-button" + (clickEmitter)="showRequestForm()" + > + <ods-collaboration-icon icon /> + </ods-button> +</ng-template> + +<ng-container *ngIf="isRequestFormVisible$ | async; else anfrageErstellenButton"> + <alfa-collaboration-request-container + data-test-id="collaboration-request-container" + (hideRequestForm)="hideRequestForm()" + ></alfa-collaboration-request-container> +</ng-container> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts index bbb2fbafa9d8d9513f0d8a54702dcbb83a0f244d..593d18bad6ba4e3a51e2a0e2754add4a994121bd 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.spec.ts @@ -1,19 +1,45 @@ +import { + Mock, + dispatchEventFromFixture, + existsAsHtmlElement, + mock, + notExistsAsHtmlElement, +} from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ButtonComponent, CollaborationIconComponent, SaveIconComponent } from '@ods/system'; +import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; import { CollaborationInVorgangContainerComponent } from './collaboration-in-vorgang-container.component'; +import { CollaborationRequestContainerComponent } from './collaboration-request-container/collaboration-request-container.component'; describe('CollaborationInVorgangContainerComponent', () => { let component: CollaborationInVorgangContainerComponent; let fixture: ComponentFixture<CollaborationInVorgangContainerComponent>; + const anfrageErstellenButton: string = getDataTestIdOf('anfrage-erstellen-button'); + const collaborationRequestContainer: string = getDataTestIdOf('collaboration-request-container'); + + const service: Mock<CollaborationService> = { + ...mock(CollaborationService), + isRequestFormVisible: jest.fn().mockReturnValue(of(false)), + }; + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ButtonComponent, SaveIconComponent], declarations: [ CollaborationInVorgangContainerComponent, + MockComponent(CollaborationRequestContainerComponent), MockComponent(CollaborationIconComponent), ], + providers: [ + { + provide: CollaborationService, + useValue: service, + }, + ], }).compileComponents(); fixture = TestBed.createComponent(CollaborationInVorgangContainerComponent); @@ -24,4 +50,71 @@ describe('CollaborationInVorgangContainerComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('ngOnInit', () => { + it('should call service', () => { + component.ngOnInit(); + + expect(service.isRequestFormVisible).toHaveBeenCalled(); + }); + }); + + describe('anfrage erstellen button', () => { + describe('on request form visibility false', () => { + beforeEach(() => { + component.isRequestFormVisible$ = of(false); + }); + + it('should be shown', () => { + fixture.detectChanges(); + + existsAsHtmlElement(fixture, anfrageErstellenButton); + }); + + it('should call service on click', () => { + fixture.detectChanges(); + + dispatchEventFromFixture(fixture, anfrageErstellenButton, 'clickEmitter'); + + expect(service.showRequestForm).toHaveBeenCalled(); + }); + }); + + it('should be hidden if request form visibility is true', () => { + component.isRequestFormVisible$ = of(true); + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, anfrageErstellenButton); + }); + }); + + describe('zustaendige stelle', () => { + describe('on request form visibility true', () => { + beforeEach(() => { + component.isRequestFormVisible$ = of(true); + }); + it('should be shown', () => { + fixture.detectChanges(); + + existsAsHtmlElement(fixture, collaborationRequestContainer); + }); + + it('should call service on hideFormular output', () => { + fixture.detectChanges(); + + dispatchEventFromFixture(fixture, collaborationRequestContainer, 'hideRequestForm'); + + expect(service.hideRequestForm).toHaveBeenCalled(); + }); + }); + + it('should be hidden if request form visibility is false', () => { + component.isRequestFormVisible$ = of(false); + + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, collaborationRequestContainer); + }); + }); }); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts index 816cd743cf9dbc2a992d115a7e3598c7a7590ee2..a3f82c8ae46118a9e50407cb6ec43c3eb22560f5 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-in-vorgang-container.component.ts @@ -1,7 +1,25 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { CollaborationService } from 'libs/collaboration-shared/src/lib/collaboration.service'; +import { Observable } from 'rxjs'; @Component({ selector: 'alfa-collaboration-in-vorgang-container', templateUrl: './collaboration-in-vorgang-container.component.html', }) -export class CollaborationInVorgangContainerComponent {} +export class CollaborationInVorgangContainerComponent implements OnInit { + public isRequestFormVisible$: Observable<boolean>; + + constructor(private service: CollaborationService) {} + + ngOnInit(): void { + this.isRequestFormVisible$ = this.service.isRequestFormVisible(); + } + + public showRequestForm(): void { + this.service.showRequestForm(); + } + + public hideRequestForm(): void { + this.service.hideRequestForm(); + } +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..0f5275630246276c2d7329c9db71a3768948570a --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.html @@ -0,0 +1,23 @@ +<ods-button + variant="outline" + text="Zuständige Stelle auswählen" + dataTestId="zustaendige-stelle-search-button" +> + <ods-search-icon icon /> +</ods-button> + +<div class="my-6"> + <alfa-collaboration-request-form></alfa-collaboration-request-form> +</div> + +<div class="flex items-center gap-6"> + <ods-button text="Zuarbeit anfragen" data-test-id="zuarbeit-anfragen-button"></ods-button> + <ods-button + variant="outline" + text="Abbrechen" + data-test-id="collaboration-request-abbrechen-button" + (clickEmitter)="hideRequestForm.emit()" + > + <ods-close-icon icon class="fill-primary"></ods-close-icon> + </ods-button> +</div> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab1e1c2be5eb45bfcb44e60ca0d7f2ed00e361aa --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.spec.ts @@ -0,0 +1,45 @@ +import { dispatchEventFromFixture } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ButtonComponent, CloseIconComponent } from '@ods/system'; +import { SearchIconComponent } from 'libs/design-system/src/lib/icons/search-icon/search-icon.component'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { MockComponent } from 'ng-mocks'; +import { CollaborationRequestContainerComponent } from './collaboration-request-container.component'; +import { CollaborationRequestFormComponent } from './collaboration-request-form/collaboration-request-form.component'; + +describe('CollaborationRequestContainerComponent', () => { + let component: CollaborationRequestContainerComponent; + let fixture: ComponentFixture<CollaborationRequestContainerComponent>; + + const abbrechenButton: string = getDataTestIdOf('collaboration-request-abbrechen-button'); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ButtonComponent], + declarations: [ + CollaborationRequestContainerComponent, + MockComponent(SearchIconComponent), + MockComponent(CloseIconComponent), + MockComponent(CollaborationRequestFormComponent), + ], + }).compileComponents(); + + fixture = TestBed.createComponent(CollaborationRequestContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('abbrechen button', () => { + it('should emit hideRequestForm', () => { + const emitSpy = (component.hideRequestForm.emit = jest.fn()); + + dispatchEventFromFixture(fixture, abbrechenButton, 'clickEmitter'); + + expect(emitSpy).toHaveBeenCalled(); + }); + }); +}); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e8fa92a4ccb8f6745c556cce327ba4735f87e655 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component.ts @@ -0,0 +1,9 @@ +import { Component, EventEmitter, Output } from '@angular/core'; + +@Component({ + selector: 'alfa-collaboration-request-container', + templateUrl: './collaboration-request-container.component.html', +}) +export class CollaborationRequestContainerComponent { + @Output() public hideRequestForm: EventEmitter<void> = new EventEmitter<void>(); +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.html new file mode 100644 index 0000000000000000000000000000000000000000..4a0fc1757205a2790ec6fdc94f39b8470ba2e77d --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.html @@ -0,0 +1,12 @@ +<form [formGroup]="formService.form" class="flex flex-col gap-2"> + <ods-text-editor + label="Titel" + [formControlName]="formServiceClass.FIELD_TITLE" + [isRequired]="true" + ></ods-text-editor> + <ods-textarea-editor + label="Nachricht" + [formControlName]="formServiceClass.FIELD_NACHRICHT" + [isRequired]="true" + ></ods-textarea-editor> +</form> diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d9a65d558231b860cfc674d52f80b79bc8b66c3 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.spec.ts @@ -0,0 +1,39 @@ +import { Mock, mock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { TextEditorComponent, TextareaEditorComponent } from '@ods/component'; +import { MockComponent } from 'ng-mocks'; +import { CollaborationRequestFormComponent } from './collaboration-request-form.component'; +import { CollaborationRequestFormService } from './collaboration.request.formservice'; + +describe('CollaborationRequestFormComponent', () => { + let component: CollaborationRequestFormComponent; + let fixture: ComponentFixture<CollaborationRequestFormComponent>; + + const formService: Mock<CollaborationRequestFormService> = mock(CollaborationRequestFormService); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ReactiveFormsModule], + declarations: [ + CollaborationRequestFormComponent, + MockComponent(TextEditorComponent), + MockComponent(TextareaEditorComponent), + ], + providers: [ + { + provide: CollaborationRequestFormService, + useValue: formService, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(CollaborationRequestFormComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..682db1d4f83289c061ff5d733745a42947915530 --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { CollaborationRequestFormService } from './collaboration.request.formservice'; + +@Component({ + selector: 'alfa-collaboration-request-form', + templateUrl: './collaboration-request-form.component.html', + providers: [CollaborationRequestFormService], +}) +export class CollaborationRequestFormComponent { + constructor(readonly formService: CollaborationRequestFormService) {} + + public readonly formServiceClass = CollaborationRequestFormService; +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration.request.formservice.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration.request.formservice.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..7f76f28a47ec441ac67defcb897a2abc557390bb --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration.request.formservice.spec.ts @@ -0,0 +1,16 @@ +import { UntypedFormBuilder } from '@angular/forms'; +import { CollaborationRequestFormService } from './collaboration.request.formservice'; + +describe('CollaborationRequestFormService', () => { + let formService: CollaborationRequestFormService; + + const formBuilder: UntypedFormBuilder = new UntypedFormBuilder(); + + beforeEach(() => { + formService = new CollaborationRequestFormService(formBuilder); + }); + + it('should create', () => { + expect(formService).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration.request.formservice.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration.request.formservice.ts new file mode 100644 index 0000000000000000000000000000000000000000..2cb39040c5fdd34ae2d77138aba820a89ae4e17c --- /dev/null +++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration.request.formservice.ts @@ -0,0 +1,30 @@ +import { CommandResource } from '@alfa-client/command-shared'; +import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared'; +import { Injectable } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { Observable, of } from 'rxjs'; + +@Injectable() +export class CollaborationRequestFormService extends AbstractFormService { + public static readonly FIELD_TITLE = 'titel'; + public static readonly FIELD_NACHRICHT = 'nachricht'; + + constructor(formBuilder: UntypedFormBuilder) { + super(formBuilder); + } + + protected initForm(): UntypedFormGroup { + return this.formBuilder.group({ + [CollaborationRequestFormService.FIELD_TITLE]: new UntypedFormControl(null), + [CollaborationRequestFormService.FIELD_NACHRICHT]: new UntypedFormControl(null), + }); + } + + protected doSubmit(): Observable<StateResource<CommandResource>> { + return of(); + } + + protected getPathPrefix(): string { + return EMPTY_STRING; + } +} diff --git a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts index adcfd33ce0ff125a1dab9099fc4a8ffebe986055..89b35e5e8754d164880275f7177a170b7e348b05 100644 --- a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts +++ b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts @@ -1,11 +1,38 @@ +import { CollaborationSharedModule } from '@alfa-client/collaboration-shared'; import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { ButtonComponent, CollaborationIconComponent } from '@ods/system'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { TextEditorComponent, TextareaEditorComponent } from '@ods/component'; +import { + ButtonComponent, + CloseIconComponent, + CollaborationIconComponent, + SaveIconComponent, +} from '@ods/system'; +import { SearchIconComponent } from 'libs/design-system/src/lib/icons/search-icon/search-icon.component'; import { CollaborationInVorgangContainerComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang-container.component'; +import { CollaborationRequestContainerComponent } from './collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-container.component'; +import { CollaborationRequestFormComponent } from './collaboration-in-vorgang-container/collaboration-request-container/collaboration-request-form/collaboration-request-form.component'; @NgModule({ - imports: [CommonModule, ButtonComponent, CollaborationIconComponent], - declarations: [CollaborationInVorgangContainerComponent], + imports: [ + CommonModule, + ButtonComponent, + SaveIconComponent, + CloseIconComponent, + SearchIconComponent, + CollaborationSharedModule, + CollaborationIconComponent, + TextEditorComponent, + TextareaEditorComponent, + FormsModule, + ReactiveFormsModule, + ], + declarations: [ + CollaborationInVorgangContainerComponent, + CollaborationRequestContainerComponent, + CollaborationRequestFormComponent, + ], exports: [CollaborationInVorgangContainerComponent], }) export class CollaborationModule {} diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts index a374f53e940446a07e40774135bdb40d7578461d..b476cb65e8a35e2bdb723d407f176d3aca923689 100644 --- a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts @@ -6,7 +6,10 @@ import { cva, VariantProps } from 'class-variance-authority'; import { ErrorMessageComponent } from '../error-message/error-message.component'; const textInputVariants = cva( - 'w-full h-10 rounded-lg border bg-background-50 px-3 py-2 text-base leading-5 text-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', + [ + 'w-full box-border rounded-lg border bg-background-50 px-3 py-2 text-base text-text leading-5', + 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', + ], { variants: { variant: { diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts index da75590e40ed4afedee224ff82f89a741c9d5bef..2c4340b9f30232e900ef8a4ac8c845adf4765d41 100644 --- a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts @@ -5,7 +5,10 @@ import { FormControl, ReactiveFormsModule } from '@angular/forms'; import { VariantProps, cva } from 'class-variance-authority'; const textareaVariants = cva( - 'block w-full rounded-lg border bg-background-50 px-3 py-2 text-base text-text leading-5 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', + [ + 'w-full box-border rounded-lg border bg-background-50 px-3 py-2 text-base text-text leading-5', + 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2', + ], { variants: { variant: { diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts index 4a06bce8341af9c60b88bb268fa5c6e437466e40..13b574ef5c2fcdc6d993803208437cb01bb5ce3c 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts @@ -21,23 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - convertForDataTest, - ConvertForDataTestPipe, - EnumToLabelPipe, - HasLinkPipe, - ToResourceUriPipe, -} from '@alfa-client/tech-shared'; +import { convertForDataTest, ConvertForDataTestPipe, EnumToLabelPipe, HasLinkPipe, ToResourceUriPipe } from '@alfa-client/tech-shared'; import { getElementFromFixture } from '@alfa-client/test-utils'; import { PostfachIconComponent } from '@alfa-client/ui'; import { UserProfileInVorgangListItemContainerComponent } from '@alfa-client/user-profile'; import { VorgangHeaderLinkRel } from '@alfa-client/vorgang-shared'; -import { - AktenzeichenComponent, - VorgangNummerComponent, - VorgangStatusDotComponent, - VorgangStatusTextComponent, -} from '@alfa-client/vorgang-shared-ui'; +import { AktenzeichenComponent, VorgangNummerComponent, VorgangStatusDotComponent, VorgangStatusTextComponent } from '@alfa-client/vorgang-shared-ui'; import { WiedervorlageListInVorgangListContainerComponent } from '@alfa-client/wiedervorlage'; import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; @@ -55,7 +44,7 @@ import { MockComponent, MockModule } from 'ng-mocks'; import { VorgangBescheidStatusComponent } from './vorgang-bescheid-status/vorgang-bescheid-status.component'; import { VorgangCreatedAtComponent } from './vorgang-created-at/vorgang-created-at.component'; import { VorgangListItemComponent } from './vorgang-list-item.component'; -import { VorgangNextFristButton } from './vorgang-next-frist-button/vorgang-next-frist-button.component'; +import { VorgangNextFristButtonComponent } from './vorgang-next-frist-button/vorgang-next-frist-button.component'; registerLocaleData(localeDe, 'de', localeDeExtra); @@ -83,7 +72,7 @@ describe('VorgangListItemComponent', () => { MockComponent(VorgangStatusDotComponent), MockComponent(VorgangStatusTextComponent), MockComponent(WiedervorlageListInVorgangListContainerComponent), - MockComponent(VorgangNextFristButton), + MockComponent(VorgangNextFristButtonComponent), MockComponent(UserProfileInVorgangListItemContainerComponent), MockComponent(VorgangCreatedAtComponent), MockComponent(VorgangBescheidStatusComponent), diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.spec.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.spec.ts index fdb11dc41d8f88b720e77c67589bbbce34e1e0f6..78c2a7a5031a73a342aac9438339a7a19b38c420 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.spec.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.spec.ts @@ -21,31 +21,31 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { FormatToPrettyDatePipe, HasLinkPipe } from '@alfa-client/tech-shared'; +import { VorgangHeaderLinkRel } from '@alfa-client/vorgang-shared'; import { registerLocaleData } from '@angular/common'; import localeDe from '@angular/common/locales/de'; import localeDeExtra from '@angular/common/locales/extra/de'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; -import { FormatToPrettyDatePipe, HasLinkPipe } from '@alfa-client/tech-shared'; -import { VorgangHeaderLinkRel } from '@alfa-client/vorgang-shared'; import { WiedervorlageIconComponent } from 'libs/vorgang-shared-ui/src/lib/wiedervorlage-icon/wiedervorlage-icon.component'; import { createVorgangResource } from 'libs/vorgang-shared/test/vorgang'; import { WiedervorlageListInVorgangListContainerComponent } from 'libs/wiedervorlage/src/lib/wiedervorlage-list-in-vorgang-list-container/wiedervorlage-list-in-vorgang-list-container.component'; import { MockComponent } from 'ng-mocks'; -import { VorgangNextFristButton } from './vorgang-next-frist-button.component'; +import { VorgangNextFristButtonComponent } from './vorgang-next-frist-button.component'; import * as dateUtil from '../../../../../../../tech-shared/src/lib/date.util'; registerLocaleData(localeDe, 'de', localeDeExtra); -describe('VorgangNextFristButton', () => { - let component: VorgangNextFristButton; - let fixture: ComponentFixture<VorgangNextFristButton>; +describe('VorgangNextFristButtonComponent', () => { + let component: VorgangNextFristButtonComponent; + let fixture: ComponentFixture<VorgangNextFristButtonComponent>; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [ - VorgangNextFristButton, + VorgangNextFristButtonComponent, FormatToPrettyDatePipe, HasLinkPipe, MatIcon, @@ -56,7 +56,7 @@ describe('VorgangNextFristButton', () => { }); beforeEach(() => { - fixture = TestBed.createComponent(VorgangNextFristButton); + fixture = TestBed.createComponent(VorgangNextFristButtonComponent); component = fixture.componentInstance; component.vorgang = createVorgangResource([VorgangHeaderLinkRel.VORGANG_WITH_EINGANG]); fixture.detectChanges(); diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.ts index f552a5b278d5b8f2b42e1e04a35eac0a18bbe27c..c85a4ce054c39c3587012bdb9183faa0f3628a8e 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component.ts @@ -21,23 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input, OnInit } from '@angular/core'; import { isISODateInPast } from '@alfa-client/tech-shared'; -import { VorgangHeaderLinkRel, VorgangResource } from '@alfa-client/vorgang-shared'; +import { VorgangResource } from '@alfa-client/vorgang-shared'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ selector: 'alfa-vorgang-next-frist-button', templateUrl: './vorgang-next-frist-button.component.html', styleUrls: ['./vorgang-next-frist-button.component.scss'], }) -export class VorgangNextFristButton implements OnInit { +export class VorgangNextFristButtonComponent implements OnInit { @Input() vorgang: VorgangResource; public showWiedervorlagen: boolean = false; public isOverdue: boolean; - readonly vorgangLinkRel = VorgangHeaderLinkRel; - ngOnInit() { this.isOverdue = isISODateInPast(this.vorgang.nextFrist as unknown as string); } diff --git a/alfa-client/libs/vorgang/src/lib/vorgang.module.ts b/alfa-client/libs/vorgang/src/lib/vorgang.module.ts index 073eeb74eb9eb31e3b8c5bee5448438d2e810ffd..0fea0e60e669a1a394c27127d2573e64a21f8f3c 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang.module.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang.module.ts @@ -39,7 +39,7 @@ import { EmptyListComponent } from './vorgang-list-container/vorgang-list/empty- import { VorgangBescheidStatusComponent } from './vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-bescheid-status/vorgang-bescheid-status.component'; import { VorgangCreatedAtComponent } from './vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-created-at/vorgang-created-at.component'; import { VorgangListItemComponent } from './vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component'; -import { VorgangNextFristButton } from './vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component'; +import { VorgangNextFristButtonComponent } from './vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-next-frist-button/vorgang-next-frist-button.component'; import { VorgangListComponent } from './vorgang-list-container/vorgang-list/vorgang-list.component'; import { VorgangListPageContainerComponent } from './vorgang-list-page-container/vorgang-list-page-container.component'; import { VorgangFilterMenuContainerComponent } from './vorgang-list-page-container/vorgang-list-page/vorgang-filter-menu-container/vorgang-filter-menu-container.component'; @@ -184,7 +184,7 @@ const routes: Routes = [ VorgangListContainerComponent, VorgangListPageComponent, EmptyListComponent, - VorgangNextFristButton, + VorgangNextFristButtonComponent, VorgangListPageContainerComponent, VorgangFilterMenuContainerComponent, VorgangFilterMenuComponent, diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json index 986f8539663f4c42b3f2e4cf04bc7cb7d945515a..6f74aee054bb6dd8cf0188cb27a4e8c4ce1b78b5 100644 --- a/alfa-client/package-lock.json +++ b/alfa-client/package-lock.json @@ -79,7 +79,6 @@ "@storybook/core-server": "^8.1.4", "@swc-node/register": "1.9.1", "@swc/core": "~1.5.7", - "@swc/helpers": "~0.5.2", "@testing-library/jest-dom": "6.4.5", "@types/file-saver": "2.0.7", "@types/jest": "29.4.4", @@ -15268,7 +15267,8 @@ "version": "0.5.12", "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/helpers/-/helpers-0.5.12.tgz", "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json index dcd7a091e2e4c3e485af22ec4b92386bfee0394d..15284c9f0e8bc51994ae4e9b965a16c8b17d0bb6 100644 --- a/alfa-client/tsconfig.base.json +++ b/alfa-client/tsconfig.base.json @@ -24,6 +24,7 @@ "@alfa-client/binary-file": ["libs/binary-file/src/index.ts"], "@alfa-client/binary-file-shared": ["libs/binary-file-shared/src/index.ts"], "@alfa-client/collaboration": ["libs/collaboration/src/index.ts"], + "@alfa-client/collaboration-shared": ["libs/collaboration-shared/src/index.ts"], "@alfa-client/command-shared": ["libs/command-shared/src/index.ts"], "@alfa-client/environment-shared": ["libs/environment-shared/src/index.ts"], "@alfa-client/forwarding": ["libs/forwarding/src/index.ts"],