UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

115 lines (102 loc) 3.1 kB
import { DashboardDefinition } from '../components/_dashboards/dashboard/types' import logger from '../utils/logger' import RestClient from './restClient' import Dict = NodeJS.Dict import { ApiConfig } from './types' export default class DashboardClient { restClient: RestClient constructor(config: ApiConfig) { this.restClient = new RestClient('Dashboard API Client', config) } getDefinition( token: string, dashboardId: string, dpdId: string, definitionsPath?: string, ): Promise<DashboardDefinition> { this.logInfo('Get definition:', { dpdId, dashboardId }) const query = { dataProductDefinitionsPath: definitionsPath, } return this.restClient .get({ path: `/definitions/${dpdId}/dashboards/${dashboardId}`, query, token, }) .then((response) => <DashboardDefinition>response) } requestAsyncDashboard( token: string, reportId: string, dashboardId: string, query: Record<string, string | boolean | number>, ): Promise<Dict<string>> { this.logInfo('Request dashboard:', { reportId, dashboardId }) return this.restClient .get({ path: `/async/dashboards/${reportId}/${dashboardId}`, token, query, }) .then((response) => <Dict<string>>response) } getAsyncDashboard( token: string, reportId: string, dashboardId: string, tableId: string, query: Dict<string | number>, ): Promise<Array<Dict<string>>> { this.logInfo('Get dashboard:', { reportId, dashboardId, tableId }) return this.restClient .get({ path: `/reports/${reportId}/dashboards/${dashboardId}/tables/${tableId}/result`, token, query, }) .then((response) => <Array<Dict<string>>>response) } getAsyncStatus( token: string, reportId: string, dashboardId: string, executionId: string, dataProductDefinitionsPath?: string, tableId?: string, ): Promise<Dict<string>> { this.logInfo('Get status:', { reportId, dashboardId, executionId, tableId }) return this.restClient .get({ path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}/status`, token, query: { dataProductDefinitionsPath, tableId, }, }) .then((response) => <Dict<string>>response) } cancelAsyncRequest( token: string, reportId: string, dashboardId: string, executionId: string, dataProductDefinitionsPath: string, ): Promise<Dict<string>> { this.logInfo('Cancel request:', { reportId, dashboardId, executionId }) return this.restClient .delete({ path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}`, token, query: { dataProductDefinitionsPath, }, }) .then((response) => <Dict<string>>response) } logInfo(title: string, args?: Dict<string>) { logger.info(`Dashboard client: ${title}:`) if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2)) } }