diff --git a/apps/isa-app/src/assets/icons.json b/apps/isa-app/src/assets/icons.json
index acf3a5239..9ef60e5d5 100644
--- a/apps/isa-app/src/assets/icons.json
+++ b/apps/isa-app/src/assets/icons.json
@@ -271,6 +271,11 @@
"name": "calendar-today",
"data": "M180-80q-24 0-42-18t-18-42v-620q0-24 18-42t42-18h65v-60h65v60h340v-60h65v60h65q24 0 42 18t18 42v620q0 24-18 42t-42 18H180Zm0-60h600v-430H180v430Zm0-490h600v-130H180v130Zm0 0v-130 130Z",
"viewBox": "0 -960 960 960"
+ },
+ {
+ "name": "apps",
+ "data": "M226-160q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Zm254 0q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Zm254 0q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19ZM226-414q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Zm254 0q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Zm254 0q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19ZM226-668q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Zm254 0q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Zm254 0q-28 0-47-19t-19-47q0-28 19-47t47-19q28 0 47 19t19 47q0 28-19 47t-47 19Z",
+ "viewBox": "0 -960 960 960"
}
],
diff --git a/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.css b/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.css
new file mode 100644
index 000000000..a30e58ec1
--- /dev/null
+++ b/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.css
@@ -0,0 +1,3 @@
+:host {
+ @apply inline-block;
+}
diff --git a/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.html b/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.html
new file mode 100644
index 000000000..0f0297400
--- /dev/null
+++ b/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.html
@@ -0,0 +1,49 @@
+
+
+
+
+
diff --git a/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.ts b/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.ts
new file mode 100644
index 000000000..87e74107d
--- /dev/null
+++ b/apps/page/customer-rd/src/lib/components/customer-menu/customer-menu.component.ts
@@ -0,0 +1,111 @@
+import { BooleanInput, NumberInput, coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
+import { CdkMenuModule } from '@angular/cdk/menu';
+import { Component, ChangeDetectionStrategy, Input } from '@angular/core';
+import { IconComponent } from '@shared/components/icon';
+import { SharedMenuModule } from '@shared/components/menu';
+import { combineLatest } from 'rxjs';
+import { map } from 'rxjs/operators';
+import { CustomerSearchNavigation } from '../../navigations';
+import { ComponentStore } from '@ngrx/component-store';
+import { RouterLink } from '@angular/router';
+import { AsyncPipe, NgIf } from '@angular/common';
+
+export interface CustomerMenuComponentState {
+ customerId?: number;
+ processId?: number;
+ hasCustomerCard?: boolean;
+ showCustomerDetails: boolean;
+ showCustomerOrders: boolean;
+ showCustomerHistory: boolean;
+ showCustomerCard: boolean;
+}
+
+@Component({
+ selector: 'page-customer-menu',
+ templateUrl: 'customer-menu.component.html',
+ styleUrls: ['customer-menu.component.css'],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ host: { class: 'page-customer-menu' },
+ standalone: true,
+ imports: [CdkMenuModule, SharedMenuModule, IconComponent, RouterLink, NgIf, AsyncPipe],
+})
+export class CustomerMenuComponent extends ComponentStore {
+ @Input() set customerId(value: NumberInput) {
+ this.patchState({ customerId: coerceNumberProperty(value) });
+ }
+
+ @Input() set hasCustomerCard(value: BooleanInput) {
+ this.patchState({ hasCustomerCard: coerceBooleanProperty(value) });
+ }
+
+ @Input() set processId(value: NumberInput) {
+ this.patchState({ processId: coerceNumberProperty(value) });
+ }
+
+ @Input() set showCustomerDetails(value: BooleanInput) {
+ this.patchState({ showCustomerDetails: coerceBooleanProperty(value) });
+ }
+
+ @Input() set showCustomerOrders(value: BooleanInput) {
+ this.patchState({ showCustomerOrders: coerceBooleanProperty(value) });
+ }
+
+ @Input() set showCustomerHistory(value: BooleanInput) {
+ this.patchState({ showCustomerHistory: coerceBooleanProperty(value) });
+ }
+
+ @Input() set showCustomerCard(value: BooleanInput) {
+ this.patchState({ showCustomerCard: coerceBooleanProperty(value) });
+ }
+
+ readonly customerId$ = this.select((state) => state.customerId);
+
+ readonly processId$ = this.select((state) => state.processId);
+
+ readonly hasCustomerCard$ = this.select((state) => state.hasCustomerCard);
+
+ readonly showCustomerDetails$ = this.select((state) => state.showCustomerDetails);
+
+ readonly showCustomerOrders$ = this.select((state) => state.showCustomerOrders);
+
+ readonly showCustomerHistory$ = this.select((state) => state.showCustomerHistory);
+
+ readonly showCustomerCard$ = this.select((state) => state.showCustomerCard);
+
+ historyRoute$ = combineLatest([this.showCustomerHistory$, this.processId$, this.customerId$]).pipe(
+ map(
+ ([showCustomerHistory, processId, customerId]) =>
+ showCustomerHistory && processId && customerId && this._navigation.historyRoute({ processId, customerId })
+ )
+ );
+
+ ordersRoute$ = combineLatest([this.showCustomerOrders$, this.processId$, this.customerId$]).pipe(
+ map(
+ ([showCustomerOrders, processId, customerId]) =>
+ showCustomerOrders && processId && customerId && this._navigation.ordersRoute({ processId, customerId })
+ )
+ );
+
+ kundenkarteRoute$ = combineLatest([this.showCustomerCard$, this.hasCustomerCard$, this.processId$, this.customerId$]).pipe(
+ map(
+ ([showCustomerCard, hasCustomerCard, processId, customerId]) =>
+ showCustomerCard && hasCustomerCard && processId && customerId && this._navigation.kundenkarteRoute({ processId, customerId })
+ )
+ );
+
+ customerDetailsRoute$ = combineLatest([this.showCustomerDetails$, this.processId$, this.customerId$]).pipe(
+ map(
+ ([showCustomerDetails, processId, customerId]) =>
+ showCustomerDetails && processId && customerId && this._navigation.detailsRoute({ processId, customerId })
+ )
+ );
+
+ constructor(private _navigation: CustomerSearchNavigation) {
+ super({
+ showCustomerCard: true,
+ showCustomerDetails: true,
+ showCustomerHistory: true,
+ showCustomerOrders: true,
+ });
+ }
+}
diff --git a/apps/page/customer-rd/src/lib/components/customer-menu/index.ts b/apps/page/customer-rd/src/lib/components/customer-menu/index.ts
new file mode 100644
index 000000000..9a48acfaa
--- /dev/null
+++ b/apps/page/customer-rd/src/lib/components/customer-menu/index.ts
@@ -0,0 +1 @@
+export * from './customer-menu.component';
diff --git a/apps/page/customer-rd/src/lib/customer-search/details-main-view/details-main-view.component.html b/apps/page/customer-rd/src/lib/customer-search/details-main-view/details-main-view.component.html
index 8fe62c1e8..79b2bcc0a 100644
--- a/apps/page/customer-rd/src/lib/customer-search/details-main-view/details-main-view.component.html
+++ b/apps/page/customer-rd/src/lib/customer-search/details-main-view/details-main-view.component.html
@@ -1,31 +1,13 @@
-