fix: в «Моих заявках» исключены типы заявок с чужих сайтов (ct-forms-portal /sites/sed)
Tests / frontend-test (push) Successful in 1m15s
Tests / frontend-test (push) Successful in 1m15s
This commit is contained in:
@@ -23,6 +23,7 @@ import {
|
|||||||
siteOrigin,
|
siteOrigin,
|
||||||
} from '../../shared/approval';
|
} from '../../shared/approval';
|
||||||
import { effectiveUserEmail } from '../../shared/impersonation';
|
import { effectiveUserEmail } from '../../shared/impersonation';
|
||||||
|
import { DATA_SITE_URL } from '../../shared/config';
|
||||||
import { IMyRequest } from './models/IMyRequest';
|
import { IMyRequest } from './models/IMyRequest';
|
||||||
import { IMyRequestsTypeDebug } from './models/IMyRequestsDebug';
|
import { IMyRequestsTypeDebug } from './models/IMyRequestsDebug';
|
||||||
import { traceLinkedTypes, traceResultRows, traceSearchHits } from './searchTrace';
|
import { traceLinkedTypes, traceResultRows, traceSearchHits } from './searchTrace';
|
||||||
@@ -127,14 +128,27 @@ export function currentUserEmail(context: WebPartContext): string {
|
|||||||
return effectiveUserEmail(context).toLowerCase();
|
return effectiveUserEmail(context).toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeSiteUrl(url: string): string {
|
||||||
|
return url.replace(/\/+$/, '').toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
// Типы заявок, у которых approval-route API уже отдал listId/siteUrl (готовы к чтению).
|
// Типы заявок, у которых 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<IRequestType[]> {
|
export async function getLinkedTypes(context: WebPartContext): Promise<IRequestType[]> {
|
||||||
// Кешированный вариант: getLinkedTypes зовут и счётчики меню, и каждая
|
// Кешированный вариант: getLinkedTypes зовут и счётчики меню, и каждая
|
||||||
// таблица, и «Поиск» — на одно открытие портала это было 4-5 одинаковых
|
// таблица, и «Поиск» — на одно открытие портала это было 4-5 одинаковых
|
||||||
// AAD-запросов к /api/request-types. Ответ меняется только когда админ
|
// AAD-запросов к /api/request-types. Ответ меняется только когда админ
|
||||||
// заводит тип заявки, то есть заведомо не в пределах загрузки страницы.
|
// заводит тип заявки, то есть заведомо не в пределах загрузки страницы.
|
||||||
const types = await getRequestTypesCached(context);
|
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);
|
traceLinkedTypes(types, linked);
|
||||||
return linked;
|
return linked;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user