From 1f4cd343b9cade2216a23d54ca1af4639d62d372 Mon Sep 17 00:00:00 2001
From: Alexander Reifschneider <alexander.reifschneider@mgm-tp.com>
Date: Thu, 6 Mar 2025 15:57:19 +0100
Subject: [PATCH] OZG-725 Add forwarding item component Sub-Task: OZG-7895

---
 alfa-client/libs/design-system/src/index.ts   |  1 +
 .../forwarding-item.component.spec.ts         | 44 +++++++++
 .../forwarding-item.component.ts              | 57 ++++++++++++
 .../forwarding-item.stories.ts                | 92 +++++++++++++++++++
 4 files changed, 194 insertions(+)
 create mode 100644 alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.spec.ts
 create mode 100644 alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts
 create mode 100644 alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts

diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts
index eda6684097..d05d44db8c 100644
--- a/alfa-client/libs/design-system/src/index.ts
+++ b/alfa-client/libs/design-system/src/index.ts
@@ -41,6 +41,7 @@ export * from './lib/form/file-upload-button/file-upload-button.component';
 export * from './lib/form/radio-button-card/radio-button-card.component';
 export * from './lib/form/text-input/text-input.component';
 export * from './lib/form/textarea/textarea.component';
+export * from './lib/forwarding-item/forwarding-item.component';
 export * from './lib/icons/accessibility-icon/accessibility-icon.component';
 export * from './lib/icons/account-circle-icon/account-circle-icon.component';
 export * from './lib/icons/admin-logo-icon/admin-logo-icon.component';
diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.spec.ts
new file mode 100644
index 0000000000..5700f02837
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.spec.ts
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ForwardingItemComponent } from './forwarding-item.component';
+
+describe('ForwardingItemComponent', () => {
+  let component: ForwardingItemComponent;
+  let fixture: ComponentFixture<ForwardingItemComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [ForwardingItemComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(ForwardingItemComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts
new file mode 100644
index 0000000000..f358004819
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.component.ts
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+import { CommonModule } from '@angular/common';
+import { Component, Input } from '@angular/core';
+import { ForwardVorgangIconComponent } from '../icons/forward-vorgang-icon/forward-vorgang-icon.component';
+
+export enum ForwardingDirection {
+  FROM = 'Weitergeleitet von',
+  TO = 'An',
+}
+
+@Component({
+  selector: 'ods-forwarding-item',
+  standalone: true,
+  imports: [CommonModule, ForwardVorgangIconComponent],
+  template: `<div
+    class="flex flex-col items-start justify-between gap-2 rounded-lg border border-grayborder p-3 md:flex-row md:items-center md:gap-0"
+  >
+    <div class="flex gap-3">
+      <ods-forward-vorgang-icon class="fill-text" />
+      <p class="text-gray-500">{{ direction }}:</p>
+      <div>
+        <p class="font-medium">{{ label }}</p>
+        <p>{{ address }}</p>
+      </div>
+    </div>
+    <div class="self-end text-end empty:hidden">
+      <ng-content />
+    </div>
+  </div>`,
+})
+export class ForwardingItemComponent {
+  @Input({ required: true }) label!: string;
+  @Input({ required: true }) address!: string;
+  @Input() direction: ForwardingDirection = ForwardingDirection.TO;
+}
diff --git a/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts
new file mode 100644
index 0000000000..53d2116e9f
--- /dev/null
+++ b/alfa-client/libs/design-system/src/lib/forwarding-item/forwarding-item.stories.ts
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+import { argsToTemplate, moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
+
+import { ButtonComponent } from '../button/button.component';
+import { ForwardingDirection, ForwardingItemComponent } from './forwarding-item.component';
+
+const label: string = 'Bund für Umwelt und Naturschutz Kreisgruppe Kiel';
+const address: string = 'Kaiserstraße 25, 12443 Kiel';
+
+const meta: Meta<ForwardingItemComponent> = {
+  title: 'Forwarding item',
+  component: ForwardingItemComponent,
+  parameters: {
+    docs: {
+      description: {
+        component: 'Information of forwarded item',
+      },
+    },
+  },
+  decorators: [
+    moduleMetadata({
+      imports: [ForwardingItemComponent, ButtonComponent],
+    }),
+  ],
+  excludeStories: /.*Data$/,
+  tags: ['autodocs'],
+};
+
+export default meta;
+type Story = StoryObj<ForwardingItemComponent>;
+
+export const Default: Story = {
+  args: {
+    label: label,
+    address: address,
+    direction: ForwardingDirection.TO,
+  },
+  argTypes: {
+    direction: { control: 'select', options: [ForwardingDirection.TO, ForwardingDirection.FROM] },
+  },
+};
+
+export const WithButton: Story = {
+  args: {
+    label: label,
+    address: address,
+  },
+
+  render: (args: ForwardingItemComponent) => ({
+    props: args,
+    template: `<ods-forwarding-item ${argsToTemplate(args)}>
+        <ods-button variant="outline" text="Stelle ändern" />
+      </ods-forwarding-item>`,
+  }),
+};
+
+export const WithCreationInfo: Story = {
+  args: {
+    label: label,
+    address: address,
+    direction: ForwardingDirection.FROM,
+  },
+  render: (args: ForwardingItemComponent) => ({
+    props: args,
+    template: `<ods-forwarding-item ${argsToTemplate(args)}>
+        <p>20. Dez. 09:35</p>
+        <p class="text-sm">Karin Wanowski-Müller</p>
+      </ods-forwarding-item>`,
+  }),
+};
-- 
GitLab