@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
JavaScript
;
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,
};