This commit is contained in:
@@ -59,6 +59,16 @@ export function describeReason(reason: unknown): string {
|
|||||||
// escape-последовательности `Эл...`, и в UI вместо кириллицы видно
|
// escape-последовательности `Эл...`, и в UI вместо кириллицы видно
|
||||||
// набор из "\u". Достаём odata.error.message.value через JSON.parse — сам
|
// набор из "\u". Достаём odata.error.message.value через JSON.parse — сам
|
||||||
// парсер раскодирует escape-последовательности обратно в текст.
|
// парсер раскодирует escape-последовательности обратно в текст.
|
||||||
|
// SharePoint отдаёт этот же текст и когда элемент правда удалён, и когда у
|
||||||
|
// пользователя просто нет прав на список/элемент (сервер прячет 403 за 404,
|
||||||
|
// чтобы не подтверждать существование элемента посторонним). По одному
|
||||||
|
// тексту эти два случая не различить, а "нет доступа" на практике встречается
|
||||||
|
// куда чаще, чем совпадение по времени с удалением — поэтому подменяем
|
||||||
|
// формулировку на более вероятную причину.
|
||||||
|
const ITEM_NOT_FOUND = 'Элемент не существует. Возможно, он был удален другим пользователем.';
|
||||||
|
const NO_ACCESS_HINT =
|
||||||
|
'Элемент не найден. Скорее всего, у вас нет доступа к этому списку или элементу (либо он был удалён).';
|
||||||
|
|
||||||
export function friendlyErrorMessage(e: unknown): string {
|
export function friendlyErrorMessage(e: unknown): string {
|
||||||
const message = e instanceof Error ? e.message : String(e);
|
const message = e instanceof Error ? e.message : String(e);
|
||||||
const start = message.indexOf('{');
|
const start = message.indexOf('{');
|
||||||
@@ -69,6 +79,7 @@ export function friendlyErrorMessage(e: unknown): string {
|
|||||||
'odata.error'?: { message?: { value?: string } };
|
'odata.error'?: { message?: { value?: string } };
|
||||||
};
|
};
|
||||||
const value = parsed['odata.error']?.message?.value;
|
const value = parsed['odata.error']?.message?.value;
|
||||||
|
if (value === ITEM_NOT_FOUND) return NO_ACCESS_HINT;
|
||||||
if (value) return value;
|
if (value) return value;
|
||||||
} catch {
|
} catch {
|
||||||
// Тело не JSON (или не то, что ожидали) — отдаём исходное сообщение.
|
// Тело не JSON (или не то, что ожидали) — отдаём исходное сообщение.
|
||||||
|
|||||||
Reference in New Issue
Block a user