diff --git a/clients/admin-ui/src/features/common/utils.ts b/clients/admin-ui/src/features/common/utils.ts index 3c9bd143cc7..243600163b5 100644 --- a/clients/admin-ui/src/features/common/utils.ts +++ b/clients/admin-ui/src/features/common/utils.ts @@ -315,3 +315,18 @@ export const nFormatter = (num: number = 0, digits: number = 0) => notation: "compact", maximumFractionDigits: digits, }).format(num); + +/** + * Humanizes a field_name value from evidence items. + * + * The backend emits two formats depending on how the evidence was generated: + * - AI path (bare key): "legal_basis" → "Legal basis" + * - Non-AI path (dotted): "privacy_declaration.legal_basis" → "Legal basis" + * + * The source_type label already identifies where the data came from, so the + * prefix segment of a dotted path is redundant and is stripped. + */ +export const formatFieldName = (raw: string): string => { + const leaf = raw.includes(".") ? raw.split(".").pop()! : raw; + return sentenceCase(leaf.replace(/_/g, " ")); +}; diff --git a/clients/admin-ui/src/features/privacy-assessments/EvidenceCardGroup.tsx b/clients/admin-ui/src/features/privacy-assessments/EvidenceCardGroup.tsx index 1cbd5fe39e7..e6792a88e50 100644 --- a/clients/admin-ui/src/features/privacy-assessments/EvidenceCardGroup.tsx +++ b/clients/admin-ui/src/features/privacy-assessments/EvidenceCardGroup.tsx @@ -1,8 +1,8 @@ import { Space, Text } from "fidesui"; -import { formatDate } from "~/features/common/utils"; +import { formatDate, formatFieldName } from "~/features/common/utils"; -import { FIELD_NAME_LABELS, SOURCE_TYPE_LABELS } from "./constants"; +import { SOURCE_TYPE_LABELS } from "./constants"; import styles from "./EvidenceCardGroup.module.scss"; import { EvidenceItem } from "./types"; @@ -18,11 +18,7 @@ export const EvidenceCardGroup = ({ items }: EvidenceCardGroupProps) => ( {SOURCE_TYPE_LABELS[item.source_type] ?? item.source_type} - - {FIELD_NAME_LABELS[item.field_name] ?? - item.field_name.replace(/_/g, " ")} - :{" "} - + {formatFieldName(item.field_name)}: {item.value} diff --git a/clients/admin-ui/src/features/privacy-assessments/constants.ts b/clients/admin-ui/src/features/privacy-assessments/constants.ts index f13428f862e..bbfac2bb6be 100644 --- a/clients/admin-ui/src/features/privacy-assessments/constants.ts +++ b/clients/admin-ui/src/features/privacy-assessments/constants.ts @@ -60,7 +60,7 @@ export const FREQUENCY_OPTIONS = [ export const SOURCE_TYPE_LABELS: Record = { system: "System", - privacy_declaration: "Privacy declaration", + privacy_declaration: "Data uses", data_category: "Data category", data_use: "Data use", data_subject: "Data subject", @@ -68,13 +68,3 @@ export const SOURCE_TYPE_LABELS: Record = { data_flow: "Data flow", connection: "Connection", }; - -export const FIELD_NAME_LABELS: Record = { - name: "Name", - description: "Description", - data_use: "Data use", - data_categories: "Data categories", - data_subjects: "Data subjects", - retention_period: "Retention period", - third_parties: "Third parties", -}; diff --git a/clients/admin-ui/src/features/privacy-assessments/utils.ts b/clients/admin-ui/src/features/privacy-assessments/utils.ts index de0308d16dc..ef0c2b8c685 100644 --- a/clients/admin-ui/src/features/privacy-assessments/utils.ts +++ b/clients/admin-ui/src/features/privacy-assessments/utils.ts @@ -1,4 +1,6 @@ -import { FIELD_NAME_LABELS, SOURCE_TYPE_LABELS } from "./constants"; +import { formatFieldName } from "~/features/common/utils"; + +import { SOURCE_TYPE_LABELS } from "./constants"; import type { AssessmentTaskResponse, EvidenceItem } from "./types"; export const formatSystems = (task: AssessmentTaskResponse | null): string => { @@ -57,8 +59,6 @@ export const filterEvidence = ( (SOURCE_TYPE_LABELS[item.source_type] ?? item.source_type) .toLowerCase() .includes(lower) || - (FIELD_NAME_LABELS[item.field_name] ?? item.field_name.replace(/_/g, " ")) - .toLowerCase() - .includes(lower), + formatFieldName(item.field_name).toLowerCase().includes(lower), ); };