Como eu valido um campo de imagem no next?
image: z
.instanceof(FileList)
.transform((list) => list.item(0)),
Tentei deste modo, mas diz que FileList é indefinido pois só existe no ambiente do navegador.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Como eu valido um campo de imagem no next?
image: z
.instanceof(FileList)
.transform((list) => list.item(0)),
Tentei deste modo, mas diz que FileList é indefinido pois só existe no ambiente do navegador.
Oi Jose, tudo bem?
Pelo que entendi, você está tentando validar um campo de imagem com o Next.js e Zod, mas está enfrentando problemas porque o FileList é indefinido fora do ambiente do navegador.
Isso ocorre porque o Next.js é uma estrutura de aplicativo da web baseada em React que é renderizada no servidor. Portanto, o objeto FileList, que é uma API da web fornecida pelos navegadores, não está disponível no ambiente de renderização do servidor.
Uma abordagem possível para contornar isso seria verificar se o objeto FileList está disponível antes de usá-lo. Você pode fazer isso adicionando uma condição para verificar se o tipo 'FileList' existe. Se existir, você pode prosseguir com a validação, caso contrário, você pode retornar um valor padrão ou lançar um erro.
Aqui está um exemplo de como você pode fazer isso:
image: z
.instanceof(typeof FileList !== 'undefined' ? FileList : Object)
.transform((list) => list.item(0)),
Neste exemplo, se FileList estiver disponível, ele será usado para a validação. Se não estiver disponível (ou seja, se estivermos no ambiente do servidor), Object será usado em vez disso. Isso evitará o erro de FileList indefinido.
Por favor, note que essa é apenas uma solução potencial e pode não ser perfeita para o seu caso específico. A melhor solução dependerá dos detalhes específicos do seu aplicativo e dos requisitos de validação.
Espero ter ajudado.
Um abraço e bons estudos.
Muito obrigado, pela resposta!