From 0959230cee054877116e0d4d29585b506d183786 Mon Sep 17 00:00:00 2001 From: Ranjeet2063 Date: Sat, 3 Oct 2026 01:42:26 +0545 Subject: [PATCH] refactor(types): replace 'any' types with explicit types in formUtils.ts Closes #1359 --- src/utils/formUtils.ts | 43 ++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/utils/formUtils.ts b/src/utils/formUtils.ts index dd2d91f5..09bd5180 100644 --- a/src/utils/formUtils.ts +++ b/src/utils/formUtils.ts @@ -94,7 +94,7 @@ export const ValidationRules = { }), custom: ( - validator: (value: any, formState: FormState) => boolean, + validator: (value: unknown, formState: FormState) => boolean, message = 'Validation failed', ): ValidationRule => ({ type: 'custom', @@ -106,8 +106,10 @@ export const ValidationRules = { /** * Extract form values from FormState */ -export function getFormValues(formState: FormState): Record { - return { ...formState.values }; +export function getFormValues = Record>( + formState: FormState, +): T { + return { ...formState.values } as T; } /** @@ -160,22 +162,22 @@ export function getTouchedFields(formState: FormState): string[] { /** * Format field value for display */ -export function formatFieldValue(value: any, type: FieldType): string { +export function formatFieldValue(value: unknown, type: FieldType): string { if (value === null || value === undefined) { return ''; } switch (type) { case 'date': - return value instanceof Date ? value.toLocaleDateString() : value; + return value instanceof Date ? value.toLocaleDateString() : String(value); case 'time': - return value instanceof Date ? value.toLocaleTimeString() : value; + return value instanceof Date ? value.toLocaleTimeString() : String(value); case 'datetime-local': - return value instanceof Date ? value.toLocaleString() : value; + return value instanceof Date ? value.toLocaleString() : String(value); case 'checkbox': return value ? 'Yes' : 'No'; case 'number': - return typeof value === 'number' ? value.toString() : value; + return typeof value === 'number' ? value.toString() : String(value); default: return String(value); } @@ -184,7 +186,7 @@ export function formatFieldValue(value: any, type: FieldType): string { /** * Parse field value from string */ -export function parseFieldValue(value: string, type: FieldType): any { +export function parseFieldValue(value: string, type: FieldType): string | number | boolean | Date { if (!value) { return type === 'checkbox' ? false : ''; } @@ -235,12 +237,12 @@ export function isValidPhone(phone: string): boolean { /** * Sanitize form values (remove empty strings, null, undefined) */ -export function sanitizeFormValues(values: Record): Record { - const sanitized: Record = {}; +export function sanitizeFormValues>(values: T): Partial { + const sanitized: Partial = {}; Object.entries(values).forEach(([key, value]) => { if (value !== null && value !== undefined && value !== '') { - sanitized[key] = value; + (sanitized as Record)[key] = value; } }); @@ -313,14 +315,14 @@ export function getFieldType(fieldId: string, config: FormConfiguration): FieldT /** * Create form data for submission (FormData object) */ -export function createFormData(values: Record): FormData { +export function createFormData(values: Record): FormData { const formData = new FormData(); Object.entries(values).forEach(([key, value]) => { if (value instanceof File) { formData.append(key, value); } else if (Array.isArray(value)) { - value.forEach((item) => formData.append(key, item)); + value.forEach((item) => formData.append(key, String(item))); } else if (value !== null && value !== undefined) { formData.append(key, String(value)); } @@ -332,15 +334,16 @@ export function createFormData(values: Record): FormData { /** * Convert FormData to plain object */ -export function formDataToObject(formData: FormData): Record { - const obj: Record = {}; +export function formDataToObject(formData: FormData): Record { + const obj: Record = {}; formData.forEach((value, key) => { - if (obj[key]) { - if (Array.isArray(obj[key])) { - obj[key].push(value); + const existing = obj[key]; + if (existing !== undefined) { + if (Array.isArray(existing)) { + existing.push(value); } else { - obj[key] = [obj[key], value]; + obj[key] = [existing, value]; } } else { obj[key] = value;