Да циклическая проблема зависимости
Я пытаюсь проверить, что одно из трех полей значения начального состояния были изменены. Если ни один из них не был изменен, выведите ошибку. Одним из полей является изображение, поэтому я использую скрытое поле для хранения данных изображения при отправке. Я новичок в Yup, поэтому все еще пытаюсь взломать мой путь вокруг места. Я перепробовал много вещей, хотя не могу заставить его работать. Теперь у меня возникла проблема циклической зависимости. Любая помощь или руководство действительно приветствуются.
SignupSchema = Yup.object().shape({
hidden: Yup.mixed().when(['tagText', 'tagName'], {
is: (tagText, tagName) => !tagText && !tagName,
then: Yup.string().test('anything-different-one', 'There are no changes to save, please make sure you have changed at least one field', (value) => {
if (value === undefined) return true;
if (this.state.initialFaceSelected.unified !== value.hidden.unified) return true;
return false;
})
})
.required("Please select an emoji first!"),
tagName: Yup.string().when(['tagText', 'hidden'], {
is: (tagText, hidden) => !tagText && !hidden,
then: Yup.string().test('anything-different-two', 'There are no changes to save, please make sure you have changed at least one field', (value) => {
if (value === undefined) return true;
if (this.state.initialFaceSelected.tagName !== value.tagName) return true;
return false;
})
})
.min(2, "Too Short!")
.max(15, "Too Long!")
.test('value-name-exists', '${value} tag name already exists, please choose another', (value) => {
if (value === undefined) return true;
let valLower = this.props.tags.data.map((tag) => {
return tag.tagName.toLowerCase();
});
let valValue = valLower.map((tag) => {
return tag === value.toLowerCase()
});
if (valValue.indexOf(true) >= 0 && value !== this.initialValues.tagName) return false;
return true;
})
.required("Required"),
tagText: Yup.string().when(['hidden', 'tagName'], {
is: (hidden, tagName) => !hidden && !tagName,
then: Yup.string().test('anything-different-three', 'There are no changes to save, please make sure you have changed at least one field', (value) => {
if (value === undefined) return true;
if (this.state.initialFaceSelected.tagText !== value.tagText) return true;
return false;
})
})
.test('value-text-exists', '${value} tag text already exists, please choose another', (value) => {
if (value === undefined) return true;
let valLower = this.props.tags.data.map((tag) => {
return tag.tagText.toLowerCase();
});
let valValue = valLower.map((tag) => {
return tag === value.toLowerCase()
});
if (valValue.indexOf(true) >= 0 && value !== this.initialValues.tagText) return false;
return true;
})
.min(2, "Too Short!")
.max(15, "Too Long!")
.required("Required")
},[['tagName', 'tagText'], ['tagText', 'hidden'], ['hidden', 'tagName']]);