Lieferanten-/IT-Service-Cockpit direkt auf der Asset-Seite öffnen
Statt beim Klick auf ein Lieferanten-/IT-Service-Asset zur Lieferanten-Seite zu wechseln, wird das Fach-Cockpit jetzt als Popup auf /assets gerendert; Schließen, Bearbeiten, Speichern und Löschen bleiben auf der Asset-Seite. - backHref-Prop an SupplierDetail/Edit- und ServiceDetail/Edit-Modal: alle Schließen-/Bearbeiten-/Abbrechen-Links leiten sich davon ab (Default /suppliers) - withQuery-Helper (lib/supplier) für korrekte ?/&-Verkettung - updateSupplier/updateService lesen returnTo (verstecktes Feld) und leiten dorthin zurück; deleteSupplier/deleteService bekommen returnTo-Parameter - Kind-Actions revalidieren zusätzlich /assets, damit das Popup dort aktuell bleibt - SUPPLIER_INCLUDE/SERVICE_INCLUDE in lib/supplier-include ausgelagert und von beiden Seiten genutzt - assets/page.tsx bestimmt die Popup-Art vorab (supplier/service/asset) und rendert das passende Cockpit mit backHref="/assets"; profillose Alt-Assets bleiben Assets Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import type { Prisma } from "@prisma/client";
|
||||
|
||||
/**
|
||||
* Gemeinsame Prisma-Includes für das Lieferanten- und IT-Service-Cockpit.
|
||||
* Werden sowohl auf /suppliers als auch auf /assets verwendet, damit die
|
||||
* Fach-Popups an beiden Stellen mit identischer Datenform gerendert werden.
|
||||
*/
|
||||
export const SUPPLIER_INCLUDE = {
|
||||
supplierProfile: true,
|
||||
contracts: true,
|
||||
ndas: true,
|
||||
evidence: true,
|
||||
assessments: true,
|
||||
subcontractors: true,
|
||||
decisions: true,
|
||||
maturity: true,
|
||||
riskAssets: { include: { risk: { select: { id: true, refNo: true, title: true, score: true } } } },
|
||||
relationsFrom: { include: { relatedAsset: { select: { name: true, confidentiality: true, integrity: true, availability: true } } } },
|
||||
relationsTo: { include: { asset: { select: { name: true, confidentiality: true, integrity: true, availability: true } } } },
|
||||
} satisfies Prisma.AssetInclude;
|
||||
|
||||
export const SERVICE_INCLUDE = {
|
||||
serviceProfile: { include: { provider: { select: { id: true, name: true } } } },
|
||||
raci: { orderBy: { controlRef: "asc" } },
|
||||
riskAssets: { include: { risk: { select: { id: true, refNo: true, title: true, score: true } } } },
|
||||
relationsFrom: { include: { relatedAsset: { select: { id: true, name: true, type: true, confidentiality: true, integrity: true, availability: true } } } },
|
||||
relationsTo: { include: { asset: { select: { id: true, name: true } } } },
|
||||
processAssets: { include: { process: { select: { id: true, name: true } } } },
|
||||
} satisfies Prisma.AssetInclude;
|
||||
@@ -11,6 +11,15 @@ export function serviceRef(refNo: number): string {
|
||||
return `S-${String(refNo).padStart(3, "0")}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hängt einen Query-Parameter an einen Basis-Pfad an und wählt automatisch
|
||||
* das richtige Trennzeichen (`?` oder `&`). Erlaubt, Detail-/Bearbeiten-Popups
|
||||
* sowohl auf /suppliers als auch auf /assets zu öffnen (backHref-Muster).
|
||||
*/
|
||||
export function withQuery(base: string, key: string, val: string): string {
|
||||
return `${base}${base.includes("?") ? "&" : "?"}${key}=${val}`;
|
||||
}
|
||||
|
||||
export const SUPPLIER_LIFECYCLE_TONE = {
|
||||
ACTIVE: "ok",
|
||||
ONBOARDING: "info",
|
||||
|
||||
Reference in New Issue
Block a user