Персист модалок: черновики, восстановление после F5, предупреждение при выходе #30

Merged
gorbenko.pavel merged 7 commits from feature/form-drafts into main 2026-10-19 04:46:16 +00:00

7 Commits

Author SHA1 Message Date
gorbenko.pavel 2eccd304bb Краткие тексты предупреждений: «Не найден руководитель направления»
Tests / frontend-test (pull_request) Successful in 1m37s
Tests / backend-test (pull_request) Successful in 2m22s
Вместо длинных пояснений — короткие фразы: «Не найден руководитель
направления.», «В проекте не найден руководитель проекта.», «Не проставлен
директор Tansu.». Для роли «Безопасность» — «сотрудник службы
безопасности», чтобы не получилось «найден безопасность».

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 10:44:21 +05:00
gorbenko.pavel 547c51ca3c Предупреждения резолва маршрута — на русском вместо имён enum
Tests / frontend-test (pull_request) Successful in 1m32s
Tests / backend-test (pull_request) Successful in 1m39s
В сообщениях «не найден руководитель типа DirectionHead» и в конфликте
ролей шага пользователь видел имена enum'ов. Теперь везде русские
названия из общего справочника StepLabels (его же использует выгрузка
маршрутов): «Не найден руководитель «Руководитель направления»: не
указан у инициатора в справочнике сотрудников». Для директора Tansu и
управляющего директора, которые берутся из настроек сервиса, —
«Не проставлен «…»: email не задан в настройках сервиса». Так же
исправлены ошибки о дубле шага с типом руководителя.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 10:39:55 +05:00
gorbenko.pavel 08dc484d03 Окно создания восстанавливается после F5 вместе с черновиком
Tests / frontend-test (pull_request) Successful in 1m30s
Tests / backend-test (pull_request) Successful in 1m46s
usePersistedOpen хранит в localStorage признак «модалка создания открыта»
для типов заявок, доступа к заявкам, маршрутов и шагов маршрута (ключ
шага — по id маршрута). После F5 окно открывается снова с полями из
черновика; любое закрытие сбрасывает признак, а сам черновик остаётся до
сохранения или «Очистить». Редактирование не восстанавливается.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 10:30:42 +05:00
gorbenko.pavel 6deebf9507 Старая запись в localStorage приводится к форме текущей формы
Tests / frontend-test (pull_request) Successful in 1m32s
Tests / backend-test (pull_request) Successful in 2m13s
Раньше сохранённое значение только мёржилось с дефолтом: удалённые поля
оставались в состоянии, а значение другого типа (или null вместо
объекта) роняло рендер. coerceStored отбрасывает лишние ключи и заменяет
значения не того типа дефолтом; покрыто тестами.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 10:16:36 +05:00
gorbenko.pavel 872686e855 Предупреждение при выходе из формы редактирования с несохранёнными правками
Tests / frontend-test (pull_request) Successful in 1m31s
Tests / backend-test (pull_request) Successful in 1m35s
FormModal получил isDirty: если в форме редактирования существующей
записи что-то изменили, крестик, «Отмена» и клик мимо окна сначала
показывают диалог «Закрыть без сохранения?». Подключено к редактированию
типа заявки, маршрута, шага маршрута и согласующего в заявке. Формы
создания не затронуты — их черновик и так сохраняется.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 10:02:40 +05:00
gorbenko.pavel b94e6e60f5 Модалки рендерятся порталом в body поверх шапки SharePoint
Tests / frontend-test (pull_request) Successful in 1m31s
Tests / backend-test (pull_request) Successful in 1m38s
На живой странице оверлей модалки жил внутри канвы веб-части, чей
контекст наложения ниже шапки SharePoint: верх высокого окна (например,
«Новый шаг маршрута») уезжал под шапку. В workbench шапки нет, поэтому
там было незаметно. Теперь Modal и ConfirmDialog рендерят подложку через
ModalOverlay (портал в document.body) с z-index выше шапки; меню
выпадающих списков подняты над ним.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 09:41:53 +05:00
gorbenko.pavel 3d970bf461 Черновики форм создания сохраняются в localStorage
Tests / backend-test (pull_request) Successful in 1m35s
Tests / frontend-test (pull_request) Successful in 1m31s
Модалки по жёлтым кнопкам «Добавить» (типы заявок, доступ к заявкам,
маршруты, шаги маршрута) теряли введённое при случайном клике по
подложке. Теперь черновик живёт в localStorage (useFormDraft) и
переживает закрытие окна, «Отмену» и F5. Сбрасывается после успешного
сохранения или кнопкой «Очистить» в подвале модалки. Формы
редактирования не персистятся — всегда открываются с данными сервера.

Попутно убраны Sass-предупреждения mixed-decls в Card.module.scss.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:35:26 +05:00