scriptguard-library
Version:
A secure and customizable text input field library for React.
41 lines (33 loc) • 989 B
text/typescript
import { useState } from "react";
const sanitizeValue = (value: string): string => {
const temp = document.createElement("div");
temp.textContent = value.trim();
return temp.innerHTML;
};
export function useSanitizedForm<T extends Record<string, string>>(initialState: T) {
const [values, setValues] = useState<T>(initialState);
const setSanitizedValue = (key: keyof T, value: string) => {
setValues((prev) => ({
...prev,
[key]: sanitizeValue(value),
}));
};
const handleChange =
(key: keyof T) =>
(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
setSanitizedValue(key, e.target.value);
};
const sanitizeAll = (): T => {
const sanitized: T = Object.keys(values).reduce((acc, key) => {
acc[key as keyof T] = sanitizeValue(values[key]) as T[keyof T];
return acc;
}, {} as T);
return sanitized;
};
return {
values,
setSanitizedValue,
sanitizeAll,
handleChange,
};
}