Opa, boa noite, eu fiz uma função aqui de verificar duplicados e coloquei, aproveitei e coloquei no componente uma mensagem diferente pra facilitar a visualização do teste, acho que tá tudo ok, da uma olhada no código
Segue o fork que fiz do teu codesandbox
codesandbox
Olha se era isso o plano
const dataTableValidate = () => {
const newData = dataSource.map((data, index) => {
const isValisCPF = cpf.isValid(data.CPF);
const isValidCNPJ = cnpj.isValid(data.CNPJ);
//Funções adicionadas pra testar a duplicidade de CPF
const isDuplicatedCPF = dataSource.some((d) => {
//if pra evitar que o teste seja feito no mesmo objeto
if (d.key === data.key) {
return false
}
return d.CPF === data.CPF;
});
const isDuplicatedCNPJ = dataSource.some((d) => {
if (d.key === data.key) {
return false
}
return d.CNPJ === data.CNPJ;
});
//Aqui eu fui concatenando as mensagens de erro pra enviar no componente
let message = isValisCPF ? "" : "CPF Inválido";
message = isValidCNPJ ? message + "" : message + "CNPJ Inválido";
message = isDuplicatedCPF ? message + "CPF Duplicado" : message + "";
message = isDuplicatedCNPJ ? message + "CNPJ Duplicado" : message + "";
//Aqui faz apenas um teste geral para caso algum teste anterior tenha retornado erro
// é salvo o componente TableError e a mensagem de erro concatenada
let messageError =
!isValisCPF || !isValidCNPJ || isDuplicatedCPF || isDuplicatedCNPJ
?
(<TableError messageError={message} />)
:
("");
return { ...data, situacao: messageError };
});
setDataSource(newData);
};