Нет, не ОК. У тебя работает все, только потому что ты каждый раз передаешь mashroomId. Но это-то не обязательное поле. И что будет, если его не передать? Правильно, ошибка:
Потому что ты в резолвере пишешь "Подключи сюда гриб", а призма в ответ "А какой именно? Идентификатор-то не указан. Я мухожук".
Обрати внимание в нем на указанный тип Prisma.PostCreateInput. Если его не указать (а просто создать переменную с заданным объектом-свойством), то ты не сможешь ниже по условию добавить в него дополнительное свойство (TypeScript не позволит, потому что тип изначальной переменной будет ограничен ее заданным значением).
Суть в том, что в селект ты в качестве value передаешь не текстовый айдишник, а сам объект Option. На onChange и устанавливается не текстовый id, а целиком объект. Вот и косяк. Решение: писать свой обработчик onChange.
/**
* Выбор гриба
*/const onChangeMashroom =useCallback((option: Option |null)=>{/**
* Устанавливаем значение
*/setValue('mashroomId', option?.value ||undefined,{/**
* Эти параметры нужны, чтобы форма перевалидировалась
*/shouldDirty:true,shouldTouch:true,shouldValidate:true,})},[setValue])
Вот сейчас все корректно работает.
>> Коммит с --no-verify, так как не могу понять, чего TS ругается на options
Да, с TS там не все так просто. Селект (<select>) же в себе содержит множество опшенов (<option>), и в него надо передать заданный тип, плюс этот тип учитывать и в других местах. В общем, это темный лес. Я написал все и отправил ПР, надеюсь ты разберешься.