TransWikia.com

Yup mixed não funciona notRequired ou nullable

Stack Overflow em Português Asked by Braga Us on January 2, 2022

Boa tarde, estou validando os dados de um formulário com Yup e preciso que apenas imagens possam ser carregadas, então usei o seguinte código:

// formato que pode ser upado no input de email
const formatosSuportados = [
    "image/jpg",
    "image/jpeg",
    "image/gif",
    "image/png"
];    

// Validação das entradas
const EsquemaDeValidacao = Yup.object().shape({
    email: Yup.string().email().required('enter email'),
    corpo: Yup.string().max(500, "Too Long!").required('enter any message'),
    arquivo: Yup.mixed().nullable().test('fileFormat', 'Unsupported Format', arquivo => 
        arquivo && formatosSuportados.includes(arquivo.type)
    )
})  

O problema é que o arquivo está sendo obrigatório para eu conseguir enviar o email. Não dispara erro algum, apenas não envia se não tem nenhum arquivo upado.

Eu já tentei com nullable e notRequired, existe alguma outra forma de fazer isso?

One Answer

Essa expressão sempre vai dar falso se não contiver nenhum arquivo selecionado, então, acredito uma lógica bem básica seria testar se o arquivo não existe, retorna true, se ele existir retornar o outro teste, exemplo:

arquivo => { 
    if (!arquivo) { 
        return true;
    }
    return formatosSuportados.includes(arquivo.type) 
} 

isso vai solucionar o seu problema.

Answered by novic on January 2, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP