Estoy tratando de validar algunos campos que son parte de mi matriz de campos. Tienen los mismos nombres, pero tienen un índice de matriz diferente.
<Select {...register(`documents.${index}.language`, { validate: (v) => getValues(v), })} sx={{ textAlign: 'center' }} > {availableLanguages ?.sort((a) => (a.name === 'pl' ? -1 : 1)) // sorting so pl is default value .map((language) => ( <option key={language.name} value={language.name}> {language.name.toUpperCase()} </option> ))} </Select>Quiero validar obteniendo todos los valores de idioma y verificar si todos son únicos.
La matriz de salida crea un objeto para cada campo que el usuario ha decidido completar y devuelve un valor de idioma en ese objeto y algunos otros.
[{idioma: 'en'},{idioma: 'en'}, {idioma: 'br'}]
Quiero validar esto, preferiblemente antes de enviar, lo que significa que tendría que hacerse en la función de validación del campo.
De otra manera, también podría validarlo al enviarlo, sin embargo, tampoco estoy seguro de cómo hacerlo de manera eficiente.
Para cualquier persona en el futuro, esta es la forma en que he podido realizar esta validación. Un bucle for simple, hay otras formas, pero no obtienen activamente el valor del campo a menos que se mantengan en el estado.
<Select {...register(`documents.${index}.language`, { validate: (v) => { for (let x = 0; x < index; x++) { if (v === getValues(`documents.${x}.language`)) return false; } }, })} sx={{ textAlign: 'center' }} > {sortLanguages(availableLanguages).map((language) => ( <option key={language.name as string} value={language.name as string}> {language.name.toUpperCase()} </option> ))} </Select>