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.

93 lines (92 loc) 4.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const CollatedSummaryBuilder_1 = __importDefault(require("../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder")); const DataTableBuilder_1 = __importDefault(require("../../../utils/DataTableBuilder/DataTableBuilder")); const ParentChildDataTableBuilder_1 = __importDefault(require("../../../utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder")); const SectionedDataTableBuilder_1 = __importDefault(require("../../../utils/SectionedDataTableBuilder/SectionedDataTableBuilder")); const SectionedFieldsTableBuilder_1 = __importDefault(require("../../../utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder")); const buildListTable = (definition, columns, reportData, summariesData, reportQuery) => { const { variant } = definition; const { interactive, specification } = variant; const collatedSummaryBuilder = new CollatedSummaryBuilder_1.default(specification, summariesData); return new DataTableBuilder_1.default(specification.fields) .withSummaries(collatedSummaryBuilder.collateDataTableSummaries()) .withHeaderOptions({ columns: columns.value, reportQuery, interactive, }) .buildTable(reportData); }; const buildParentChildTable = (definition, columns, reportData, childData) => { return new ParentChildDataTableBuilder_1.default(definition.variant) .withNoHeaderOptions(columns.value) .withChildData(childData) .buildTable(reportData); }; const buildSummarySectionTable = (definition, columns, reportData, summariesData, reportQuery) => { const { variant } = definition; const { interactive, specification } = variant; const collatedSummaryBuilder = new CollatedSummaryBuilder_1.default(specification, summariesData); return new SectionedDataTableBuilder_1.default(specification) .withSummaries(collatedSummaryBuilder.collateDataTableSummaries()) .withHeaderOptions({ columns: columns.value, reportQuery, interactive, }) .buildTable(reportData); }; const buildRowSectionedTable = (definition, reportData, childData) => { const { variant } = definition; const { interactive } = variant; return reportData.map((rowData) => { return new SectionedFieldsTableBuilder_1.default(variant) .withHeaderOptions({ columns: new Array(2), interactive, }) .withChildData(childData) .buildTable([rowData]); }); }; const createDataTable = (definition, columns, reportData, childData, summariesData, reportQuery) => { let dataTables = []; const { template } = definition.variant.specification; switch (template) { case 'summary-section': case 'list-section': { const dataTable = buildSummarySectionTable(definition, columns, reportData, summariesData, reportQuery); dataTables.push(dataTable); break; } case 'parent-child': case 'parent-child-section': { const dataTable = buildParentChildTable(definition, columns, reportData, childData); dataTables.push(dataTable); break; } case 'list': { const dataTable = buildListTable(definition, columns, reportData, summariesData, reportQuery); dataTables.push(dataTable); break; } case 'row-section-child': case 'row-section': { dataTables = buildRowSectionedTable(definition, reportData, childData); break; } default: { const dataTable = buildListTable(definition, columns, reportData, summariesData, reportQuery); dataTables.push(dataTable); break; } } return dataTables; }; exports.default = { createDataTable, };