Mesmo depois que acrescentei o required
no campo de CEP a mensagem de erro "CEP inválido" não some depois que eu coloco um CEP válido.
export default function CadastroEndereco() {
const { setLoading, setClienteCriado } = useDataContext();
const {
formState: { errors },
register,
handleSubmit,
setError,
setValue,
watch,
} = useForm<IEndereco>();
const cepDigitado = watch('cep');
const navegarPara = useNavigate();
function aoSubmeter(data: IEndereco) {
const endereco = {...data}
setClienteCriado(prev => ({ ...prev, endereco }));
navegarPara('/sucesso');
}
async function buscaCep(cep: string) {
if (!cep) {
setError('cep', {
type: 'manual',
message: 'CEP inválido',
});
return;
}
setLoading(true);
const endPoint = `https://viacep.com.br/ws/${cep}/json/`;
try {
const resposta = await fetch(endPoint);
if (resposta.ok) {
const dados = await resposta.json();
setValue('rua', dados.logradouro);
setValue('bairro', dados.bairro);
setValue('localidade', `${dados.localidade}, ${dados.uf}`);
} else {
throw new Error(
`Erro na requisição do CEP: ${resposta.status} ${resposta.statusText}`,
);
}
} catch (error) {
console.error('Erro ao buscar CEP', error);
} finally {
setTimeout(() => setLoading(false), 1000);
}
}
return (
<>
<Titulo>Agora, mais alguns dados sobre você:</Titulo>
<Formulario onSubmit={handleSubmit(aoSubmeter)}>
<Fieldset>
<Label htmlFor='campo-cep'>CEP</Label>
<Input
id='campo-cep'
placeholder='Insira seu CEP'
type='text'
{...register('cep', {
required: 'Este campo é obrigatório'
})}
$error={!!errors.cep}
onBlur={() => buscaCep(cepDigitado)}
/>
{errors.cep && (
<ErrorMessage>{errors.cep.message}</ErrorMessage>
)}
</Fieldset>
(...)
O que posso ter feito de errado?