@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.14.0 → 4.14.1

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.
@@ -1,2 +1,2 @@
1
- var N=Object.create;var m=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var O=(l,c)=>{for(var t in c)m(l,t,{get:c[t],enumerable:!0})},C=(l,c,t,r)=>{if(c&&typeof c=="object"||typeof c=="function")for(let i of v(c))!R.call(l,i)&&i!==t&&m(l,i,{get:()=>c[i],enumerable:!(r=J(c,i))||r.enumerable});return l};var f=(l,c,t)=>(t=l!=null?N(A(l)):{},C(c||!l||!l.__esModule?m(t,"default",{value:l,enumerable:!0}):t,l)),w=l=>C(m({},"__esModule",{value:!0}),l);var B={};O(B,{ParentChildDataTableBuilder:()=>y,default:()=>F});module.exports=w(B);var P=f(require("../DataTableBuilder/DataTableBuilder")),b=require("../arrayUtils"),h=f(require("../logger")),T=f(require("../SectionedDataTableBuilder/SectionedDataTableBuilder"));class y extends T.default{constructor(t){const{specification:r}=t,{sections:i,template:e}=r;super(r);this.childData=[];this.sections=i,this.template=e,this.variant=t,this.childVariants=this.variant.childVariants||[]}createParentChildTable(t,r){let i={};const e=this.mapNamesToFields(this.childVariants.flatMap(a=>a.joinFields).reduce(b.distinct,[]));h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({joinFields:e},null,2));const n=this.calculateParentChildKeys(t,e);h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({parentChildKeys:n},null,2)),n.forEach(a=>{i[a.sortKey]={parent:[]}}),i=this.splitParentDataIntoSections(i,t,e),i=this.splitChildDataIntoSections(n,i),h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionedParentChildData:i},null,2));const o=this.createChildDataTableBuilders(),s=n.flatMap(a=>{const d=i[a.sortKey]||{};let g=[];return d&&(g=d.parent?d.parent:[]),[r].concat(g.map(p=>this.mapRow(p,"dpr-parent-cell"))).concat(this.childVariants.filter(p=>d&&d[p.id]).map(p=>{const D=o[p.id],u=d[p.id],S=D&&u?D.buildTable(u):void 0,K=S?this.convertDataTableToHtml(S):"";return[{classes:"dpr-child-report-cell",format:"string",html:`<div class='dpr-child-report'><h2 class="govuk-heading-s">${p.name}</h2><div class="dpr-child-report_table">${K}</div></div>`,colspan:this.columns.length}]}))});return h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({parentChildTable:s},null,2)),s}createParentChildSectionRows(t,r){const i=this.mapSections(t);h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionsDetails:i},null,2));const e=i.sectionedData,n=[];Object.keys(e).forEach(s=>{h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionDescription:s},null,2));const a=e[s];h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({data:a},null,2)),n.push({sectionDescription:s,...this.getSectionCount(e,s),rows:this.createParentChildTable(a,r)}),h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionedParentChildSectionedRows:n},null,2))});const o=n.flatMap((s,a)=>[...this.createSectionHeader(s.sectionDescription,a,s.count,s.countDescription),...s.rows]);return h.default.info("DPR-Parent-child-template-debugging",JSON.stringify({rows:o},null,2)),o}mapParentChildData(t,r){return this.sections?.length?this.createParentChildSectionRows(t,r):this.createParentChildTable(t,r)}createChildDataTableBuilders(){return this.childVariants.reduce((r,i)=>{const{specification:e}=i,n=e?e.fields:[],o=n.filter(a=>a.visible||a.mandatory).map(a=>a.name),s=new P.default(n).withNoHeaderOptions(o).withSortedData();return{...r,[i.id]:s}},{})}calculateParentChildKeys(t,r){return t.map(i=>({sortKey:this.getSortKey(i,r),childSortKeys:this.childVariants.reduce((e,n)=>({...e,[n.id]:this.getSortKey(i,this.mapNamesToFields(n.joinFields))}),{})})).reduce((i,e)=>i.find(n=>n.sortKey===e.sortKey)?i:i.concat(e),[])}splitParentDataIntoSections(t,r,i){return r.reduce((e,n)=>{const o=this.getSortKey(n,i),s=e[o]?e[o].parent:[];return{...e,...s&&{[o]:{parent:s.concat(n)}}}},t)}splitChildDataIntoSections(t,r){const i={...r};return this.childVariants.forEach(e=>{const n=this.mapNamesToFields(e.joinFields);h.default.info("DPR-Parent-child-template-debugging splitChildDataIntoSections",JSON.stringify({childFields:n,parentKeys:t}));const o=this.childData.find(a=>a.id===e.id);(o?o.data:[]).filter(a=>{const d=this.getSortKey(a,n);return t.find(g=>g.childSortKeys[e.id]===d)}).forEach(a=>{const d=this.getSortKey(a,n),g=t.find(u=>u.childSortKeys[e.id]===d),p=g?g.sortKey:"",D=i[p];if(D){const u=D[e.id]||[];D[e.id]=u.concat(a)}})}),i}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 F=y;0&&(module.exports={ParentChildDataTableBuilder});
1
+ var K=Object.create;var f=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var A=(o,d)=>{for(var i in d)f(o,i,{get:d[i],enumerable:!0})},P=(o,d,i,r)=>{if(d&&typeof d=="object"||typeof d=="function")for(let t of R(d))!v.call(o,t)&&t!==i&&f(o,t,{get:()=>d[t],enumerable:!(r=J(d,t))||r.enumerable});return o};var m=(o,d,i)=>(i=o!=null?K(O(o)):{},P(d||!o||!o.__esModule?f(i,"default",{value:o,enumerable:!0}):i,o)),F=o=>P(f({},"__esModule",{value:!0}),o);var B={};A(B,{ParentChildDataTableBuilder:()=>y,default:()=>w});module.exports=F(B);var b=m(require("../DataTableBuilder/DataTableBuilder")),C=require("../arrayUtils"),l=m(require("../logger")),N=m(require("../SectionedDataTableBuilder/SectionedDataTableBuilder"));class y extends N.default{constructor(i){const{specification:r}=i,{sections:t,template:e}=r;super(r);this.childData=[];this.sections=t,this.template=e,this.variant=i,this.childVariants=this.variant.childVariants||[]}createParentChildTable(i,r){let t={};const e=this.mapNamesToFields(this.childVariants.flatMap(n=>n.joinFields).reduce(C.distinct,[]));l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({joinFields:e},null,2));const a=this.calculateParentChildKeys(i,e);l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({parentChildKeys:a},null,2)),a.forEach(n=>{t[n.sortKey]={parent:[]}}),t=this.splitParentDataIntoSections(t,i,e),t=this.splitChildDataIntoSections(a,t),l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionedParentChildData:t},null,2));const c=this.createChildDataTableBuilders(),s=a.flatMap(n=>{const h=t[n.sortKey]||{};let p=[];return h&&(p=h.parent?h.parent:[]),[r].concat(p.map(g=>this.mapRow(g,"dpr-parent-cell"))).concat(this.childVariants.filter(g=>h&&h[g.id]).map(g=>{const u=c[g.id],D=h[g.id],S=u&&D?u.buildTable(D):void 0,T=S?this.convertDataTableToHtml(S):"";return[{classes:"dpr-child-report-cell",format:"string",html:`<div class='dpr-child-report'><h2 class="govuk-heading-s">${g.name}</h2><div class="dpr-child-report_table">${T}</div></div>`,colspan:this.columns.length}]}))});return l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({parentChildTable:s},null,2)),s}createParentChildSectionRows(i,r){const t=this.mapSections(i);l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionsDetails:t},null,2));const e=t.sectionedData,a=[];Object.keys(e).forEach(s=>{l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionDescription:s},null,2));const n=e[s];l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({data:n},null,2)),a.push({sectionDescription:s,...this.getSectionCount(e,s),rows:this.createParentChildTable(n,r)}),l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionedParentChildSectionedRows:a},null,2))});const c=a.flatMap((s,n)=>[...this.createSectionHeader(s.sectionDescription,n,s.count,s.countDescription),...s.rows]);return l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({rows:c},null,2)),c}mapParentChildData(i,r){return this.sections?.length?this.createParentChildSectionRows(i,r):this.createParentChildTable(i,r)}createChildDataTableBuilders(){return this.childVariants.reduce((r,t)=>{const{specification:e}=t,a=e?e.fields:[],c=a.filter(n=>n.visible||n.mandatory).map(n=>n.name),s=new b.default(a).withNoHeaderOptions(c).withSortedData();return{...r,[t.id]:s}},{})}calculateParentChildKeys(i,r){return i.map(t=>({sortKey:this.getSortKey(t,r),childSortKeys:this.childVariants.reduce((e,a)=>({...e,[a.id]:this.getSortKey(t,this.mapNamesToFields(a.joinFields))}),{})})).reduce((t,e)=>t.find(a=>a.sortKey===e.sortKey)?t:t.concat(e),[])}splitParentDataIntoSections(i,r,t){return r.reduce((e,a)=>{const c=this.getSortKey(a,t),s=e[c]?e[c].parent:[];return{...e,...s&&{[c]:{parent:s.concat(a)}}}},i)}splitChildDataIntoSections(i,r){const t={...r};return l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({childData:this.childData},null,2)),this.childVariants.forEach(e=>{const a=this.mapNamesToFields(e.joinFields);l.default.info("DPR-Parent-child-template-debugging splitChildDataIntoSections",JSON.stringify({childFields:a,parentKeys:i},null,2));const c=this.childData.find(n=>(l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({childDataId:n.id,childVariantId:e.id},null,2)),n.id===e.id)),s=c?c.data:[];l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({matchingChildData:c,data:s},null,2)),s.filter(n=>{const h=this.getSortKey(n,a);return i.find(p=>p.childSortKeys[e.id]===h)}).forEach(n=>{l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({rowData:n},null,2));const h=this.getSortKey(n,a),p=i.find(D=>D.childSortKeys[e.id]===h),g=p?p.sortKey:"",u=t[g];if(u){const D=u[e.id]||[];u[e.id]=D.concat(n)}})}),l.default.info("DPR-Parent-child-template-debugging",JSON.stringify({sectionedParentChildDataWithChildren:t},null,2)),t}withChildData(i){return this.childData=i,this}buildTable(i){return{head:null,rows:this.mapParentChildData(i,this.mapHeader(!0,"govuk-table__header")),rowCount:i.length,colCount:this.columns.length}}}var w=y;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 logger from '../logger'\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ joinFields }, null, 2))\n // Get the parent-child joins definition data\n\n // Create the section keys and\n const parentChildKeys = this.calculateParentChildKeys(parentData, joinFields)\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ parentChildKeys }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionedParentChildData }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ parentChildTable }, null, 2))\n\n return parentChildTable\n }\n\n private createParentChildSectionRows(parentData: Array<Dict<string>>, header: Cell[]) {\n const sectionsDetails = this.mapSections(parentData)\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionsDetails }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionDescription }, null, 2))\n const data = sectionedData[sectionDescription] as Array<Dict<string>>\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ data }, null, 2))\n\n sectionedParentChildSectionedRows.push({\n sectionDescription,\n ...this.getSectionCount(sectionedData, sectionDescription),\n rows: this.createParentChildTable(data, header),\n })\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionedParentChildSectionedRows }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ rows }, null, 2))\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 logger.info(\n 'DPR-Parent-child-template-debugging splitChildDataIntoSections',\n JSON.stringify({\n childFields,\n parentKeys,\n }),\n )\n\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,EAAmB,wBACnBC,EAAsC,qEAEtC,MAAMN,UAAoC,EAAAO,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,EAC7G,EAAAC,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,WAAAF,CAAW,EAAG,KAAM,CAAC,CAAC,EAI1F,MAAMG,EAAkB,KAAK,yBAAyBN,EAAYG,CAAU,EAC5E,EAAAE,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,gBAAAC,CAAgB,EAAG,KAAM,CAAC,CAAC,EAC/FA,EAAgB,QAASC,GAAc,CACrCL,EAAyBK,EAAU,OAAO,EAAI,CAC5C,OAAQ,CAAC,CACX,CACF,CAAC,EAEDL,EAA2B,KAAK,4BAA4BA,EAA0BF,EAAYG,CAAU,EAC5GD,EAA2B,KAAK,2BAA2BI,EAAiBJ,CAAwB,EAEpG,EAAAG,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,yBAAAH,CAAyB,EAAG,KAAM,CAAC,CAAC,EAExG,MAAMM,EAAyB,KAAK,6BAA6B,EAE3DC,EAAmBH,EAAgB,QAASI,GAAQ,CACxD,MAAMC,EAAcT,EAAyBQ,EAAI,OAAO,GAAK,CAAC,EAE9D,IAAIE,EAAoC,CAAC,EACzC,OAAID,IACFC,EAAoBD,EAAY,OAASA,EAAY,OAAS,CAAC,GAG1D,CAACV,CAAM,EAAE,OAAOW,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,EAAUP,EAAuBM,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,EAED,SAAAb,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,iBAAAI,CAAiB,EAAG,KAAM,CAAC,CAAC,EAEzFA,CACT,CAEQ,6BAA6BT,EAAiCC,EAAgB,CACpF,MAAMkB,EAAkB,KAAK,YAAYnB,CAAU,EACnD,EAAAK,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,gBAAAc,CAAgB,EAAG,KAAM,CAAC,CAAC,EAC/F,MAAMC,EAAgBD,EAAgB,cAChCE,EAKA,CAAC,EAEP,OAAO,KAAKD,CAAa,EAAE,QAASE,GAAuB,CACzD,EAAAjB,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,mBAAAiB,CAAmB,EAAG,KAAM,CAAC,CAAC,EAClG,MAAMC,EAAOH,EAAcE,CAAkB,EAC7C,EAAAjB,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,KAAAkB,CAAK,EAAG,KAAM,CAAC,CAAC,EAEpFF,EAAkC,KAAK,CACrC,mBAAAC,EACA,GAAG,KAAK,gBAAgBF,EAAeE,CAAkB,EACzD,KAAM,KAAK,uBAAuBC,EAAMtB,CAAM,CAChD,CAAC,EACD,EAAAI,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,kCAAAgB,CAAkC,EAAG,KAAM,CAAC,CAAC,CACnH,CAAC,EAED,MAAMG,EAAOH,EAAkC,QAAQ,CAACL,EAASS,IAOxD,CAAC,GANc,KAAK,oBACzBT,EAAQ,mBACRS,EACAT,EAAQ,MACRA,EAAQ,gBACV,EAC0B,GAAGA,EAAQ,IAAI,CAC1C,EACD,SAAAX,QAAO,KAAK,sCAAuC,KAAK,UAAU,CAAE,KAAAmB,CAAK,EAAG,KAAM,CAAC,CAAC,EAE7EA,CACT,CAEQ,mBAAmBxB,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,CAACyB,EAAeZ,IAAiB,CACzG,KAAM,CAAE,cAAAjB,CAAc,EAAIiB,EACpBa,EAAS9B,EAAgBA,EAAc,OAAS,CAAC,EACjD+B,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,CAACZ,EAAa,EAAE,EAAGgB,CACrB,CACF,EAAG,CAAC,CAAC,CAEP,CAEQ,yBAAyB9B,EAAwCG,EAA+B,CACtG,OAAOH,EACJ,IACEgC,IAAiC,CAChC,QAAS,KAAK,WAAWA,EAAS7B,CAAU,EAC5C,cAAe,KAAK,cAAc,OAAO,CAACuB,EAAeZ,KAChD,CACL,GAAGY,EACH,CAACZ,EAAa,EAAE,EAAG,KAAK,WAAWkB,EAAS,KAAK,iBAAiBlB,EAAa,UAAU,CAAC,CAC5F,GACC,CAAC,CAAC,CACP,EACF,EACC,OAAO,CAACY,EAAqCO,IACxCP,EAAc,KAAMQ,GAAMA,EAAE,UAAYD,EAAQ,OAAO,EAClDP,EAEFA,EAAc,OAAOO,CAAO,EAClC,CAAC,CAAC,CACT,CAEQ,4BACN/B,EACAF,EACAG,EACA,CACA,OAAOH,EAAW,OAAO,CAAC0B,EAAeM,IAAY,CACnD,MAAMzB,EAAoB,KAAK,WAAWyB,EAAS7B,CAAU,EACvDgC,EAAsBT,EAAcnB,CAAS,EAAImB,EAAcnB,CAAS,EAAE,OAAS,CAAC,EAE1F,MAAO,CACL,GAAGmB,EACH,GAAIS,GAAuB,CACzB,CAAC5B,CAAS,EAAG,CACX,OAAQ4B,EAAoB,OAAOH,CAAO,CAC5C,CACF,CACF,CACF,EAAG9B,CAAwB,CAC7B,CAEQ,2BACNkC,EACAlC,EACiC,CACjC,MAAMmC,EAAuC,CAAE,GAAGnC,CAAyB,EAE3E,YAAK,cAAc,QAASY,GAAiB,CAC3C,MAAMwB,EAAc,KAAK,iBAAiBxB,EAAa,UAAU,EACjE,EAAAT,QAAO,KACL,iEACA,KAAK,UAAU,CACb,YAAAiC,EACA,WAAAF,CACF,CAAC,CACH,EAEA,MAAMG,EAAoB,KAAK,UAAU,KAAMC,GAAMA,EAAE,KAAO1B,EAAa,EAAE,GAChEyB,EAAoBA,EAAkB,KAAO,CAAC,GAGxD,OAAQP,GAAY,CACnB,MAAMC,EAAU,KAAK,WAAWD,EAASM,CAAW,EACpD,OAAOF,EAAW,KAAMK,GAAMA,EAAE,cAAc3B,EAAa,EAAE,IAAMmB,CAAO,CAC5E,CAAC,EACA,QAASD,GAAY,CACpB,MAAMC,EAAU,KAAK,WAAWD,EAASM,CAAW,EAC9CI,EAASN,EAAW,KAAMK,GAAMA,EAAE,cAAc3B,EAAa,EAAE,IAAMmB,CAAO,EAC5EU,EAAgBD,EAASA,EAAO,QAAU,GAC1CE,EAAgBP,EAAqCM,CAAa,EACxE,GAAIC,EAAe,CACjB,MAAMC,EAAoBD,EAAc9B,EAAa,EAAE,GAAK,CAAC,EAC7D8B,EAAc9B,EAAa,EAAE,EAAI+B,EAAkB,OAAOb,CAAO,CACnE,CACF,CAAC,CACL,CAAC,EAEMK,CACT,CAEA,cAAcS,EAA6B,CACzC,YAAK,UAAYA,EACV,IACT,CAEA,WAAWvB,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,IAAOlC,EAAQD",
6
- "names": ["ParentChildDataTableBuilder_exports", "__export", "ParentChildDataTableBuilder", "ParentChildDataTableBuilder_default", "__toCommonJS", "import_DataTableBuilder", "import_arrayUtils", "import_logger", "import_SectionedDataTableBuilder", "SectionedDataTableBuilder", "variant", "specification", "sections", "template", "parentData", "header", "sectionedParentChildData", "joinFields", "c", "logger", "parentChildKeys", "parentKey", "childDataTableBuilders", "parentChildTable", "key", "sectionData", "parentSectionData", "r", "childVariant", "builder", "section", "dataTable", "dataTableHtml", "sectionsDetails", "sectionedData", "sectionedParentChildSectionedRows", "sectionDescription", "data", "rows", "index", "previousValue", "fields", "fieldNamesToDisplay", "f", "dataTableBuilder", "DataTableBuilder", "rowData", "sortKey", "v", "previousParentValue", "parentKeys", "sectionedParentChildDataWithChildren", "childFields", "matchingChildData", "d", "p", "parent", "parentSortKey", "parentSection", "existingChildData", "childData"]
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 logger from '../logger'\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ joinFields }, null, 2))\n // Get the parent-child joins definition data\n\n // Create the section keys and\n const parentChildKeys = this.calculateParentChildKeys(parentData, joinFields)\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ parentChildKeys }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionedParentChildData }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ parentChildTable }, null, 2))\n\n return parentChildTable\n }\n\n private createParentChildSectionRows(parentData: Array<Dict<string>>, header: Cell[]) {\n const sectionsDetails = this.mapSections(parentData)\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionsDetails }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionDescription }, null, 2))\n const data = sectionedData[sectionDescription] as Array<Dict<string>>\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ data }, null, 2))\n\n sectionedParentChildSectionedRows.push({\n sectionDescription,\n ...this.getSectionCount(sectionedData, sectionDescription),\n rows: this.createParentChildTable(data, header),\n })\n logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ sectionedParentChildSectionedRows }, null, 2))\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 logger.info(`DPR-Parent-child-template-debugging`, JSON.stringify({ rows }, null, 2))\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 logger.info('DPR-Parent-child-template-debugging', JSON.stringify({ childData: this.childData }, null, 2))\n\n this.childVariants.forEach((childVariant) => {\n const childFields = this.mapNamesToFields(childVariant.joinFields)\n logger.info(\n 'DPR-Parent-child-template-debugging splitChildDataIntoSections',\n JSON.stringify(\n {\n childFields,\n parentKeys,\n },\n null,\n 2,\n ),\n )\n\n const matchingChildData = this.childData.find((d) => {\n logger.info(\n 'DPR-Parent-child-template-debugging',\n JSON.stringify({ childDataId: d.id, childVariantId: childVariant.id }, null, 2),\n )\n return d.id === childVariant.id\n })\n const data = matchingChildData ? matchingChildData.data : []\n\n logger.info('DPR-Parent-child-template-debugging', JSON.stringify({ matchingChildData, data }, null, 2))\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 logger.info('DPR-Parent-child-template-debugging', JSON.stringify({ rowData }, null, 2))\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 logger.info(\n 'DPR-Parent-child-template-debugging',\n JSON.stringify({ sectionedParentChildDataWithChildren }, null, 2),\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": "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",
6
+ "names": ["ParentChildDataTableBuilder_exports", "__export", "ParentChildDataTableBuilder", "ParentChildDataTableBuilder_default", "__toCommonJS", "import_DataTableBuilder", "import_arrayUtils", "import_logger", "import_SectionedDataTableBuilder", "SectionedDataTableBuilder", "variant", "specification", "sections", "template", "parentData", "header", "sectionedParentChildData", "joinFields", "c", "logger", "parentChildKeys", "parentKey", "childDataTableBuilders", "parentChildTable", "key", "sectionData", "parentSectionData", "r", "childVariant", "builder", "section", "dataTable", "dataTableHtml", "sectionsDetails", "sectionedData", "sectionedParentChildSectionedRows", "sectionDescription", "data", "rows", "index", "previousValue", "fields", "fieldNamesToDisplay", "f", "dataTableBuilder", "DataTableBuilder", "rowData", "sortKey", "v", "previousParentValue", "parentKeys", "sectionedParentChildDataWithChildren", "childFields", "matchingChildData", "d", "parent", "p", "parentSortKey", "parentSection", "existingChildData", "childData"]
7
7
  }
