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.

108 lines (107 loc) 4.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ParentChildDataTableBuilder_1 = __importDefault(require("../ParentChildDataTableBuilder/ParentChildDataTableBuilder")); class SectionedFieldsDataTableBuilder extends ParentChildDataTableBuilder_1.default { constructor(variant) { const { sectionedFields, template } = variant.specification; super(variant); this.sectionedFields = sectionedFields; this.sections = this.sectionedFields.map((f) => f.name); this.template = template; } getChildFields(childId) { const childVariant = this.variant.childVariants.find((child) => child.id === childId); return childVariant ? childVariant.specification.fields : []; } getJoinKey() { return this.variant.childVariants[0].joinFields[0]; } initSectionedData(data) { return data.flatMap((row) => { const initialisedSectionsWithFields = this.sectionedFields.map((section) => { const sectionHeader = this.mapNamesToFields([section.name])[0]; let fields = []; const { child } = section; if (section.fields) { fields = this.mapNamesToFields(section.fields); } else if (section.child) { fields = this.getChildFields(section.child); } return { header: sectionHeader, fields, child, }; }); return initialisedSectionsWithFields.map((section) => { if (section.child) { const childData = this.getChildData(section.child); const displayFields = section.fields.filter((f) => f.visible); const joinKey = this.getJoinKey(); return { header: section.header.display, fields: childData.data .filter((cd) => cd[joinKey] === row[joinKey]) .map((cd) => { var _a, _b; return { heading: cd[(_a = displayFields[0]) === null || _a === void 0 ? void 0 : _a.name] || 'Not found', data: cd[(_b = displayFields[1]) === null || _b === void 0 ? void 0 : _b.name] || 'Not found', }; }), }; } return { header: section.header.display, fields: section.fields .filter((f) => f.visible) .map((f) => { return { heading: f.display, data: row[f.name], }; }), }; }); }); } getChildData(childId) { return this.childData.find((d) => d.id === childId); } createRows(data) { const sectionedData = this.initSectionedData(data); const rows = sectionedData.flatMap((section, index) => { const sectionHeaderRow = this.createSectionHeader(section.header, index); const sectionRows = section.fields.map((field) => { return [ { text: field.heading, classes: 'dpr-row-heading', }, { text: field.data, classes: 'dpr-row-heading-data', }, ]; }); return [...sectionHeaderRow, ...sectionRows]; }); return rows; } buildTable(data) { return { head: [ { text: '', classes: 'dpr-row-section-header' }, { text: '', classes: 'pr-row-section-header-value' }, ], rows: this.createRows(data), rowCount: data.length, colCount: this.columns.length, }; } } exports.default = SectionedFieldsDataTableBuilder;