Spaces:
Sleeping
Sleeping
import { useEffect } from "react"; | |
import { InputProps } from "./Input.interface"; | |
import "./Input.scss"; | |
const Input = ({ | |
name, | |
placeholder, | |
rules, | |
value = "", | |
onSetValue, | |
label, | |
error, | |
onSetError, | |
extra, | |
...props | |
}: InputProps) => { | |
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => { | |
if (props.type == "number") { | |
const { value, max, min } = event.target; | |
if (Number(value) > Number(max)) { | |
onSetValue(max); | |
} else if (Number(value) > Number(min)) { | |
onSetValue(value); | |
} else { | |
onSetValue(""); | |
} | |
} else { | |
onSetValue(event.target.value); | |
} | |
}; | |
const handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => { | |
if (props.type === "number") { | |
if (!/[0-9]/.test(event.key) && event.key !== "Backspace") { | |
event.preventDefault(); | |
} | |
} | |
}; | |
useEffect(() => { | |
if (value.length > 0) { | |
rules?.some((rule) => { | |
if (!rule.rule(value)) { | |
// console.log(value); | |
onSetError?.(rule.errorMessage); | |
return true; | |
} | |
// console.log(value); | |
onSetError?.(null); | |
return false; | |
}); | |
} | |
}, [onSetError, rules, value]); | |
return ( | |
<div className={"input_container"}> | |
{label} | |
<div className="with_icon_container"> | |
<input | |
className={"input"} | |
name={name} | |
placeholder={placeholder} | |
value={value} | |
onChange={handleChange} | |
onKeyPress={handleKeyPress} | |
{...props} | |
/> | |
{extra} | |
</div> | |
{error && <div className={"error"}>{error}</div>} | |
</div> | |
); | |
}; | |
export default Input; | |