fix: делает "Предложение по улучшению" необязательным для жалобы, убирает дубль заголовка

Каждый вид обращения раньше показывал одинаковый набор обязательных полей.
getAppealFieldsConfig теперь описывает и видимость, и обязательность отдельно:
жалоба — предложение по-прежнему можно оставить, но требовать его как для
самостоятельного вида "Предложение" неверно. validateFeedback читает то же
правило, что и форма, — иначе одно поле могло бы требовать то, что другое
не показывает.

FormCard в FeedbackForm дублировал заголовок и подзаголовок PageShell — убран
(пустой title у ui-kit не создаёт строки, гэпа не остаётся).

Подсказка у переключателя "Обращение анонимное" разбита на две сноски (* и **),
как в исходной форме, а не слитный абзац.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 09:44:48 +05:00
parent 51339b3f9a
commit 05cd491769
6 changed files with 53 additions and 29 deletions
+24 -9
View File
@@ -45,27 +45,42 @@ export const KIND_OPTIONS: ISelectOption[] = [
{ value: 'other', label: 'Другое' }
];
/** Какие текстовые поля показываем для выбранного вида обращения. */
export interface IVisibleAppealFields {
situation: boolean;
suggestion: boolean;
/** Показывать поле или нет, и если показывать — обязательно ли оно. */
export interface IAppealFieldConfig {
visible: boolean;
required: boolean;
}
/** Настройка текстовых полей для выбранного вида обращения. */
export interface IAppealFieldsConfig {
situation: IAppealFieldConfig;
suggestion: IAppealFieldConfig;
}
/**
* Состав полей зависит от вида обращения:
* жалоба — что случилось и что предлагаете изменить;
* жалоба — обязательно описание, а предложение — на желание автора;
* предложение — только само предложение, «ситуации» ещё нет;
* другое — свободное описание, без предложения.
* Одно правило на форму и на валидацию, чтобы они не разошлись.
*/
export function getVisibleAppealFields(kind: AppealKind): IVisibleAppealFields {
export function getAppealFieldsConfig(kind: AppealKind): IAppealFieldsConfig {
switch (kind) {
case 'complaint':
return { situation: true, suggestion: true };
return {
situation: { visible: true, required: true },
suggestion: { visible: true, required: false }
};
case 'suggestion':
return { situation: false, suggestion: true };
return {
situation: { visible: false, required: false },
suggestion: { visible: true, required: true }
};
case 'other':
return { situation: true, suggestion: false };
return {
situation: { visible: true, required: true },
suggestion: { visible: false, required: false }
};
}
}