From 98324b18811fbb7baec9faa920ae27fef43eb843 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Fri, 21 Aug 2026 11:28:04 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D1=81?= =?UTF-8?q?=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/webparts/requestPortal/shared/diagnostics.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/webparts/requestPortal/shared/diagnostics.ts b/src/webparts/requestPortal/shared/diagnostics.ts index 09457ac..8a4e068 100644 --- a/src/webparts/requestPortal/shared/diagnostics.ts +++ b/src/webparts/requestPortal/shared/diagnostics.ts @@ -59,6 +59,16 @@ export function describeReason(reason: unknown): string { // escape-последовательности `Эл...`, и в UI вместо кириллицы видно // набор из "\u". Достаём odata.error.message.value через JSON.parse — сам // парсер раскодирует escape-последовательности обратно в текст. +// SharePoint отдаёт этот же текст и когда элемент правда удалён, и когда у +// пользователя просто нет прав на список/элемент (сервер прячет 403 за 404, +// чтобы не подтверждать существование элемента посторонним). По одному +// тексту эти два случая не различить, а "нет доступа" на практике встречается +// куда чаще, чем совпадение по времени с удалением — поэтому подменяем +// формулировку на более вероятную причину. +const ITEM_NOT_FOUND = 'Элемент не существует. Возможно, он был удален другим пользователем.'; +const NO_ACCESS_HINT = + 'Элемент не найден. Скорее всего, у вас нет доступа к этому списку или элементу (либо он был удалён).'; + export function friendlyErrorMessage(e: unknown): string { const message = e instanceof Error ? e.message : String(e); const start = message.indexOf('{'); @@ -69,6 +79,7 @@ export function friendlyErrorMessage(e: unknown): string { 'odata.error'?: { message?: { value?: string } }; }; const value = parsed['odata.error']?.message?.value; + if (value === ITEM_NOT_FOUND) return NO_ACCESS_HINT; if (value) return value; } catch { // Тело не JSON (или не то, что ожидали) — отдаём исходное сообщение.