@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
57 lines (54 loc) • 1.97 kB
JavaScript
import { SummaryDataTableBuilder } from '../../SummaryDataTableBuilder/SummaryDataTableBuilder.js';
class CollatedSummaryBuilder {
summaries;
specification;
constructor(specification, summaries) {
this.specification = specification;
this.summaries = summaries;
}
pageSummaryTemplates = ['page-header', 'page-footer'];
dataTableSummaryTemplates = [
'section-footer',
'section-header',
'table-footer',
'table-header',
];
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) => {
const { template } = summary;
if (summaryTemplates.includes(template)) {
if (!collatedSummaries[template]) {
collatedSummaries[template] = [];
}
collatedSummaries[template].push(summary);
}
});
}
return collatedSummaries;
}
mapToDataTables(summaries) {
const dataTables = {};
Object.keys(summaries).forEach(summaryType => {
if (summaries[summaryType]) {
dataTables[summaryType] = summaries[summaryType].map(summary => {
return new SummaryDataTableBuilder(summary, this.specification.sections).buildSummaryTable();
});
}
});
return dataTables;
}
}
export { CollatedSummaryBuilder };
//# sourceMappingURL=SummaryDataHelper.js.map