@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
74 lines (73 loc) • 3.16 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = routes;
const utils_1 = __importDefault(require("../components/error-summary/utils"));
const logger_1 = __importDefault(require("../utils/logger"));
const utils_2 = __importDefault(require("../components/_embedded/embedded-report/utils"));
const embeddedRouteUtils_1 = __importDefault(require("../utils/embeddedRouteUtils"));
function routes({ router, config, services, options, features }) {
logger_1.default.info('Embedded Reports: Initialiasing routes');
const routeConfig = {
templatePath: (config === null || config === void 0 ? void 0 : config.templatePath) || 'dpr/views/',
layoutPath: (config === null || config === void 0 ? void 0 : config.layoutPath) || 'page.njk',
};
const { templatePath, layoutPath } = routeConfig;
({ services } = embeddedRouteUtils_1.default.initReportingService(config, services));
let initialisedFeatures;
try {
;
({ router, services, initialisedFeatures } = embeddedRouteUtils_1.default.initFeatures({
router,
services,
config: routeConfig,
features,
}));
}
catch (error) {
logger_1.default.error(error, 'Init features error');
}
const errorHandler = async (req, res) => {
logger_1.default.error(`Error: ${JSON.stringify(req.body)}`);
res.render(`${templatePath}/async-error`, {
layoutPath,
...req.body,
...req.params,
error: req.body.error,
params: req.params,
});
};
const viewSyncReportHandler = async (req, res, next) => {
try {
const renderData = await utils_2.default.getReport({ req, res, services, next, features, options });
res.render(`${templatePath}embedded-report`, {
layoutPath,
...renderData,
});
}
catch (error) {
req.body.title = `Report Failed`;
req.body.errorDescription = 'We were unable to show this report for the following reason:';
req.body.error = utils_1.default.handleError(error);
next();
}
};
const viewReportPaths = ['/dpr/embedded/sync/:type/:reportId/:id/report'];
if (initialisedFeatures.download) {
viewReportPaths.push('/dpr/embedded/sync/:type/:reportId/:id/report/:download');
}
router.get(viewReportPaths, viewSyncReportHandler, errorHandler);
if (Object.keys(initialisedFeatures).length) {
logger_1.default.info(`Embedded Reports: Features Initialised:`);
Object.keys(initialisedFeatures).forEach((key) => {
logger_1.default.info(`Embedded Reports: Feature: ${key}`);
});
}
logger_1.default.info(`Embedded Reports: Routes Initialised:`);
viewReportPaths.forEach((path) => {
logger_1.default.info(`Embedded Reports: GET: ${path}`);
});
logger_1.default.info(`Done! 🙂`);
}