@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.20.1 → 4.20.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.
Files changed (33) hide show
  1. package/dpr/components/_async/async-filters-form/types.d.js +1 -1
  2. package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
  3. package/dpr/components/_async/async-filters-form/types.d.ts +7 -4
  4. package/dpr/components/_async/async-filters-form/utils.js +1 -1
  5. package/dpr/components/_async/async-filters-form/utils.js.map +2 -2
  6. package/dpr/components/_async/async-filters-form/utils.ts +18 -17
  7. package/dpr/components/_filters/filter-input/types.d.js.map +1 -1
  8. package/dpr/components/_filters/filter-input/types.d.ts +1 -1
  9. package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
  10. package/dpr/components/_reports/report-actions/types.d.ts +1 -1
  11. package/dpr/components/report-list/types.d.js.map +1 -1
  12. package/dpr/components/report-list/types.d.ts +1 -1
  13. package/dpr/data/types.d.js +1 -1
  14. package/dpr/data/types.d.js.map +1 -1
  15. package/dpr/data/types.d.ts +2 -1
  16. package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
  17. package/dpr/routes/journeys/view-report/async/report/utils.js.map +2 -2
  18. package/dpr/routes/journeys/view-report/async/report/utils.ts +1 -1
  19. package/dpr/types/Services.d.js +1 -1
  20. package/dpr/types/Services.d.js.map +1 -1
  21. package/dpr/types/Services.d.ts +0 -2
  22. package/dpr/utils/DataTableBuilder/types.d.js +1 -1
  23. package/dpr/utils/DataTableBuilder/types.d.js.map +1 -1
  24. package/dpr/utils/DataTableBuilder/types.d.ts +2 -2
  25. package/dpr/utils/ParentChildDataTableBuilder/types.d.js +1 -1
  26. package/dpr/utils/ParentChildDataTableBuilder/types.d.js.map +1 -1
  27. package/dpr/utils/ParentChildDataTableBuilder/types.d.ts +1 -0
  28. package/dpr/utils/Personalisation/types.d.js +1 -1
  29. package/dpr/utils/Personalisation/types.d.js.map +1 -1
  30. package/dpr/utils/Personalisation/types.d.ts +1 -0
  31. package/dpr/utils/UserStoreItemBuilder.js.map +2 -2
  32. package/dpr/utils/UserStoreItemBuilder.ts +1 -1
  33. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(r,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of o(t))!l.call(r,e)&&e!==s&&n(r,e,{get:()=>t[e],enumerable:!(i=a(t,e))||i.enumerable});return r};var g=r=>u(n({},"__esModule",{value:!0}),r);var f={};module.exports=g(f);
1
+ "use strict";var n=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(t,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of a(r))!l.call(t,e)&&e!==s&&n(t,e,{get:()=>r[e],enumerable:!(i=o(r,e))||i.enumerable});return t};var g=t=>u(n({},"__esModule",{value:!0}),t);var c={};module.exports=g(c);
2
2
  //# sourceMappingURL=types.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_async/async-filters-form/types.d.ts"],
4
- "sourcesContent": ["export interface requestAsyncReportParams {\n apiTimeout: number\n apiUrl: string\n token: string\n reportId: string\n reportVariantId: string\n query: Query\n}\n\n// todo update to correct type\ninterface Query {\n sortColumn: string\n sortedAsc: boolean\n filters: filter[]\n dataProductDefinitionsPath: string\n}\n\ninterface filter {\n [filterId: string]: string\n}\n\nexport interface SortByDefaults {\n options: { text: string; value: string }[]\n value: string\n}\n\nexport interface RenderFiltersReturnValue {\n filters: FilterValue[]\n sortBy?: FilterValue[]\n}\n\nexport interface SetQueryFromFiltersResult {\n query: Dict<string>\n filterData: Dict<string>\n querySummary: Array<Dict<string>>\n sortData: Dict<string>\n}\n"],
4
+ "sourcesContent": ["import { FilterValue } from '../../_filters/types'\nimport Dict = NodeJS.Dict\n\nexport interface requestAsyncReportParams {\n apiTimeout: number\n apiUrl: string\n token: string\n reportId: string\n reportVariantId: string\n query: Query\n}\n\n// todo update to correct type\ninterface Query {\n sortColumn: string\n sortedAsc: boolean\n filters: filter[]\n dataProductDefinitionsPath: string\n}\n\ninterface filter {\n [filterId: string]: string\n}\n\nexport interface SortByDefaults {\n options: { text: string; value: string }[]\n value: string\n}\n\nexport interface RenderFiltersReturnValue {\n filters: FilterValue[]\n sortBy?: FilterValue[]\n}\n\nexport interface SetQueryFromFiltersResult {\n query: Record<string, string>\n filterData: Record<string, string>\n querySummary: Array<Record<string, string>>\n sortData: Record<string, string>\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,3 +1,6 @@
1
+ import { FilterValue } from '../../_filters/types'
2
+ import Dict = NodeJS.Dict
3
+
1
4
  export interface requestAsyncReportParams {
2
5
  apiTimeout: number
3
6
  apiUrl: string
@@ -30,8 +33,8 @@ export interface RenderFiltersReturnValue {
30
33
  }
31
34
 
32
35
  export interface SetQueryFromFiltersResult {
33
- query: Dict<string>
34
- filterData: Dict<string>
35
- querySummary: Array<Dict<string>>
36
- sortData: Dict<string>
36
+ query: Record<string, string>
37
+ filterData: Record<string, string>
38
+ querySummary: Array<Record<string, string>>
39
+ sortData: Record<string, string>
37
40
  }
@@ -1,2 +1,2 @@
1
- "use strict";var O=Object.create;var m=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var v=(t,r)=>{for(var e in r)m(t,e,{get:r[e],enumerable:!0})},F=(t,r,e,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of M(r))!W.call(t,i)&&i!==e&&m(t,i,{get:()=>r[i],enumerable:!(a=x(r,i))||a.enumerable});return t};var u=(t,r,e)=>(e=t!=null?O(R(t)):{},F(r||!t||!t.__esModule?m(e,"default",{value:t,enumerable:!0}):e,t)),N=t=>F(m({},"__esModule",{value:!0}),t);var j={};v(j,{default:()=>U,getSortByFromDefinition:()=>$,renderFilters:()=>Y,setDurationStartAndEnd:()=>b,setQueryFromFilters:()=>A});module.exports=N(j);var h=u(require("./sortByTemplate")),g=u(require("../../../utils/definitionUtils")),S=u(require("../../../utils/DateMapper/DateMapper")),k=u(require("../../_filters/utils")),V=u(require("../../_inputs/date-range/utils"));const $=(t,r)=>{if(!r){const e=h.default.sortByTemplate(),a=t.filter(i=>i.sortable).map(i=>{i.defaultsort&&(e[0].value=i.name);const p={value:i.name,text:i.display};return i.sortDirection&&(e[1].value=i.sortDirection==="asc"?"true":"false"),p});if(a.length){const i=e[0];return i.options=a,e[0]=i,e}}return[]},b=(t,r,e,a,i,p)=>{const{startDate:D,endDate:y}=V.default.calcDates(r),s=D?D.format("YYYY-MM-DD").toString():"",c=y?y.format("YYYY-MM-DD").toString():"",n=t.split(".")[1],o=p.find(f=>f.name===n);e[`filters.${n}.start`]=s,e[`filters.${n}.end`]=c,a[t]=r;let l=`${r.charAt(0).toUpperCase()+r.slice(1).replaceAll("-"," ")}`;return l=`${l} (${s} - ${c})`,i.push({name:o?`${o.display}`:t,value:l}),{querySummary:i,filterData:a,query:e}},Y=async(t,r)=>({filters:k.default.getFiltersFromDefinition(t,!1),sortBy:$(t,r)}),A=(t,r)=>{let e={},a={},i=[];const p={},D=new S.default,y=new URLSearchParams(t.body.search);return Object.keys(t.body).filter(s=>s!=="_csrf"&&t.body[s]!=="").forEach(s=>{const c=s.replace("filters.",""),n=t.body[s];if(s.startsWith("filters.")&&n!==""&&!e[s]&&n!=="no-filter")if(s.includes("relative-duration"))({query:e,filterData:a,querySummary:i}=b(s,n,e,a,i,r));else{let o=y.getAll(s);o=!o||o.length===0?n:o,o=o.length===1?`${o[0]}`:`${o}`,e[s]=o,a[c]=o;let l;if(D.isDate(n)){l=D.toDateString(n,"local-date");const d=D.toDateString(n,"iso");e[s]=d,a[c]=d}const f=g.default.getFieldDisplayName(r,c);i.push({name:f||c,value:l||o})}else if(s.startsWith("sort")){e[s]=n,p[s]=n;const o=g.default.getField(r,n);let l="Sort Direction",f=n==="true"?"Ascending":"Descending";o&&(l="Sort Column",f=o.display),i.push({name:l,value:f})}}),{query:e,filterData:a,querySummary:i,sortData:p}};var U={renderFilters:Y,setQueryFromFilters:A};0&&(module.exports={getSortByFromDefinition,renderFilters,setDurationStartAndEnd,setQueryFromFilters});
1
+ "use strict";var O=Object.create;var D=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var U=(t,i)=>{for(var e in i)D(t,e,{get:i[e],enumerable:!0})},F=(t,i,e,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let r of M(i))!v.call(t,r)&&r!==e&&D(t,r,{get:()=>i[r],enumerable:!(l=x(i,r))||l.enumerable});return t};var u=(t,i,e)=>(e=t!=null?O(W(t)):{},F(i||!t||!t.__esModule?D(e,"default",{value:t,enumerable:!0}):e,t)),j=t=>F(D({},"__esModule",{value:!0}),t);var N={};U(N,{default:()=>B,getSortByFromDefinition:()=>$,renderFilters:()=>Y,setDurationStartAndEnd:()=>b,setQueryFromFilters:()=>A});module.exports=j(N);var h=u(require("./sortByTemplate")),y=u(require("../../../utils/definitionUtils")),S=u(require("../../../utils/DateMapper/DateMapper")),R=u(require("../../_filters/utils")),V=u(require("../../_inputs/date-range/utils"));const $=(t,i)=>{if(!i){const e=h.default.sortByTemplate(),l=t.filter(r=>r.sortable).map(r=>{r.defaultsort&&(e[0].value=r.name);const c={value:r.name,text:r.display};return r.sortDirection&&(e[1].value=r.sortDirection==="asc"?"true":"false"),c});if(l.length){const r=e[0];return r.options=l,e[0]=r,e}}return[]},b=(t,i,e,l,r,c)=>{const{startDate:f,endDate:m}=V.default.calcDates(i),s=f?f.format("YYYY-MM-DD").toString():"",p=m?m.format("YYYY-MM-DD").toString():"",n=t.split(".")[1],o=c.find(d=>d.name===n);e[`filters.${n}.start`]=s,e[`filters.${n}.end`]=p,l[t]=i;let a=`${i.charAt(0).toUpperCase()+i.slice(1).replaceAll("-"," ")}`;return a=`${a} (${s} - ${p})`,r.push({name:o?`${o.display}`:t,value:a}),{querySummary:r,filterData:l,query:e}},Y=async(t,i)=>({filters:R.default.getFiltersFromDefinition(t,!1),sortBy:$(t,i)}),A=(t,i)=>{let e={},l={},r=[];const c={},f=new S.default,m=new URLSearchParams(t.body.search);return Object.keys(t.body).filter(s=>s!=="_csrf"&&t.body[s]!=="").forEach(s=>{const p=s.replace("filters.",""),n=t.body[s];if(s.startsWith("filters.")&&n!==""&&!e[s]&&n!=="no-filter")if(s.includes("relative-duration"))({query:e,filterData:l,querySummary:r}=b(s,n,e,l,r,i));else{let o=m.getAll(s);o=!o||o.length===0?n:o,o=o.length===1?`${o[0]}`:`${o}`,e[s]=o,l[p]=o;let a;if(f.isDate(n)){a=f.toDateString(n,"local-date");const g=f.toDateString(n,"iso");g&&(e[s]=g,l[p]=g)}const d=y.default.getFieldDisplayName(i,p);r.push({name:d||p,value:a||o})}else if(s.startsWith("sort")){e[s]=n,c[s]=n;const o=y.default.getField(i,n);let a="Sort Direction",d=n==="true"?"Ascending":"Descending";o&&(a="Sort Column",d=o.display),r.push({name:a,value:d})}}),{query:e,filterData:l,querySummary:r,sortData:c}};var B={renderFilters:Y,setQueryFromFilters:A};0&&(module.exports={getSortByFromDefinition,renderFilters,setDurationStartAndEnd,setQueryFromFilters});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_async/async-filters-form/utils.ts"],
4
- "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request } from 'express'\nimport { Dayjs } from 'dayjs'\nimport Dict = NodeJS.Dict\nimport type { SetQueryFromFiltersResult } from './types'\nimport type { components } from '../../../types/api'\n\nimport SortHelper from './sortByTemplate'\nimport DefinitionUtils from '../../../utils/definitionUtils'\nimport DateMapper from '../../../utils/DateMapper/DateMapper'\nimport FiltersUtils from '../../_filters/utils'\nimport DateRangeInputUtils from '../../_inputs/date-range/utils'\nimport { FilterOption, FilterValue, FilterValueWithOptions } from '../../_filters/types'\n\n/**\n * Initialises the sortData from the definition\n */\nexport const getSortByFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n if (!interactive) {\n const sortBy = SortHelper.sortByTemplate()\n const options = fields\n .filter((f) => f.sortable)\n .map((f) => {\n if (f.defaultsort) sortBy[0].value = f.name\n const field: FilterOption = { value: f.name, text: f.display }\n if (f.sortDirection) {\n // the 'value' here is whether sortedAsc is true or not\n sortBy[1].value = f.sortDirection === 'asc' ? 'true' : 'false'\n }\n return field\n })\n\n if (options.length) {\n const sortWithOptions: FilterValueWithOptions = <FilterValueWithOptions>sortBy[0]\n sortWithOptions.options = options\n sortBy[0] = sortWithOptions\n return sortBy\n }\n }\n return []\n}\n\nexport const setDurationStartAndEnd = (\n name: string,\n value: string,\n query: Dict<string>,\n filterData: Dict<string>,\n querySummary: Array<Dict<string>>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { startDate, endDate } = DateRangeInputUtils.calcDates(value)\n const startDateDisplayString = startDate ? (<Dayjs>startDate).format('YYYY-MM-DD').toString() : ''\n const endDateDisplayString = endDate ? (<Dayjs>endDate).format('YYYY-MM-DD').toString() : ''\n\n const fieldId = name.split('.')[1]\n const field = fields.find((f) => {\n return f.name === fieldId\n })\n\n query[`filters.${fieldId}.start` as keyof Dict<string>] = startDateDisplayString\n query[`filters.${fieldId}.end` as keyof Dict<string>] = endDateDisplayString\n\n filterData[name as keyof Dict<string>] = value\n\n let queryValue = `${value.charAt(0).toUpperCase() + value.slice(1).replaceAll('-', ' ')}`\n queryValue = `${queryValue} (${startDateDisplayString} - ${endDateDisplayString})`\n querySummary.push({\n name: field ? `${field.display}` : name,\n value: queryValue,\n })\n\n return {\n querySummary,\n filterData,\n query,\n }\n}\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderFilters = async (fields: components['schemas']['FieldDefinition'][], interactive?: boolean) => {\n return {\n filters: FiltersUtils.getFiltersFromDefinition(fields, false),\n sortBy: getSortByFromDefinition(fields, interactive),\n }\n}\n\nexport const setQueryFromFilters = (\n req: Request,\n fields: components['schemas']['FieldDefinition'][],\n): SetQueryFromFiltersResult => {\n let query: Dict<string> = {}\n let filterData: Dict<string> = {}\n let querySummary: Array<Dict<string>> = []\n const sortData: Dict<string> = {}\n const dateMapper = new DateMapper()\n const urlParams = new URLSearchParams(req.body.search)\n\n Object.keys(req.body)\n .filter((name) => name !== '_csrf' && req.body[name] !== '')\n .forEach((name) => {\n const shortName = name.replace('filters.', '')\n const value = req.body[name]\n\n if (name.startsWith('filters.') && value !== '' && !query[name] && value !== 'no-filter') {\n if (name.includes('relative-duration')) {\n ;({ query, filterData, querySummary } = setDurationStartAndEnd(\n name,\n value,\n query,\n filterData,\n querySummary,\n fields,\n ))\n } else {\n let urlParamValue: string | string[] = urlParams.getAll(name)\n urlParamValue = !urlParamValue || urlParamValue.length === 0 ? value : urlParamValue\n urlParamValue = urlParamValue.length === 1 ? `${urlParamValue[0]}` : `${urlParamValue}`\n\n query[name as keyof Dict<string>] = urlParamValue\n filterData[shortName as keyof Dict<string>] = urlParamValue\n\n let dateDisplayValue\n if (dateMapper.isDate(value)) {\n dateDisplayValue = dateMapper.toDateString(value, 'local-date')\n\n const isoFormatDate = dateMapper.toDateString(value, 'iso')\n query[name as keyof Dict<string>] = isoFormatDate\n filterData[shortName as keyof Dict<string>] = isoFormatDate\n }\n\n const fieldDisplayName = DefinitionUtils.getFieldDisplayName(fields, shortName)\n querySummary.push({\n name: fieldDisplayName || shortName,\n value: dateDisplayValue || urlParamValue,\n })\n }\n } else if (name.startsWith('sort')) {\n query[name as keyof Dict<string>] = value\n sortData[name as keyof Dict<string>] = value\n\n const fieldDef = DefinitionUtils.getField(fields, value)\n\n let displayName = 'Sort Direction'\n let displayValue = value === 'true' ? 'Ascending' : 'Descending'\n if (fieldDef) {\n displayName = 'Sort Column'\n displayValue = fieldDef.display\n }\n\n querySummary.push({\n name: displayName,\n value: displayValue,\n })\n }\n })\n\n return {\n query,\n filterData,\n querySummary,\n sortData,\n }\n}\n\nexport default {\n renderFilters,\n setQueryFromFilters,\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request } from 'express'\nimport { Dayjs } from 'dayjs'\nimport type { SetQueryFromFiltersResult } from './types'\nimport type { components } from '../../../types/api'\n\nimport SortHelper from './sortByTemplate'\nimport DefinitionUtils from '../../../utils/definitionUtils'\nimport DateMapper from '../../../utils/DateMapper/DateMapper'\nimport FiltersUtils from '../../_filters/utils'\nimport DateRangeInputUtils from '../../_inputs/date-range/utils'\nimport { FilterOption, FilterValue, FilterValueWithOptions } from '../../_filters/types'\n\n/**\n * Initialises the sortData from the definition\n */\nexport const getSortByFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n if (!interactive) {\n const sortBy = SortHelper.sortByTemplate()\n const options = fields\n .filter((f) => f.sortable)\n .map((f) => {\n if (f.defaultsort) sortBy[0].value = f.name\n const field: FilterOption = { value: f.name, text: f.display }\n if (f.sortDirection) {\n // the 'value' here is whether sortedAsc is true or not\n sortBy[1].value = f.sortDirection === 'asc' ? 'true' : 'false'\n }\n return field\n })\n\n if (options.length) {\n const sortWithOptions: FilterValueWithOptions = <FilterValueWithOptions>sortBy[0]\n sortWithOptions.options = options\n sortBy[0] = sortWithOptions\n return sortBy\n }\n }\n return []\n}\n\nexport const setDurationStartAndEnd = (\n name: string,\n value: string,\n query: Record<string, string>,\n filterData: Record<string, string>,\n querySummary: Array<Record<string, string>>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { startDate, endDate } = DateRangeInputUtils.calcDates(value)\n const startDateDisplayString = startDate ? (<Dayjs>startDate).format('YYYY-MM-DD').toString() : ''\n const endDateDisplayString = endDate ? (<Dayjs>endDate).format('YYYY-MM-DD').toString() : ''\n\n const fieldId = name.split('.')[1]\n const field = fields.find((f) => {\n return f.name === fieldId\n })\n\n query[`filters.${fieldId}.start`] = startDateDisplayString\n query[`filters.${fieldId}.end`] = endDateDisplayString\n\n filterData[name] = value\n\n let queryValue = `${value.charAt(0).toUpperCase() + value.slice(1).replaceAll('-', ' ')}`\n queryValue = `${queryValue} (${startDateDisplayString} - ${endDateDisplayString})`\n querySummary.push({\n name: field ? `${field.display}` : name,\n value: queryValue,\n })\n\n return {\n querySummary,\n filterData,\n query,\n }\n}\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderFilters = async (fields: components['schemas']['FieldDefinition'][], interactive?: boolean) => {\n return {\n filters: FiltersUtils.getFiltersFromDefinition(fields, false),\n sortBy: getSortByFromDefinition(fields, interactive),\n }\n}\n\nexport const setQueryFromFilters = (\n req: Request,\n fields: components['schemas']['FieldDefinition'][],\n): SetQueryFromFiltersResult => {\n let query: Record<string, string> = {}\n let filterData: Record<string, string> = {}\n let querySummary: Array<Record<string, string>> = []\n const sortData: Record<string, string> = {}\n const dateMapper = new DateMapper()\n const urlParams = new URLSearchParams(req.body.search)\n\n Object.keys(req.body)\n .filter((name) => name !== '_csrf' && req.body[name] !== '')\n .forEach((name) => {\n const shortName = name.replace('filters.', '')\n const value = req.body[name]\n\n if (name.startsWith('filters.') && value !== '' && !query[name] && value !== 'no-filter') {\n if (name.includes('relative-duration')) {\n ;({ query, filterData, querySummary } = setDurationStartAndEnd(\n name,\n value,\n query,\n filterData,\n querySummary,\n fields,\n ))\n } else {\n let urlParamValue: string | string[] = urlParams.getAll(name)\n urlParamValue = !urlParamValue || urlParamValue.length === 0 ? value : urlParamValue\n urlParamValue = urlParamValue.length === 1 ? `${urlParamValue[0]}` : `${urlParamValue}`\n\n query[name] = urlParamValue\n filterData[shortName] = urlParamValue\n\n let dateDisplayValue\n if (dateMapper.isDate(value)) {\n dateDisplayValue = dateMapper.toDateString(value, 'local-date')\n\n const isoFormatDate = dateMapper.toDateString(value, 'iso')\n if (isoFormatDate) {\n query[name] = isoFormatDate\n filterData[shortName] = isoFormatDate\n }\n }\n\n const fieldDisplayName = DefinitionUtils.getFieldDisplayName(fields, shortName)\n querySummary.push({\n name: fieldDisplayName || shortName,\n value: dateDisplayValue || urlParamValue,\n })\n }\n } else if (name.startsWith('sort')) {\n query[name] = value\n sortData[name] = value\n\n const fieldDef = DefinitionUtils.getField(fields, value)\n\n let displayName = 'Sort Direction'\n let displayValue = value === 'true' ? 'Ascending' : 'Descending'\n if (fieldDef) {\n displayName = 'Sort Column'\n displayValue = fieldDef.display\n }\n\n querySummary.push({\n name: displayName,\n value: displayValue,\n })\n }\n })\n\n return {\n query,\n filterData,\n querySummary,\n sortData,\n }\n}\n\nexport default {\n renderFilters,\n setQueryFromFilters,\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["utils_exports", "__export", "utils_default", "getSortByFromDefinition", "renderFilters", "setDurationStartAndEnd", "setQueryFromFilters", "__toCommonJS", "import_sortByTemplate", "import_definitionUtils", "import_DateMapper", "import_utils", "fields", "interactive", "sortBy", "SortHelper", "options", "f", "field", "sortWithOptions", "name", "value", "query", "filterData", "querySummary", "startDate", "endDate", "DateRangeInputUtils", "startDateDisplayString", "endDateDisplayString", "fieldId", "queryValue", "FiltersUtils", "req", "sortData", "dateMapper", "DateMapper", "urlParams", "shortName", "urlParamValue", "dateDisplayValue", "isoFormatDate", "fieldDisplayName", "DefinitionUtils", "fieldDef", "displayName", "displayValue"]
7
7
  }
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  import { Request } from 'express'
3
3
  import { Dayjs } from 'dayjs'
4
- import Dict = NodeJS.Dict
5
4
  import type { SetQueryFromFiltersResult } from './types'
6
5
  import type { components } from '../../../types/api'
7
6
 
@@ -46,9 +45,9 @@ export const getSortByFromDefinition = (
46
45
  export const setDurationStartAndEnd = (
47
46
  name: string,
48
47
  value: string,
49
- query: Dict<string>,
50
- filterData: Dict<string>,
51
- querySummary: Array<Dict<string>>,
48
+ query: Record<string, string>,
49
+ filterData: Record<string, string>,
50
+ querySummary: Array<Record<string, string>>,
52
51
  fields: components['schemas']['FieldDefinition'][],
53
52
  ) => {
54
53
  const { startDate, endDate } = DateRangeInputUtils.calcDates(value)
@@ -60,10 +59,10 @@ export const setDurationStartAndEnd = (
60
59
  return f.name === fieldId
61
60
  })
62
61
 
63
- query[`filters.${fieldId}.start` as keyof Dict<string>] = startDateDisplayString
64
- query[`filters.${fieldId}.end` as keyof Dict<string>] = endDateDisplayString
62
+ query[`filters.${fieldId}.start`] = startDateDisplayString
63
+ query[`filters.${fieldId}.end`] = endDateDisplayString
65
64
 
66
- filterData[name as keyof Dict<string>] = value
65
+ filterData[name] = value
67
66
 
68
67
  let queryValue = `${value.charAt(0).toUpperCase() + value.slice(1).replaceAll('-', ' ')}`
69
68
  queryValue = `${queryValue} (${startDateDisplayString} - ${endDateDisplayString})`
@@ -96,10 +95,10 @@ export const setQueryFromFilters = (
96
95
  req: Request,
97
96
  fields: components['schemas']['FieldDefinition'][],
98
97
  ): SetQueryFromFiltersResult => {
99
- let query: Dict<string> = {}
100
- let filterData: Dict<string> = {}
101
- let querySummary: Array<Dict<string>> = []
102
- const sortData: Dict<string> = {}
98
+ let query: Record<string, string> = {}
99
+ let filterData: Record<string, string> = {}
100
+ let querySummary: Array<Record<string, string>> = []
101
+ const sortData: Record<string, string> = {}
103
102
  const dateMapper = new DateMapper()
104
103
  const urlParams = new URLSearchParams(req.body.search)
105
104
 
@@ -124,16 +123,18 @@ export const setQueryFromFilters = (
124
123
  urlParamValue = !urlParamValue || urlParamValue.length === 0 ? value : urlParamValue
125
124
  urlParamValue = urlParamValue.length === 1 ? `${urlParamValue[0]}` : `${urlParamValue}`
126
125
 
127
- query[name as keyof Dict<string>] = urlParamValue
128
- filterData[shortName as keyof Dict<string>] = urlParamValue
126
+ query[name] = urlParamValue
127
+ filterData[shortName] = urlParamValue
129
128
 
130
129
  let dateDisplayValue
131
130
  if (dateMapper.isDate(value)) {
132
131
  dateDisplayValue = dateMapper.toDateString(value, 'local-date')
133
132
 
134
133
  const isoFormatDate = dateMapper.toDateString(value, 'iso')
135
- query[name as keyof Dict<string>] = isoFormatDate
136
- filterData[shortName as keyof Dict<string>] = isoFormatDate
134
+ if (isoFormatDate) {
135
+ query[name] = isoFormatDate
136
+ filterData[shortName] = isoFormatDate
137
+ }
137
138
  }
138
139
 
139
140
  const fieldDisplayName = DefinitionUtils.getFieldDisplayName(fields, shortName)
@@ -143,8 +144,8 @@ export const setQueryFromFilters = (
143
144
  })
144
145
  }
145
146
  } else if (name.startsWith('sort')) {
146
- query[name as keyof Dict<string>] = value
147
- sortData[name as keyof Dict<string>] = value
147
+ query[name] = value
148
+ sortData[name] = value
148
149
 
149
150
  const fieldDef = DefinitionUtils.getField(fields, value)
150
151
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_filters/filter-input/types.d.ts"],
4
- "sourcesContent": ["import { FilterType } from './enum'\n\nexport interface FilterOption {\n value: string\n text: string\n disabled?: boolean\n selected?: boolean\n}\n\nexport type FilterValue = GenericFilterValue | DateFilterValue\n\nexport interface GenericFilterValue {\n text: string\n name: string\n type: FilterType\n value?: string\n options?: Array<FilterOption>\n minimumLength?: number\n dynamicResourceEndpoint?: string\n mandatory?: boolean\n}\n\nexport interface DateFilterValue extends GenericFilterValue {\n type: FilterType.dateRange\n value?: DateRange\n min?: string\n max?: string\n}\n\nexport interface SelectedFilter {\n text: string\n href: string\n classes: string\n}\n\nexport interface DateRange {\n start: string\n end: string\n}\n\nexport interface FilterOptions {\n filters: Array<FilterValue>\n selectedFilters: Array<SelectedFilter>\n}\n"],
4
+ "sourcesContent": ["import { FilterType } from './enum'\n\nexport interface FilterOption {\n value: string\n text: string\n disabled?: boolean\n selected?: boolean\n}\n\nexport type FilterValue = GenericFilterValue | DateFilterValue\n\nexport interface GenericFilterValue {\n text: string\n name: string\n type: FilterType\n value?: string | DateRange\n options?: Array<FilterOption>\n minimumLength?: number\n dynamicResourceEndpoint?: string\n mandatory?: boolean\n}\n\nexport interface DateFilterValue extends GenericFilterValue {\n type: FilterType.dateRange\n value?: DateRange\n min?: string\n max?: string\n}\n\nexport interface SelectedFilter {\n text: string\n href: string\n classes: string\n}\n\nexport interface DateRange {\n start: string\n end: string\n}\n\nexport interface FilterOptions {\n filters: Array<FilterValue>\n selectedFilters: Array<SelectedFilter>\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -13,7 +13,7 @@ export interface GenericFilterValue {
13
13
  text: string
14
14
  name: string
15
15
  type: FilterType
16
- value?: string
16
+ value?: string | DateRange
17
17
  options?: Array<FilterOption>
18
18
  minimumLength?: number
19
19
  dynamicResourceEndpoint?: string
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_reports/report-actions/types.d.ts"],
4
- "sourcesContent": ["import { LoadType } from '../../../types/UserReports'\n\nexport interface DownloadActionParams {\n enabled: boolean\n csrfToken: string\n reportId: string\n reportName: string\n name: string\n id: string\n tableId?: string\n columns: string[]\n definitionPath: string\n canDownload: boolean\n loadType: LoadType\n currentUrl: string\n currentQueryParams?: string | undefined\n nestedBaseUrl: string\n sortColumn?: string\n sortedAsc?: string\n}\n\nexport interface ShareActionParams {\n reportName: string\n name: string\n url: string\n}\n\nexport interface RefreshActionParams {\n url: string\n executionId: string\n}\n\nexport interface PrintActionParams {\n enabled: boolean\n}\n\nexport interface CopyActionParams {\n url: string\n}\n\nexport interface GetActionsParams {\n refresh?: RefreshActionParams\n print?: PrintActionParams\n copy?: CopyActionParams\n share?: ShareActionParams\n download?: DownloadActionParams\n}\n\nexport interface ActionTemplate {\n id: string\n disabled: boolean\n text: string\n ariaLabelText: string\n}\n\nexport interface ActionTemplates {\n refresh: ActionTemplate\n printable: ActionTemplate\n sharable: ActionTemplate\n copy: ActionTemplate\n downloadable: ActionTemplate\n}\n\nexport interface ReportAction {\n id: string\n disabled: boolean\n text: string\n ariaLabelText: string\n href?: string\n attributes?: {\n reportId?: string\n id?: string\n csrfToken?: string\n tableId?: string\n type?: ReportType\n reportName?: string\n name?: string\n columns: string[]\n definitionPath: string\n }\n}\n"],
4
+ "sourcesContent": ["import { LoadType, ReportType } from '../../../types/UserReports'\n\nexport interface DownloadActionParams {\n enabled: boolean\n csrfToken: string\n reportId: string\n reportName: string\n name: string\n id: string\n tableId?: string\n columns: string[]\n definitionPath: string\n canDownload: boolean\n loadType: LoadType\n currentUrl: string\n currentQueryParams?: string | undefined\n nestedBaseUrl: string\n sortColumn?: string\n sortedAsc?: string\n}\n\nexport interface ShareActionParams {\n reportName: string\n name: string\n url: string\n}\n\nexport interface RefreshActionParams {\n url: string\n executionId: string\n}\n\nexport interface PrintActionParams {\n enabled: boolean\n}\n\nexport interface CopyActionParams {\n url: string\n}\n\nexport interface GetActionsParams {\n refresh?: RefreshActionParams\n print?: PrintActionParams\n copy?: CopyActionParams\n share?: ShareActionParams\n download?: DownloadActionParams\n}\n\nexport interface ActionTemplate {\n id: string\n disabled: boolean\n text: string\n ariaLabelText: string\n}\n\nexport interface ActionTemplates {\n refresh: ActionTemplate\n printable: ActionTemplate\n sharable: ActionTemplate\n copy: ActionTemplate\n downloadable: ActionTemplate\n}\n\nexport interface ReportAction {\n id: string\n disabled: boolean\n text: string\n ariaLabelText: string\n href?: string\n attributes?: {\n reportId?: string\n id?: string\n csrfToken?: string\n tableId?: string\n type?: ReportType\n reportName?: string\n name?: string\n columns: string[]\n definitionPath: string\n }\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import { LoadType } from '../../../types/UserReports'
1
+ import { LoadType, ReportType } from '../../../types/UserReports'
2
2
 
3
3
  export interface DownloadActionParams {
4
4
  enabled: boolean
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/report-list/types.d.ts"],
4
- "sourcesContent": ["import { NextFunction, Request, Response } from 'express'\nimport Dict = NodeJS.Dict\nimport ReportQuery from '../../types/ReportQuery'\nimport { ListWithWarnings } from '../../data/types'\nimport { components } from '../../types/api'\n\nexport interface ListDataSources {\n data: Promise<Dict<string>[]> | Promise<ListWithWarnings>\n count: Promise<number>\n}\n\nexport interface RenderListWithDataInput {\n title: string\n reportName?: string\n variantDefinition: components['schemas']['VariantDefinition']\n request: Request\n response: Response\n next: NextFunction\n getListDataSources: (reportQuery: ReportQuery) => ListDataSources\n otherOptions?: Dict<object>\n layoutTemplate: string\n dynamicAutocompleteEndpoint?: string\n}\n\nexport interface RenderListWithDefinitionInput {\n definitionName: string\n variantName: string\n request: Request\n response: Response\n next: NextFunction\n apiUrl: string\n layoutTemplate: string\n token: string\n title?: string\n otherOptions?: Dict<object>\n dynamicAutocompleteEndpoint?: string\n apiTimeout: number\n definitionsPath?: string\n}\n\nexport interface CreateRequestHandlerInput {\n title?: string\n definitionName: string\n variantName: string\n apiUrl: string\n apiTimeout\n otherOptions?: Dict<object>\n layoutTemplate: string\n tokenProvider: (request: Request, response: Response, next: NextFunction) => string\n dynamicAutocompleteEndpoint?: string\n definitionsPath?: string\n}\n"],
4
+ "sourcesContent": ["import { NextFunction, Request, Response } from 'express'\nimport Dict = NodeJS.Dict\nimport ReportQuery from '../../types/ReportQuery'\nimport { ListWithWarnings } from '../../data/types'\nimport { components } from '../../types/api'\n\nexport interface ListDataSources {\n data: Promise<Dict<string>[]> | Promise<ListWithWarnings>\n count: Promise<number>\n}\n\nexport interface RenderListWithDataInput {\n title: string\n reportName?: string\n variantDefinition: components['schemas']['VariantDefinition']\n request: Request\n response: Response\n next: NextFunction\n getListDataSources: (reportQuery: ReportQuery) => ListDataSources\n otherOptions?: Dict<object>\n layoutTemplate: string\n dynamicAutocompleteEndpoint?: string\n}\n\nexport interface RenderListWithDefinitionInput {\n definitionName: string\n variantName: string\n request: Request\n response: Response\n next: NextFunction\n apiUrl: string\n layoutTemplate: string\n token: string\n title?: string\n otherOptions?: Dict<object>\n dynamicAutocompleteEndpoint?: string\n apiTimeout: number\n definitionsPath?: string\n}\n\nexport interface CreateRequestHandlerInput {\n title?: string\n definitionName: string\n variantName: string\n apiUrl: string\n apiTimeout: number\n otherOptions?: Dict<object>\n layoutTemplate: string\n tokenProvider: (request: Request, response: Response, next: NextFunction) => string\n dynamicAutocompleteEndpoint?: string\n definitionsPath?: string\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -43,7 +43,7 @@ export interface CreateRequestHandlerInput {
43
43
  definitionName: string
44
44
  variantName: string
45
45
  apiUrl: string
46
- apiTimeout
46
+ apiTimeout: number
47
47
  otherOptions?: Dict<object>
48
48
  layoutTemplate: string
49
49
  tokenProvider: (request: Request, response: Response, next: NextFunction) => string
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var f=(e,t,s,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of o(t))!g.call(e,n)&&n!==s&&i(e,n,{get:()=>t[n],enumerable:!(r=a(t,n))||r.enumerable});return e};var c=e=>f(i({},"__esModule",{value:!0}),e);var d={};module.exports=c(d);
1
+ "use strict";var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var f=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of o(t))!g.call(e,n)&&n!==s&&r(e,n,{get:()=>t[n],enumerable:!(i=a(t,n))||i.enumerable});return e};var c=e=>f(r({},"__esModule",{value:!0}),e);var d={};module.exports=c(d);
2
2
  //# sourceMappingURL=types.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/data/types.d.ts"],
4
- "sourcesContent": ["import AgentConfig from './agentConfig'\n\nexport interface GetRequest {\n path?: string\n query?: object\n headers?: Record<string, string>\n responseType?: string\n raw?: boolean\n token: string\n}\n\nexport interface ApiConfig {\n url: string\n agent: AgentConfig\n}\n\nexport interface Count {\n count: number\n}\n\nexport interface ListWithWarnings {\n data: Array<Dict<string>>\n warnings: Warnings\n}\n\nexport interface Warnings {\n noDataAvailable?: string | undefined\n}\n\nexport interface FieldValuesRequest {\n token: string\n definitionName: string\n variantName: string\n fieldName: string\n prefix: string\n definitionsPath?: string\n}\n\nexport interface AsyncRequestQuery {\n sortColumn: string\n sortedAsc: boolean\n dataProductDefinitionsPath: string\n [key: string]: string\n}\n\ninterface filter {\n [filterId: string]: string\n}\n"],
4
+ "sourcesContent": ["import AgentConfig from './agentConfig'\nimport Dict = NodeJS.Dict\n\nexport interface GetRequest {\n path?: string\n query?: object\n headers?: Record<string, string>\n responseType?: string\n raw?: boolean\n token: string\n}\n\nexport interface ApiConfig {\n url: string\n agent: AgentConfig\n}\n\nexport interface Count {\n count: number\n}\n\nexport interface ListWithWarnings {\n data: Array<Dict<string>>\n warnings: Warnings\n}\n\nexport interface Warnings {\n noDataAvailable?: string | undefined\n}\n\nexport interface FieldValuesRequest {\n token: string\n definitionName: string\n variantName: string\n fieldName: string\n prefix: string\n definitionsPath?: string\n}\n\nexport interface AsyncRequestQuery {\n sortColumn: string\n sortedAsc: boolean\n dataProductDefinitionsPath: string\n [key: string]: string | boolean\n}\n\ninterface filter {\n [filterId: string]: string\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,4 +1,5 @@
1
1
  import AgentConfig from './agentConfig'
2
+ import Dict = NodeJS.Dict
2
3
 
3
4
  export interface GetRequest {
4
5
  path?: string
@@ -40,7 +41,7 @@ export interface AsyncRequestQuery {
40
41
  sortColumn: string
41
42
  sortedAsc: boolean
42
43
  dataProductDefinitionsPath: string
43
- [key: string]: string
44
+ [key: string]: string | boolean
44
45
  }
45
46
 
46
47
  interface filter {
@@ -1,2 +1,2 @@
1
- "use strict";var M=Object.create;var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var Z=(t,e)=>{for(var o in e)v(t,o,{get:e[o],enumerable:!0})},E=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of J(e))!X.call(t,n)&&n!==o&&v(t,n,{get:()=>e[n],enumerable:!(r=G(e,n))||r.enumerable});return t};var R=(t,e,o)=>(o=t!=null?M(K(t)):{},E(e||!t||!t.__esModule?v(o,"default",{value:t,enumerable:!0}):o,t)),$=t=>E(v({},"__esModule",{value:!0}),t);var ut={};Z(ut,{default:()=>pt,getChildData:()=>Y,getData:()=>O,getSummariesData:()=>W,renderReport:()=>_});module.exports=$(ut);var V=R(require("parseurl")),C=require("../../../../../types/UserReports"),T=R(require("../../../../../types/ReportQuery")),x=require("../../../../../components/_filters/filtersTypeEnum"),A=R(require("../../../../../utils/definitionUtils")),k=R(require("../../../../../components/_reports/report-pagination/utils")),F=R(require("../../../../../components/_reports/report-totals/utils")),q=R(require("../../../../../components/_filters/utils")),Q=R(require("../../../../../components/_reports/report-columns-form/utils")),N=R(require("../../../../../components/_reports/report-actions/utils")),B=R(require("../../../../../components/user-reports/utils")),D=R(require("../../../../../utils/localsHelper")),L=R(require("../../../../../components/_reports/report-data-table/utils")),z=R(require("../../../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder"));const O=async({res:t,req:e,services:o,token:r,userId:n})=>{const{definitionsPath:i}=D.default.getValues(t),{reportId:a,variantId:l,id:c,tableId:d}=e.params,p=l||c,s=await o.requestedReportService.getReportByTableId(d,n),f=s?.query?.data,m=await o.reportingService.getDefinition(r,a,p,i,f),{variant:y}=m,{specification:g}=y;if(!g)throw new Error("No specification found in variant definition");const S=Q.default.getColumns(g,e),w=await tt(m,S,t,e,o,s),U=await et({definition:m,services:o,token:r,req:e,res:t,reportQuery:w}),{summaries:h}=m.variant,I=h?await W(h,o,r,e,t):[],{childVariants:P}=m.variant,b=P?await Y(P,o,r,e,t,s):[];return{definition:m,requestData:s,reportData:U,summariesData:I,childData:b,reportQuery:w,columns:S}},tt=async(t,e,o,r,n,i)=>{const{definitionsPath:a}=D.default.getValues(o),l=A.default.getFields(t),c=A.default.getTemplate(t),d=await q.default.getFilters({fields:l,req:r,filtersType:x.FiltersType.INTERACTIVE,res:o,services:n}),p=r.query?.sortColumn||i?.query?.data?.sortColumn,u=r.query?.sortedAsc||i?.query?.data?.sortedAsc,s=r.query?.selectedPage,f=r.query?.pageSize,m=q.default.setRequestQueryFromFilterValues(d.filters),y={...p&&{sortColumn:p},...u&&{sortedAsc:u},...m,...f&&{pageSize:f},...s&&{selectedPage:s},...e&&{columns:e.value}};return new T.default({fields:l,template:c,queryParams:y,definitionsPath:a})},et=async t=>{const{services:e,token:o,req:r,reportQuery:n}=t,{reportId:i,variantId:a,id:l,tableId:c}=r.params,d=a||l;return e.reportingService.getAsyncReport(o,i,d,c,n.toRecordWithFilterPrefix(!0))},W=async(t,e,o,r,n)=>{const{reportId:i,variantId:a,id:l,tableId:c}=r.params,{definitionsPath:d}=D.default.getValues(n),p=a||l;return Promise.all(t.map(async u=>{const s=await e.reportingService.getAsyncSummaryReport(o,i,p,c,u.id,{dataProductDefinitionsPath:d});return{...u,data:s}}))},Y=async(t,e,o,r,n,i)=>{const{definitionsPath:a}=D.default.getValues(n),{reportId:l}=r.params,c=i?.childExecutionData;if(!c)throw new Error("getChildData: No execution data found for child variants");return Promise.all(t.map(async d=>{const{specification:p}=d;if(!p)throw new Error("getChildData: No specification found in child variant definition");const u=new T.default({fields:p?.fields||[],template:p.template,queryParams:r.query,definitionsPath:a}).toRecordWithFilterPrefix(!0),s=c.find(y=>y.variantId===d.id);if(!s||!s.tableId)throw new Error("getChildData: No matching child execution data found");const{tableId:f}=s,m=await e.reportingService.getAsyncReport(o,l,d.id,f,u);return{id:d.id,data:m}}))},_=async({req:t,res:e,services:o})=>{const{token:r,dprUser:n}=D.default.getValues(e),{definition:i,requestData:a,reportData:l,childData:c,summariesData:d,reportQuery:p,columns:u}=await O({req:t,res:e,services:o,token:r,userId:n.id}),s=L.default.createDataTable(i,u,l,c,d,p),f=await ot(t,e,o,i,d,s,u,p,a),m={...f,dataTable:s};return a&&Object.keys(a).length&&B.default.updateLastViewed({req:t,services:o,reportStateData:a,userId:n.id,filters:f.filterData.filters}),{renderData:m}},ot=async(t,e,o,r,n,i,a,l,c)=>{const{nestedBaseUrl:d}=D.default.getValues(e),p=(0,V.default)(t);if(!p)throw new Error("Unable to set url data from request");const u=p?nt(p,t):void 0,s=ct(r),{fields:f,specification:m}=s,y=c?lt(c):void 0,g=await st(r,o,e,t,l),S=await q.default.getFilters({fields:f,req:t,res:e,services:o,filtersType:x.FiltersType.INTERACTIVE}),w=await it(o,e,t,a,s,y,u),U=at(e,t);let h;n.length&&(h=new z.default(m,n).collatePageSummaries());let I,P;if(s.template==="list"){I=k.default.getPaginationData(p,g,t);const{pageSize:b,currentPage:j,totalRows:H}=I;P=F.default.getTotals(b,j,H,i[0].rowCount)}return{...rt(m)&&{columns:a},filterData:S,count:g,nestedBaseUrl:d,...U,...w,...s,...y,...u,...I&&{pagination:I},...P&&{totals:P},...h&&{reportSummaries:h}}},rt=t=>{const{template:e}=t;return!["row-section","row-section-child","summary","summary-section"].includes(e)},at=(t,e)=>{const{csrfToken:o}=D.default.getValues(t),{tableId:r,reportId:n,id:i}=e.params;return{csrfToken:o,loadType:C.LoadType.ASYNC,type:C.ReportType.REPORT,tableId:r,reportId:n,id:i}},nt=(t,e)=>{const{search:o}=t,r=o?encodeURIComponent(o):void 0,n=o?e.originalUrl.split(o)[0]:e.originalUrl;return{reportUrl:n.replace("/download-disabled","").replace("/download-disabled?",""),reportSearch:o||void 0,encodedSearch:r,pathname:n}},it=async(t,e,o,r,n,i,a)=>{const{csrfToken:l,dprUser:c,bookmarkingEnabled:d,downloadingEnabled:p}=D.default.getValues(e),{reportId:u,id:s}=o.params,{downloadPermissionService:f,bookmarkService:m}=t;let y=!1;p&&(y=await f.downloadEnabledForReport(c.id,u,s));let g;return d&&(g=await m.isBookmarked(s,u,c.id)),{actions:dt(l,r,y,e,o,n,i,a),canDownload:y,bookmarked:g}},st=async(t,e,o,r,n)=>{const{token:i}=D.default.getValues(o),{tableId:a,reportId:l,id:c}=r.params;return t.variant.interactive?e.reportingService.getAsyncInteractiveCount(i,a,l,c,n):e.reportingService.getAsyncCount(i,a)},ct=t=>{const{variant:e,name:o,description:r}=t,{classification:n,printable:i,specification:a,name:l,description:c}=e;if(!a)throw new Error("No specification found in variant definition");const{template:d,fields:p}=a;return{reportName:o,name:l,description:c||r,classification:n,printable:!!i,specification:a,template:d,fields:p}},lt=t=>{const{query:e,url:o,timestamp:r}=t;return{executionId:t.executionId,requestedTimestamp:r.requested?new Date(r.requested).toLocaleString():void 0,querySummary:e?.summary||[],queryData:e?.data,requestUrl:o?.request,defaultQuery:o?.report?.default,dataProductDefinitionsPath:t.dataProductDefinitionsPath}},dt=(t,e,o,r,n,i,a,l)=>{const{reportName:c,name:d,printable:p}=i,{tableId:u,id:s,reportId:f}=n.params,{nestedBaseUrl:m,definitionsPath:y,downloadingEnabled:g}=D.default.getValues(r);let S;l&&g&&(S={enabled:g,name:d,reportName:c,csrfToken:t,reportId:f,id:s,tableId:u,columns:e.value,definitionPath:y,loadType:C.LoadType.ASYNC,nestedBaseUrl:m,canDownload:o,currentUrl:l.pathname,currentQueryParams:l.reportSearch,...a?.queryData&&{sortColumn:a.queryData.sortColumn,sortedAsc:a.queryData.sortedAsc}});let w,U;a?.requestUrl?.fullUrl&&(w={reportName:c,name:d,url:a.requestUrl.fullUrl},U={url:a.requestUrl.fullUrl});let h;return a?.executionId&&a?.requestUrl?.fullUrl&&(h={url:a.requestUrl.fullUrl,executionId:a.executionId}),N.default.getActions({...S&&{download:S},...w&&{share:w},...h&&{refresh:h},...U&&{copy:U},print:{enabled:p}})};var pt={renderReport:_};0&&(module.exports={getChildData,getData,getSummariesData,renderReport});
1
+ "use strict";var M=Object.create;var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var Z=(t,e)=>{for(var o in e)v(t,o,{get:e[o],enumerable:!0})},E=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of J(e))!X.call(t,n)&&n!==o&&v(t,n,{get:()=>e[n],enumerable:!(r=G(e,n))||r.enumerable});return t};var R=(t,e,o)=>(o=t!=null?M(K(t)):{},E(e||!t||!t.__esModule?v(o,"default",{value:t,enumerable:!0}):o,t)),$=t=>E(v({},"__esModule",{value:!0}),t);var ut={};Z(ut,{default:()=>pt,getChildData:()=>Y,getData:()=>O,getSummariesData:()=>W,renderReport:()=>_});module.exports=$(ut);var V=R(require("parseurl")),C=require("../../../../../types/UserReports"),T=R(require("../../../../../types/ReportQuery")),x=require("../../../../../components/_filters/filtersTypeEnum"),A=R(require("../../../../../utils/definitionUtils")),k=R(require("../../../../../components/_reports/report-pagination/utils")),F=R(require("../../../../../components/_reports/report-totals/utils")),q=R(require("../../../../../components/_filters/utils")),Q=R(require("../../../../../components/_reports/report-columns-form/utils")),N=R(require("../../../../../components/_reports/report-actions/utils")),B=R(require("../../../../../components/user-reports/utils")),h=R(require("../../../../../utils/localsHelper")),L=R(require("../../../../../components/_reports/report-data-table/utils")),z=R(require("../../../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder"));const O=async({res:t,req:e,services:o,token:r,userId:n})=>{const{definitionsPath:i}=h.default.getValues(t),{reportId:a,variantId:l,id:c,tableId:d}=e.params,p=l||c,s=await o.requestedReportService.getReportByTableId(d,n),f=s?.query?.data,m=await o.reportingService.getDefinition(r,a,p,i,f),{variant:y}=m,{specification:g}=y;if(!g)throw new Error("No specification found in variant definition");const S=Q.default.getColumns(g,e),w=await tt(m,S,t,e,o,s),U=await et({definition:m,services:o,token:r,req:e,res:t,reportQuery:w}),{summaries:D}=m.variant,I=D?await W(D,o,r,e,t):[],{childVariants:P}=m.variant,b=P?await Y(P,o,r,e,t,s):[];return{definition:m,requestData:s,reportData:U,summariesData:I,childData:b,reportQuery:w,columns:S}},tt=async(t,e,o,r,n,i)=>{const{definitionsPath:a}=h.default.getValues(o),l=A.default.getFields(t),c=A.default.getTemplate(t),d=await q.default.getFilters({fields:l,req:r,filtersType:x.FiltersType.INTERACTIVE,res:o,services:n}),p=r.query?.sortColumn||i?.query?.data?.sortColumn,u=r.query?.sortedAsc||i?.query?.data?.sortedAsc,s=r.query?.selectedPage,f=r.query?.pageSize,m=q.default.setRequestQueryFromFilterValues(d.filters),y={...p&&{sortColumn:p},...u&&{sortedAsc:u},...m,...f&&{pageSize:f},...s&&{selectedPage:s},...e&&{columns:e.value}};return new T.default({fields:l,template:c,queryParams:y,definitionsPath:a})},et=async t=>{const{services:e,token:o,req:r,reportQuery:n}=t,{reportId:i,variantId:a,id:l,tableId:c}=r.params,d=a||l;return e.reportingService.getAsyncReport(o,i,d,c,n.toRecordWithFilterPrefix(!0))},W=async(t,e,o,r,n)=>{const{reportId:i,variantId:a,id:l,tableId:c}=r.params,{definitionsPath:d}=h.default.getValues(n),p=a||l;return Promise.all(t.map(async u=>{const s=await e.reportingService.getAsyncSummaryReport(o,i,p,c,u.id,{dataProductDefinitionsPath:d});return{...u,data:s}}))},Y=async(t,e,o,r,n,i)=>{const{definitionsPath:a}=h.default.getValues(n),{reportId:l}=r.params,c=i?.childExecutionData;if(!c)throw new Error("getChildData: No execution data found for child variants");return Promise.all(t.map(async d=>{const{specification:p}=d;if(!p)throw new Error("getChildData: No specification found in child variant definition");const u=new T.default({fields:p?.fields||[],template:"parent-child",queryParams:r.query,definitionsPath:a}).toRecordWithFilterPrefix(!0),s=c.find(y=>y.variantId===d.id);if(!s||!s.tableId)throw new Error("getChildData: No matching child execution data found");const{tableId:f}=s,m=await e.reportingService.getAsyncReport(o,l,d.id,f,u);return{id:d.id,data:m}}))},_=async({req:t,res:e,services:o})=>{const{token:r,dprUser:n}=h.default.getValues(e),{definition:i,requestData:a,reportData:l,childData:c,summariesData:d,reportQuery:p,columns:u}=await O({req:t,res:e,services:o,token:r,userId:n.id}),s=L.default.createDataTable(i,u,l,c,d,p),f=await ot(t,e,o,i,d,s,u,p,a),m={...f,dataTable:s};return a&&Object.keys(a).length&&B.default.updateLastViewed({req:t,services:o,reportStateData:a,userId:n.id,filters:f.filterData.filters}),{renderData:m}},ot=async(t,e,o,r,n,i,a,l,c)=>{const{nestedBaseUrl:d}=h.default.getValues(e),p=(0,V.default)(t);if(!p)throw new Error("Unable to set url data from request");const u=p?nt(p,t):void 0,s=ct(r),{fields:f,specification:m}=s,y=c?lt(c):void 0,g=await st(r,o,e,t,l),S=await q.default.getFilters({fields:f,req:t,res:e,services:o,filtersType:x.FiltersType.INTERACTIVE}),w=await it(o,e,t,a,s,y,u),U=at(e,t);let D;n.length&&(D=new z.default(m,n).collatePageSummaries());let I,P;if(s.template==="list"){I=k.default.getPaginationData(p,g,t);const{pageSize:b,currentPage:j,totalRows:H}=I;P=F.default.getTotals(b,j,H,i[0].rowCount)}return{...rt(m)&&{columns:a},filterData:S,count:g,nestedBaseUrl:d,...U,...w,...s,...y,...u,...I&&{pagination:I},...P&&{totals:P},...D&&{reportSummaries:D}}},rt=t=>{const{template:e}=t;return!["row-section","row-section-child","summary","summary-section"].includes(e)},at=(t,e)=>{const{csrfToken:o}=h.default.getValues(t),{tableId:r,reportId:n,id:i}=e.params;return{csrfToken:o,loadType:C.LoadType.ASYNC,type:C.ReportType.REPORT,tableId:r,reportId:n,id:i}},nt=(t,e)=>{const{search:o}=t,r=o?encodeURIComponent(o):void 0,n=o?e.originalUrl.split(o)[0]:e.originalUrl;return{reportUrl:n.replace("/download-disabled","").replace("/download-disabled?",""),reportSearch:o||void 0,encodedSearch:r,pathname:n}},it=async(t,e,o,r,n,i,a)=>{const{csrfToken:l,dprUser:c,bookmarkingEnabled:d,downloadingEnabled:p}=h.default.getValues(e),{reportId:u,id:s}=o.params,{downloadPermissionService:f,bookmarkService:m}=t;let y=!1;p&&(y=await f.downloadEnabledForReport(c.id,u,s));let g;return d&&(g=await m.isBookmarked(s,u,c.id)),{actions:dt(l,r,y,e,o,n,i,a),canDownload:y,bookmarked:g}},st=async(t,e,o,r,n)=>{const{token:i}=h.default.getValues(o),{tableId:a,reportId:l,id:c}=r.params;return t.variant.interactive?e.reportingService.getAsyncInteractiveCount(i,a,l,c,n):e.reportingService.getAsyncCount(i,a)},ct=t=>{const{variant:e,name:o,description:r}=t,{classification:n,printable:i,specification:a,name:l,description:c}=e;if(!a)throw new Error("No specification found in variant definition");const{template:d,fields:p}=a;return{reportName:o,name:l,description:c||r,classification:n,printable:!!i,specification:a,template:d,fields:p}},lt=t=>{const{query:e,url:o,timestamp:r}=t;return{executionId:t.executionId,requestedTimestamp:r.requested?new Date(r.requested).toLocaleString():void 0,querySummary:e?.summary||[],queryData:e?.data,requestUrl:o?.request,defaultQuery:o?.report?.default,dataProductDefinitionsPath:t.dataProductDefinitionsPath}},dt=(t,e,o,r,n,i,a,l)=>{const{reportName:c,name:d,printable:p}=i,{tableId:u,id:s,reportId:f}=n.params,{nestedBaseUrl:m,definitionsPath:y,downloadingEnabled:g}=h.default.getValues(r);let S;l&&g&&(S={enabled:g,name:d,reportName:c,csrfToken:t,reportId:f,id:s,tableId:u,columns:e.value,definitionPath:y,loadType:C.LoadType.ASYNC,nestedBaseUrl:m,canDownload:o,currentUrl:l.pathname,currentQueryParams:l.reportSearch,...a?.queryData&&{sortColumn:a.queryData.sortColumn,sortedAsc:a.queryData.sortedAsc}});let w,U;a?.requestUrl?.fullUrl&&(w={reportName:c,name:d,url:a.requestUrl.fullUrl},U={url:a.requestUrl.fullUrl});let D;return a?.executionId&&a?.requestUrl?.fullUrl&&(D={url:a.requestUrl.fullUrl,executionId:a.executionId}),N.default.getActions({...S&&{download:S},...w&&{share:w},...D&&{refresh:D},...U&&{copy:U},print:{enabled:p}})};var pt={renderReport:_};0&&(module.exports={getChildData,getData,getSummariesData,renderReport});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/dpr/routes/journeys/view-report/async/report/utils.ts"],
4
- "sourcesContent": ["import parseUrl from 'parseurl'\nimport { Url } from 'url'\nimport { Request, Response } from 'express'\n\n// Types\nimport type { Columns } from '../../../../../components/_reports/report-columns-form/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\nimport type { DataTable } from '../../../../../utils/DataTableBuilder/types'\nimport type { components } from '../../../../../types/api'\nimport type { AsyncSummary, RequestedReport } from '../../../../../types/UserReports'\nimport { LoadType, ReportType } from '../../../../../types/UserReports'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport type { ChildData } from '../../../../../utils/ParentChildDataTableBuilder/types'\nimport type { ExtractedDefinitionData, ExtractedRequestData, ReportUrls } from './types'\nimport type { DownloadActionParams } from '../../../../../components/_reports/report-actions/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\nimport type { Services } from '../../../../../types/Services'\n\n// Utils\nimport definitionUtils from '../../../../../utils/definitionUtils'\nimport PaginationUtils from '../../../../../components/_reports/report-pagination/utils'\nimport TotalsUtils from '../../../../../components/_reports/report-totals/utils'\nimport ReportFiltersUtils from '../../../../../components/_filters/utils'\nimport ColumnUtils from '../../../../../components/_reports/report-columns-form/utils'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport DataTableUtils from '../../../../../components/_reports/report-data-table/utils'\nimport RequestedReportService from '../../../my-reports/requested-reports/service'\n\nimport CollatedSummaryBuilder from '../../../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder'\n\nexport const getData = async ({\n res,\n req,\n services,\n token,\n userId,\n}: AsyncReportUtilsParams & { token: string; userId: string }) => {\n const { definitionsPath: definitionPath } = LocalsHelper.getValues(res)\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n // Get the request data\n const requestedReportService = <RequestedReportService>services.requestedReportService\n const requestData: RequestedReport | undefined = await requestedReportService.getReportByTableId(tableId, userId)\n const queryData = requestData?.query?.data\n\n // Get the definition\n const definition: components['schemas']['SingleVariantReportDefinition'] =\n await services.reportingService.getDefinition(token, reportId, reportVariantId, definitionPath, queryData)\n const { variant } = definition\n const { specification } = variant\n\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n\n // Get the columns\n const columns = ColumnUtils.getColumns(specification, req)\n\n // initialise report query\n const reportQuery = await initReportQuery(definition, columns, res, req, services, requestData)\n\n // Get the reportData\n const reportData = await getReportData({ definition, services, token, req, res, reportQuery })\n\n // Get the summary data, if applicable\n const { summaries } = definition.variant\n const summariesData = !summaries ? [] : await getSummariesData(summaries, services, token, req, res)\n\n // Get the child data, if applicable\n const { childVariants } = definition.variant\n const childData: ChildData[] = !childVariants\n ? []\n : await getChildData(childVariants, services, token, req, res, requestData)\n\n return {\n definition,\n requestData,\n reportData,\n summariesData,\n childData,\n reportQuery,\n columns,\n }\n}\n\nconst initReportQuery = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n columns: Columns,\n res: Response,\n req: Request,\n services: Services,\n requestData?: RequestedReport,\n) => {\n const { definitionsPath } = LocalsHelper.getValues(res)\n const fields = definitionUtils.getFields(definition)\n const template = definitionUtils.getTemplate(definition)\n\n const filtersData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n filtersType: FiltersType.INTERACTIVE,\n res,\n services,\n })\n\n // Sort\n const sortColumn = req.query?.['sortColumn'] || requestData?.query?.data?.['sortColumn']\n const sortedAsc = req.query?.['sortedAsc'] || requestData?.query?.data?.['sortedAsc']\n\n // Pagination\n const selectedPage = req.query?.['selectedPage']\n const pageSize = req.query?.['pageSize']\n\n // Filters\n const filtersQuery = ReportFiltersUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n const queryParams = {\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...filtersQuery,\n ...(pageSize && { pageSize }),\n ...(selectedPage && { selectedPage }),\n ...(columns && { columns: columns.value }),\n }\n\n return new ReportQuery({\n fields,\n template,\n queryParams,\n definitionsPath,\n })\n}\n\nconst getReportData = async (args: {\n definition: components['schemas']['SingleVariantReportDefinition']\n services: Services\n token: string\n req: Request\n res: Response\n reportQuery: ReportQuery\n}) => {\n const { services, token, req, reportQuery } = args\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n return services.reportingService.getAsyncReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n reportQuery.toRecordWithFilterPrefix(true),\n )\n}\n\nexport const getSummariesData = async (\n summaries: components['schemas']['ReportSummary'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n): Promise<AsyncSummary[]> => {\n const { reportId, variantId, id, tableId } = req.params\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const reportVariantId = variantId || id\n\n return Promise.all(\n summaries.map(async (summary) => {\n const summaryReport = await services.reportingService.getAsyncSummaryReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n summary.id,\n {\n dataProductDefinitionsPath,\n },\n )\n\n return {\n ...summary,\n data: summaryReport,\n }\n }),\n )\n}\n\nexport const getChildData = async (\n childVariants: components['schemas']['ChildVariantDefinition'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n requestData?: RequestedReport,\n): Promise<ChildData[]> => {\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const { reportId } = req.params\n const childExecutionData = requestData?.childExecutionData\n if (!childExecutionData) {\n throw new Error('getChildData: No execution data found for child variants')\n }\n return Promise.all(\n childVariants.map(async (childVariant) => {\n const { specification } = childVariant\n if (!specification) {\n throw new Error('getChildData: No specification found in child variant definition')\n }\n\n const query = new ReportQuery({\n fields: specification?.fields || [],\n template: specification.template,\n queryParams: req.query,\n definitionsPath: dataProductDefinitionsPath,\n }).toRecordWithFilterPrefix(true)\n\n const childData = childExecutionData.find((e) => e.variantId === childVariant.id)\n if (!childData || !childData.tableId) {\n throw new Error('getChildData: No matching child execution data found')\n }\n const { tableId: childTableId } = childData\n\n const childReport = await services.reportingService.getAsyncReport(\n token,\n reportId,\n childVariant.id,\n childTableId,\n query,\n )\n\n return {\n id: childVariant.id,\n data: childReport,\n }\n }),\n )\n}\n\n/**\n * Entry point function to render the report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const renderReport = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser } = LocalsHelper.getValues(res)\n\n // Get the report data\n const { definition, requestData, reportData, childData, summariesData, reportQuery, columns } = await getData({\n req,\n res,\n services,\n token,\n userId: dprUser.id,\n })\n\n // Get the data table\n const dataTable: DataTable[] = DataTableUtils.createDataTable(\n definition,\n columns,\n reportData,\n childData,\n summariesData,\n reportQuery,\n )\n\n // Get the template data\n const templateData = await getTemplateData(\n req,\n res,\n services,\n definition,\n summariesData,\n dataTable,\n columns,\n reportQuery,\n requestData,\n )\n\n const renderData = {\n ...templateData,\n dataTable,\n }\n\n if (requestData && Object.keys(requestData).length) {\n UserReportsUtils.updateLastViewed({\n req,\n services,\n reportStateData: requestData,\n userId: dprUser.id,\n filters: templateData.filterData.filters,\n })\n }\n\n return { renderData }\n}\n\nconst getTemplateData = async (\n req: Request,\n res: Response,\n services: Services,\n definition: components['schemas']['SingleVariantReportDefinition'],\n summariesData: AsyncSummary[],\n dataTable: DataTable[],\n columns: Columns,\n reportQuery: ReportQuery,\n requestData?: RequestedReport,\n) => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n // get url data\n const url = parseUrl(req)\n if (!url) {\n throw new Error('Unable to set url data from request')\n }\n\n const urls = url ? setUrls(url, req) : undefined\n\n // get from definition\n const definitionData = extractDataFromDefinition(definition)\n const { fields, specification } = definitionData\n\n // get from requestedData\n const requestedData = requestData ? extractDataFromRequest(requestData) : undefined\n\n // Get the count\n const count = await getCount(definition, services, res, req, reportQuery)\n\n // Get the filters\n const filterData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n res,\n services,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n // Set the features\n const features = await setFeatures(services, res, req, columns, definitionData, requestedData, urls)\n\n // Set the extra meta data\n const meta = setMetaData(res, req)\n\n let reportSummaries\n if (summariesData.length) {\n const collatedSummaryBuilder = new CollatedSummaryBuilder(specification, summariesData)\n reportSummaries = collatedSummaryBuilder.collatePageSummaries()\n }\n\n let pagination\n let totals\n if (definitionData.template === 'list') {\n pagination = PaginationUtils.getPaginationData(url, count, req)\n const { pageSize, currentPage, totalRows } = pagination\n totals = TotalsUtils.getTotals(pageSize, currentPage, totalRows, dataTable[0].rowCount)\n }\n\n return {\n ...(showColumns(specification) && { columns }),\n filterData,\n count,\n nestedBaseUrl,\n ...meta,\n ...features,\n ...definitionData,\n ...requestedData,\n ...urls,\n ...(pagination && { pagination }),\n ...(totals && { totals }),\n ...(reportSummaries && { reportSummaries }),\n }\n}\n\nconst showColumns = (specification: components['schemas']['Specification']) => {\n const { template } = specification\n\n return !['row-section', 'row-section-child', 'summary', 'summary-section'].includes(template)\n}\n\nconst setMetaData = (res: Response, req: Request) => {\n const { csrfToken } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return {\n csrfToken,\n loadType: LoadType.ASYNC,\n type: ReportType.REPORT,\n tableId,\n reportId,\n id,\n }\n}\n\nconst setUrls = (url: Url, req: Request): ReportUrls => {\n const { search } = url\n const encodedSearch = search ? encodeURIComponent(search) : undefined\n const pathname = search ? req.originalUrl.split(search)[0] : req.originalUrl\n const reportUrl = pathname.replace('/download-disabled', '').replace('/download-disabled?', '')\n\n return {\n reportUrl,\n reportSearch: search || undefined,\n encodedSearch,\n pathname,\n }\n}\n\nconst setFeatures = async (\n services: Services,\n res: Response,\n req: Request,\n columns: Columns,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { csrfToken, dprUser, bookmarkingEnabled, downloadingEnabled } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const { downloadPermissionService, bookmarkService } = services\n\n let canDownload = false\n if (downloadingEnabled) {\n canDownload = await downloadPermissionService.downloadEnabledForReport(dprUser.id, reportId, id)\n }\n\n let bookmarked\n if (bookmarkingEnabled) {\n bookmarked = await bookmarkService.isBookmarked(id, reportId, dprUser.id)\n }\n\n const actions = setActions(csrfToken, columns, canDownload, res, req, definitionData, requestData, urls)\n\n return {\n actions,\n canDownload,\n bookmarked,\n }\n}\n\nconst getCount = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n services: Services,\n res: Response,\n req: Request,\n reportQuery: ReportQuery,\n) => {\n const { token } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return !definition.variant.interactive\n ? services.reportingService.getAsyncCount(token, tableId)\n : services.reportingService.getAsyncInteractiveCount(token, tableId, reportId, id, reportQuery)\n}\n\nconst extractDataFromDefinition = (\n definition: components['schemas']['SingleVariantReportDefinition'],\n): ExtractedDefinitionData => {\n const { variant, name: reportName, description: reportDescription } = definition\n const { classification, printable, specification, name, description } = variant\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n const { template, fields } = specification\n\n return {\n reportName,\n name,\n description: description || reportDescription,\n classification,\n printable: Boolean(printable),\n specification,\n template,\n fields,\n }\n}\n\nconst extractDataFromRequest = (requestData: RequestedReport): ExtractedRequestData => {\n const { query, url, timestamp } = requestData\n\n return {\n executionId: requestData.executionId,\n requestedTimestamp: timestamp.requested ? new Date(timestamp.requested).toLocaleString() : undefined,\n querySummary: query?.summary || [],\n queryData: query?.data,\n requestUrl: url?.request,\n defaultQuery: url?.report?.default,\n dataProductDefinitionsPath: requestData.dataProductDefinitionsPath,\n }\n}\n\nconst setActions = (\n csrfToken: string,\n columns: Columns,\n canDownload: boolean,\n res: Response,\n req: Request,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { reportName, name, printable } = definitionData\n const { tableId, id, reportId } = req.params\n const { nestedBaseUrl, definitionsPath, downloadingEnabled } = LocalsHelper.getValues(res)\n\n // DownloadActionParams\n let downloadConfig: DownloadActionParams | undefined\n if (urls && downloadingEnabled) {\n downloadConfig = {\n enabled: downloadingEnabled,\n name,\n reportName,\n csrfToken,\n reportId,\n id,\n tableId,\n columns: columns.value,\n definitionPath: definitionsPath,\n loadType: LoadType.ASYNC,\n nestedBaseUrl,\n canDownload,\n currentUrl: urls.pathname,\n currentQueryParams: urls.reportSearch,\n ...(requestData?.queryData && {\n sortColumn: <string>requestData.queryData['sortColumn'],\n sortedAsc: <string>requestData.queryData['sortedAsc'],\n }),\n }\n }\n\n let shareConfig\n let copyConfig\n if (requestData?.requestUrl?.fullUrl) {\n shareConfig = {\n reportName,\n name,\n url: requestData.requestUrl.fullUrl,\n }\n copyConfig = {\n url: requestData.requestUrl.fullUrl,\n }\n }\n\n let refreshConfig\n if (requestData?.executionId && requestData?.requestUrl?.fullUrl) {\n refreshConfig = {\n url: requestData.requestUrl.fullUrl,\n executionId: requestData.executionId,\n }\n }\n\n return ReportActionsUtils.getActions({\n ...(downloadConfig && { download: downloadConfig }),\n ...(shareConfig && { share: shareConfig }),\n ...(refreshConfig && { refresh: refreshConfig }),\n ...(copyConfig && { copy: copyConfig }),\n print: { enabled: printable },\n })\n}\n\nexport default {\n renderReport,\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import parseUrl from 'parseurl'\nimport { Url } from 'url'\nimport { Request, Response } from 'express'\n\n// Types\nimport type { Columns } from '../../../../../components/_reports/report-columns-form/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\nimport type { DataTable } from '../../../../../utils/DataTableBuilder/types'\nimport type { components } from '../../../../../types/api'\nimport type { AsyncSummary, RequestedReport } from '../../../../../types/UserReports'\nimport { LoadType, ReportType } from '../../../../../types/UserReports'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport type { ChildData } from '../../../../../utils/ParentChildDataTableBuilder/types'\nimport type { ExtractedDefinitionData, ExtractedRequestData, ReportUrls } from './types'\nimport type { DownloadActionParams } from '../../../../../components/_reports/report-actions/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\nimport type { Services } from '../../../../../types/Services'\n\n// Utils\nimport definitionUtils from '../../../../../utils/definitionUtils'\nimport PaginationUtils from '../../../../../components/_reports/report-pagination/utils'\nimport TotalsUtils from '../../../../../components/_reports/report-totals/utils'\nimport ReportFiltersUtils from '../../../../../components/_filters/utils'\nimport ColumnUtils from '../../../../../components/_reports/report-columns-form/utils'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport DataTableUtils from '../../../../../components/_reports/report-data-table/utils'\nimport RequestedReportService from '../../../my-reports/requested-reports/service'\n\nimport CollatedSummaryBuilder from '../../../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder'\n\nexport const getData = async ({\n res,\n req,\n services,\n token,\n userId,\n}: AsyncReportUtilsParams & { token: string; userId: string }) => {\n const { definitionsPath: definitionPath } = LocalsHelper.getValues(res)\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n // Get the request data\n const requestedReportService = <RequestedReportService>services.requestedReportService\n const requestData: RequestedReport | undefined = await requestedReportService.getReportByTableId(tableId, userId)\n const queryData = requestData?.query?.data\n\n // Get the definition\n const definition: components['schemas']['SingleVariantReportDefinition'] =\n await services.reportingService.getDefinition(token, reportId, reportVariantId, definitionPath, queryData)\n const { variant } = definition\n const { specification } = variant\n\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n\n // Get the columns\n const columns = ColumnUtils.getColumns(specification, req)\n\n // initialise report query\n const reportQuery = await initReportQuery(definition, columns, res, req, services, requestData)\n\n // Get the reportData\n const reportData = await getReportData({ definition, services, token, req, res, reportQuery })\n\n // Get the summary data, if applicable\n const { summaries } = definition.variant\n const summariesData = !summaries ? [] : await getSummariesData(summaries, services, token, req, res)\n\n // Get the child data, if applicable\n const { childVariants } = definition.variant\n const childData: ChildData[] = !childVariants\n ? []\n : await getChildData(childVariants, services, token, req, res, requestData)\n\n return {\n definition,\n requestData,\n reportData,\n summariesData,\n childData,\n reportQuery,\n columns,\n }\n}\n\nconst initReportQuery = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n columns: Columns,\n res: Response,\n req: Request,\n services: Services,\n requestData?: RequestedReport,\n) => {\n const { definitionsPath } = LocalsHelper.getValues(res)\n const fields = definitionUtils.getFields(definition)\n const template = definitionUtils.getTemplate(definition)\n\n const filtersData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n filtersType: FiltersType.INTERACTIVE,\n res,\n services,\n })\n\n // Sort\n const sortColumn = req.query?.['sortColumn'] || requestData?.query?.data?.['sortColumn']\n const sortedAsc = req.query?.['sortedAsc'] || requestData?.query?.data?.['sortedAsc']\n\n // Pagination\n const selectedPage = req.query?.['selectedPage']\n const pageSize = req.query?.['pageSize']\n\n // Filters\n const filtersQuery = ReportFiltersUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n const queryParams = {\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...filtersQuery,\n ...(pageSize && { pageSize }),\n ...(selectedPage && { selectedPage }),\n ...(columns && { columns: columns.value }),\n }\n\n return new ReportQuery({\n fields,\n template,\n queryParams,\n definitionsPath,\n })\n}\n\nconst getReportData = async (args: {\n definition: components['schemas']['SingleVariantReportDefinition']\n services: Services\n token: string\n req: Request\n res: Response\n reportQuery: ReportQuery\n}) => {\n const { services, token, req, reportQuery } = args\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n return services.reportingService.getAsyncReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n reportQuery.toRecordWithFilterPrefix(true),\n )\n}\n\nexport const getSummariesData = async (\n summaries: components['schemas']['ReportSummary'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n): Promise<AsyncSummary[]> => {\n const { reportId, variantId, id, tableId } = req.params\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const reportVariantId = variantId || id\n\n return Promise.all(\n summaries.map(async (summary) => {\n const summaryReport = await services.reportingService.getAsyncSummaryReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n summary.id,\n {\n dataProductDefinitionsPath,\n },\n )\n\n return {\n ...summary,\n data: summaryReport,\n }\n }),\n )\n}\n\nexport const getChildData = async (\n childVariants: components['schemas']['ChildVariantDefinition'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n requestData?: RequestedReport,\n): Promise<ChildData[]> => {\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const { reportId } = req.params\n const childExecutionData = requestData?.childExecutionData\n if (!childExecutionData) {\n throw new Error('getChildData: No execution data found for child variants')\n }\n return Promise.all(\n childVariants.map(async (childVariant) => {\n const { specification } = childVariant\n if (!specification) {\n throw new Error('getChildData: No specification found in child variant definition')\n }\n\n const query = new ReportQuery({\n fields: specification?.fields || [],\n template: 'parent-child',\n queryParams: req.query,\n definitionsPath: dataProductDefinitionsPath,\n }).toRecordWithFilterPrefix(true)\n\n const childData = childExecutionData.find((e) => e.variantId === childVariant.id)\n if (!childData || !childData.tableId) {\n throw new Error('getChildData: No matching child execution data found')\n }\n const { tableId: childTableId } = childData\n\n const childReport = await services.reportingService.getAsyncReport(\n token,\n reportId,\n childVariant.id,\n childTableId,\n query,\n )\n\n return {\n id: childVariant.id,\n data: childReport,\n }\n }),\n )\n}\n\n/**\n * Entry point function to render the report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const renderReport = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser } = LocalsHelper.getValues(res)\n\n // Get the report data\n const { definition, requestData, reportData, childData, summariesData, reportQuery, columns } = await getData({\n req,\n res,\n services,\n token,\n userId: dprUser.id,\n })\n\n // Get the data table\n const dataTable: DataTable[] = DataTableUtils.createDataTable(\n definition,\n columns,\n reportData,\n childData,\n summariesData,\n reportQuery,\n )\n\n // Get the template data\n const templateData = await getTemplateData(\n req,\n res,\n services,\n definition,\n summariesData,\n dataTable,\n columns,\n reportQuery,\n requestData,\n )\n\n const renderData = {\n ...templateData,\n dataTable,\n }\n\n if (requestData && Object.keys(requestData).length) {\n UserReportsUtils.updateLastViewed({\n req,\n services,\n reportStateData: requestData,\n userId: dprUser.id,\n filters: templateData.filterData.filters,\n })\n }\n\n return { renderData }\n}\n\nconst getTemplateData = async (\n req: Request,\n res: Response,\n services: Services,\n definition: components['schemas']['SingleVariantReportDefinition'],\n summariesData: AsyncSummary[],\n dataTable: DataTable[],\n columns: Columns,\n reportQuery: ReportQuery,\n requestData?: RequestedReport,\n) => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n // get url data\n const url = parseUrl(req)\n if (!url) {\n throw new Error('Unable to set url data from request')\n }\n\n const urls = url ? setUrls(url, req) : undefined\n\n // get from definition\n const definitionData = extractDataFromDefinition(definition)\n const { fields, specification } = definitionData\n\n // get from requestedData\n const requestedData = requestData ? extractDataFromRequest(requestData) : undefined\n\n // Get the count\n const count = await getCount(definition, services, res, req, reportQuery)\n\n // Get the filters\n const filterData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n res,\n services,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n // Set the features\n const features = await setFeatures(services, res, req, columns, definitionData, requestedData, urls)\n\n // Set the extra meta data\n const meta = setMetaData(res, req)\n\n let reportSummaries\n if (summariesData.length) {\n const collatedSummaryBuilder = new CollatedSummaryBuilder(specification, summariesData)\n reportSummaries = collatedSummaryBuilder.collatePageSummaries()\n }\n\n let pagination\n let totals\n if (definitionData.template === 'list') {\n pagination = PaginationUtils.getPaginationData(url, count, req)\n const { pageSize, currentPage, totalRows } = pagination\n totals = TotalsUtils.getTotals(pageSize, currentPage, totalRows, dataTable[0].rowCount)\n }\n\n return {\n ...(showColumns(specification) && { columns }),\n filterData,\n count,\n nestedBaseUrl,\n ...meta,\n ...features,\n ...definitionData,\n ...requestedData,\n ...urls,\n ...(pagination && { pagination }),\n ...(totals && { totals }),\n ...(reportSummaries && { reportSummaries }),\n }\n}\n\nconst showColumns = (specification: components['schemas']['Specification']) => {\n const { template } = specification\n\n return !['row-section', 'row-section-child', 'summary', 'summary-section'].includes(template)\n}\n\nconst setMetaData = (res: Response, req: Request) => {\n const { csrfToken } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return {\n csrfToken,\n loadType: LoadType.ASYNC,\n type: ReportType.REPORT,\n tableId,\n reportId,\n id,\n }\n}\n\nconst setUrls = (url: Url, req: Request): ReportUrls => {\n const { search } = url\n const encodedSearch = search ? encodeURIComponent(search) : undefined\n const pathname = search ? req.originalUrl.split(search)[0] : req.originalUrl\n const reportUrl = pathname.replace('/download-disabled', '').replace('/download-disabled?', '')\n\n return {\n reportUrl,\n reportSearch: search || undefined,\n encodedSearch,\n pathname,\n }\n}\n\nconst setFeatures = async (\n services: Services,\n res: Response,\n req: Request,\n columns: Columns,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { csrfToken, dprUser, bookmarkingEnabled, downloadingEnabled } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const { downloadPermissionService, bookmarkService } = services\n\n let canDownload = false\n if (downloadingEnabled) {\n canDownload = await downloadPermissionService.downloadEnabledForReport(dprUser.id, reportId, id)\n }\n\n let bookmarked\n if (bookmarkingEnabled) {\n bookmarked = await bookmarkService.isBookmarked(id, reportId, dprUser.id)\n }\n\n const actions = setActions(csrfToken, columns, canDownload, res, req, definitionData, requestData, urls)\n\n return {\n actions,\n canDownload,\n bookmarked,\n }\n}\n\nconst getCount = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n services: Services,\n res: Response,\n req: Request,\n reportQuery: ReportQuery,\n) => {\n const { token } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return !definition.variant.interactive\n ? services.reportingService.getAsyncCount(token, tableId)\n : services.reportingService.getAsyncInteractiveCount(token, tableId, reportId, id, reportQuery)\n}\n\nconst extractDataFromDefinition = (\n definition: components['schemas']['SingleVariantReportDefinition'],\n): ExtractedDefinitionData => {\n const { variant, name: reportName, description: reportDescription } = definition\n const { classification, printable, specification, name, description } = variant\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n const { template, fields } = specification\n\n return {\n reportName,\n name,\n description: description || reportDescription,\n classification,\n printable: Boolean(printable),\n specification,\n template,\n fields,\n }\n}\n\nconst extractDataFromRequest = (requestData: RequestedReport): ExtractedRequestData => {\n const { query, url, timestamp } = requestData\n\n return {\n executionId: requestData.executionId,\n requestedTimestamp: timestamp.requested ? new Date(timestamp.requested).toLocaleString() : undefined,\n querySummary: query?.summary || [],\n queryData: query?.data,\n requestUrl: url?.request,\n defaultQuery: url?.report?.default,\n dataProductDefinitionsPath: requestData.dataProductDefinitionsPath,\n }\n}\n\nconst setActions = (\n csrfToken: string,\n columns: Columns,\n canDownload: boolean,\n res: Response,\n req: Request,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { reportName, name, printable } = definitionData\n const { tableId, id, reportId } = req.params\n const { nestedBaseUrl, definitionsPath, downloadingEnabled } = LocalsHelper.getValues(res)\n\n // DownloadActionParams\n let downloadConfig: DownloadActionParams | undefined\n if (urls && downloadingEnabled) {\n downloadConfig = {\n enabled: downloadingEnabled,\n name,\n reportName,\n csrfToken,\n reportId,\n id,\n tableId,\n columns: columns.value,\n definitionPath: definitionsPath,\n loadType: LoadType.ASYNC,\n nestedBaseUrl,\n canDownload,\n currentUrl: urls.pathname,\n currentQueryParams: urls.reportSearch,\n ...(requestData?.queryData && {\n sortColumn: <string>requestData.queryData['sortColumn'],\n sortedAsc: <string>requestData.queryData['sortedAsc'],\n }),\n }\n }\n\n let shareConfig\n let copyConfig\n if (requestData?.requestUrl?.fullUrl) {\n shareConfig = {\n reportName,\n name,\n url: requestData.requestUrl.fullUrl,\n }\n copyConfig = {\n url: requestData.requestUrl.fullUrl,\n }\n }\n\n let refreshConfig\n if (requestData?.executionId && requestData?.requestUrl?.fullUrl) {\n refreshConfig = {\n url: requestData.requestUrl.fullUrl,\n executionId: requestData.executionId,\n }\n }\n\n return ReportActionsUtils.getActions({\n ...(downloadConfig && { download: downloadConfig }),\n ...(shareConfig && { share: shareConfig }),\n ...(refreshConfig && { refresh: refreshConfig }),\n ...(copyConfig && { copy: copyConfig }),\n print: { enabled: printable },\n })\n}\n\nexport default {\n renderReport,\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["utils_exports", "__export", "utils_default", "getChildData", "getData", "getSummariesData", "renderReport", "__toCommonJS", "import_parseurl", "import_UserReports", "import_ReportQuery", "import_filtersTypeEnum", "import_definitionUtils", "import_utils", "import_localsHelper", "import_CollatedSummaryBuilder", "res", "req", "services", "token", "userId", "definitionPath", "LocalsHelper", "reportId", "variantId", "id", "tableId", "reportVariantId", "requestData", "queryData", "definition", "variant", "specification", "columns", "ColumnUtils", "reportQuery", "initReportQuery", "reportData", "getReportData", "summaries", "summariesData", "childVariants", "childData", "definitionsPath", "fields", "definitionUtils", "template", "filtersData", "ReportFiltersUtils", "sortColumn", "sortedAsc", "selectedPage", "pageSize", "filtersQuery", "queryParams", "ReportQuery", "args", "dataProductDefinitionsPath", "summary", "summaryReport", "childExecutionData", "childVariant", "query", "e", "childTableId", "childReport", "dprUser", "dataTable", "DataTableUtils", "templateData", "getTemplateData", "renderData", "UserReportsUtils", "nestedBaseUrl", "url", "parseUrl", "urls", "setUrls", "definitionData", "extractDataFromDefinition", "requestedData", "extractDataFromRequest", "count", "getCount", "filterData", "features", "setFeatures", "meta", "setMetaData", "reportSummaries", "CollatedSummaryBuilder", "pagination", "totals", "PaginationUtils", "currentPage", "totalRows", "TotalsUtils", "showColumns", "csrfToken", "search", "encodedSearch", "pathname", "bookmarkingEnabled", "downloadingEnabled", "downloadPermissionService", "bookmarkService", "canDownload", "bookmarked", "setActions", "reportName", "reportDescription", "classification", "printable", "name", "description", "timestamp", "downloadConfig", "shareConfig", "copyConfig", "refreshConfig", "ReportActionsUtils"]
7
7
  }
@@ -210,7 +210,7 @@ export const getChildData = async (
210
210
 
211
211
  const query = new ReportQuery({
212
212
  fields: specification?.fields || [],
213
- template: specification.template,
213
+ template: 'parent-child',
214
214
  queryParams: req.query,
215
215
  definitionsPath: dataProductDefinitionsPath,
216
216
  }).toRecordWithFilterPrefix(true)
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var s=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of v(e))!l.call(r,i)&&i!==t&&c(r,i,{get:()=>e[i],enumerable:!(o=S(e,i))||o.enumerable});return r};var n=r=>s(c({},"__esModule",{value:!0}),r);var d={};module.exports=n(d);
1
+ "use strict";var t=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var s=(r,e,c,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of v(e))!l.call(r,i)&&i!==c&&t(r,i,{get:()=>e[i],enumerable:!(o=S(e,i))||o.enumerable});return r};var n=r=>s(t({},"__esModule",{value:!0}),r);var d={};module.exports=n(d);
2
2
  //# sourceMappingURL=Services.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/types/Services.d.ts"],
4
- "sourcesContent": ["import {\n BookmarkService,\n DashboardService,\n DefaultFilterValuesService,\n DownloadPermissionService,\n RecentlyViewedStoreService,\n ReportingService,\n RequestedReportService,\n} from '../services'\nimport { ProductCollectionStoreService } from '../services/productCollection/productCollectionStoreService'\nimport MissingReportService from '../services/missingReport/missingReportService'\nimport ReportingService from '../services/reportingService'\nimport DashboardService from '../services/dashboardService'\nimport { ProductCollectionService } from '../services/productCollection/productCollectionService'\n\nexport type Services = UserStoreServices & {\n reportingService: ReportingService\n dashboardService: DashboardService\n missingReportService: MissingReportService\n productCollectionService: ProductCollectionService\n}\n\nexport interface UserStoreServices {\n downloadPermissionService: DownloadPermissionService\n requestedReportService: RequestedReportService\n recentlyViewedService: RecentlyViewedStoreService\n bookmarkService: BookmarkService\n defaultFilterValuesService: DefaultFilterValuesService\n productCollectionStoreService: ProductCollectionStoreService\n}\n"],
4
+ "sourcesContent": ["import {\n BookmarkService,\n DefaultFilterValuesService,\n DownloadPermissionService,\n RecentlyViewedStoreService,\n RequestedReportService,\n} from '../services'\nimport { ProductCollectionStoreService } from '../services/productCollection/productCollectionStoreService'\nimport MissingReportService from '../services/missingReport/missingReportService'\nimport ReportingService from '../services/reportingService'\nimport DashboardService from '../services/dashboardService'\nimport { ProductCollectionService } from '../services/productCollection/productCollectionService'\n\nexport type Services = UserStoreServices & {\n reportingService: ReportingService\n dashboardService: DashboardService\n missingReportService: MissingReportService\n productCollectionService: ProductCollectionService\n}\n\nexport interface UserStoreServices {\n downloadPermissionService: DownloadPermissionService\n requestedReportService: RequestedReportService\n recentlyViewedService: RecentlyViewedStoreService\n bookmarkService: BookmarkService\n defaultFilterValuesService: DefaultFilterValuesService\n productCollectionStoreService: ProductCollectionStoreService\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["Services_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,10 +1,8 @@
1
1
  import {
2
2
  BookmarkService,
3
- DashboardService,
4
3
  DefaultFilterValuesService,
5
4
  DownloadPermissionService,
6
5
  RecentlyViewedStoreService,
7
- ReportingService,
8
6
  RequestedReportService,
9
7
  } from '../services'
10
8
  import { ProductCollectionStoreService } from '../services/productCollection/productCollectionStoreService'
@@ -1,2 +1,2 @@
1
- "use strict";var o=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var d=(r,e,a,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!s.call(r,n)&&n!==a&&o(r,n,{get:()=>e[n],enumerable:!(t=l(e,n))||t.enumerable});return r};var b=r=>d(o({},"__esModule",{value:!0}),r);var m={};module.exports=b(m);
1
+ "use strict";var t=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var d=(r,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!s.call(r,n)&&n!==a&&t(r,n,{get:()=>e[n],enumerable:!(o=l(e,n))||o.enumerable});return r};var b=r=>d(t({},"__esModule",{value:!0}),r);var m={};module.exports=b(m);
2
2
  //# sourceMappingURL=types.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/utils/DataTableBuilder/types.d.ts"],
4
- "sourcesContent": ["export type CellFormat = 'numeric' | 'string'\n\nexport interface Cell {\n fieldName?: string\n text?: string | undefined\n html?: string | undefined\n format?: CellFormat\n classes?: string\n colspan?: number\n rowspan?: number | undefined\n}\n\nexport interface DataTable {\n head: Array<Header> | null\n rows: Array<Array<Cell>>\n rowCount: number\n colCount: number\n}\n\nexport interface FieldDefinition {\n name: string\n display?: string\n type?: 'boolean' | 'date' | 'double' | 'HTML' | 'long' | 'string' | 'time'\n wordWrap?: 'none' | 'normal' | 'break-words'\n calculated?: boolean\n sortable?: boolean\n header?: boolean\n mergeRows?: boolean\n visible?: boolean\n}\n\nexport interface SortKey extends Dict<string> {\n sortKey: string\n}\n"],
4
+ "sourcesContent": ["export type CellFormat = 'numeric' | 'string'\n\nexport interface Cell {\n fieldName?: string\n text?: string | undefined\n html?: string | undefined\n format?: CellFormat\n classes?: string\n colspan?: number\n rowspan?: number | undefined\n}\n\nexport interface DataTable {\n head: Array<Cell> | null\n rows: Array<Array<Cell>>\n rowCount: number\n colCount: number\n}\n\nexport interface FieldDefinition {\n name: string\n display?: string\n type?: 'boolean' | 'date' | 'double' | 'HTML' | 'long' | 'string' | 'time'\n wordWrap?: 'none' | 'normal' | 'break-words'\n calculated?: boolean\n sortable?: boolean\n header?: boolean\n mergeRows?: boolean\n visible?: boolean\n}\n\nexport interface SortKey {\n sortKey: string\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -11,7 +11,7 @@ export interface Cell {
11
11
  }
12
12
 
13
13
  export interface DataTable {
14
- head: Array<Header> | null
14
+ head: Array<Cell> | null
15
15
  rows: Array<Array<Cell>>
16
16
  rowCount: number
17
17
  colCount: number
@@ -29,6 +29,6 @@ export interface FieldDefinition {
29
29
  visible?: boolean
30
30
  }
31
31
 
32
- export interface SortKey extends Dict<string> {
32
+ export interface SortKey {
33
33
  sortKey: string
34
34
  }
@@ -1,2 +1,2 @@
1
- "use strict";var a=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var s=(r,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of d(t))!c.call(r,e)&&e!==o&&a(r,e,{get:()=>t[e],enumerable:!(i=n(t,e))||i.enumerable});return r};var y=r=>s(a({},"__esModule",{value:!0}),r);var K={};module.exports=y(K);
1
+ "use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var s=(r,t,a,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of d(t))!n.call(r,i)&&i!==a&&o(r,i,{get:()=>t[i],enumerable:!(e=c(t,i))||e.enumerable});return r};var y=r=>s(o({},"__esModule",{value:!0}),r);var D={};module.exports=y(D);
2
2
  //# sourceMappingURL=types.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/utils/ParentChildDataTableBuilder/types.d.ts"],
4
- "sourcesContent": ["import { SortKey } from '../DataTableBuilder/types'\n\nexport interface ParentChildSortKey extends SortKey {\n childSortKeys: Dict<string>\n}\n\nexport interface ChildData {\n id: string\n data: Array<Dict<string>>\n}\n"],
4
+ "sourcesContent": ["import { SortKey } from '../DataTableBuilder/types'\nimport Dict = NodeJS.Dict\n\nexport interface ParentChildSortKey extends SortKey {\n childSortKeys: Dict<string>\n}\n\nexport interface ChildData {\n id: string\n data: Array<Dict<string>>\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,4 +1,5 @@
1
1
  import { SortKey } from '../DataTableBuilder/types'
2
+ import Dict = NodeJS.Dict
2
3
 
3
4
  export interface ParentChildSortKey extends SortKey {
4
5
  childSortKeys: Dict<string>
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var f=(t,e,l,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of n(e))!s.call(t,r)&&r!==l&&i(t,r,{get:()=>e[r],enumerable:!(a=u(e,r))||a.enumerable});return t};var F=t=>f(i({},"__esModule",{value:!0}),t);var g={};module.exports=F(g);
1
+ "use strict";var i=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var s=(t,e,l,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of u(e))!f.call(t,r)&&r!==l&&i(t,r,{get:()=>e[r],enumerable:!(a=n(e,r))||a.enumerable});return t};var g=t=>s(i({},"__esModule",{value:!0}),t);var o={};module.exports=g(o);
2
2
  //# sourceMappingURL=types.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/utils/Personalisation/types.d.ts"],
4
- "sourcesContent": ["import { Granularity, QuickFilters } from '../../components/_inputs/granular-date-range/types'\nimport { FiltersType } from '../../components/_filters/filtersTypeEnum'\n\nexport interface defaultFilterValue {\n name: string\n value: string | DefaultDateFilterValue | DefaultGranularDateFilterValue\n type?: FiltersType\n}\n\nexport interface DefaultDateFilterValue {\n start: string\n end: string\n relative?: RelativeDateRange\n}\n\nexport interface DefaultGranularDateFilterValue {\n start: string\n end: string\n granularity: Granularity\n quickFilter: QuickFilters\n}\n\nexport interface defaultFilterConfig {\n reportId: string\n id: string\n values: defaultFilterValue[]\n}\n"],
4
+ "sourcesContent": ["import { Granularity, QuickFilters } from '../../components/_inputs/granular-date-range/types'\nimport { FiltersType } from '../../components/_filters/filtersTypeEnum'\nimport RelativeDateRange from '../../components/_inputs/date-range/types'\n\nexport interface defaultFilterValue {\n name: string\n value: string | DefaultDateFilterValue | DefaultGranularDateFilterValue\n type?: FiltersType\n}\n\nexport interface DefaultDateFilterValue {\n start: string\n end: string\n relative?: RelativeDateRange\n}\n\nexport interface DefaultGranularDateFilterValue {\n start: string\n end: string\n granularity: Granularity\n quickFilter: QuickFilters\n}\n\nexport interface defaultFilterConfig {\n reportId: string\n id: string\n values: defaultFilterValue[]\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,5 +1,6 @@
1
1
  import { Granularity, QuickFilters } from '../../components/_inputs/granular-date-range/types'
2
2
  import { FiltersType } from '../../components/_filters/filtersTypeEnum'
3
+ import RelativeDateRange from '../../components/_inputs/date-range/types'
3
4
 
4
5
  export interface defaultFilterValue {
5
6
  name: string
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/utils/UserStoreItemBuilder.ts"],
4
- "sourcesContent": ["import type { Request } from 'express'\nimport parseUrl from 'parseurl'\nimport {\n AsyncReportUrlData,\n LoadType,\n ReportType,\n RequestedReport,\n RequestFormData,\n RequestStatus,\n UserReportData,\n} from '../types/UserReports'\nimport Dict = NodeJS.Dict\nimport { ChildReportExecutionData, ExecutionData } from '../types/ExecutionData'\nimport { components } from '../types/api'\n\ninterface ReportData {\n type: ReportType\n reportId: string\n reportName: string\n description: string\n id: string\n name: string\n}\n\nclass UserStoreItemBuilder {\n userStoreItem: UserReportData\n\n requestFormData: RequestFormData | Record<string, never>\n\n constructor(reportData: ReportData, requestFormData?: RequestFormData) {\n this.requestFormData = requestFormData || {}\n this.userStoreItem = this.addReportData(reportData)\n }\n\n build = () => {\n return this.userStoreItem as RequestedReport\n }\n\n addReportData = ({ type, reportId, reportName, description, id, name }: ReportData) => {\n return {\n type: type as ReportType,\n reportId,\n reportName,\n description,\n id,\n name,\n timestamp: {},\n }\n }\n\n addExecutionData = (executionData: ExecutionData) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n ...executionData,\n }\n return this\n }\n\n addChildExecutionData = (childExecutionData: Array<ChildReportExecutionData>) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n childExecutionData,\n }\n return this\n }\n\n addFilters = (filterData?: Record<string, string>) => {\n const filtersQueryString = new URLSearchParams(filterData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n filters: {\n data: filterData,\n queryString: filtersQueryString,\n },\n },\n }\n return this\n }\n\n addSortData = (sortData: Record<string, string>) => {\n const sortByQueryString = new URLSearchParams(sortData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n sortBy: {\n data: sortData,\n queryString: sortByQueryString,\n },\n },\n }\n return this\n }\n\n addRequestUrls = (req: Request) => {\n const { origin, pathname, search, href } = this.requestFormData\n const { executionId, dataProductDefinitionsPath, dpdPathFromQuery } = this.userStoreItem\n\n // Polling path\n let pollingPath = req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n }\n const pollingFullUrl = `${origin}${pollingPath}`\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin,\n request: {\n fullUrl: href,\n pathname,\n search,\n },\n polling: {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n },\n },\n },\n }\n\n return this\n }\n\n addAsyncUrls = (url?: AsyncReportUrlData) => {\n if (url) {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url,\n },\n }\n }\n\n return this\n }\n\n addReportUrls = (req: Request) => {\n const origin = req.get('host')\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n const urlData = parseUrl(req)\n\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin: origin || this.userStoreItem.url?.origin || '',\n ...(this.userStoreItem.url?.request && { request: this.userStoreItem.url.request }),\n ...(this.userStoreItem.url?.polling && { polling: this.userStoreItem.url.polling }),\n report: {\n ...(this.userStoreItem.url?.report && this.userStoreItem.url.report),\n fullUrl,\n ...(urlData && urlData.search && { search: urlData.search }),\n },\n },\n },\n }\n\n return this\n }\n\n addLoadType = (loadType: LoadType) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n loadType,\n }\n\n return this\n }\n\n addQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...(queryData && {\n query: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n }),\n }\n return this\n }\n\n addInteractiveQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n if (queryData) {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n interactiveQuery: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n },\n }\n }\n return this\n }\n\n addStatus = (status: RequestStatus) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n status,\n }\n return this\n }\n\n addMetrics = (metrics: components['schemas']['DashboardSectionDefinition'][]) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n metrics: metrics.filter((metric) => metric.display).map((metric) => ({ name: metric.display || '' })),\n }\n return this\n }\n\n addTimestamp = () => {\n const { status } = this.userStoreItem\n const ts = new Date()\n switch (status) {\n case RequestStatus.FAILED:\n this.userStoreItem.timestamp.failed = ts\n break\n case RequestStatus.EXPIRED:\n this.userStoreItem.timestamp.expired = ts\n break\n case RequestStatus.ABORTED:\n this.userStoreItem.timestamp.aborted = ts\n break\n case RequestStatus.FINISHED:\n this.userStoreItem.timestamp.completed = ts\n break\n case RequestStatus.SUBMITTED:\n this.userStoreItem.timestamp.requested = ts\n break\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n break\n default:\n this.userStoreItem.timestamp.lastViewed = ts\n break\n }\n return this\n }\n\n addDefinitionsPath = (definitionsPath: string, dpdPathFromQuery: boolean) => {\n if (definitionsPath) {\n this.userStoreItem = {\n ...this.userStoreItem,\n dataProductDefinitionsPath: definitionsPath,\n dpdPathFromQuery,\n }\n }\n return this\n }\n}\n\nexport { UserStoreItemBuilder }\nexport default UserStoreItemBuilder\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Request } from 'express'\nimport parseUrl from 'parseurl'\nimport {\n AsyncReportUrlData,\n LoadType,\n ReportType,\n RequestedReport,\n RequestFormData,\n RequestStatus,\n UserReportData,\n} from '../types/UserReports'\nimport Dict = NodeJS.Dict\nimport { ChildReportExecutionData, ExecutionData } from '../types/ExecutionData'\nimport { components } from '../types/api'\n\ninterface ReportData {\n type: ReportType\n reportId: string\n reportName: string\n description: string\n id: string\n name: string\n}\n\nclass UserStoreItemBuilder {\n userStoreItem: UserReportData\n\n requestFormData: RequestFormData | Record<string, never>\n\n constructor(reportData: ReportData, requestFormData?: RequestFormData) {\n this.requestFormData = requestFormData || {}\n this.userStoreItem = this.addReportData(reportData)\n }\n\n build = () => {\n return this.userStoreItem as RequestedReport\n }\n\n addReportData = ({ type, reportId, reportName, description, id, name }: ReportData) => {\n return {\n type: type as ReportType,\n reportId,\n reportName,\n description,\n id,\n name,\n timestamp: {},\n }\n }\n\n addExecutionData = (executionData: ExecutionData) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n ...executionData,\n }\n return this\n }\n\n addChildExecutionData = (childExecutionData: Array<ChildReportExecutionData>) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n childExecutionData,\n }\n return this\n }\n\n addFilters = (filterData?: Record<string, string>) => {\n const filtersQueryString = new URLSearchParams(filterData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n filters: {\n data: filterData,\n queryString: filtersQueryString,\n },\n },\n }\n return this\n }\n\n addSortData = (sortData?: Record<string, string>) => {\n const sortByQueryString = new URLSearchParams(sortData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n sortBy: {\n data: sortData,\n queryString: sortByQueryString,\n },\n },\n }\n return this\n }\n\n addRequestUrls = (req: Request) => {\n const { origin, pathname, search, href } = this.requestFormData\n const { executionId, dataProductDefinitionsPath, dpdPathFromQuery } = this.userStoreItem\n\n // Polling path\n let pollingPath = req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n }\n const pollingFullUrl = `${origin}${pollingPath}`\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin,\n request: {\n fullUrl: href,\n pathname,\n search,\n },\n polling: {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n },\n },\n },\n }\n\n return this\n }\n\n addAsyncUrls = (url?: AsyncReportUrlData) => {\n if (url) {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url,\n },\n }\n }\n\n return this\n }\n\n addReportUrls = (req: Request) => {\n const origin = req.get('host')\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n const urlData = parseUrl(req)\n\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin: origin || this.userStoreItem.url?.origin || '',\n ...(this.userStoreItem.url?.request && { request: this.userStoreItem.url.request }),\n ...(this.userStoreItem.url?.polling && { polling: this.userStoreItem.url.polling }),\n report: {\n ...(this.userStoreItem.url?.report && this.userStoreItem.url.report),\n fullUrl,\n ...(urlData && urlData.search && { search: urlData.search }),\n },\n },\n },\n }\n\n return this\n }\n\n addLoadType = (loadType: LoadType) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n loadType,\n }\n\n return this\n }\n\n addQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...(queryData && {\n query: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n }),\n }\n return this\n }\n\n addInteractiveQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n if (queryData) {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n interactiveQuery: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n },\n }\n }\n return this\n }\n\n addStatus = (status: RequestStatus) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n status,\n }\n return this\n }\n\n addMetrics = (metrics: components['schemas']['DashboardSectionDefinition'][]) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n metrics: metrics.filter((metric) => metric.display).map((metric) => ({ name: metric.display || '' })),\n }\n return this\n }\n\n addTimestamp = () => {\n const { status } = this.userStoreItem\n const ts = new Date()\n switch (status) {\n case RequestStatus.FAILED:\n this.userStoreItem.timestamp.failed = ts\n break\n case RequestStatus.EXPIRED:\n this.userStoreItem.timestamp.expired = ts\n break\n case RequestStatus.ABORTED:\n this.userStoreItem.timestamp.aborted = ts\n break\n case RequestStatus.FINISHED:\n this.userStoreItem.timestamp.completed = ts\n break\n case RequestStatus.SUBMITTED:\n this.userStoreItem.timestamp.requested = ts\n break\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n break\n default:\n this.userStoreItem.timestamp.lastViewed = ts\n break\n }\n return this\n }\n\n addDefinitionsPath = (definitionsPath: string, dpdPathFromQuery: boolean) => {\n if (definitionsPath) {\n this.userStoreItem = {\n ...this.userStoreItem,\n dataProductDefinitionsPath: definitionsPath,\n dpdPathFromQuery,\n }\n }\n return this\n }\n}\n\nexport { UserStoreItemBuilder }\nexport default UserStoreItemBuilder\n"],
5
+ "mappings": "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",
6
6
  "names": ["UserStoreItemBuilder_exports", "__export", "UserStoreItemBuilder", "UserStoreItemBuilder_default", "__toCommonJS", "import_parseurl", "import_UserReports", "reportData", "requestFormData", "type", "reportId", "reportName", "description", "id", "name", "executionData", "childExecutionData", "filterData", "filtersQueryString", "sortData", "sortByQueryString", "req", "origin", "pathname", "search", "href", "executionId", "dataProductDefinitionsPath", "dpdPathFromQuery", "pollingPath", "pollingFullUrl", "url", "fullUrl", "urlData", "parseUrl", "loadType", "queryData", "status", "metrics", "metric", "ts", "definitionsPath"]
7
7
  }
@@ -78,7 +78,7 @@ class UserStoreItemBuilder {
78
78
  return this
79
79
  }
80
80
 
81
- addSortData = (sortData: Record<string, string>) => {
81
+ addSortData = (sortData?: Record<string, string>) => {
82
82
  const sortByQueryString = new URLSearchParams(sortData).toString()
83
83
  this.userStoreItem = {
84
84
  ...this.userStoreItem,
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.20.1",
4
+ "version": "4.20.2",
5
5
  "main": "dpr/all.mjs",
6
6
  "sass": "dpr/all.scss",
7
7
  "engines": {