Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/7
This commit was merged in pull request #7.
This commit is contained in:
@@ -24,6 +24,43 @@ export async function getRequestTypes(context: WebPartContext): Promise<IRequest
|
||||
return body.data ?? [];
|
||||
}
|
||||
|
||||
// Кеш на уровне МОДУЛЯ (не useRef/useState) — список типов заявок админ меняет
|
||||
// редко, а без кеша каждая форма и каждый переход в режим согласующего дёргали
|
||||
// бы /api/request-types заново. Живёт до перезагрузки страницы — тот же принцип,
|
||||
// что и у features/myRequests/pageCache.ts. Ошибку НЕ кешируем: если запрос
|
||||
// упал (сеть, 401 на холодном старте), следующий вызов должен попробовать заново,
|
||||
// а не молча повторять один и тот же провал до конца сессии.
|
||||
let requestTypesPromise: Promise<IRequestType[]> | undefined;
|
||||
|
||||
async function getRequestTypesCached(context: WebPartContext): Promise<IRequestType[]> {
|
||||
if (!requestTypesPromise) {
|
||||
requestTypesPromise = getRequestTypes(context).catch((e) => {
|
||||
requestTypesPromise = undefined;
|
||||
throw e;
|
||||
});
|
||||
}
|
||||
return requestTypesPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Числовой RequestTypeId по pageUrl (rptype) формы. Id типа заявки выдаётся
|
||||
* сервером при регистрации типа в админке approval-route и НЕПРЕДСКАЗУЕМ
|
||||
* заранее (см. README форм — «в старой pto-tracker было 1, при заведении типа
|
||||
* в админке получил новый id 11»), а pageUrl задаём мы сами в data/requests.ts
|
||||
* и он стабилен. Поэтому формы резолвят числовой id отсюда (через
|
||||
* useRequestTypeId), а не хардкодят его.
|
||||
*/
|
||||
export async function getRequestTypeIdByPageUrl(context: WebPartContext, pageUrl: string): Promise<number> {
|
||||
const types = await getRequestTypesCached(context);
|
||||
const found = types.filter((t) => t.pageUrl === pageUrl)[0];
|
||||
if (!found) {
|
||||
throw new Error(
|
||||
`Тип заявки с pageUrl «${pageUrl}» не найден в approval-route API — зарегистрируйте его в админке маршрутов (Типы заявок).`
|
||||
);
|
||||
}
|
||||
return found.id;
|
||||
}
|
||||
|
||||
// POST /api/template-routes/resolve — планируемый маршрут для типа заявки и
|
||||
// пользователя. Бэкенд сам подставляет исполнителей шага (executorEmail/position)
|
||||
// по ролям исходя из userEmail. Параметр status выбирает ФАЗУ маршрута:
|
||||
|
||||
Reference in New Issue
Block a user