diff --git a/src/services/agents.service.ts b/src/services/agents.service.ts index 049ba6f..242619a 100644 --- a/src/services/agents.service.ts +++ b/src/services/agents.service.ts @@ -62,6 +62,7 @@ export interface FieldValueResponse { sectionSlug: string; sectionName: string; value: unknown; + valueLabel?: unknown; } export interface GetFieldValuesResponse { diff --git a/src/utils/profileDataMapper.ts b/src/utils/profileDataMapper.ts index ca73f87..d0d72f7 100644 --- a/src/utils/profileDataMapper.ts +++ b/src/utils/profileDataMapper.ts @@ -376,13 +376,24 @@ function getFieldIcon(fieldSlug: string): string { function valueToStringArray(value: unknown): string[] { if (!value) return []; + // Format snake_case values to Title Case when they look like raw keys + // (labels from backend already have spaces, so this only affects unresolved values) + const formatIfSnakeCase = (s: string): string => { + const trimmed = s.trim(); + // If it contains underscores and only letters/digits, treat as snake_case + if (/^[a-z0-9]+(_[a-z0-9]+)+$/i.test(trimmed)) { + return formatSnakeCaseToTitleCase(trimmed); + } + return trimmed; + }; + if (Array.isArray(value)) { // Deduplicate values - return [...new Set(value.map(v => String(v)).filter(v => v.trim() !== ''))]; + return [...new Set(value.map(v => formatIfSnakeCase(String(v))).filter(v => v !== ''))]; } if (typeof value === 'string' && value.trim()) { - return [value]; + return [formatIfSnakeCase(value)]; } if (typeof value === 'number' || typeof value === 'boolean') { @@ -408,7 +419,10 @@ export function mapFieldValuesToSpecializationFields(fieldValues: FieldValueResp const seenSlugs = new Set(); for (const field of specializationFields) { - const { fieldSlug, fieldName, value } = field; + const { fieldSlug, fieldName, value, valueLabel } = field; + + // Prefer resolved labels from backend; fallback to raw value + const displayValue = valueLabel ?? value; // Skip if no field info or no value if (!fieldSlug || !fieldName) continue; @@ -417,7 +431,7 @@ export function mapFieldValuesToSpecializationFields(fieldValues: FieldValueResp if (seenSlugs.has(fieldSlug)) continue; seenSlugs.add(fieldSlug); - const values = valueToStringArray(value); + const values = valueToStringArray(displayValue); if (values.length === 0) continue; fields.push({