import { confirmModal } from '@tnsu/ui-kit'; // Есть ли в открытой форме «Новая заявка» правки, которые ещё не сохранены. // // Нужно, потому что раздел «Новая заявка» держится смонтированным при // переключении вкладок (см. RequestPortal.tsx), и единственное, что реально // пересоздаёт форму, — переход «создать на основе». Перед ним и спрашиваем, // но только если терять действительно есть что. // // Флаг ставится по факту пользовательского ввода (событие input/change из // раздела формы — см. RequestPortal), а снимается после сохранения: черновик // тоже считается сохранением, форма зовёт onSaved и в обоих случаях // («Сохранить черновик» и «Отправить»), см. forms/*/Form.tsx. let dirty = false; export function markFormDirty(): void { dirty = true; } export function markFormClean(): void { dirty = false; } export function hasUnsavedFormChanges(): boolean { return dirty; } // Спросить подтверждение, если несохранённые правки есть. Промис резолвится в // true — можно продолжать (правок нет либо пользователь согласился их потерять), // false — отменить действие. Асинхронно, потому что показываем модалку в стиле // портала (см. shared/ui/ConfirmDialog) вместо нативного window.confirm. export function confirmDiscardFormChanges(): Promise { if (!dirty) return Promise.resolve(true); return confirmModal({ title: 'Несохранённые изменения', message: 'В открытой форме «Новая заявка» есть несохранённые изменения — они будут потеряны. Продолжить?', confirmText: 'Да, продолжить', cancelText: 'Остаться', danger: true, }); }