import './InputComponent.css' import edit from './edit.svg' import { useEffect, useState } from "react"; import CurrencyInput from "react-currency-input-field"; import { useDispatch } from "react-redux"; import { calcSlice } from "../../store/reducers/calcSlice"; export const InputComponent = ({ value, name, min, max, inputClass, large }) => { const dispatch = useDispatch(); const { handleValue, handleTotal } = calcSlice.actions; const [valid, setValid] = useState(false); const [valueInput, setValueInput] = useState(value); useEffect(() => { setValueInput(value) }, [value]) const handleNumber = (number) => { if (!number) { return; } const num = Number(number.replace(/ /g, "")); console.log(num, "test"); return num; }; useEffect(() => { dispatch(handleTotal()); }, []); const handleTotalValues = (value, name) => { dispatch(handleValue({ name: name, value: value })); dispatch(handleTotal()); }; const handleState = (e) => { const { value, name } = e.target; setValueInput(value); handleTotalValues(value, name); handleStyle(); }; const handleValidity = (number) => { if (!(number < max && number > min && number !== 0)) { setValid(false); return false; } else { setValid(true); return true; } }; const handleOnValueChange = (value, name) => { const number = handleNumber(value); setValueInput(number); handleStyle(); setValid(false); if (!name) { return; } if (!value) { setValueInput(""); return; } if (!Number.isNaN(number)) { const validity = handleValidity(number); if (validity) { handleTotalValues(number, name); return; } else { return; } } }; const handleFocusLeft = (e) => { const { name, value } = e.target; const number = handleNumber(value); console.log(number, value, "valuie"); if (number === 0 && number === undefined) { handleTotalValues(min, name); return; } else { if (!valid) { if (!(number < max)) { handleTotalValues(max, name); setValueInput(max); return; } if (number <= min) { handleTotalValues(min, name); setValueInput(min); return; } } else { return; } } }; const handleStyle = () => { let width; if (valueInput < min) { return (width = "0%"); } width = ((valueInput - min) * 100) / (max - min) + "% 100%"; return width; }; return ( <>
handleFocusLeft(e)} onValueChange={(value, name) => handleOnValueChange(value, name)} /> edit/изменить
handleState(e)} >
{min} {max}
); };