From 4c3d119db8d45288fc1d24b2f952e2cd9072beb6 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Mon, 24 Aug 2026 16:57:25 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BB=D0=B8=D0=BD=D1=82=D0=B0=20=D0=B2=20?= =?UTF-8?q?utils/sla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit no-new-null: подавление стояло перед сигнатурой effectiveSlaHours, а предупреждения падали на строки параметра и типа возврата — комментарии перенесены к самим строкам; в isRowOverdue подавление добавлено. explicit-function-return-type: у хелпера row в тесте activatedAt указан тип возврата (ActivationRow — те же поля, что читает activatedAt). Co-Authored-By: Claude Opus 5 --- frontend/src/webparts/approvalAdmin/utils/sla.test.ts | 7 +++++-- frontend/src/webparts/approvalAdmin/utils/sla.ts | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) 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 {