diff --git a/frontend/src/webparts/approvalAdmin/utils/sla.test.ts b/frontend/src/webparts/approvalAdmin/utils/sla.test.ts index 639cb35..0f3d903 100644 --- a/frontend/src/webparts/approvalAdmin/utils/sla.test.ts +++ b/frontend/src/webparts/approvalAdmin/utils/sla.test.ts @@ -9,7 +9,10 @@ import { slaHoursToInput, triStateToBool } from './sla'; -import { APPROVAL_PHASE } from '../models'; +import { APPROVAL_PHASE, ManagedApprovalRow } from '../models'; + +/** Ровно те поля строки, которые читает activatedAt (см. его сигнатуру). */ +type ActivationRow = Pick; // Смысл всех этих проверок один: «не задано» и «ноль/нет» — РАЗНЫЕ состояния. // Если они где-то схлопнутся, шаг с настройкой «напоминать сразу» станет @@ -110,7 +113,7 @@ describe('effectiveSlaHours', () => { // Повторяет ReminderService.ActivatedAt на бэкенде — та же формула, поэтому и // проверяется на тех же случаях (параллельные шаги, переход между фазами). describe('activatedAt', () => { - const row = (order: number, phase: string, dateIso: string) => ({ order, phase, dateIso }); + const row = (order: number, phase: string, dateIso: string): ActivationRow => ({ order, phase, dateIso }); it('первый шаг согласования — от создания заявки', () => { const rows = [row(1, APPROVAL_PHASE.approval, '')]; diff --git a/frontend/src/webparts/approvalAdmin/utils/sla.ts b/frontend/src/webparts/approvalAdmin/utils/sla.ts index 675e566..e7d4410 100644 --- a/frontend/src/webparts/approvalAdmin/utils/sla.ts +++ b/frontend/src/webparts/approvalAdmin/utils/sla.ts @@ -76,10 +76,11 @@ export function formatSlaHours(value: number | null | undefined): string { * здесь его нужно повторить, чтобы посчитать просрочку и показать реальное число * часов, а не только «от типа заявки» без цифры. */ -// eslint-disable-next-line @rushstack/no-new-null -- зеркалит nullable-контракт бэкенда export function effectiveSlaHours( row: Pick, + // eslint-disable-next-line @rushstack/no-new-null -- зеркалит nullable-контракт бэкенда requestTypeSlaHours: number | null | undefined + // eslint-disable-next-line @rushstack/no-new-null -- null = «SLA не задан нигде», это не 0 ): number | null { if (row.slaHours !== null) return row.slaHours; return requestTypeSlaHours ?? null; @@ -140,6 +141,7 @@ export function isRowOverdue( row: Pick, allRows: readonly Pick[], requestCreatedIso: string, + // eslint-disable-next-line @rushstack/no-new-null -- зеркалит nullable-контракт бэкенда requestTypeSlaHours: number | null | undefined, now: Date ): boolean {