From 36922af942e1d44c3e3258e7ff1b1a474987c7be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Mon, 28 Sep 2026 09:53:29 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B2=20=C2=AB=D0=9C=D0=BE=D0=B8=D1=85?= =?UTF-8?q?=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA=D0=B0=D1=85=C2=BB=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D1=8B=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BE=D0=BA=20=D1=81=20?= =?UTF-8?q?=D1=87=D1=83=D0=B6=D0=B8=D1=85=20=D1=81=D0=B0=D0=B9=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20(ct-forms-portal=20/sites/sed)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/myRequests/myRequests.service.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/webparts/requestPortal/features/myRequests/myRequests.service.ts b/src/webparts/requestPortal/features/myRequests/myRequests.service.ts index 74ee956..9a89bde 100644 --- a/src/webparts/requestPortal/features/myRequests/myRequests.service.ts +++ b/src/webparts/requestPortal/features/myRequests/myRequests.service.ts @@ -23,6 +23,7 @@ import { siteOrigin, } from '../../shared/approval'; import { effectiveUserEmail } from '../../shared/impersonation'; +import { DATA_SITE_URL } from '../../shared/config'; import { IMyRequest } from './models/IMyRequest'; import { IMyRequestsTypeDebug } from './models/IMyRequestsDebug'; import { traceLinkedTypes, traceResultRows, traceSearchHits } from './searchTrace'; @@ -127,14 +128,27 @@ export function currentUserEmail(context: WebPartContext): string { return effectiveUserEmail(context).toLowerCase(); } +function normalizeSiteUrl(url: string): string { + return url.replace(/\/+$/, '').toLowerCase(); +} + // Типы заявок, у которых approval-route API уже отдал listId/siteUrl (готовы к чтению). +// +// Только типы НАШЕГО сайта данных: approval-route общий с ct-forms-portal +// (/sites/sed), и /api/request-types отдаёт его типы тоже. Search ищет по +// всему тенанту, поэтому без этого фильтра Path-условие по спискам sed +// притягивало в «Мои заявки» и очереди заявки CT (СТ ОМТС и т.п.), которые +// этот портал не умеет ни показать (нет RequestStatus), ни открыть (нет View). export async function getLinkedTypes(context: WebPartContext): Promise { // Кешированный вариант: getLinkedTypes зовут и счётчики меню, и каждая // таблица, и «Поиск» — на одно открытие портала это было 4-5 одинаковых // AAD-запросов к /api/request-types. Ответ меняется только когда админ // заводит тип заявки, то есть заведомо не в пределах загрузки страницы. const types = await getRequestTypesCached(context); - const linked = types.filter((t) => !!t.listId && !!t.siteUrl); + const ownSiteUrl = normalizeSiteUrl(DATA_SITE_URL); + const linked = types.filter( + (t) => !!t.listId && !!t.siteUrl && normalizeSiteUrl(t.siteUrl) === ownSiteUrl + ); traceLinkedTypes(types, linked); return linked; }