feat: add valueLabel support and implement snake_case to Title Case formatting for profile field values

This commit is contained in:
pradeepkumar
2026-04-14 08:47:16 +05:30
parent 66b233159a
commit 1eccde73e3
2 changed files with 19 additions and 4 deletions

View File

@@ -62,6 +62,7 @@ export interface FieldValueResponse {
sectionSlug: string;
sectionName: string;
value: unknown;
valueLabel?: unknown;
}
export interface GetFieldValuesResponse {

View File

@@ -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<string>();
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({