From ae12f99df3b2fd60fbe0c39dc188443c7c89bd6f Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 8 Aug 2024 18:39:58 +0200
Subject: [PATCH] OZG-6302 OZG-6402; OZG-6302 OZG-6403

---
 .../collaboration-request-form.component.html | 12 ++++++
 ...llaboration-request-form.component.spec.ts | 39 +++++++++++++++++++
 .../collaboration-request-form.component.ts   | 13 +++++++
 .../collaboration.request.formservice.spec.ts | 16 ++++++++
 .../collaboration.request.formservice.ts      | 30 ++++++++++++++
 ...ustaendige-stelle-container.component.html |  3 ++
 ...aendige-stelle-container.component.spec.ts |  2 +
 .../src/lib/collaboration.module.ts           | 13 ++++++-
 alfa-client/package-lock.json                 |  4 +-
 9 files changed, 129 insertions(+), 3 deletions(-)
 create mode 100644 alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.html
 create mode 100644 alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.spec.ts
 create mode 100644 alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.ts
 create mode 100644 alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration.request.formservice.spec.ts
 create mode 100644 alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration.request.formservice.ts

diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.html
new file mode 100644
index 0000000000..440c5df943
--- /dev/null
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.html
@@ -0,0 +1,12 @@
+<form [formGroup]="formService.form">
+  <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/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.spec.ts
new file mode 100644
index 0000000000..7d9a65d558
--- /dev/null
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-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/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component.ts
new file mode 100644
index 0000000000..682db1d4f8
--- /dev/null
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-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/zustaendige-stelle-container/collaboration-request-form/collaboration.request.formservice.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration.request.formservice.spec.ts
new file mode 100644
index 0000000000..7f76f28a47
--- /dev/null
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-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/zustaendige-stelle-container/collaboration-request-form/collaboration.request.formservice.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration.request.formservice.ts
new file mode 100644
index 0000000000..2cb39040c5
--- /dev/null
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-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-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.html b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.html
index 6e905e5ef0..afd66214af 100644
--- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.html
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.html
@@ -7,6 +7,9 @@ ICON_PLATZHALTER
   <ods-save-icon icon class="fill-text"></ods-save-icon>
 </ods-button>
 
+<alfa-collaboration-request-form></alfa-collaboration-request-form>
+
+<ods-button text="Zuarbeit anfragen" data-test-id="zuarbeit-anfragen-button"></ods-button>
 <ods-button
   variant="outline"
   text="Abbrechen"
diff --git a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.spec.ts b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.spec.ts
index 44b14427ee..17bb7ec950 100644
--- a/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.spec.ts
+++ b/alfa-client/libs/collaboration/src/lib/collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component.spec.ts
@@ -3,6 +3,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ButtonComponent, CloseIconComponent, SaveIconComponent } from '@ods/system';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { MockComponent } from 'ng-mocks';
+import { CollaborationRequestFormComponent } from './collaboration-request-form/collaboration-request-form.component';
 import { ZustaendigeStelleContainerComponent } from './zustaendige-stelle-container.component';
 
 describe('ZustaendigeStelleContainerComponent', () => {
@@ -18,6 +19,7 @@ describe('ZustaendigeStelleContainerComponent', () => {
         ZustaendigeStelleContainerComponent,
         MockComponent(SaveIconComponent),
         MockComponent(CloseIconComponent),
+        MockComponent(CollaborationRequestFormComponent),
       ],
     }).compileComponents();
 
diff --git a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts
index a73ec83dde..6bd22a196d 100644
--- a/alfa-client/libs/collaboration/src/lib/collaboration.module.ts
+++ b/alfa-client/libs/collaboration/src/lib/collaboration.module.ts
@@ -1,6 +1,8 @@
 import { CollaborationSharedModule } from '@alfa-client/collaboration-shared';
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { TextEditorComponent, TextareaEditorComponent } from '@ods/component';
 import {
   ButtonComponent,
   CloseIconComponent,
@@ -8,6 +10,7 @@ import {
   SaveIconComponent,
 } from '@ods/system';
 import { CollaborationInVorgangContainerComponent } from './collaboration-in-vorgang-container/collaboration-in-vorgang-container.component';
+import { CollaborationRequestFormComponent } from './collaboration-in-vorgang-container/zustaendige-stelle-container/collaboration-request-form/collaboration-request-form.component';
 import { ZustaendigeStelleContainerComponent } from './collaboration-in-vorgang-container/zustaendige-stelle-container/zustaendige-stelle-container.component';
 
 @NgModule({
@@ -18,8 +21,16 @@ import { ZustaendigeStelleContainerComponent } from './collaboration-in-vorgang-
     CloseIconComponent,
     CollaborationSharedModule,
     CollaborationIconComponent,
+    TextEditorComponent,
+    TextareaEditorComponent,
+    FormsModule,
+    ReactiveFormsModule,
+  ],
+  declarations: [
+    CollaborationInVorgangContainerComponent,
+    ZustaendigeStelleContainerComponent,
+    CollaborationRequestFormComponent,
   ],
-  declarations: [CollaborationInVorgangContainerComponent, ZustaendigeStelleContainerComponent],
   exports: [CollaborationInVorgangContainerComponent],
 })
 export class CollaborationModule {}
diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json
index 986f853966..6f74aee054 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"
       }
-- 
GitLab