Files
request-portal/src/webparts/requestPortal/shared/unsavedChanges.ts
T
Тимур Городецкий c98a665611
Tests / frontend-test (push) Successful in 4m11s
refactor: миграция форм на ui-kit, удаление локальных дублей
2026-08-14 11:09:11 +05:00

43 lines
2.3 KiB
TypeScript

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<boolean> {
if (!dirty) return Promise.resolve(true);
return confirmModal({
title: 'Несохранённые изменения',
message:
'В открытой форме «Новая заявка» есть несохранённые изменения — они будут потеряны. Продолжить?',
confirmText: 'Да, продолжить',
cancelText: 'Остаться',
danger: true,
});
}