@@ -189,25 +189,40 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
189
189
  ): Dict<Dict<Array<Dict<string>>>> {
190
190
  const sectionedParentChildDataWithChildren = { ...sectionedParentChildData }
191
191
 
192
+ logger.info('DPR-Parent-child-template-debugging', JSON.stringify({ childData: this.childData }, null, 2))
193
+
192
194
  this.childVariants.forEach((childVariant) => {
193
195
  const childFields = this.mapNamesToFields(childVariant.joinFields)
194
196
  logger.info(
195
197
  'DPR-Parent-child-template-debugging splitChildDataIntoSections',
196
- JSON.stringify({
197
- childFields,
198
- parentKeys,
199
- }),
198
+ JSON.stringify(
199
+ {
200
+ childFields,
201
+ parentKeys,
202
+ },
203
+ null,
204
+ 2,
205
+ ),
200
206
  )
201
207
 
202
- const matchingChildData = this.childData.find((d) => d.id === childVariant.id)
208
+ const matchingChildData = this.childData.find((d) => {
209
+ logger.info(
210
+ 'DPR-Parent-child-template-debugging',
211
+ JSON.stringify({ childDataId: d.id, childVariantId: childVariant.id }, null, 2),
212
+ )
213
+ return d.id === childVariant.id
214
+ })
203
215
  const data = matchingChildData ? matchingChildData.data : []
204
216
 
217
+ logger.info('DPR-Parent-child-template-debugging', JSON.stringify({ matchingChildData, data }, null, 2))
218
+
205
219
  data
206
220
  .filter((rowData) => {
207
221
  const sortKey = this.getSortKey(rowData, childFields)
208
222
  return parentKeys.find((p) => p.childSortKeys[childVariant.id] === sortKey)
209
223
  })
210
224
  .forEach((rowData) => {
225
+ logger.info('DPR-Parent-child-template-debugging', JSON.stringify({ rowData }, null, 2))
211
226
  const sortKey = this.getSortKey(rowData, childFields)
212
227
  const parent = parentKeys.find((p) => p.childSortKeys[childVariant.id] === sortKey)
213
228
  const parentSortKey = parent ? parent.sortKey : ''
@@ -219,6 +234,11 @@ class ParentChildDataTableBuilder extends SectionedDataTableBuilder {
219
234
  })
220
235
  })
221
236
 
237
+ logger.info(
238
+ 'DPR-Parent-child-template-debugging',
239
+ JSON.stringify({ sectionedParentChildDataWithChildren }, null, 2),
240
+ )
241
+
222
242
  return sectionedParentChildDataWithChildren
223
243
  }
224
244
 
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.0",
4
+ "version": "4.14.1",
5
5
  "main": "dpr/all.mjs",
6
6
  "sass": "dpr/all.scss",
7
7
  "engines": {