33 lines
1.8 KiB
TypeScript
33 lines
1.8 KiB
TypeScript
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 { INomenclatureRow } from './models/INomenclatureRow';
|
|
|
|
/**
|
|
* GET /Dictionary/Nomenclature/{id} — остатки номенклатуры по складам. Ответ —
|
|
* плоский массив (как /Dictionary/Departments): одна номенклатура в разбивке по
|
|
* складам. Авторизация — тот же AAD-app, что и у остальных справочников.
|
|
*
|
|
* storeName (необязательный) — фильтр по складу: API вернёт остатки только по
|
|
* нему. Приходит по внешней ссылке (см. shared/routing). Пусто — все склады.
|
|
*
|
|
* Кэш не нужен: вызывается один раз при открытии формы по внешней ссылке и
|
|
* зависит от конкретного id (не общий справочник на всю сессию).
|
|
*/
|
|
export async function getNomenclature(
|
|
context: WebPartContext,
|
|
id: string,
|
|
storeName?: string
|
|
): Promise<INomenclatureRow[]> {
|
|
const client = await context.aadHttpClientFactory.getClient(APPROVAL_API_CLIENT_ID);
|
|
const query = storeName ? `?storeName=${encodeURIComponent(storeName)}` : '';
|
|
const response: HttpClientResponse = await client.get(
|
|
`${DICTIONARY_API_BASE_URL}/Dictionary/Nomenclature/${encodeURIComponent(id)}${query}`,
|
|
AadHttpClient.configurations.v1
|
|
);
|
|
if (!response.ok) {
|
|
throw new Error(`Dictionary/Nomenclature/${id}: ${response.status} ${response.statusText}`);
|
|
}
|
|
return response.json();
|
|
}
|