File: //home/vitanhod/barnabites.es/wp-content/themes/rishi/customizer/src/@components/InputNumber.jsx
import styled from "@emotion/styled";
import Icons from "./assets/Icons";
const NumberStyles = styled.div`
display: inline-flex;
background-color: var(--cw__background-color);
border-radius: var(--cw__border-radius);
input[type=number]{
padding: 4px !important;
border: none !important;
background: none !important;
text-align: center;
width: 40px !important;
-moz-appearance: textfield;
&::-webkit-outer-spin-button, &::-webkit-inner-spin-button{
-webkit-appearance: none;
}
}
button{
border: none;
background: none;
padding: 10px;
cursor: pointer;
display: flex;
align-items: center;
&:hover{
color: var(--cw__secondary-color);
}
&:disabled{
cursor: not-allowed;
pointer-event: none;
color: var(--cw__inactive-color);
opacity: .5;
}
}
`
const InputNumber = ({ value, min, max, onChange, step, ...rest }) => {
const checkType = typeof value === "number";
const updateStep = step || 1;
const handleDecrease = () => {
handleOnChange(+value - updateStep)
}
const handleIncrease = () => {
handleOnChange(+value + updateStep)
}
const handleOnChange = (val) => {
if (max && val > max) {
onChange(max)
} else if (min && val < min) {
onChange(min)
} else {
onChange(val)
}
}
return <NumberStyles className="cw__input-number-wrapper">
<button disabled={min >= value} type="button" onClick={handleDecrease}>
{Icons.minus}
</button>
<input
type="number"
value={value}
onChange={(e) => onChange(e.target.value)}
onBlur={(e) => handleOnChange(e.target.value)}
min={min}
max={max}
onWheel={e => e.target.blur()}
{...rest}
/>
<button disabled={max <= value} type="button" onClick={handleIncrease}>
{Icons.plus}
</button>
</NumberStyles>
}
export default InputNumber