Files
portal/app/resources/js/lib/advertising/humanizeCreativeErrors.ts
T
Дмитрий dc654167e5 feat(реклама яндекс): живые проверки и человечные ошибки в форме объявления
Подключил порт-модули лимитов (creativeLimits/urlRule/imageRule/imageMeta)
к CreativeForm.vue: живые счётчики и ошибки длин заголовка/второго
заголовка/текста, живая проверка ссылки, проверка картинки до отправки
(imageError через readImageMeta+checkImage). Текст объявления стал
обязательным (звёздочка в лейбле + блок сабмита пустого текста).

Добавил humanizeCreativeErrors.ts (TDD, тест до кода) — заменяет
технические имена полей (title/title2/text/href/image) в сообщениях 422
от сервера на русские подписи; подключил в CreativeForm через
humanFieldErrors. Баг двоения v-file-input не трогал — отдельная задача.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-25 20:42:19 +03:00

23 lines
1.1 KiB
TypeScript

/**
* Очеловечивание сообщений 422 от B1 CreativeValidator для формы креатива.
* Сервер пишет технические имена полей движка (title/title2/text/href/image)
* в формах «Поле <field> …» / «… в поле <field> …» — заменяем их на русские
* подписи полей формы, остальной текст сообщения не трогаем.
*/
const FIELD_LABELS: Record<string, string> = {
title: 'Заголовок',
title2: 'Второй заголовок',
text: 'Текст объявления',
href: 'Ссылка на сайт',
image: 'Картинка',
};
/** Заменяет техническое имя поля после «Поле »/«поле » на закавыченную русскую подпись. */
export function humanizeMessage(msg: string): string {
return msg.replace(/(Поле|поле)\s+([a-zA-Z][a-zA-Z0-9_]*)/g, (match, poleWord: string, field: string) => {
const label = FIELD_LABELS[field];
return label ? `${poleWord} «${label}»` : match;
});
}