@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
54 lines (53 loc) • 2.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const SummaryDataTableBuilder_1 = __importDefault(require("../SummaryDataTableBuilder/SummaryDataTableBuilder"));
class CollatedSummaryBuilder {
constructor(specification, summaries) {
this.pageSummaryTemplates = ['page-header', 'page-footer'];
this.dataTableSummaryTemplates = [
'section-footer',
'section-header',
'table-footer',
'table-header',
];
this.specification = specification;
this.summaries = summaries;
}
collatePageSummaries() {
return this.collateAndMapToDataTable(this.pageSummaryTemplates);
}
collateDataTableSummaries() {
return this.collate(this.dataTableSummaryTemplates);
}
collateAndMapToDataTable(summaryTemplates = []) {
const collatedSummaries = this.collate(summaryTemplates);
return this.mapToDataTables(collatedSummaries);
}
collate(summaryTemplates = this.pageSummaryTemplates) {
const collatedSummaries = {};
if (this.summaries) {
this.summaries.forEach((summary) => {
if (summaryTemplates.includes(summary.template)) {
if (!collatedSummaries[summary.template]) {
collatedSummaries[summary.template] = [];
}
collatedSummaries[summary.template].push(summary);
}
});
}
return collatedSummaries;
}
mapToDataTables(summaries) {
const dataTables = {};
Object.keys(summaries).forEach((summaryType) => {
dataTables[summaryType] = summaries[summaryType].map((summary) => {
return new SummaryDataTableBuilder_1.default(summary, this.specification.sections).buildSummaryTable();
});
});
return dataTables;
}
}
exports.default = CollatedSummaryBuilder;