test-crud
Version:
es una prueba acerca de como publicar un package name
86 lines (75 loc) • 2.12 kB
JSX
import React, { useEffect, useRef, useState } from 'react'
import { useFormikContext } from 'formik'
import NumericInput from '../inputs/textField/NumericInput'
function AppNumericInput({
name,
label,
prefix = '',
defaultValue = '',
onBlur = null,
customButton = null || <></>,
predefinido = '',
...rest
}) {
const [value, setValue] = useState(defaultValue)
const {
setFieldValue,
setFieldTouched,
errors,
touched,
values,
initialValues,
} = useFormikContext()
const [currentCaretPos, setCurrentCaretPos] = useState()
const inputRef = useRef()
useEffect(() => {
setValue(values[name])
setFieldValue(name, values[name])
if (defaultValue) {
setValue(defaultValue)
setFieldValue(name, defaultValue)
if (defaultValue == '0') {
setValue('')
setFieldValue(name, '')
}
}
}, [initialValues, defaultValue])
useEffect(() => {
if (predefinido && predefinido != '') {
setValue(predefinido)
setFieldValue(name, predefinido)
}
}, [predefinido])
useEffect(() => {
inputRef.current.selectionStart = currentCaretPos
inputRef.current.selectionEnd = currentCaretPos
}, [currentCaretPos])
return (
<div>
<NumericInput
value={value}
label={label}
onBlur={() => {
setFieldTouched(name)
if (onBlur) onBlur(value)
}}
onChange={(event) => {
setValue(event.target.value)
setFieldValue(name, event.target.value)
let newCaretPos = inputRef.current.selectionStart
setCurrentCaretPos(newCaretPos)
}}
touched={touched[name]}
error={touched[name] && errors[name] ? true : false}
helperText={touched[name] && errors[name] ? errors[name] : ''}
rightIcon={touched[name] && !errors[name] && 'fa-solid fa-circle-check'}
color={touched[name] && !errors[name] ? 'success' : ''}
inputRef={inputRef}
customButton={customButton}
prefix={prefix}
{...rest}
/>
</div>
)
}
export default AppNumericInput