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 { 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(); }