Окно создания восстанавливается после F5 вместе с черновиком
usePersistedOpen хранит в localStorage признак «модалка создания открыта» для типов заявок, доступа к заявкам, маршрутов и шагов маршрута (ключ шага — по id маршрута). После F5 окно открывается снова с полями из черновика; любое закрытие сбрасывает признак, а сам черновик остаётся до сохранения или «Очистить». Редактирование не восстанавливается. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ import { blockIndexOf, blockRanges, markParallel, withOrdersFrom } from '../../u
|
||||
import { reportError } from '../../utils/errors';
|
||||
import { useRouteSteps } from '../../hooks/useRouteSteps';
|
||||
import { useDeleteTarget } from '../../hooks/useDeleteTarget';
|
||||
import { usePersistedOpen } from '../../hooks/usePersistedOpen';
|
||||
import { usePortalEmployees } from '../../hooks/usePortalEmployees';
|
||||
import { usePortalDictionaries } from '../../hooks/usePortalDictionaries';
|
||||
import {
|
||||
@@ -53,7 +54,14 @@ export const RouteStepsScreen: React.FC<IRouteStepsScreenProps> = ({ api, route,
|
||||
const requestTypeName = requestType?.name ?? `#${route.requestTypeId}`;
|
||||
|
||||
const [editing, setEditing] = React.useState<TemplateRouteStep | undefined>();
|
||||
// showForm — только редактирование; окно создания восстанавливается после F5 (usePersistedOpen),
|
||||
// ключ свой у каждого маршрута — как и у черновика (см. RouteStepFormModal).
|
||||
const [showForm, setShowForm] = React.useState(false);
|
||||
const createOpen = usePersistedOpen(`approvalAdmin.draftOpen.routeStep.${route.id}`);
|
||||
const closeForm = (): void => {
|
||||
setShowForm(false);
|
||||
createOpen.close();
|
||||
};
|
||||
|
||||
const deleteTarget = useDeleteTarget<TemplateRouteStep>(
|
||||
item => api.templateRouteSteps.remove(route.id, item.id),
|
||||
@@ -71,11 +79,13 @@ export const RouteStepsScreen: React.FC<IRouteStepsScreenProps> = ({ api, route,
|
||||
|
||||
const openCreate = (): void => {
|
||||
setEditing(undefined);
|
||||
setShowForm(true);
|
||||
setShowForm(false);
|
||||
createOpen.open();
|
||||
};
|
||||
|
||||
const openEdit = (item: TemplateRouteStep): void => {
|
||||
setEditing(item);
|
||||
createOpen.close();
|
||||
setShowForm(true);
|
||||
};
|
||||
|
||||
@@ -278,7 +288,7 @@ export const RouteStepsScreen: React.FC<IRouteStepsScreenProps> = ({ api, route,
|
||||
</div>
|
||||
)}
|
||||
|
||||
{showForm && (
|
||||
{(showForm || createOpen.isOpen) && (
|
||||
<RouteStepFormModal
|
||||
// Undefined, если у маршрута компания не задана (запасной маршрут,
|
||||
// применяется к любой компании инициатора) — тогда подсказка
|
||||
@@ -293,7 +303,7 @@ export const RouteStepsScreen: React.FC<IRouteStepsScreenProps> = ({ api, route,
|
||||
employees={employees.items}
|
||||
employeesLoading={employees.isLoading}
|
||||
onSaved={handleSaved}
|
||||
onClose={() => setShowForm(false)}
|
||||
onClose={closeForm}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user