nej-react-utils/Form/cleanEmptyStrings.ts
2026-08-25 13:27:50 +02:00

37 lines
1.1 KiB
TypeScript

/**
* Recursively cleans empty string values ("" or whitespace only) to null in form submission payloads,
* unless explicitly exempted by sendEmpty configuration.
*/
export function cleanEmptyStrings<T>(values: T, sendEmptyKeys?: Set<string> | string[]): T {
const exemptions = sendEmptyKeys instanceof Set ? sendEmptyKeys : new Set(sendEmptyKeys || []);
function clean(val: any, currentKey?: string): any {
if (val === null || val === undefined) {
return null;
}
if (typeof val === "string") {
if (val.trim() === "") {
return currentKey && exemptions.has(currentKey) ? "" : null;
}
return val;
}
if (Array.isArray(val)) {
return val.map((item) => clean(item, currentKey));
}
if (typeof val === "object" && !(val instanceof Date) && !(val instanceof Blob) && !(val instanceof File)) {
const cleanedObj: Record<string, any> = {};
for (const [k, v] of Object.entries(val)) {
cleanedObj[k] = clean(v, k);
}
return cleanedObj;
}
return val;
}
return clean(values);
}