Вместо длинных пояснений — короткие фразы: «Не найден руководитель
направления.», «В проекте не найден руководитель проекта.», «Не проставлен
директор Tansu.». Для роли «Безопасность» — «сотрудник службы
безопасности», чтобы не получилось «найден безопасность».
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
В сообщениях «не найден руководитель типа DirectionHead» и в конфликте
ролей шага пользователь видел имена enum'ов. Теперь везде русские
названия из общего справочника StepLabels (его же использует выгрузка
маршрутов): «Не найден руководитель «Руководитель направления»: не
указан у инициатора в справочнике сотрудников». Для директора Tansu и
управляющего директора, которые берутся из настроек сервиса, —
«Не проставлен «…»: email не задан в настройках сервиса». Так же
исправлены ошибки о дубле шага с типом руководителя.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
usePersistedOpen хранит в localStorage признак «модалка создания открыта»
для типов заявок, доступа к заявкам, маршрутов и шагов маршрута (ключ
шага — по id маршрута). После F5 окно открывается снова с полями из
черновика; любое закрытие сбрасывает признак, а сам черновик остаётся до
сохранения или «Очистить». Редактирование не восстанавливается.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Раньше сохранённое значение только мёржилось с дефолтом: удалённые поля
оставались в состоянии, а значение другого типа (или null вместо
объекта) роняло рендер. coerceStored отбрасывает лишние ключи и заменяет
значения не того типа дефолтом; покрыто тестами.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
FormModal получил isDirty: если в форме редактирования существующей
записи что-то изменили, крестик, «Отмена» и клик мимо окна сначала
показывают диалог «Закрыть без сохранения?». Подключено к редактированию
типа заявки, маршрута, шага маршрута и согласующего в заявке. Формы
создания не затронуты — их черновик и так сохраняется.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
На живой странице оверлей модалки жил внутри канвы веб-части, чей
контекст наложения ниже шапки SharePoint: верх высокого окна (например,
«Новый шаг маршрута») уезжал под шапку. В workbench шапки нет, поэтому
там было незаметно. Теперь Modal и ConfirmDialog рендерят подложку через
ModalOverlay (портал в document.body) с z-index выше шапки; меню
выпадающих списков подняты над ним.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Модалки по жёлтым кнопкам «Добавить» (типы заявок, доступ к заявкам,
маршруты, шаги маршрута) теряли введённое при случайном клике по
подложке. Теперь черновик живёт в localStorage (useFormDraft) и
переживает закрытие окна, «Отмену» и F5. Сбрасывается после успешного
сохранения или кнопкой «Очистить» в подвале модалки. Формы
редактирования не персистятся — всегда открываются с данными сервера.
Попутно убраны Sass-предупреждения mixed-decls в Card.module.scss.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>