Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions clients/admin-ui/src/features/common/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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, " "));
};
Original file line number Diff line number Diff line change
@@ -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";

Expand All @@ -18,11 +18,7 @@ export const EvidenceCardGroup = ({ items }: EvidenceCardGroupProps) => (
{SOURCE_TYPE_LABELS[item.source_type] ?? item.source_type}
</Text>
<Text className={`mb-2 block ${styles.cardValue}`}>
<Text type="secondary">
{FIELD_NAME_LABELS[item.field_name] ??
item.field_name.replace(/_/g, " ")}
:{" "}
</Text>
<Text type="secondary">{formatFieldName(item.field_name)}: </Text>
{item.value}
</Text>
<Text type="secondary" size="sm" className="block">
Expand Down
12 changes: 1 addition & 11 deletions clients/admin-ui/src/features/privacy-assessments/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,21 +60,11 @@ export const FREQUENCY_OPTIONS = [

export const SOURCE_TYPE_LABELS: Record<string, string> = {
system: "System",
privacy_declaration: "Privacy declaration",
privacy_declaration: "Data uses",
data_category: "Data category",
data_use: "Data use",
data_subject: "Data subject",
dataset: "Dataset",
data_flow: "Data flow",
connection: "Connection",
};

export const FIELD_NAME_LABELS: Record<string, string> = {
name: "Name",
description: "Description",
data_use: "Data use",
data_categories: "Data categories",
data_subjects: "Data subjects",
retention_period: "Retention period",
third_parties: "Third parties",
};
8 changes: 4 additions & 4 deletions clients/admin-ui/src/features/privacy-assessments/utils.ts
Original file line number Diff line number Diff line change
@@ -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 => {
Expand Down Expand Up @@ -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),
);
};
Loading