fix: редактор маршрута может удалять исполнителей в Обходном листе, Командировке и заявке в 1С

В этих формах матрице исполнителей (а в Командировке и 1С — и согласующих)
не передавалось право удаления, хотя в остальных формах оно есть через
composeRemoveRowRule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-10-14 14:12:46 +05:00
parent e38156fd1c
commit fd3750a769
3 changed files with 14 additions and 3 deletions
@@ -27,8 +27,10 @@ import {
IApproverToWrite, IApproverToWrite,
IUseMatrixEditor, IUseMatrixEditor,
unassignedStepMessage, unassignedStepMessage,
resolveWriteListId resolveWriteListId,
composeRemoveRowRule
} from '../../shared/approval'; } from '../../shared/approval';
import { effectiveUserEmail } from '../../shared/impersonation';
import { IRequestFormProps } from '../../models/types'; import { IRequestFormProps } from '../../models/types';
import { friendlyErrorMessage } from '../../shared/diagnostics'; import { friendlyErrorMessage } from '../../shared/diagnostics';
import { import {
@@ -244,7 +246,11 @@ const BusinessTripForm: React.FC<IRequestFormProps> = ({
<ObligationSection {...sectionProps} /> <ObligationSection {...sectionProps} />
</FormModeProvider> </FormModeProvider>
<ApprovalMatrix editor={matrix} search={(q) => approval.searchUsers(q)} /> <ApprovalMatrix
editor={matrix}
search={(q) => approval.searchUsers(q)}
canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))}
/>
{!executors.loading && executors.rows.length > 0 && ( {!executors.loading && executors.rows.length > 0 && (
<ApprovalMatrix <ApprovalMatrix
@@ -253,6 +259,7 @@ const BusinessTripForm: React.FC<IRequestFormProps> = ({
title="Исполнение (после согласования)" title="Исполнение (после согласования)"
roleLabel="Исполнитель" roleLabel="Исполнитель"
emptyText="Исполнители не заданы по маршруту." emptyText="Исполнители не заданы по маршруту."
canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))}
/> />
)} )}
@@ -342,6 +342,7 @@ const ClearanceForm: React.FC<IRequestFormProps> = ({
title="Исполнение (после согласования)" title="Исполнение (после согласования)"
roleLabel="Исполнитель" roleLabel="Исполнитель"
emptyText="Исполнители не заданы по маршруту." emptyText="Исполнители не заданы по маршруту."
canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))}
/> />
)} )}
@@ -31,7 +31,8 @@ import {
isEditableStatus, isEditableStatus,
IApproverToWrite, IApproverToWrite,
unassignedStepMessage, unassignedStepMessage,
executorsToWrite executorsToWrite,
composeRemoveRowRule
} from '../../shared/approval'; } from '../../shared/approval';
import { import {
uploadAttachments, uploadAttachments,
@@ -444,6 +445,7 @@ const Ticket1CForm: React.FC<IRequestFormProps> = ({
<ApprovalMatrix <ApprovalMatrix
editor={matrixEditor} editor={matrixEditor}
search={(q) => approval.searchUsers(q)} search={(q) => approval.searchUsers(q)}
canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))}
// Пустой маршрут — штатная ситуация: для части видов работ согласование // Пустой маршрут — штатная ситуация: для части видов работ согласование
// не нужно, заявка сразу уходит в Planner. Сбой загрузки маршрута // не нужно, заявка сразу уходит в Planner. Сбой загрузки маршрута
// показывается отдельно (matrix.error) и блокирует отправку. // показывается отдельно (matrix.error) и блокирует отправку.
@@ -457,6 +459,7 @@ const Ticket1CForm: React.FC<IRequestFormProps> = ({
title="Исполнение" title="Исполнение"
roleLabel="Исполнитель" roleLabel="Исполнитель"
emptyText="Исполнители не назначены." emptyText="Исполнители не назначены."
canRemoveRow={composeRemoveRowRule(effectiveUserEmail(context))}
/> />
)} )}