import * as React from "react" type InputValue = string | number | null | undefined type CreateInputChangeHandlerOptions = { onChange?: React.ChangeEventHandler onValueChange?: (value: TValue) => void mapValue?: (rawValue: string, event: React.ChangeEvent) => TValue } function getInputValue(value: InputValue) { return value == null ? "" : String(value) } function setInputElementValue( event: React.ChangeEvent, value: string ) { event.target.value = value event.currentTarget.value = value } function createInputChangeHandler({ onChange, onValueChange, mapValue, }: CreateInputChangeHandlerOptions) { return (event: React.ChangeEvent) => { onChange?.(event) if (!onValueChange) return const rawValue = event.target.value const nextValue = mapValue ? mapValue(rawValue, event) : (rawValue as TValue) onValueChange(nextValue) } } export { createInputChangeHandler, getInputValue, setInputElementValue }