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.

129 lines (128 loc) 5.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const EmbeddedReportUtils_1 = require("../../../types/EmbeddedReportUtils"); const UserReports_1 = require("../../../types/UserReports"); const utils_1 = __importDefault(require("../../_reports/report-actions/utils")); const syncReportUtils_1 = __importDefault(require("../../../utils/report/syncReportUtils")); const localsHelper_1 = __importDefault(require("../../../utils/localsHelper")); const setActions = (csrfToken, reportDefinition, columns, url, canDownload, count, dataProductDefinitionsPath, features, currentUrl, currentQueryParams) => { var _a; const { name: reportName, variant, id: reportId } = reportDefinition; const { name, id, printable } = variant; const downloadFeature = (_a = features === null || features === void 0 ? void 0 : features.list) === null || _a === void 0 ? void 0 : _a.includes(EmbeddedReportUtils_1.EmbeddedReportFeaturesList.download); const downloadConfig = { enabled: count > 0 && downloadFeature, name, reportName, csrfToken, reportId, id, columns: columns.value, loadType: UserReports_1.LoadType.SYNC, definitionPath: dataProductDefinitionsPath, canDownload, currentUrl, currentQueryParams, }; return utils_1.default.getActions({ ...(downloadFeature && { download: downloadConfig, }), print: { enabled: printable, }, share: { reportName, name, url, }, copy: { url, }, }); }; const initAdditionalFeatures = async (features, services, req, userId) => { var _a, _b; const { reportId, id } = req.params; let canDownload; let bookmarked; let removeBookmark = true; const downloadFeatureEnabled = (_a = features === null || features === void 0 ? void 0 : features.list) === null || _a === void 0 ? void 0 : _a.includes(EmbeddedReportUtils_1.EmbeddedReportFeaturesList.download); if (downloadFeatureEnabled) { canDownload = await services.downloadPermissionService.downloadEnabled(userId, reportId, id); } const bookmarkFeatureEnabled = (_b = features === null || features === void 0 ? void 0 : features.list) === null || _b === void 0 ? void 0 : _b.includes(EmbeddedReportUtils_1.EmbeddedReportFeaturesList.bookmark); if (bookmarkFeatureEnabled) { removeBookmark = !bookmarkFeatureEnabled; bookmarked = await services.bookmarkService.isBookmarked(id, reportId, userId); } return { bookmarked, removeBookmark, canDownload, }; }; const getReport = async ({ req, res, services, features, options = {} }) => { const { csrfToken, userId, token } = localsHelper_1.default.getValues(res); const { reportId, id } = req.params; req.query = localsHelper_1.default.setDdpPathToReqQuery(req, options.dpdPath); const { dataProductDefinitionsPath } = req.query; const { reportData, reportDefinition, reportQuery } = await syncReportUtils_1.default.getReportData({ services, req, token, reportId, id, }); const count = await services.reportingService.getCount(reportDefinition.variant.resourceName, token, reportQuery); const userFeaturesConfig = await initAdditionalFeatures(features, services, req, userId); const renderData = await getRenderData({ req, reportDefinition, reportQuery, reportData, count, csrfToken, features, canDownload: userFeaturesConfig.canDownload, }); const result = { renderData: { ...renderData, ...userFeaturesConfig, csrfToken, loadType: UserReports_1.LoadType.SYNC, reportId, id, dataProductDefinitionsPath, }, }; return result; }; const getRenderData = async ({ req, reportDefinition, reportQuery, reportData, count, csrfToken, features, canDownload, }) => { const { dataProductDefinitionsPath } = req.query; const { name: reportName, description: reportDescription } = reportDefinition; const { specification, name, description, classification, printable } = reportDefinition.variant; const { data } = reportData; const reportRenderData = await syncReportUtils_1.default.getReportRenderData(req, count, specification, reportQuery, data); const actions = setActions(csrfToken, reportDefinition, reportRenderData.columns, `${req.protocol}://${req.get('host')}${req.originalUrl}`, canDownload, count, dataProductDefinitionsPath, features, reportRenderData.reportUrl, reportRenderData.reportSearch); return { ...reportRenderData, reportName, name, description: description || reportDescription, count, type: UserReports_1.ReportType.REPORT, classification, printable, actions, warnings: reportData.warnings, }; }; exports.default = { getRenderData, getReport, };