46 lines
1.8 KiB
TypeScript
46 lines
1.8 KiB
TypeScript
import { api, apiFetchBlob } from '../../api/client';
|
|
import type { Page } from '../../api/types';
|
|
import type {
|
|
ExportFormat,
|
|
QualityCause,
|
|
QualityCell,
|
|
QualityCellDocumentOut,
|
|
QualityFilters,
|
|
QualityMatrixOut,
|
|
QualityMonthlySeriesOut,
|
|
} from '../../types/qualityMetrics';
|
|
|
|
const BASE = '/quality-metrics';
|
|
|
|
export function getMatrix(filters: QualityFilters): Promise<QualityMatrixOut> {
|
|
return api.get<QualityMatrixOut>(`${BASE}/matrix`, filters);
|
|
}
|
|
|
|
export function getSeries(filters: QualityFilters, cause: QualityCause): Promise<QualityMonthlySeriesOut> {
|
|
return api.get<QualityMonthlySeriesOut>(`${BASE}/series`, { ...filters, cause });
|
|
}
|
|
|
|
export function getCellDocuments(
|
|
filters: QualityFilters,
|
|
cell: QualityCell,
|
|
paging: { limit: number; offset: number },
|
|
): Promise<Page<QualityCellDocumentOut>> {
|
|
return api.get<Page<QualityCellDocumentOut>>(`${BASE}/cells/${cell}/documents`, { ...filters, ...paging });
|
|
}
|
|
|
|
/** Выгрузка фактов за период; скачивание идёт через fetch, потому что нужен заголовок Authorization. */
|
|
export function exportFacts(filters: QualityFilters, format: ExportFormat): Promise<{ blob: Blob; filename: string | null }> {
|
|
return apiFetchBlob(`${BASE}/export${queryString({ ...filters, format })}`);
|
|
}
|
|
|
|
/** Строка запроса для выгрузки (пустые поля пропускаются) — вынесено отдельно ради теста. */
|
|
export function queryString(params: object): string {
|
|
const search = new URLSearchParams();
|
|
for (const [key, value] of Object.entries(params)) {
|
|
if (value === undefined || value === null || value === '') continue;
|
|
search.append(key, String(value));
|
|
}
|
|
const qs = search.toString();
|
|
return qs ? `?${qs}` : '';
|
|
}
|