import {useEffect, useRef, useState} from "react"; import styled from 'styled-components/macro'; import {toast} from 'react-toastify'; const StyledInput= styled.input` position: absolute; font-size:1.2rem !important; font-weight:700 !important; text-align: center; padding: .5rem !important; `; const StyledInputControl=styled.button` padding: 0rem !important; justify-content: center !important; height:3.5rem !important; ` const StyledPass=styled.div` width: 0.65rem; height: 0.65rem; background: var(--header); border-radius: 50%; ` const MultiNumPassInput=({innerRef, ...props})=>{ const [values,setValues]=useState([]); const [focusIndex,setFocusIndex]=useState(-1); const {length,value,focus,onChange,onFinish,className}=props; const col=length<1?1:length; const inputRef = useRef(null); const btnRefs = useRef([]); useEffect(()=>{ initValues(); return ()=>{ } },[]); useEffect(()=>{ if (inputRef.current)inputRef.current.focus(); },[focusIndex]); useEffect(()=>{ if (focus){ if (values.length>0){ checkFocus(values); } } },[focus]) const initValues=()=>{ let values=[]; let initValues=[]; if (value!=null){ initValues=value.split(''); } for (let i = 0; i { // // console.log(inputRefs); // for (let i = 0; i { let fIndex=-1; for (let i = 0; i { let valueArr=values.slice(0); valueArr[index]=value; if (value!==""){ checkFocus(valueArr); } else { if (index==0){ valueArr=Array.from({ length: length }, (_, index) => ""); } } setValues(valueArr); if (onChange)onChange(index,value); } const renderContent=()=>{ return ( <> { values.map((value,index)=>{ return ( (btnRefs.current[index] = ref)} onClick={()=>{ setFocusIndex(index); }} type={"button"} key={index} className={`input-control ${value===""?className:''}`}> { !(focusIndex===index)?(<>):( { let text=e.target.value; handleChange(index,text) }} onFocus={()=>{ handleChange(index,""); }} onKeyDown={(e)=>{ if (e.keyCode === 8 || e.key === "Backspace") { if (focusIndex>0){ setFocusIndex(focusIndex-1); } } }} value={""} type={"number"} pattern="[0-9]*" /> ) } { value==null||value===""?(<>):() } ) }) } ) } return (
{renderContent()}
) } export default MultiNumPassInput;