export const numberValue = (value?: number) => { if (value !== undefined) { return isNaN(value) ? '' : value.toString(); } return ''; }; export const extractEventValue = (event: React.ChangeEvent) => { switch (event.target.type) { case 'number': return event.target.valueAsNumber; case 'checkbox': return event.target.checked; default: return event.target.value; } }; type UpdateEntity = (state: (prevState: Readonly) => S) => void; export const updateValue = (updateEntity: UpdateEntity) => (event: React.ChangeEvent) => { updateEntity((prevState) => ({ ...prevState, [event.target.name]: extractEventValue(event) })); }; export const updateValueDirty = ( origData, dirtyFlags: string[], setDirtyFlags: React.Dispatch>, updateDataValue: (unknown) => void ) => (event: React.ChangeEvent) => { const updated_value = extractEventValue(event); const name = event.target.name; updateDataValue((prevState: unknown) => ({ ...(prevState as Record), [name]: updated_value })); const arr: string[] = dirtyFlags; if ((origData as Record)[name] !== updated_value) { if (!arr.includes(name)) { arr.push(name); } } else { const startIndex = arr.indexOf(name); if (startIndex !== -1) { arr.splice(startIndex, 1); } } setDirtyFlags(arr); };