Черновики форм создания сохраняются в 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>
This commit is contained in:
gorbenko.pavel
2026-10-15 17:35:26 +05:00
parent 0e6a7064d2
commit 3d970bf461
10 changed files with 150 additions and 23 deletions
@@ -2,6 +2,7 @@ import * as React from 'react';
import { Alert } from './Alert';
import { Button } from './Button';
import { Modal } from './Modal';
import styles from './Modal.module.scss';
import { texts } from '../../texts';
export interface IFormModalProps {
@@ -15,6 +16,12 @@ export interface IFormModalProps {
savingLabel?: string;
onSubmit: () => void;
onClose: () => void;
/**
* Сбросить черновик формы (см. useFormDraft). Кнопка «Очистить» показывается,
* только если передан и canReset — «Отмена» и клик мимо окна черновик не трогают.
*/
onReset?: () => void;
canReset?: boolean;
children: React.ReactNode;
}
@@ -30,6 +37,8 @@ export const FormModal: React.FC<IFormModalProps> = ({
savingLabel = texts.common.saving,
onSubmit,
onClose,
onReset,
canReset,
children
}) => (
<Modal
@@ -37,6 +46,11 @@ export const FormModal: React.FC<IFormModalProps> = ({
onClose={onClose}
footer={
<>
{onReset && canReset && (
<span className={styles.footerStart}>
<Button variant="ghost" icon="refresh" onClick={onReset} disabled={isSaving}>{texts.common.resetDraft}</Button>
</span>
)}
<Button variant="secondary" onClick={onClose} disabled={isSaving}>{texts.common.cancel}</Button>
<Button variant="accent" icon="check" onClick={onSubmit} disabled={isSaving}>
{isSaving ? savingLabel : submitLabel}