fix: черновик без маршрута планирует маршрут заново при открытии

У части черновиков не оказалось строк маршрута, и форма показывала пустую
матрицу: отправить такую заявку было некому. Теперь при открытии
черновика без строк маршрут планируется заново (loadRoutePhase), во всех
формах; поданные заявки по-прежнему читают записанные строки. Почему
строки пропали у первоначального случая — пока не выяснено.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-09 12:18:15 +05:00
parent b64ec76998
commit bbef3062f4
18 changed files with 247 additions and 176 deletions
@@ -23,6 +23,8 @@ import {
useMatrixEditor,
canEditExecutors,
getPlannedMatrix,
loadRoutePhase,
isOpenedRouteReady,
notifyActiveStep,
useRequestTypeId,
REQUEST_STATUS,
@@ -30,7 +32,6 @@ import {
IApproverToWrite,
unassignedStepMessage,
resolveWriteListId,
APPROVAL_PHASE,
initialSubmitStatus,
resolveApproverOrgInfo,
canEditRoute
@@ -210,18 +211,18 @@ const ReferralForm: React.FC<IRequestFormProps> = ({
// правки инициатора.
const loadMatrix = useCallback(
() =>
editId
? approval
.getMatrixForRequest(editId)
.then((rows) => rows.filter((r) => r.phase !== APPROVAL_PHASE.execution))
: getPlannedMatrix(context, requestTypeId as number, data.Referrer, approval, 'Approval'),
[context, approval, editId, data.Referrer, requestTypeId]
loadRoutePhase(approval, editId, requestStatus, 'Approval', () =>
getPlannedMatrix(context, requestTypeId as number, data.Referrer, approval, 'Approval')
),
[context, approval, editId, requestStatus, data.Referrer, requestTypeId]
);
const matrixReady =
isOpenedRouteReady(editId, requestStatus, requestTypeId) && (!!editId || (!!data.Referrer && !!requestTypeId));
const matrix = useMatrixEditor(
loadMatrix,
`${data.Referrer}-${editId ?? 'new'}`,
!readOnly,
!!editId || (!!data.Referrer && !!requestTypeId),
matrixReady,
(login) => approval.getJobTitle(login),
resolveApproverOrgInfo(context)
);
@@ -232,18 +233,16 @@ const ReferralForm: React.FC<IRequestFormProps> = ({
// 'Execution' getPlannedMatrix её просто не резолвит.
const loadExecutors = useCallback(
() =>
editId
? approval
.getMatrixForRequest(editId)
.then((rows) => rows.filter((r) => r.phase === APPROVAL_PHASE.execution))
: getPlannedMatrix(context, requestTypeId as number, data.Referrer, approval, 'Execution'),
[context, approval, editId, data.Referrer, requestTypeId]
loadRoutePhase(approval, editId, requestStatus, 'Execution', () =>
getPlannedMatrix(context, requestTypeId as number, data.Referrer, approval, 'Execution')
),
[context, approval, editId, requestStatus, data.Referrer, requestTypeId]
);
const executors = useMatrixEditor(
loadExecutors,
`${data.Referrer}-${editId ?? 'new'}`,
canEditExecutors(context, readOnly),
!!editId || (!!data.Referrer && !!requestTypeId),
matrixReady,
(login) => approval.getJobTitle(login),
resolveApproverOrgInfo(context)
);