feat: added optin to add delegant for executor and change delegant

This commit is contained in:
Тимур Городецкий
2026-08-10 13:55:05 +05:00
parent 3a15d83ded
commit 99f0946968
23 changed files with 407 additions and 40 deletions
@@ -0,0 +1,32 @@
import { AadHttpClient, HttpClientResponse } from '@microsoft/sp-http';
import { WebPartContext } from '@microsoft/sp-webpart-base';
import { APPROVAL_API_CLIENT_ID, DICTIONARY_API_BASE_URL } from '../config';
import { IDepartment } from './models/IDepartment';
// GET /Dictionary/Departments — справочник отделов по всем компаниям, ответ —
// плоский массив (без обёртки {data: ...}, в отличие от approval-route API).
async function fetchDepartments(context: WebPartContext): Promise<IDepartment[]> {
const client = await context.aadHttpClientFactory.getClient(APPROVAL_API_CLIENT_ID);
const response: HttpClientResponse = await client.get(
`${DICTIONARY_API_BASE_URL}/Dictionary/Departments`,
AadHttpClient.configurations.v1
);
if (!response.ok) {
throw new Error(`Dictionary/Departments: ${response.status} ${response.statusText}`);
}
return response.json();
}
// Справочник большой (сотни записей) и в рамках сессии не меняется — грузим
// один раз и отдаём тот же промис повторным вызовам (иначе каждое открытие
// формы/пикера заново тянуло бы весь список).
let cache: Promise<IDepartment[]> | undefined;
export function getDepartments(context: WebPartContext): Promise<IDepartment[]> {
if (!cache) {
cache = fetchDepartments(context).catch((e) => {
cache = undefined;
throw e;
});
}
return cache;
}