diff --git a/Website/components/datamodelview/entity/CascadeConfiguration.tsx b/Website/components/datamodelview/entity/CascadeConfiguration.tsx index 58ce68f..e09b966 100644 --- a/Website/components/datamodelview/entity/CascadeConfiguration.tsx +++ b/Website/components/datamodelview/entity/CascadeConfiguration.tsx @@ -1,65 +1,44 @@ 'use client' +import { Tooltip } from "@mui/material"; import { CascadeConfigurationType, CascadeType } from "@/lib/Types"; -export function CascadeConfiguration({ config }: { config: CascadeConfigurationType | null }): JSX.Element { - if (!config) { - return None - } +const actions = ["Assign", "Reparent", "Delete", "Share", "Unshare", "Merge", "Archive", "RollupView"] as const; +const configurableActions = ["Assign", "Reparent", "Share", "Unshare"] as const; - if (isReferential(config)) { - return Referential +export function getRelationshipBehavior(config: CascadeConfigurationType): "Referential" | "Parental" | "Custom" { + // Merge depends on table support; Archive and RollupView are independent settings. + // They remain visible in the details without changing the behavior family. + if (configurableActions.every(action => config[action] === CascadeType.None) && + (config.Delete === CascadeType.RemoveLink || config.Delete === CascadeType.Restrict)) { + return "Referential"; } - - if (isReferentialRestrictDelete(config)) { - return Referential, Restrict Delete + if (configurableActions.every(action => config[action] === CascadeType.Cascade) && + config.Delete === CascadeType.Cascade) { + return "Parental"; } + return "Custom"; +} - if (isParential(config)) { - return Parential +export function CascadeConfiguration({ config }: { config: CascadeConfigurationType | null }): JSX.Element { + if (!config) { + return None } return ( -
- Assign: - {CascadeType[config.Assign]} - Reparent: - {CascadeType[config.Reparent]} - Delete: - {CascadeType[config.Delete]} - Share: - {CascadeType[config.Share]} - Unshare: - {CascadeType[config.Unshare]} - Merge: - {CascadeType[config.Merge]} -
+ + {actions.map(action => ( +
+
{action === "RollupView" ? "Rollup View" : action}:
+
{config[action] == null ? "Not specified" : CascadeType[config[action]] ?? `Unknown (${config[action]})`}
+
+ ))} + + }> + + {getRelationshipBehavior(config)} + +
) } - -function isReferential(config: CascadeConfigurationType): boolean { - return config.Assign === CascadeType.None && - config.Delete === CascadeType.RemoveLink && - config.Merge === CascadeType.None && - config.Reparent === CascadeType.None && - config.Share === CascadeType.None && - config.Unshare === CascadeType.None; -} - -function isReferentialRestrictDelete(config: CascadeConfigurationType): boolean { - return config.Assign === CascadeType.None && - config.Delete === CascadeType.Restrict && - config.Merge === CascadeType.None && - config.Reparent === CascadeType.None && - config.Share === CascadeType.None && - config.Unshare === CascadeType.None; -} - -function isParential(config: CascadeConfigurationType): boolean { - return config.Assign === CascadeType.Cascade && - config.Delete === CascadeType.Cascade && - config.Merge === CascadeType.None && - config.Reparent === CascadeType.Cascade && - config.Share === CascadeType.Cascade && - config.Unshare === CascadeType.Cascade; -} \ No newline at end of file