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