@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.14.0 → 4.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dpr/types/ReportQuery.js +1 -1
- package/dpr/types/ReportQuery.js.map +2 -2
- package/dpr/types/ReportQuery.ts +1 -0
- package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js +1 -1
- package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js.map +3 -3
- package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.ts +0 -20
- package/package.json +1 -1
package/dpr/types/ReportQuery.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var b=Object.create;var a=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var F=(n,i)=>{for(var s in i)a(n,s,{get:i[s],enumerable:!0})},h=(n,i,s,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of R(i))!C.call(n,r)&&r!==s&&a(n,r,{get:()=>i[r],enumerable:!(t=x(i,r))||t.enumerable});return n};var T=(n,i,s)=>(s=n!=null?b(z(n)):{},h(i||!n||!n.__esModule?a(s,"default",{value:n,enumerable:!0}):s,n)),A=n=>h(a({},"__esModule",{value:!0}),n);var j={};F(j,{DEFAULT_FILTERS_PREFIX:()=>S,ReportQuery:()=>g,default:()=>O});module.exports=A(j);var m=require("../utils/urlHelper"),p=T(require("../components/_reports/report-columns-form/utils")),u=require("./UserReports");const S="filters.";class g{constructor({fields:i,template:s,queryParams:t,definitionsPath:r,filtersPrefix:D=S,reportType:P}){if(this.selectedPage=t.selectedPage?Number(t.selectedPage):1,this.pageSize=this.getPageSize(t,s,P),this.sortColumn=t.sortColumn?t.sortColumn.toString():this.getDefaultSortColumn(i),this.sortedAsc=t.sortedAsc!=="false",this.dataProductDefinitionsPath=r??(t.dataProductDefinitionsPath?t.dataProductDefinitionsPath.toString():null),this.filtersPrefix=D,t.columns){const e=typeof t.columns=="string"?t.columns.split(","):t.columns;this.columns=p.default.ensureMandatoryColumns(i,e)}else this.columns=i.filter(e=>e.visible).map(e=>e.name);let l,c;const o=i.find(e=>e.type==="date"&&e.filter&&e.filter.type==="daterange"||e.type==="date"&&e.filter&&e.filter.type==="date");o&&({min:l,max:c}=o.filter),this.filters={},Object.keys(t).filter(e=>e.startsWith(this.filtersPrefix)).filter(e=>t[e]).forEach(e=>{const d=e.replace(this.filtersPrefix,"");let f=t[e].toString();d.includes(".start")&&l&&new Date(f)<new Date(l)&&(f=l),d.includes(".end")&&c&&new Date(f)>new Date(c)&&(f=c),f!=="no-filter"&&(this.filters[d]=f)}),o&&o.filter.type==="daterange"&&(l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".start"))&&(this.filters[`${o.name}.start`]=l),c&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".end"))&&(this.filters[`${o.name}.end`]=c)),o&&o.filter.type==="date"&&l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(o.name))&&(this.filters[`${o.name}.start`]=l)}getDefaultSortColumn(i){const s=i.find(t=>t.defaultsort);return s?s.name:i.find(t=>t.sortable)?.name}getPageSize(i,s,t){let r;return(!t||t===u.ReportType.REPORT)&&(r=i.pageSize&&s?Number(i.pageSize):this.getDefaultPageSize(s)),r}toRecordWithFilterPrefix(i=!1){const s={selectedPage:this.selectedPage.toString(),...this.pageSize&&{pageSize:this.pageSize.toString()},sortColumn:this.sortColumn,sortedAsc:this.sortedAsc.toString(),columns:this.columns};return this.dataProductDefinitionsPath&&(s.dataProductDefinitionsPath=this.dataProductDefinitionsPath),Object.keys(this.filters).forEach(t=>{const r=this.filters[t];(!i||r!==m.clearFilterValue)&&(s[`${this.filtersPrefix}${t}`]=r)}),s}getDefaultPageSize(i){switch(i){case"list-section":case"summary-section":case"row-section-child":case"parent-child":return 5e5;default:return 20}}}var O=g;0&&(module.exports={DEFAULT_FILTERS_PREFIX,ReportQuery});
|
|
1
|
+
var b=Object.create;var a=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var F=(n,i)=>{for(var s in i)a(n,s,{get:i[s],enumerable:!0})},h=(n,i,s,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of R(i))!C.call(n,r)&&r!==s&&a(n,r,{get:()=>i[r],enumerable:!(t=x(i,r))||t.enumerable});return n};var T=(n,i,s)=>(s=n!=null?b(z(n)):{},h(i||!n||!n.__esModule?a(s,"default",{value:n,enumerable:!0}):s,n)),A=n=>h(a({},"__esModule",{value:!0}),n);var j={};F(j,{DEFAULT_FILTERS_PREFIX:()=>S,ReportQuery:()=>g,default:()=>O});module.exports=A(j);var m=require("../utils/urlHelper"),p=T(require("../components/_reports/report-columns-form/utils")),u=require("./UserReports");const S="filters.";class g{constructor({fields:i,template:s,queryParams:t,definitionsPath:r,filtersPrefix:D=S,reportType:P}){if(this.selectedPage=t.selectedPage?Number(t.selectedPage):1,this.pageSize=this.getPageSize(t,s,P),this.sortColumn=t.sortColumn?t.sortColumn.toString():this.getDefaultSortColumn(i),this.sortedAsc=t.sortedAsc!=="false",this.dataProductDefinitionsPath=r??(t.dataProductDefinitionsPath?t.dataProductDefinitionsPath.toString():null),this.filtersPrefix=D,t.columns){const e=typeof t.columns=="string"?t.columns.split(","):t.columns;this.columns=p.default.ensureMandatoryColumns(i,e)}else this.columns=i.filter(e=>e.visible).map(e=>e.name);let l,c;const o=i.find(e=>e.type==="date"&&e.filter&&e.filter.type==="daterange"||e.type==="date"&&e.filter&&e.filter.type==="date");o&&({min:l,max:c}=o.filter),this.filters={},Object.keys(t).filter(e=>e.startsWith(this.filtersPrefix)).filter(e=>t[e]).forEach(e=>{const d=e.replace(this.filtersPrefix,"");let f=t[e].toString();d.includes(".start")&&l&&new Date(f)<new Date(l)&&(f=l),d.includes(".end")&&c&&new Date(f)>new Date(c)&&(f=c),f!=="no-filter"&&(this.filters[d]=f)}),o&&o.filter.type==="daterange"&&(l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".start"))&&(this.filters[`${o.name}.start`]=l),c&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(".end"))&&(this.filters[`${o.name}.end`]=c)),o&&o.filter.type==="date"&&l&&Object.keys(t).some(e=>e.includes(this.filtersPrefix))&&Object.keys(t).every(e=>!e.includes(o.name))&&(this.filters[`${o.name}.start`]=l)}getDefaultSortColumn(i){const s=i.find(t=>t.defaultsort);return s?s.name:i.find(t=>t.sortable)?.name}getPageSize(i,s,t){let r;return(!t||t===u.ReportType.REPORT)&&(r=i.pageSize&&s?Number(i.pageSize):this.getDefaultPageSize(s)),r}toRecordWithFilterPrefix(i=!1){const s={selectedPage:this.selectedPage.toString(),...this.pageSize&&{pageSize:this.pageSize.toString()},sortColumn:this.sortColumn,sortedAsc:this.sortedAsc.toString(),columns:this.columns};return this.dataProductDefinitionsPath&&(s.dataProductDefinitionsPath=this.dataProductDefinitionsPath),Object.keys(this.filters).forEach(t=>{const r=this.filters[t];(!i||r!==m.clearFilterValue)&&(s[`${this.filtersPrefix}${t}`]=r)}),s}getDefaultPageSize(i){switch(i){case"list-section":case"summary-section":case"row-section-child":case"parent-child":case"parent-child-section":return 5e5;default:return 20}}}var O=g;0&&(module.exports={DEFAULT_FILTERS_PREFIX,ReportQuery});
|
|
2
2
|
//# sourceMappingURL=ReportQuery.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dpr/types/ReportQuery.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ParsedQs } from 'qs'\nimport { FilteredListRequest } from './index'\nimport Dict = NodeJS.Dict\nimport { components } from './api'\nimport { clearFilterValue } from '../utils/urlHelper'\nimport ColumnUtils from '../components/_reports/report-columns-form/utils'\nimport { Template } from './Templates'\nimport { ReportType } from './UserReports'\n\nexport const DEFAULT_FILTERS_PREFIX = 'filters.'\n\nclass ReportQuery implements FilteredListRequest {\n selectedPage: number\n\n pageSize: number | undefined\n\n sortColumn?: string\n\n columns: Array<string>\n\n sortedAsc: boolean\n\n filters: Dict<string>\n\n filtersPrefix: string\n\n dataProductDefinitionsPath?: string\n\n constructor({\n fields,\n template,\n queryParams,\n definitionsPath,\n filtersPrefix = DEFAULT_FILTERS_PREFIX,\n reportType,\n }: {\n fields: components['schemas']['FieldDefinition'][]\n template?: Template\n queryParams: ParsedQs\n definitionsPath?: string\n filtersPrefix?: string\n reportType?: ReportType\n }) {\n this.selectedPage = queryParams.selectedPage ? Number(queryParams.selectedPage) : 1\n this.pageSize = this.getPageSize(queryParams, template, reportType)\n this.sortColumn = queryParams.sortColumn ? queryParams.sortColumn.toString() : this.getDefaultSortColumn(fields)\n this.sortedAsc = queryParams.sortedAsc !== 'false'\n this.dataProductDefinitionsPath =\n definitionsPath ??\n (queryParams.dataProductDefinitionsPath ? queryParams.dataProductDefinitionsPath.toString() : null)\n this.filtersPrefix = filtersPrefix\n\n if (queryParams.columns) {\n const columns =\n typeof queryParams.columns === 'string' ? queryParams.columns.split(',') : (queryParams.columns as string[])\n this.columns = ColumnUtils.ensureMandatoryColumns(fields, columns)\n } else {\n this.columns = fields.filter((f) => f.visible).map((f) => f.name)\n }\n\n let min: string\n let max: string\n const dateField: components['schemas']['FieldDefinition'] = fields.find((f) => {\n return (\n (f.type === 'date' && f.filter && f.filter.type === 'daterange') ||\n (f.type === 'date' && f.filter && f.filter.type === 'date')\n )\n })\n if (dateField) ({ min, max } = dateField.filter)\n\n this.filters = {}\n\n Object.keys(queryParams)\n .filter((key) => key.startsWith(this.filtersPrefix))\n .filter((key) => queryParams[key])\n .forEach((key) => {\n const filter = key.replace(this.filtersPrefix, '')\n let value = queryParams[key].toString()\n if (filter.includes('.start') && min) {\n if (new Date(value) < new Date(min)) value = min\n }\n if (filter.includes('.end') && max) {\n if (new Date(value) > new Date(max)) value = max\n }\n if (value !== 'no-filter') {\n this.filters[filter] = value\n }\n })\n\n if (dateField && dateField.filter.type === 'daterange') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.start'))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n\n if (\n max &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.end'))\n ) {\n this.filters[`${dateField.name}.end`] = max\n }\n }\n\n if (dateField && dateField.filter.type === 'date') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes(dateField.name))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n }\n }\n\n private getDefaultSortColumn(fields: components['schemas']['FieldDefinition'][]) {\n const defaultSortColumn = fields.find((f) => f.defaultsort)\n return defaultSortColumn ? defaultSortColumn.name : fields.find((f) => f.sortable)?.name\n }\n\n getPageSize(queryParams: ParsedQs, template: Template, reportType?: ReportType): number | undefined {\n let pageSize\n if (!reportType || reportType === ReportType.REPORT) {\n pageSize = queryParams.pageSize && template ? Number(queryParams.pageSize) : this.getDefaultPageSize(template)\n }\n return pageSize\n }\n\n toRecordWithFilterPrefix(removeClearedFilters = false): Record<string, string | Array<string>> {\n const record: Record<string, string | Array<string>> = {\n selectedPage: this.selectedPage.toString(),\n ...(this.pageSize && { pageSize: this.pageSize.toString() }),\n sortColumn: this.sortColumn,\n sortedAsc: this.sortedAsc.toString(),\n columns: this.columns,\n }\n\n if (this.dataProductDefinitionsPath) {\n record.dataProductDefinitionsPath = this.dataProductDefinitionsPath\n }\n\n Object.keys(this.filters).forEach((filterName) => {\n const value = this.filters[filterName]\n if (!removeClearedFilters || value !== clearFilterValue) {\n record[`${this.filtersPrefix}${filterName}`] = value\n }\n })\n\n return record\n }\n\n private getDefaultPageSize(template: Template) {\n const maxResultsSize = 500000\n const standardPage = 20\n\n switch (template) {\n case 'list-section':\n case 'summary-section':\n case 'row-section-child':\n case 'parent-child':\n return maxResultsSize\n\n default:\n return standardPage\n }\n }\n}\n\nexport { ReportQuery }\nexport default ReportQuery\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import type { ParsedQs } from 'qs'\nimport { FilteredListRequest } from './index'\nimport Dict = NodeJS.Dict\nimport { components } from './api'\nimport { clearFilterValue } from '../utils/urlHelper'\nimport ColumnUtils from '../components/_reports/report-columns-form/utils'\nimport { Template } from './Templates'\nimport { ReportType } from './UserReports'\n\nexport const DEFAULT_FILTERS_PREFIX = 'filters.'\n\nclass ReportQuery implements FilteredListRequest {\n selectedPage: number\n\n pageSize: number | undefined\n\n sortColumn?: string\n\n columns: Array<string>\n\n sortedAsc: boolean\n\n filters: Dict<string>\n\n filtersPrefix: string\n\n dataProductDefinitionsPath?: string\n\n constructor({\n fields,\n template,\n queryParams,\n definitionsPath,\n filtersPrefix = DEFAULT_FILTERS_PREFIX,\n reportType,\n }: {\n fields: components['schemas']['FieldDefinition'][]\n template?: Template\n queryParams: ParsedQs\n definitionsPath?: string\n filtersPrefix?: string\n reportType?: ReportType\n }) {\n this.selectedPage = queryParams.selectedPage ? Number(queryParams.selectedPage) : 1\n this.pageSize = this.getPageSize(queryParams, template, reportType)\n this.sortColumn = queryParams.sortColumn ? queryParams.sortColumn.toString() : this.getDefaultSortColumn(fields)\n this.sortedAsc = queryParams.sortedAsc !== 'false'\n this.dataProductDefinitionsPath =\n definitionsPath ??\n (queryParams.dataProductDefinitionsPath ? queryParams.dataProductDefinitionsPath.toString() : null)\n this.filtersPrefix = filtersPrefix\n\n if (queryParams.columns) {\n const columns =\n typeof queryParams.columns === 'string' ? queryParams.columns.split(',') : (queryParams.columns as string[])\n this.columns = ColumnUtils.ensureMandatoryColumns(fields, columns)\n } else {\n this.columns = fields.filter((f) => f.visible).map((f) => f.name)\n }\n\n let min: string\n let max: string\n const dateField: components['schemas']['FieldDefinition'] = fields.find((f) => {\n return (\n (f.type === 'date' && f.filter && f.filter.type === 'daterange') ||\n (f.type === 'date' && f.filter && f.filter.type === 'date')\n )\n })\n if (dateField) ({ min, max } = dateField.filter)\n\n this.filters = {}\n\n Object.keys(queryParams)\n .filter((key) => key.startsWith(this.filtersPrefix))\n .filter((key) => queryParams[key])\n .forEach((key) => {\n const filter = key.replace(this.filtersPrefix, '')\n let value = queryParams[key].toString()\n if (filter.includes('.start') && min) {\n if (new Date(value) < new Date(min)) value = min\n }\n if (filter.includes('.end') && max) {\n if (new Date(value) > new Date(max)) value = max\n }\n if (value !== 'no-filter') {\n this.filters[filter] = value\n }\n })\n\n if (dateField && dateField.filter.type === 'daterange') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.start'))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n\n if (\n max &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes('.end'))\n ) {\n this.filters[`${dateField.name}.end`] = max\n }\n }\n\n if (dateField && dateField.filter.type === 'date') {\n if (\n min &&\n Object.keys(queryParams).some((key) => key.includes(this.filtersPrefix)) &&\n Object.keys(queryParams).every((key) => !key.includes(dateField.name))\n ) {\n this.filters[`${dateField.name}.start`] = min\n }\n }\n }\n\n private getDefaultSortColumn(fields: components['schemas']['FieldDefinition'][]) {\n const defaultSortColumn = fields.find((f) => f.defaultsort)\n return defaultSortColumn ? defaultSortColumn.name : fields.find((f) => f.sortable)?.name\n }\n\n getPageSize(queryParams: ParsedQs, template: Template, reportType?: ReportType): number | undefined {\n let pageSize\n if (!reportType || reportType === ReportType.REPORT) {\n pageSize = queryParams.pageSize && template ? Number(queryParams.pageSize) : this.getDefaultPageSize(template)\n }\n return pageSize\n }\n\n toRecordWithFilterPrefix(removeClearedFilters = false): Record<string, string | Array<string>> {\n const record: Record<string, string | Array<string>> = {\n selectedPage: this.selectedPage.toString(),\n ...(this.pageSize && { pageSize: this.pageSize.toString() }),\n sortColumn: this.sortColumn,\n sortedAsc: this.sortedAsc.toString(),\n columns: this.columns,\n }\n\n if (this.dataProductDefinitionsPath) {\n record.dataProductDefinitionsPath = this.dataProductDefinitionsPath\n }\n\n Object.keys(this.filters).forEach((filterName) => {\n const value = this.filters[filterName]\n if (!removeClearedFilters || value !== clearFilterValue) {\n record[`${this.filtersPrefix}${filterName}`] = value\n }\n })\n\n return record\n }\n\n private getDefaultPageSize(template: Template) {\n const maxResultsSize = 500000\n const standardPage = 20\n\n switch (template) {\n case 'list-section':\n case 'summary-section':\n case 'row-section-child':\n case 'parent-child':\n case 'parent-child-section':\n return maxResultsSize\n\n default:\n return standardPage\n }\n }\n}\n\nexport { ReportQuery }\nexport default ReportQuery\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ReportQuery_exports", "__export", "DEFAULT_FILTERS_PREFIX", "ReportQuery", "ReportQuery_default", "__toCommonJS", "import_urlHelper", "import_utils", "import_UserReports", "fields", "template", "queryParams", "definitionsPath", "filtersPrefix", "reportType", "columns", "ColumnUtils", "f", "min", "max", "dateField", "key", "filter", "value", "defaultSortColumn", "pageSize", "removeClearedFilters", "record", "filterName"]
|
|
7
7
|
}
|
package/dpr/types/ReportQuery.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var P=Object.create;var u=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var N=(s,c)=>{for(var t in c)u(s,t,{get:c[t],enumerable:!0})},f=(s,c,t,r)=>{if(c&&typeof c=="object"||typeof c=="function")for(let e of A(c))!F.call(s,e)&&e!==t&&u(s,e,{get:()=>c[e],enumerable:!(r=v(c,e))||r.enumerable});return s};var S=(s,c,t)=>(t=s!=null?P(w(s)):{},f(c||!s||!s.__esModule?u(t,"default",{value:s,enumerable:!0}):t,s)),B=s=>f(u({},"__esModule",{value:!0}),s);var J={};N(J,{ParentChildDataTableBuilder:()=>C,default:()=>H});module.exports=B(J);var g=S(require("../DataTableBuilder/DataTableBuilder")),b=require("../arrayUtils"),T=S(require("../SectionedDataTableBuilder/SectionedDataTableBuilder"));class C extends T.default{constructor(t){const{specification:r}=t,{sections:e,template:i}=r;super(r);this.childData=[];this.sections=e,this.template=i,this.variant=t,this.childVariants=this.variant.childVariants||[]}createParentChildTable(t,r){let e={};const i=this.mapNamesToFields(this.childVariants.flatMap(a=>a.joinFields).reduce(b.distinct,[])),n=this.calculateParentChildKeys(t,i);n.forEach(a=>{e[a.sortKey]={parent:[]}}),e=this.splitParentDataIntoSections(e,t,i),e=this.splitChildDataIntoSections(n,e);const l=this.createChildDataTableBuilders();return n.flatMap(a=>{const d=e[a.sortKey]||{};let p=[];return d&&(p=d.parent?d.parent:[]),[r].concat(p.map(h=>this.mapRow(h,"dpr-parent-cell"))).concat(this.childVariants.filter(h=>d&&d[h.id]).map(h=>{const D=l[h.id],m=d[h.id],y=D&&m?D.buildTable(m):void 0,K=y?this.convertDataTableToHtml(y):"";return[{classes:"dpr-child-report-cell",format:"string",html:`<div class='dpr-child-report'><h2 class="govuk-heading-s">${h.name}</h2><div class="dpr-child-report_table">${K}</div></div>`,colspan:this.columns.length}]}))})}createParentChildSectionRows(t,r){const i=this.mapSections(t).sectionedData,n=[];return Object.keys(i).forEach(o=>{const a=i[o];n.push({sectionDescription:o,...this.getSectionCount(i,o),rows:this.createParentChildTable(a,r)})}),n.flatMap((o,a)=>[...this.createSectionHeader(o.sectionDescription,a,o.count,o.countDescription),...o.rows])}mapParentChildData(t,r){return this.sections?.length?this.createParentChildSectionRows(t,r):this.createParentChildTable(t,r)}createChildDataTableBuilders(){return this.childVariants.reduce((r,e)=>{const{specification:i}=e,n=i?i.fields:[],l=n.filter(a=>a.visible||a.mandatory).map(a=>a.name),o=new g.default(n).withNoHeaderOptions(l).withSortedData();return{...r,[e.id]:o}},{})}calculateParentChildKeys(t,r){return t.map(e=>({sortKey:this.getSortKey(e,r),childSortKeys:this.childVariants.reduce((i,n)=>({...i,[n.id]:this.getSortKey(e,this.mapNamesToFields(n.joinFields))}),{})})).reduce((e,i)=>e.find(n=>n.sortKey===i.sortKey)?e:e.concat(i),[])}splitParentDataIntoSections(t,r,e){return r.reduce((i,n)=>{const l=this.getSortKey(n,e),o=i[l]?i[l].parent:[];return{...i,...o&&{[l]:{parent:o.concat(n)}}}},t)}splitChildDataIntoSections(t,r){const e={...r};return this.childVariants.forEach(i=>{const n=this.mapNamesToFields(i.joinFields),l=this.childData.find(a=>a.id===i.id);(l?l.data:[]).filter(a=>{const d=this.getSortKey(a,n);return t.find(p=>p.childSortKeys[i.id]===d)}).forEach(a=>{const d=this.getSortKey(a,n),p=t.find(m=>m.childSortKeys[i.id]===d),h=p?p.sortKey:"",D=e[h];if(D){const m=D[i.id]||[];D[i.id]=m.concat(a)}})}),e}withChildData(t){return this.childData=t,this}buildTable(t){return{head:null,rows:this.mapParentChildData(t,this.mapHeader(!0,"govuk-table__header")),rowCount:t.length,colCount:this.columns.length}}}var H=C;0&&(module.exports={ParentChildDataTableBuilder});
|
|
2
2
|
//# sourceMappingURL=ParentChildDataTableBuilder.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.ts"],
|
|
4
|
-
"sourcesContent": ["import Dict = NodeJS.Dict\nimport { components } from '../../types/api'\nimport { Cell, DataTable, FieldDefinition } from '../DataTableBuilder/types'\nimport DataTableBuilder from '../DataTableBuilder/DataTableBuilder'\nimport { distinct } from '../arrayUtils'\nimport { ChildData, ParentChildSortKey } from './types'\nimport
|
|
5
|
-
"mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAGA,IAAAK,EAA6B,mDAC7BC,EAAyB,yBAEzBC,
|
|
6
|
-
"names": ["ParentChildDataTableBuilder_exports", "__export", "ParentChildDataTableBuilder", "ParentChildDataTableBuilder_default", "__toCommonJS", "import_DataTableBuilder", "import_arrayUtils", "
|
|
4
|
+
"sourcesContent": ["import Dict = NodeJS.Dict\nimport { components } from '../../types/api'\nimport { Cell, DataTable, FieldDefinition } from '../DataTableBuilder/types'\nimport DataTableBuilder from '../DataTableBuilder/DataTableBuilder'\nimport { distinct } from '../arrayUtils'\nimport { ChildData, ParentChildSortKey } from './types'\nimport SectionedDataTableBuilder from '../SectionedDataTableBuilder/SectionedDataTableBuilder'\n\nclass ParentChildDataTableBuilder extends SectionedDataTableBuilder {\n variant: components['schemas']['VariantDefinition']\n\n childVariants: components['schemas']['ChildVariantDefinition'][]\n\n childData: Array<ChildData> = []\n\n constructor(variant: components['schemas']['VariantDefinition']) {\n const { specification } = variant\n const { sections, template } = <components['schemas']['Specification']>specification\n super(<components['schemas']['Specification']>specification)\n\n this.sections = sections\n this.template = template\n this.variant = variant\n this.childVariants = this.variant.childVariants || []\n }\n\n private createParentChildTable(parentData: Array<Dict<string>>, header: Cell[]) {\n let sectionedParentChildData: Dict<Dict<Array<Dict<string>>>> = {}\n const joinFields = this.mapNamesToFields(this.childVariants.flatMap((c) => c.joinFields).reduce(distinct, []))\n // Get the parent-child joins definition data\n\n // Create the section keys and\n const parentChildKeys = this.calculateParentChildKeys(parentData, joinFields)\n parentChildKeys.forEach((parentKey) => {\n sectionedParentChildData[parentKey.sortKey] = {\n parent: [],\n }\n })\n\n sectionedParentChildData = this.splitParentDataIntoSections(sectionedParentChildData, parentData, joinFields)\n sectionedParentChildData = this.splitChildDataIntoSections(parentChildKeys, sectionedParentChildData)\n\n const childDataTableBuilders = this.createChildDataTableBuilders()\n\n const parentChildTable = parentChildKeys.flatMap((key) => {\n const sectionData = sectionedParentChildData[key.sortKey] || {}\n\n let parentSectionData: Dict<string>[] = []\n if (sectionData) {\n parentSectionData = sectionData.parent ? sectionData.parent : []\n }\n\n return [header].concat(parentSectionData.map((r) => this.mapRow(r, 'dpr-parent-cell'))).concat(\n this.childVariants\n .filter((childVariant) => sectionData && sectionData[childVariant.id])\n .map((childVariant) => {\n const builder = childDataTableBuilders[childVariant.id]\n const section = sectionData[childVariant.id]\n const dataTable = builder && section ? builder.buildTable(section) : undefined\n const dataTableHtml = dataTable ? this.convertDataTableToHtml(dataTable) : ''\n\n return [\n {\n classes: 'dpr-child-report-cell',\n format: 'string',\n html: `<div class='dpr-child-report'><h2 class=\"govuk-heading-s\">${childVariant.name}</h2><div class=\"dpr-child-report_table\">${dataTableHtml}</div></div>`,\n colspan: this.columns.length,\n },\n ]\n }),\n )\n })\n\n return parentChildTable\n }\n\n private createParentChildSectionRows(parentData: Array<Dict<string>>, header: Cell[]) {\n const sectionsDetails = this.mapSections(parentData)\n const sectionedData = sectionsDetails.sectionedData as Dict<Array<Dict<string>>>\n const sectionedParentChildSectionedRows: {\n sectionDescription: string\n rows: Cell[][]\n count: number\n countDescription: string\n }[] = []\n\n Object.keys(sectionedData).forEach((sectionDescription) => {\n const data = sectionedData[sectionDescription] as Array<Dict<string>>\n\n sectionedParentChildSectionedRows.push({\n sectionDescription,\n ...this.getSectionCount(sectionedData, sectionDescription),\n rows: this.createParentChildTable(data, header),\n })\n })\n\n const rows = sectionedParentChildSectionedRows.flatMap((section, index) => {\n const sectionHeader = this.createSectionHeader(\n section.sectionDescription,\n index,\n section.count,\n section.countDescription,\n )\n return [...sectionHeader, ...section.rows]\n })\n\n return rows\n }\n\n private mapParentChildData(parentData: Array<Dict<string>>, header: Cell[]): Cell[][] {\n if (this.sections?.length) {\n return this.createParentChildSectionRows(parentData, header)\n }\n return this.createParentChildTable(parentData, header)\n }\n\n private createChildDataTableBuilders() {\n const childDataTables: Dict<DataTableBuilder> = this.childVariants.reduce((previousValue, childVariant) => {\n const { specification } = childVariant\n const fields = specification ? specification.fields : []\n const fieldNamesToDisplay = fields.filter((f) => f.visible || f.mandatory).map((f) => f.name)\n\n const dataTableBuilder = new DataTableBuilder(fields).withNoHeaderOptions(fieldNamesToDisplay).withSortedData()\n\n return {\n ...previousValue,\n [childVariant.id]: dataTableBuilder,\n }\n }, {})\n return childDataTables\n }\n\n private calculateParentChildKeys(parentData: Array<NodeJS.Dict<string>>, joinFields: FieldDefinition[]) {\n return parentData\n .map(\n (rowData): ParentChildSortKey => ({\n sortKey: this.getSortKey(rowData, joinFields),\n childSortKeys: this.childVariants.reduce((previousValue, childVariant) => {\n return {\n ...previousValue,\n [childVariant.id]: this.getSortKey(rowData, this.mapNamesToFields(childVariant.joinFields)),\n }\n }, {}),\n }),\n )\n .reduce((previousValue: ParentChildSortKey[], sortKey: ParentChildSortKey) => {\n if (previousValue.find((v) => v.sortKey === sortKey.sortKey)) {\n return previousValue\n }\n return previousValue.concat(sortKey)\n }, [])\n }\n\n private splitParentDataIntoSections(\n sectionedParentChildData: NodeJS.Dict<NodeJS.Dict<Array<NodeJS.Dict<string>>>>,\n parentData: Array<NodeJS.Dict<string>>,\n joinFields: FieldDefinition[],\n ) {\n return parentData.reduce((previousValue, rowData) => {\n const parentKey: string = this.getSortKey(rowData, joinFields)\n const previousParentValue = previousValue[parentKey] ? previousValue[parentKey].parent : []\n\n return {\n ...previousValue,\n ...(previousParentValue && {\n [parentKey]: {\n parent: previousParentValue.concat(rowData),\n },\n }),\n }\n }, sectionedParentChildData)\n }\n\n private splitChildDataIntoSections(\n parentKeys: ParentChildSortKey[],\n sectionedParentChildData: Dict<Dict<Array<Dict<string>>>>,\n ): Dict<Dict<Array<Dict<string>>>> {\n const sectionedParentChildDataWithChildren = { ...sectionedParentChildData }\n\n this.childVariants.forEach((childVariant) => {\n const childFields = this.mapNamesToFields(childVariant.joinFields)\n const matchingChildData = this.childData.find((d) => d.id === childVariant.id)\n const data = matchingChildData ? matchingChildData.data : []\n\n data\n .filter((rowData) => {\n const sortKey = this.getSortKey(rowData, childFields)\n return parentKeys.find((p) => p.childSortKeys[childVariant.id] === sortKey)\n })\n .forEach((rowData) => {\n const sortKey = this.getSortKey(rowData, childFields)\n const parent = parentKeys.find((p) => p.childSortKeys[childVariant.id] === sortKey)\n const parentSortKey = parent ? parent.sortKey : ''\n const parentSection = sectionedParentChildDataWithChildren[parentSortKey]\n if (parentSection) {\n const existingChildData = parentSection[childVariant.id] || []\n parentSection[childVariant.id] = existingChildData.concat(rowData)\n }\n })\n })\n\n return sectionedParentChildDataWithChildren\n }\n\n withChildData(childData: Array<ChildData>) {\n this.childData = childData\n return this\n }\n\n buildTable(data: Array<Dict<string>>): DataTable {\n return {\n head: null,\n rows: this.mapParentChildData(data, this.mapHeader(true, 'govuk-table__header')),\n rowCount: data.length,\n colCount: this.columns.length,\n }\n }\n}\n\nexport { ParentChildDataTableBuilder }\nexport default ParentChildDataTableBuilder\n"],
|
|
5
|
+
"mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAGA,IAAAK,EAA6B,mDAC7BC,EAAyB,yBAEzBC,EAAsC,qEAEtC,MAAML,UAAoC,EAAAM,OAA0B,CAOlE,YAAYC,EAAqD,CAC/D,KAAM,CAAE,cAAAC,CAAc,EAAID,EACpB,CAAE,SAAAE,EAAU,SAAAC,CAAS,EAA4CF,EACvE,MAA8CA,CAAa,EAL7D,eAA8B,CAAC,EAO7B,KAAK,SAAWC,EAChB,KAAK,SAAWC,EAChB,KAAK,QAAUH,EACf,KAAK,cAAgB,KAAK,QAAQ,eAAiB,CAAC,CACtD,CAEQ,uBAAuBI,EAAiCC,EAAgB,CAC9E,IAAIC,EAA4D,CAAC,EACjE,MAAMC,EAAa,KAAK,iBAAiB,KAAK,cAAc,QAASC,GAAMA,EAAE,UAAU,EAAE,OAAO,WAAU,CAAC,CAAC,CAAC,EAIvGC,EAAkB,KAAK,yBAAyBL,EAAYG,CAAU,EAC5EE,EAAgB,QAASC,GAAc,CACrCJ,EAAyBI,EAAU,OAAO,EAAI,CAC5C,OAAQ,CAAC,CACX,CACF,CAAC,EAEDJ,EAA2B,KAAK,4BAA4BA,EAA0BF,EAAYG,CAAU,EAC5GD,EAA2B,KAAK,2BAA2BG,EAAiBH,CAAwB,EAEpG,MAAMK,EAAyB,KAAK,6BAA6B,EA+BjE,OA7ByBF,EAAgB,QAASG,GAAQ,CACxD,MAAMC,EAAcP,EAAyBM,EAAI,OAAO,GAAK,CAAC,EAE9D,IAAIE,EAAoC,CAAC,EACzC,OAAID,IACFC,EAAoBD,EAAY,OAASA,EAAY,OAAS,CAAC,GAG1D,CAACR,CAAM,EAAE,OAAOS,EAAkB,IAAKC,GAAM,KAAK,OAAOA,EAAG,iBAAiB,CAAC,CAAC,EAAE,OACtF,KAAK,cACF,OAAQC,GAAiBH,GAAeA,EAAYG,EAAa,EAAE,CAAC,EACpE,IAAKA,GAAiB,CACrB,MAAMC,EAAUN,EAAuBK,EAAa,EAAE,EAChDE,EAAUL,EAAYG,EAAa,EAAE,EACrCG,EAAYF,GAAWC,EAAUD,EAAQ,WAAWC,CAAO,EAAI,OAC/DE,EAAgBD,EAAY,KAAK,uBAAuBA,CAAS,EAAI,GAE3E,MAAO,CACL,CACE,QAAS,wBACT,OAAQ,SACR,KAAM,6DAA6DH,EAAa,IAAI,4CAA4CI,CAAa,eAC7I,QAAS,KAAK,QAAQ,MACxB,CACF,CACF,CAAC,CACL,CACF,CAAC,CAGH,CAEQ,6BAA6BhB,EAAiCC,EAAgB,CAEpF,MAAMgB,EADkB,KAAK,YAAYjB,CAAU,EACb,cAChCkB,EAKA,CAAC,EAEP,cAAO,KAAKD,CAAa,EAAE,QAASE,GAAuB,CACzD,MAAMC,EAAOH,EAAcE,CAAkB,EAE7CD,EAAkC,KAAK,CACrC,mBAAAC,EACA,GAAG,KAAK,gBAAgBF,EAAeE,CAAkB,EACzD,KAAM,KAAK,uBAAuBC,EAAMnB,CAAM,CAChD,CAAC,CACH,CAAC,EAEYiB,EAAkC,QAAQ,CAACJ,EAASO,IAOxD,CAAC,GANc,KAAK,oBACzBP,EAAQ,mBACRO,EACAP,EAAQ,MACRA,EAAQ,gBACV,EAC0B,GAAGA,EAAQ,IAAI,CAC1C,CAGH,CAEQ,mBAAmBd,EAAiCC,EAA0B,CACpF,OAAI,KAAK,UAAU,OACV,KAAK,6BAA6BD,EAAYC,CAAM,EAEtD,KAAK,uBAAuBD,EAAYC,CAAM,CACvD,CAEQ,8BAA+B,CAarC,OAZgD,KAAK,cAAc,OAAO,CAACqB,EAAeV,IAAiB,CACzG,KAAM,CAAE,cAAAf,CAAc,EAAIe,EACpBW,EAAS1B,EAAgBA,EAAc,OAAS,CAAC,EACjD2B,EAAsBD,EAAO,OAAQE,GAAMA,EAAE,SAAWA,EAAE,SAAS,EAAE,IAAKA,GAAMA,EAAE,IAAI,EAEtFC,EAAmB,IAAI,EAAAC,QAAiBJ,CAAM,EAAE,oBAAoBC,CAAmB,EAAE,eAAe,EAE9G,MAAO,CACL,GAAGF,EACH,CAACV,EAAa,EAAE,EAAGc,CACrB,CACF,EAAG,CAAC,CAAC,CAEP,CAEQ,yBAAyB1B,EAAwCG,EAA+B,CACtG,OAAOH,EACJ,IACE4B,IAAiC,CAChC,QAAS,KAAK,WAAWA,EAASzB,CAAU,EAC5C,cAAe,KAAK,cAAc,OAAO,CAACmB,EAAeV,KAChD,CACL,GAAGU,EACH,CAACV,EAAa,EAAE,EAAG,KAAK,WAAWgB,EAAS,KAAK,iBAAiBhB,EAAa,UAAU,CAAC,CAC5F,GACC,CAAC,CAAC,CACP,EACF,EACC,OAAO,CAACU,EAAqCO,IACxCP,EAAc,KAAMQ,GAAMA,EAAE,UAAYD,EAAQ,OAAO,EAClDP,EAEFA,EAAc,OAAOO,CAAO,EAClC,CAAC,CAAC,CACT,CAEQ,4BACN3B,EACAF,EACAG,EACA,CACA,OAAOH,EAAW,OAAO,CAACsB,EAAeM,IAAY,CACnD,MAAMtB,EAAoB,KAAK,WAAWsB,EAASzB,CAAU,EACvD4B,EAAsBT,EAAchB,CAAS,EAAIgB,EAAchB,CAAS,EAAE,OAAS,CAAC,EAE1F,MAAO,CACL,GAAGgB,EACH,GAAIS,GAAuB,CACzB,CAACzB,CAAS,EAAG,CACX,OAAQyB,EAAoB,OAAOH,CAAO,CAC5C,CACF,CACF,CACF,EAAG1B,CAAwB,CAC7B,CAEQ,2BACN8B,EACA9B,EACiC,CACjC,MAAM+B,EAAuC,CAAE,GAAG/B,CAAyB,EAE3E,YAAK,cAAc,QAASU,GAAiB,CAC3C,MAAMsB,EAAc,KAAK,iBAAiBtB,EAAa,UAAU,EAC3DuB,EAAoB,KAAK,UAAU,KAAMC,GAAMA,EAAE,KAAOxB,EAAa,EAAE,GAChEuB,EAAoBA,EAAkB,KAAO,CAAC,GAGxD,OAAQP,GAAY,CACnB,MAAMC,EAAU,KAAK,WAAWD,EAASM,CAAW,EACpD,OAAOF,EAAW,KAAM,GAAM,EAAE,cAAcpB,EAAa,EAAE,IAAMiB,CAAO,CAC5E,CAAC,EACA,QAASD,GAAY,CACpB,MAAMC,EAAU,KAAK,WAAWD,EAASM,CAAW,EAC9CG,EAASL,EAAW,KAAMM,GAAMA,EAAE,cAAc1B,EAAa,EAAE,IAAMiB,CAAO,EAC5EU,EAAgBF,EAASA,EAAO,QAAU,GAC1CG,EAAgBP,EAAqCM,CAAa,EACxE,GAAIC,EAAe,CACjB,MAAMC,EAAoBD,EAAc5B,EAAa,EAAE,GAAK,CAAC,EAC7D4B,EAAc5B,EAAa,EAAE,EAAI6B,EAAkB,OAAOb,CAAO,CACnE,CACF,CAAC,CACL,CAAC,EAEMK,CACT,CAEA,cAAcS,EAA6B,CACzC,YAAK,UAAYA,EACV,IACT,CAEA,WAAWtB,EAAsC,CAC/C,MAAO,CACL,KAAM,KACN,KAAM,KAAK,mBAAmBA,EAAM,KAAK,UAAU,GAAM,qBAAqB,CAAC,EAC/E,SAAUA,EAAK,OACf,SAAU,KAAK,QAAQ,MACzB,CACF,CACF,CAGA,IAAO9B,EAAQD",
|
|
6
|
+
"names": ["ParentChildDataTableBuilder_exports", "__export", "ParentChildDataTableBuilder", "ParentChildDataTableBuilder_default", "__toCommonJS", "import_DataTableBuilder", "import_arrayUtils", "import_SectionedDataTableBuilder", "SectionedDataTableBuilder", "variant", "specification", "sections", "template", "parentData", "header", "sectionedParentChildData", "joinFields", "c", "parentChildKeys", "parentKey", "childDataTableBuilders", "key", "sectionData", "parentSectionData", "r", "childVariant", "builder", "section", "dataTable", "dataTableHtml", "sectionedData", "sectionedParentChildSectionedRows", "sectionDescription", "data", "index", "previousValue", "fields", "fieldNamesToDisplay", "f", "dataTableBuilder", "DataTableBuilder", "rowData", "sortKey", "v", "previousParentValue", "parentKeys", "sectionedParentChildDataWithChildren", "childFields", "matchingChildData", "d", "parent", "p", "parentSortKey", "parentSection", "existingChildData", "childData"]
|
|
7
7
|
}
|
|
@@ -4,7 +4,6 @@ import { Cell, DataTable, FieldDefinition } from '../DataTableBuilder/types'
|
|
|
4
4
|
import DataTableBuilder from '../DataTableBuilder/DataTableBuilder'
|
|
5
5
|
import { distinct } from '../arrayUtils'
|
|
6
6
|
import { ChildData, ParentChildSortKey } from './types'
|
|
7
|
-
import logger from '../logger'
|
|
8
7
|
import SectionedDataTableBuilder from '../SectionedDataTableBuilder/SectionedDataTableBuilder'
|
|
9
8
|
|
|
10
9
|
class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
@@ -28,12 +27,10 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
|
28
27
|
private createParentChildTable(parentData: Array<Dict<string>>, header: Cell[]) {
|
|
29
28
|
let sectionedParentChildData: Dict<Dict<Array<Dict<string>>>> = {}
|
|
30
29
|
const joinFields = this.mapNamesToFields(this.childVariants.flatMap((c) => c.joinFields).reduce(distinct, []))
|
|
31
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ joinFields }, null, 2))
|
|
32
30
|
// Get the parent-child joins definition data
|
|
33
31
|
|
|
34
32
|
// Create the section keys and
|
|
35
33
|
const parentChildKeys = this.calculateParentChildKeys(parentData, joinFields)
|
|
36
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ parentChildKeys }, null, 2))
|
|
37
34
|
parentChildKeys.forEach((parentKey) => {
|
|
38
35
|
sectionedParentChildData[parentKey.sortKey] = {
|
|
39
36
|
parent: [],
|
|
@@ -43,8 +40,6 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
|
43
40
|
sectionedParentChildData = this.splitParentDataIntoSections(sectionedParentChildData, parentData, joinFields)
|
|
44
41
|
sectionedParentChildData = this.splitChildDataIntoSections(parentChildKeys, sectionedParentChildData)
|
|
45
42
|
|
|
46
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionedParentChildData }, null, 2))
|
|
47
|
-
|
|
48
43
|
const childDataTableBuilders = this.createChildDataTableBuilders()
|
|
49
44
|
|
|
50
45
|
const parentChildTable = parentChildKeys.flatMap((key) => {
|
|
@@ -76,14 +71,11 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
|
76
71
|
)
|
|
77
72
|
})
|
|
78
73
|
|
|
79
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ parentChildTable }, null, 2))
|
|
80
|
-
|
|
81
74
|
return parentChildTable
|
|
82
75
|
}
|
|
83
76
|
|
|
84
77
|
private createParentChildSectionRows(parentData: Array<Dict<string>>, header: Cell[]) {
|
|
85
78
|
const sectionsDetails = this.mapSections(parentData)
|
|
86
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionsDetails }, null, 2))
|
|
87
79
|
const sectionedData = sectionsDetails.sectionedData as Dict<Array<Dict<string>>>
|
|
88
80
|
const sectionedParentChildSectionedRows: {
|
|
89
81
|
sectionDescription: string
|
|
@@ -93,16 +85,13 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
|
93
85
|
}[] = []
|
|
94
86
|
|
|
95
87
|
Object.keys(sectionedData).forEach((sectionDescription) => {
|
|
96
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionDescription }, null, 2))
|
|
97
88
|
const data = sectionedData[sectionDescription] as Array<Dict<string>>
|
|
98
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ data }, null, 2))
|
|
99
89
|
|
|
100
90
|
sectionedParentChildSectionedRows.push({
|
|
101
91
|
sectionDescription,
|
|
102
92
|
...this.getSectionCount(sectionedData, sectionDescription),
|
|
103
93
|
rows: this.createParentChildTable(data, header),
|
|
104
94
|
})
|
|
105
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionedParentChildSectionedRows }, null, 2))
|
|
106
95
|
})
|
|
107
96
|
|
|
108
97
|
const rows = sectionedParentChildSectionedRows.flatMap((section, index) => {
|
|
@@ -114,7 +103,6 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
|
114
103
|
)
|
|
115
104
|
return [...sectionHeader, ...section.rows]
|
|
116
105
|
})
|
|
117
|
-
logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ rows }, null, 2))
|
|
118
106
|
|
|
119
107
|
return rows
|
|
120
108
|
}
|
|
@@ -191,14 +179,6 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
|
|
|
191
179
|
|
|
192
180
|
this.childVariants.forEach((childVariant) => {
|
|
193
181
|
const childFields = this.mapNamesToFields(childVariant.joinFields)
|
|
194
|
-
logger.info(
|
|
195
|
-
'DPR-Parent-child-template-debugging splitChildDataIntoSections',
|
|
196
|
-
JSON.stringify({
|
|
197
|
-
childFields,
|
|
198
|
-
parentKeys,
|
|
199
|
-
}),
|
|
200
|
-
)
|
|
201
|
-
|
|
202
182
|
const matchingChildData = this.childData.find((d) => d.id === childVariant.id)
|
|
203
183
|
const data = matchingChildData ? matchingChildData.data : []
|
|
204
184
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
|
|
3
3
|
"description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
|
|
4
|
-
"version": "4.14.
|
|
4
|
+
"version": "4.14.2",
|
|
5
5
|
"main": "dpr/all.mjs",
|
|
6
6
|
"sass": "dpr/all.scss",
|
|
7
7
|
"engines": {
|