@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.26.0 → 4.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dpr/DprQueryParamClass.mjs +2 -0
- package/dpr/all.scss +7 -3
- package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
- package/dpr/components/_async/async-filters-form/types.d.ts +1 -1
- package/dpr/components/_charts/chart/styles.scss +1 -1
- package/dpr/components/_filters/filters-selected/clientClass.mjs +1 -0
- package/dpr/components/_reports/report-data-table/style.scss +6 -2
- package/dpr/components/_reports/report-data-table/view.njk +11 -9
- package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
- package/dpr/routes/journeys/request-report/filters/utils.js.map +3 -3
- package/dpr/routes/journeys/request-report/filters/utils.ts +8 -1
- package/dpr/routes/journeys/view-report/utils.js +1 -1
- package/dpr/routes/journeys/view-report/utils.js.map +2 -2
- package/dpr/routes/journeys/view-report/utils.ts +1 -1
- package/dpr/utils/datasetHelper.js +1 -1
- package/dpr/utils/datasetHelper.js.map +3 -3
- package/dpr/utils/datasetHelper.ts +2 -0
- package/package.json +1 -1
package/dpr/all.scss
CHANGED
|
@@ -861,7 +861,6 @@ ul.dpr-card-group__item__filters-list {
|
|
|
861
861
|
|
|
862
862
|
.dpr-table-container {
|
|
863
863
|
position: relative;
|
|
864
|
-
// overflow: scroll;
|
|
865
864
|
|
|
866
865
|
td {
|
|
867
866
|
padding: govuk-spacing(2);
|
|
@@ -1058,7 +1057,12 @@ ul.dpr-card-group__item__filters-list {
|
|
|
1058
1057
|
}
|
|
1059
1058
|
|
|
1060
1059
|
.dpr-table-wrapper {
|
|
1061
|
-
overflow: scroll;
|
|
1060
|
+
overflow-x: scroll;
|
|
1061
|
+
transform: rotateX(180deg);
|
|
1062
|
+
|
|
1063
|
+
.dpr-table-content {
|
|
1064
|
+
transform: rotateX(180deg);
|
|
1065
|
+
}
|
|
1062
1066
|
}
|
|
1063
1067
|
|
|
1064
1068
|
.table-row-count {
|
|
@@ -1855,7 +1859,7 @@ ul.dpr-card-group__item__filters-list {
|
|
|
1855
1859
|
background-color: govuk-colour("dark-blue")
|
|
1856
1860
|
}
|
|
1857
1861
|
|
|
1858
|
-
@for $i from 1 through
|
|
1862
|
+
@for $i from 1 through 200 {
|
|
1859
1863
|
.dpr-chart-height-#{$i} {
|
|
1860
1864
|
height: $i * 80px !important;
|
|
1861
1865
|
}
|
|
@@ -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": ["import { FilterValue } from '../../_filters/types'\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
|
|
4
|
+
"sourcesContent": ["import { FilterValue } from '../../_filters/types'\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
|
}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
.dpr-table-container {
|
|
4
4
|
position: relative;
|
|
5
|
-
// overflow: scroll;
|
|
6
5
|
|
|
7
6
|
td {
|
|
8
7
|
padding: govuk-spacing(2);
|
|
@@ -199,7 +198,12 @@
|
|
|
199
198
|
}
|
|
200
199
|
|
|
201
200
|
.dpr-table-wrapper {
|
|
202
|
-
overflow: scroll;
|
|
201
|
+
overflow-x: scroll;
|
|
202
|
+
transform: rotateX(180deg);
|
|
203
|
+
|
|
204
|
+
.dpr-table-content {
|
|
205
|
+
transform: rotateX(180deg);
|
|
206
|
+
}
|
|
203
207
|
}
|
|
204
208
|
|
|
205
209
|
.table-row-count {
|
|
@@ -8,15 +8,17 @@
|
|
|
8
8
|
<div id="table-container" class='dpr-table-container' data-dpr-module="data-table" aria-labelledby="dpr-report-name">
|
|
9
9
|
<div class="dpr-overflow-gradient" id="dpr-overflow-gradient"></div>
|
|
10
10
|
<div class="dpr-table-wrapper" id="dpr-table-wrapper">
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
<div class="dpr-table-content">
|
|
12
|
+
{{ govukTable({
|
|
13
|
+
head: head,
|
|
14
|
+
rows: rows,
|
|
15
|
+
attributes: {
|
|
16
|
+
'id': 'dpr-data-table',
|
|
17
|
+
'data-classification': classification,
|
|
18
|
+
'data-col-length': colCount
|
|
19
|
+
}
|
|
20
|
+
}) }}
|
|
21
|
+
</div>
|
|
20
22
|
</div>
|
|
21
23
|
</div>
|
|
22
24
|
{% endmacro %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var $=Object.create;var g=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},T=(e,t,r,
|
|
1
|
+
"use strict";var $=Object.create;var g=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},T=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of J(t))!z.call(e,i)&&i!==r&&g(e,i,{get:()=>t[i],enumerable:!(a=j(t,i))||a.enumerable});return e};var h=(e,t,r)=>(r=e!=null?$(L(e)):{},T(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),K=e=>T(g({},"__esModule",{value:!0}),e);var re={};G(re,{cancelRequest:()=>N,default:()=>te,getDefintionByType:()=>Q,getFiltersFromReqBody:()=>H,renderRequest:()=>k,request:()=>B,updateStore:()=>O});module.exports=K(re);var x=h(require("../../../../components/_async/async-filters-form/utils")),D=h(require("../../../../utils/localsHelper")),U=h(require("../../../../components/_filters/utils")),q=require("../../../../utils/reportStoreHelper"),E=h(require("../../../../utils/UserStoreItemBuilder")),f=require("../../../../types/UserReports"),w=h(require("../../../../utils/Personalisation/personalisationUtils")),C=require("../../../../components/_filters/filtersTypeEnum");const O=async({req:e,res:t,services:r,queryData:a,executionData:i,childExecutionData:s})=>{const{search:l,id:d,type:o}=e.body,{dprUser:n,definitionsPath:c,dpdPathFromQuery:u}=D.default.getValues(t);await(0,q.removeDuplicates)({storeService:r.requestedReportService,userId:n.id,id:d,search:l}),await(0,q.removeDuplicates)({storeService:r.recentlyViewedService,userId:n.id,id:d,search:l});const p=e.body,R={type:p.type,reportId:p.reportId,reportName:p.reportName,description:p.description,id:p.id,name:p.name};let m;switch(o){case f.ReportType.REPORT:m=new E.default(R,p).addExecutionData(i).addChildExecutionData(s).addFilters(a?.filterData).addSortData(a?.sortData).addDefinitionsPath(c,u).addRequestUrls(e).addQuery(a).addStatus(f.RequestStatus.SUBMITTED).addTimestamp().build();break;case f.ReportType.DASHBOARD:{m=new E.default(R,p).addExecutionData(i).addChildExecutionData(s).addFilters(a?.filterData).addDefinitionsPath(c,u).addRequestUrls(e).addQuery(a).addStatus(f.RequestStatus.SUBMITTED).addTimestamp().addMetrics(JSON.parse(e.body.sections)).build();break}default:break}m&&await r.requestedReportService.addReport(n.id,m)};async function W(e,t,r,a,i,s){let l;return i&&(l=i.query,delete l.sortColumn,delete l.sortedAsc),Promise.all(e.map(d=>t.requestAsyncReport(r,a,d.id,{...l&&l,...s&&{dataProductDefinitionsPath:s}}).then(o=>{const{executionId:n,tableId:c}=o;if(!n||!c)throw new Error("requestChildReports: No execution of tableId in response");return{executionId:n,tableId:c,variantId:d.id}})))}const X=async({req:e,res:t,token:r,dashboardService:a,reportingService:i})=>{const{definitionsPath:s,dpdPathFromQuery:l}=D.default.getValues(t),{reportId:d,id:o,type:n}=e.body;let c,u,p,R,m,y=[];n===f.ReportType.REPORT&&(m=await i.getDefinition(r,d,o,s),c=m?.variant.specification?.fields||[],u=x.default.setQueryFromFilters(e,c),{executionId:p,tableId:R}=await i.requestAsyncReport(r,d,o,{...u.query,dataProductDefinitionsPath:s}),y=m.variant.childVariants??[]),n===f.ReportType.DASHBOARD&&(m=await a.getDefinition(r,d,o,s),c=m?.filterFields||[],u=x.default.setQueryFromFilters(e,c),{executionId:p,tableId:R}=await a.requestAsyncDashboard(r,d,o,{...u.query,dataProductDefinitionsPath:s}));const S=await W(y,i,r,d,u,s);return{executionData:{executionId:p,tableId:R,...l&&{dataProductDefinitionsPath:s}},childExecutionData:S,queryData:u}},Y=async({token:e,reportId:t,definitionPath:r,services:a,definition:i})=>{const d=(await a.reportingService.getDefinitions(e,r)).find(p=>p.id===t)?.name,{name:o,description:n,sections:c,filterFields:u}=i;return{reportName:d,name:o,description:n,sections:c||[],fields:u||[]}},Z=async e=>({definition:e,reportName:e.name,name:e.variant.name,description:e.variant.description||e.description,template:e.variant.specification,fields:e?.variant?.specification?.fields||[],interactive:e?.variant?.interactive}),Q=async(e,t,r,a)=>{const{token:i,definitionsPath:s}=D.default.getValues(t),{reportId:l,id:d,variantId:o,type:n}=e.params;return await(n===f.ReportType.REPORT?a.reportingService:a.dashboardService).getDefinition(i,l,o||d,s)},ee=async(e,t,r,a,i,s)=>{const{reportId:l,id:d}=e.params;let o=await x.default.renderFilters(r,a);o.filters=w.default.setUserContextDefaults(t,o.filters);let n;return t.locals.saveDefaultsEnabled&&(n=await i.defaultFilterValuesService.get(s,l,d,C.FiltersType.REQUEST)),n&&(o=w.default.setFilterValuesFromSavedDefaults(o.filters,o.sortBy||[],n)),o.filters=U.default.setFilterValuesFromRequest(o.filters,e),{filtersData:o,defaultFilterValues:n}},B=async({req:e,res:t,services:r})=>{const{token:a}=D.default.getValues(t),i={req:e,res:t,token:a},{executionData:s,queryData:l,childExecutionData:d}=await X({...i,dashboardService:r.dashboardService,reportingService:r.reportingService});if(s.executionId&&s.tableId)await O({req:e,res:t,services:r,queryData:l,executionData:s,childExecutionData:d});else throw new Error("No execution data returned");return s},N=async({req:e,res:t,services:r})=>{const{token:a,dprUser:i,definitionsPath:s}=D.default.getValues(t),{reportId:l,id:d,executionId:o,type:n}=e.params;let c=r.reportingService;n===f.ReportType.REPORT&&(c=r.reportingService),n===f.ReportType.DASHBOARD&&(c=r.dashboardService);const u=await c.cancelAsyncRequest(a,l,d,o,s);u&&u.cancellationSucceeded&&await r.requestedReportService.updateStatus(o,i.id,f.RequestStatus.ABORTED)},k=async({req:e,res:t,services:r,next:a})=>{try{const{token:i,csrfToken:s,definitionsPath:l,dpdPathFromQuery:d,dprUser:o}=D.default.getValues(t),{reportId:n,type:c,id:u}=e.params,{definition:p}=t.locals,R=e.query.defaultsSaved,m={token:i,reportId:n,definitionPath:l,services:r};let y,S,v,M,F=[],P,A,I,b=[];if(c===f.ReportType.REPORT&&({name:y,reportName:S,description:v,fields:F,interactive:A}=await Z(p)),c===f.ReportType.DASHBOARD&&({name:y,reportName:S,description:v,sections:P,fields:F}=await Y({...m,definition:p})),F){const V=await ee(e,t,F,A||!1,r,o.id);b=V.defaultFilterValues||b,I=V.filtersData}const _={reportName:S,name:y,description:v,reportId:n,id:u,...d&&{definitionPath:l},csrfToken:s,template:M,sections:P,hasDefaults:b?.length>0,defaultsSaved:R,type:c,saveDefaultsEnabled:t.locals.saveDefaultsEnabled};return{title:`Request ${c}`,filtersDescription:`Customise your ${c} using the filters below and submit your request.`,filtersData:I,reportData:_}}catch(i){return a(i),!1}},H=e=>Object.keys(e.body).filter(t=>t.includes("filters.")).filter(t=>!!e.body[t]).map(t=>({name:t,value:e.body[t]}));var te={request:B,cancelRequest:N,renderRequest:k,getFiltersFromReqBody:H,getDefintionByType:Q};0&&(module.exports={cancelRequest,getDefintionByType,getFiltersFromReqBody,renderRequest,request,updateStore});
|
|
2
2
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/dpr/routes/journeys/request-report/filters/utils.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response, NextFunction } from 'express'\n\n// Utils\nimport { defaultFilterValue } from '../../../../utils/Personalisation/types'\nimport FiltersFormUtils from '../../../../components/_async/async-filters-form/utils'\nimport LocalsHelper from '../../../../utils/localsHelper'\nimport FiltersUtils from '../../../../components/_filters/utils'\nimport { removeDuplicates } from '../../../../utils/reportStoreHelper'\nimport UserStoreItemBuilder from '../../../../utils/UserStoreItemBuilder'\n\n// Types\nimport type ReportingService from '../../../../services/reportingService'\nimport { ReportType, RequestFormData, RequestStatus } from '../../../../types/UserReports'\nimport type { ExecutionData, ChildReportExecutionData } from '../../../../types/ExecutionData'\nimport type { AsyncReportUtilsParams, RequestDataResult, RequestReportData } from '../../../../types/AsyncReportUtils'\nimport type {\n RenderFiltersReturnValue,\n SetQueryFromFiltersResult,\n} from '../../../../components/_async/async-filters-form/types'\nimport type { components } from '../../../../types/api'\nimport type { Services } from '../../../../types/Services'\nimport type DashboardService from '../../../../services/dashboardService'\nimport PersonalistionUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\n\n/**\n * Updates the store with the request details\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {SetQueryFromFiltersResult} querySummaryData\n * @param {string} executionData\n * @return {*} {Promise<string>}\n */\nexport const updateStore = async ({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: SetQueryFromFiltersResult | undefined\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n}): Promise<void> => {\n const { search, id, type } = req.body\n const { dprUser, definitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n\n await removeDuplicates({ storeService: services.requestedReportService, userId: dprUser.id, id, search })\n await removeDuplicates({ storeService: services.recentlyViewedService, userId: dprUser.id, id, search })\n\n const requestFormData: RequestFormData = req.body\n const reportData = {\n type: requestFormData.type as ReportType,\n reportId: requestFormData.reportId,\n reportName: requestFormData.reportName,\n description: requestFormData.description,\n id: requestFormData.id,\n name: requestFormData.name,\n }\n\n let requestedReportData\n switch (type) {\n case ReportType.REPORT:\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addSortData(queryData?.sortData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .build()\n break\n case ReportType.DASHBOARD: {\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .addMetrics(JSON.parse(req.body.sections))\n .build()\n break\n }\n default:\n break\n }\n\n if (requestedReportData) await services.requestedReportService.addReport(dprUser.id, requestedReportData)\n}\n\nasync function requestChildReports(\n childVariants: Array<components['schemas']['ChildVariantDefinition']>,\n reportingService: ReportingService,\n token: string,\n reportId: string,\n queryData?: SetQueryFromFiltersResult,\n dataProductDefinitionsPath?: string,\n): Promise<Array<ChildReportExecutionData>> {\n return Promise.all(\n childVariants.map((childVariant) =>\n reportingService\n .requestAsyncReport(token, reportId, childVariant.id, {\n ...(queryData && queryData.query),\n ...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),\n })\n .then((response) => {\n const { executionId, tableId } = response\n if (!executionId || !tableId) {\n throw new Error('requestChildReports: No execution of tableId in response')\n }\n return { executionId, tableId, variantId: childVariant.id }\n }),\n ),\n )\n}\n\nconst requestProduct = async ({\n req,\n res,\n token,\n dashboardService,\n reportingService,\n}: {\n req: Request\n res: Response\n token: string\n dashboardService: DashboardService\n reportingService: ReportingService\n}): Promise<{\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n queryData?: SetQueryFromFiltersResult | undefined\n}> => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id, type } = req.body\n\n let fields: components['schemas']['FieldDefinition'][]\n let queryData\n let executionId\n let tableId\n let definition\n let childVariants: components['schemas']['ChildVariantDefinition'][] = []\n\n if (type === ReportType.REPORT) {\n definition = await reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.variant.specification?.fields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await reportingService.requestAsyncReport(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n childVariants = definition.variant.childVariants ?? []\n }\n\n if (type === ReportType.DASHBOARD) {\n definition = await dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.filterFields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await dashboardService.requestAsyncDashboard(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n }\n\n const childExecutionData = await requestChildReports(\n childVariants,\n reportingService,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\nconst renderDashboardRequestData = async ({\n token,\n reportId,\n definitionPath,\n services,\n definition,\n}: {\n token: string\n reportId: string\n definitionPath: string\n services: Services\n definition: components['schemas']['DashboardDefinition']\n}) => {\n const productDefinitions = await services.reportingService.getDefinitions(token, definitionPath)\n const productDefinition = productDefinitions.find(\n (def: components['schemas']['ReportDefinitionSummary']) => def.id === reportId,\n )\n const reportName = productDefinition?.name\n const { name, description, sections, filterFields: fields } = definition\n\n return {\n reportName,\n name,\n description,\n sections: sections || [],\n fields: fields || [],\n }\n}\n\nconst renderReportRequestData = async (definition: components['schemas']['SingleVariantReportDefinition']) => {\n return {\n definition,\n reportName: definition.name,\n name: definition.variant.name,\n description: definition.variant.description || definition.description,\n template: definition.variant.specification,\n fields: definition?.variant?.specification?.fields || [],\n interactive: definition?.variant?.interactive,\n }\n}\n\nexport const getDefintionByType = async (req: Request, res: Response, _next: NextFunction, services: Services) => {\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, variantId, type } = req.params\n\n const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService\n const definition = await service.getDefinition(token, reportId, variantId || id, definitionsPath)\n\n return definition\n}\n\nconst getFilterData = async (\n req: Request,\n res: Response,\n fields: components['schemas']['FieldDefinition'][],\n interactive: boolean,\n services: Services,\n userId: string,\n) => {\n const { reportId, id } = req.params\n\n // 1. Get filters from definition with default values\n let filtersData = <RenderFiltersReturnValue>await FiltersFormUtils.renderFilters(fields, interactive)\n\n // 2. Update filter values with user context values. eg. establishmnent code\n filtersData.filters = PersonalistionUtils.setUserContextDefaults(res, filtersData.filters)\n\n // 3. Update filter values with saved defaults\n let defaultFilterValues\n if (res.locals['saveDefaultsEnabled']) {\n defaultFilterValues = await services.defaultFilterValuesService.get(userId, reportId, id, FiltersType.REQUEST)\n }\n if (defaultFilterValues) {\n filtersData = PersonalistionUtils.setFilterValuesFromSavedDefaults(\n filtersData.filters,\n filtersData.sortBy || [],\n defaultFilterValues,\n )\n }\n\n // 4. Overwrite filter values with query param values\n filtersData.filters = FiltersUtils.setFilterValuesFromRequest(filtersData.filters, req)\n\n return { filtersData, defaultFilterValues }\n}\n\n/**\n * Sends the request for the async report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const request = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const requestArgs = { req, res, token }\n\n const { executionData, queryData, childExecutionData } = await requestProduct({\n ...requestArgs,\n dashboardService: services.dashboardService,\n reportingService: services.reportingService,\n })\n\n if (executionData.executionId && executionData.tableId) {\n await updateStore({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n })\n } else {\n throw new Error('No execution data returned')\n }\n\n return executionData\n}\n\nexport const cancelRequest = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, executionId, type } = req.params\n\n let service: ReportingService | DashboardService = services.reportingService\n if (type === ReportType.REPORT) service = services.reportingService\n if (type === ReportType.DASHBOARD) service = services.dashboardService\n\n const response = await service.cancelAsyncRequest(token, reportId, id, executionId, definitionsPath)\n\n if (response && response['cancellationSucceeded']) {\n await services.requestedReportService.updateStatus(executionId, dprUser.id, RequestStatus.ABORTED)\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 renderRequest = async ({\n req,\n res,\n services,\n next,\n}: {\n req: Request\n res: Response\n next: NextFunction\n services: Services\n}): Promise<RequestDataResult | boolean> => {\n try {\n const { token, csrfToken, definitionsPath: definitionPath, dpdPathFromQuery, dprUser } = LocalsHelper.getValues(res)\n const { reportId, type, id } = req.params\n const { definition } = res.locals\n const defaultsSaved = <string>req.query['defaultsSaved']\n\n const definitionApiArgs = { token, reportId, definitionPath, services }\n\n let name\n let reportName\n let description\n let template\n let fields: components['schemas']['FieldDefinition'][] = []\n let sections\n let interactive\n let filtersData\n let defaultFilterValues: defaultFilterValue[] = []\n\n if (type === ReportType.REPORT) {\n ;({ name, reportName, description, fields, interactive } = await renderReportRequestData(definition))\n }\n\n if (type === ReportType.DASHBOARD) {\n ;({ name, reportName, description, sections, fields } = await renderDashboardRequestData({\n ...definitionApiArgs,\n definition,\n }))\n }\n\n if (fields) {\n const filterData = await getFilterData(req, res, fields, interactive || false, services, dprUser.id)\n defaultFilterValues = filterData.defaultFilterValues || defaultFilterValues\n filtersData = filterData.filtersData\n }\n\n const reportData: RequestReportData = {\n reportName,\n name,\n description,\n reportId,\n id,\n ...(dpdPathFromQuery && { definitionPath }),\n csrfToken,\n template,\n sections,\n hasDefaults: defaultFilterValues?.length > 0,\n defaultsSaved,\n type: type as ReportType,\n saveDefaultsEnabled: res.locals['saveDefaultsEnabled'],\n }\n\n return {\n title: `Request ${type}`,\n filtersDescription: `Customise your ${type} using the filters below and submit your request.`,\n filtersData,\n reportData,\n }\n } catch (error) {\n next(error)\n return false\n }\n}\n\nexport const getFiltersFromReqBody = (req: Request) => {\n return Object.keys(req.body)\n .filter((attr) => attr.includes('filters.'))\n .filter((attr) => !!req.body[attr])\n .map((attr) => {\n return { name: attr, value: req.body[attr] }\n })\n}\n\nexport default {\n request,\n cancelRequest,\n renderRequest,\n getFiltersFromReqBody,\n getDefintionByType,\n}\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,mBAAAE,EAAA,YAAAC,GAAA,uBAAAC,EAAA,0BAAAC,EAAA,kBAAAC,EAAA,YAAAC,EAAA,gBAAAC,IAAA,eAAAC,EAAAT,IAKA,IAAAU,EAA6B,qEAC7BC,EAAyB,6CACzBD,EAAyB,oDACzBE,EAAiC,+CACjCC,EAAiC,qDAIjCC,EAA2D,yCAU3DC,EAAgC,qEAChCC,EAA4B,2DAYrB,MAAMR,EAAc,MAAO,CAChC,IAAAS,EACA,IAAAC,EACA,SAAAC,EACA,UAAAC,EACA,cAAAC,EACA,mBAAAC,CACF,IAOqB,CACnB,KAAM,CAAE,OAAAC,EAAQ,GAAAC,EAAI,KAAAC,CAAK,EAAIR,EAAI,KAC3B,CAAE,QAAAS,EAAS,gBAAAC,EAAiB,iBAAAC,CAAiB,EAAI,EAAAC,QAAa,UAAUX,CAAG,EAEjF,QAAM,oBAAiB,CAAE,aAAcC,EAAS,uBAAwB,OAAQO,EAAQ,GAAI,GAAAF,EAAI,OAAAD,CAAO,CAAC,EACxG,QAAM,oBAAiB,CAAE,aAAcJ,EAAS,sBAAuB,OAAQO,EAAQ,GAAI,GAAAF,EAAI,OAAAD,CAAO,CAAC,EAEvG,MAAMO,EAAmCb,EAAI,KACvCc,EAAa,CACjB,KAAMD,EAAgB,KACtB,SAAUA,EAAgB,SAC1B,WAAYA,EAAgB,WAC5B,YAAaA,EAAgB,YAC7B,GAAIA,EAAgB,GACpB,KAAMA,EAAgB,IACxB,EAEA,IAAIE,EACJ,OAAQP,EAAM,CACZ,KAAK,aAAW,OACdO,EAAsB,IAAI,EAAAC,QAAqBF,EAAYD,CAAe,EACvE,iBAAiBT,CAAa,EAC9B,sBAAsBC,CAAkB,EACxC,WAAWF,GAAW,UAAU,EAChC,YAAYA,GAAW,QAAQ,EAC/B,mBAAmBO,EAAiBC,CAAgB,EACpD,eAAeX,CAAG,EAClB,SAASG,CAAS,EAClB,UAAU,gBAAc,SAAS,EACjC,aAAa,EACb,MAAM,EACT,MACF,KAAK,aAAW,UAAW,CACzBY,EAAsB,IAAI,EAAAC,QAAqBF,EAAYD,CAAe,EACvE,iBAAiBT,CAAa,EAC9B,sBAAsBC,CAAkB,EACxC,WAAWF,GAAW,UAAU,EAChC,mBAAmBO,EAAiBC,CAAgB,EACpD,eAAeX,CAAG,EAClB,SAASG,CAAS,EAClB,UAAU,gBAAc,SAAS,EACjC,aAAa,EACb,WAAW,KAAK,MAAMH,EAAI,KAAK,QAAQ,CAAC,EACxC,MAAM,EACT,KACF,CACA,QACE,KACJ,CAEIe,GAAqB,MAAMb,EAAS,uBAAuB,UAAUO,EAAQ,GAAIM,CAAmB,CAC1G,EAEA,eAAeE,EACbC,EACAC,EACAC,EACAC,EACAlB,EACAmB,EAC0C,CAC1C,
|
|
6
|
-
"names": ["utils_exports", "__export", "cancelRequest", "utils_default", "getDefintionByType", "getFiltersFromReqBody", "renderRequest", "request", "updateStore", "__toCommonJS", "import_utils", "import_localsHelper", "import_reportStoreHelper", "import_UserStoreItemBuilder", "import_UserReports", "import_personalisationUtils", "import_filtersTypeEnum", "req", "res", "services", "queryData", "executionData", "childExecutionData", "search", "id", "type", "dprUser", "definitionsPath", "dpdPathFromQuery", "LocalsHelper", "requestFormData", "reportData", "requestedReportData", "UserStoreItemBuilder", "requestChildReports", "childVariants", "reportingService", "token", "reportId", "dataProductDefinitionsPath", "childVariant", "response", "executionId", "tableId", "requestProduct", "dashboardService", "fields", "definition", "FiltersFormUtils", "renderDashboardRequestData", "definitionPath", "reportName", "def", "name", "description", "sections", "renderReportRequestData", "_next", "variantId", "getFilterData", "interactive", "userId", "filtersData", "PersonalistionUtils", "defaultFilterValues", "FiltersUtils", "requestArgs", "service", "next", "csrfToken", "defaultsSaved", "definitionApiArgs", "template", "filterData", "error", "attr"]
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response, NextFunction } from 'express'\n\n// Utils\nimport { defaultFilterValue } from '../../../../utils/Personalisation/types'\nimport FiltersFormUtils from '../../../../components/_async/async-filters-form/utils'\nimport LocalsHelper from '../../../../utils/localsHelper'\nimport FiltersUtils from '../../../../components/_filters/utils'\nimport { removeDuplicates } from '../../../../utils/reportStoreHelper'\nimport UserStoreItemBuilder from '../../../../utils/UserStoreItemBuilder'\n\n// Types\nimport type ReportingService from '../../../../services/reportingService'\nimport { ReportType, RequestFormData, RequestStatus } from '../../../../types/UserReports'\nimport type { ExecutionData, ChildReportExecutionData } from '../../../../types/ExecutionData'\nimport type { AsyncReportUtilsParams, RequestDataResult, RequestReportData } from '../../../../types/AsyncReportUtils'\nimport type {\n RenderFiltersReturnValue,\n SetQueryFromFiltersResult,\n} from '../../../../components/_async/async-filters-form/types'\nimport type { components } from '../../../../types/api'\nimport type { Services } from '../../../../types/Services'\nimport type DashboardService from '../../../../services/dashboardService'\nimport PersonalistionUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\n\n/**\n * Updates the store with the request details\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {SetQueryFromFiltersResult} querySummaryData\n * @param {string} executionData\n * @return {*} {Promise<string>}\n */\nexport const updateStore = async ({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: SetQueryFromFiltersResult | undefined\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n}): Promise<void> => {\n const { search, id, type } = req.body\n const { dprUser, definitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n\n await removeDuplicates({ storeService: services.requestedReportService, userId: dprUser.id, id, search })\n await removeDuplicates({ storeService: services.recentlyViewedService, userId: dprUser.id, id, search })\n\n const requestFormData: RequestFormData = req.body\n const reportData = {\n type: requestFormData.type as ReportType,\n reportId: requestFormData.reportId,\n reportName: requestFormData.reportName,\n description: requestFormData.description,\n id: requestFormData.id,\n name: requestFormData.name,\n }\n\n let requestedReportData\n switch (type) {\n case ReportType.REPORT:\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addSortData(queryData?.sortData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .build()\n break\n case ReportType.DASHBOARD: {\n requestedReportData = new UserStoreItemBuilder(reportData, requestFormData)\n .addExecutionData(executionData)\n .addChildExecutionData(childExecutionData)\n .addFilters(queryData?.filterData)\n .addDefinitionsPath(definitionsPath, dpdPathFromQuery)\n .addRequestUrls(req)\n .addQuery(queryData)\n .addStatus(RequestStatus.SUBMITTED)\n .addTimestamp()\n .addMetrics(JSON.parse(req.body.sections))\n .build()\n break\n }\n default:\n break\n }\n\n if (requestedReportData) await services.requestedReportService.addReport(dprUser.id, requestedReportData)\n}\n\nasync function requestChildReports(\n childVariants: Array<components['schemas']['ChildVariantDefinition']>,\n reportingService: ReportingService,\n token: string,\n reportId: string,\n queryData?: SetQueryFromFiltersResult,\n dataProductDefinitionsPath?: string,\n): Promise<Array<ChildReportExecutionData>> {\n let query: Record<string, string>\n if (queryData) {\n query = queryData.query\n delete query['sortColumn']\n delete query['sortedAsc']\n }\n\n return Promise.all(\n childVariants.map((childVariant) =>\n reportingService\n .requestAsyncReport(token, reportId, childVariant.id, {\n ...(query && query),\n ...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),\n })\n .then((response) => {\n const { executionId, tableId } = response\n if (!executionId || !tableId) {\n throw new Error('requestChildReports: No execution of tableId in response')\n }\n return { executionId, tableId, variantId: childVariant.id }\n }),\n ),\n )\n}\n\nconst requestProduct = async ({\n req,\n res,\n token,\n dashboardService,\n reportingService,\n}: {\n req: Request\n res: Response\n token: string\n dashboardService: DashboardService\n reportingService: ReportingService\n}): Promise<{\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n queryData?: SetQueryFromFiltersResult | undefined\n}> => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id, type } = req.body\n\n let fields: components['schemas']['FieldDefinition'][]\n let queryData\n let executionId\n let tableId\n let definition\n let childVariants: components['schemas']['ChildVariantDefinition'][] = []\n\n if (type === ReportType.REPORT) {\n definition = await reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.variant.specification?.fields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await reportingService.requestAsyncReport(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n childVariants = definition.variant.childVariants ?? []\n }\n\n if (type === ReportType.DASHBOARD) {\n definition = await dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n fields = definition?.filterFields || []\n queryData = FiltersFormUtils.setQueryFromFilters(req, fields)\n ;({ executionId, tableId } = await dashboardService.requestAsyncDashboard(token, reportId, id, {\n ...queryData.query,\n dataProductDefinitionsPath,\n }))\n }\n\n const childExecutionData = await requestChildReports(\n childVariants,\n reportingService,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\nconst renderDashboardRequestData = async ({\n token,\n reportId,\n definitionPath,\n services,\n definition,\n}: {\n token: string\n reportId: string\n definitionPath: string\n services: Services\n definition: components['schemas']['DashboardDefinition']\n}) => {\n const productDefinitions = await services.reportingService.getDefinitions(token, definitionPath)\n const productDefinition = productDefinitions.find(\n (def: components['schemas']['ReportDefinitionSummary']) => def.id === reportId,\n )\n const reportName = productDefinition?.name\n const { name, description, sections, filterFields: fields } = definition\n\n return {\n reportName,\n name,\n description,\n sections: sections || [],\n fields: fields || [],\n }\n}\n\nconst renderReportRequestData = async (definition: components['schemas']['SingleVariantReportDefinition']) => {\n return {\n definition,\n reportName: definition.name,\n name: definition.variant.name,\n description: definition.variant.description || definition.description,\n template: definition.variant.specification,\n fields: definition?.variant?.specification?.fields || [],\n interactive: definition?.variant?.interactive,\n }\n}\n\nexport const getDefintionByType = async (req: Request, res: Response, _next: NextFunction, services: Services) => {\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, variantId, type } = req.params\n\n const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService\n const definition = await service.getDefinition(token, reportId, variantId || id, definitionsPath)\n\n return definition\n}\n\nconst getFilterData = async (\n req: Request,\n res: Response,\n fields: components['schemas']['FieldDefinition'][],\n interactive: boolean,\n services: Services,\n userId: string,\n) => {\n const { reportId, id } = req.params\n\n // 1. Get filters from definition with default values\n let filtersData = <RenderFiltersReturnValue>await FiltersFormUtils.renderFilters(fields, interactive)\n\n // 2. Update filter values with user context values. eg. establishmnent code\n filtersData.filters = PersonalistionUtils.setUserContextDefaults(res, filtersData.filters)\n\n // 3. Update filter values with saved defaults\n let defaultFilterValues\n if (res.locals['saveDefaultsEnabled']) {\n defaultFilterValues = await services.defaultFilterValuesService.get(userId, reportId, id, FiltersType.REQUEST)\n }\n if (defaultFilterValues) {\n filtersData = PersonalistionUtils.setFilterValuesFromSavedDefaults(\n filtersData.filters,\n filtersData.sortBy || [],\n defaultFilterValues,\n )\n }\n\n // 4. Overwrite filter values with query param values\n filtersData.filters = FiltersUtils.setFilterValuesFromRequest(filtersData.filters, req)\n\n return { filtersData, defaultFilterValues }\n}\n\n/**\n * Sends the request for the async report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const request = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const requestArgs = { req, res, token }\n\n const { executionData, queryData, childExecutionData } = await requestProduct({\n ...requestArgs,\n dashboardService: services.dashboardService,\n reportingService: services.reportingService,\n })\n\n if (executionData.executionId && executionData.tableId) {\n await updateStore({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n })\n } else {\n throw new Error('No execution data returned')\n }\n\n return executionData\n}\n\nexport const cancelRequest = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser, definitionsPath } = LocalsHelper.getValues(res)\n const { reportId, id, executionId, type } = req.params\n\n let service: ReportingService | DashboardService = services.reportingService\n if (type === ReportType.REPORT) service = services.reportingService\n if (type === ReportType.DASHBOARD) service = services.dashboardService\n\n const response = await service.cancelAsyncRequest(token, reportId, id, executionId, definitionsPath)\n\n if (response && response['cancellationSucceeded']) {\n await services.requestedReportService.updateStatus(executionId, dprUser.id, RequestStatus.ABORTED)\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 renderRequest = async ({\n req,\n res,\n services,\n next,\n}: {\n req: Request\n res: Response\n next: NextFunction\n services: Services\n}): Promise<RequestDataResult | boolean> => {\n try {\n const { token, csrfToken, definitionsPath: definitionPath, dpdPathFromQuery, dprUser } = LocalsHelper.getValues(res)\n const { reportId, type, id } = req.params\n const { definition } = res.locals\n const defaultsSaved = <string>req.query['defaultsSaved']\n\n const definitionApiArgs = { token, reportId, definitionPath, services }\n\n let name\n let reportName\n let description\n let template\n let fields: components['schemas']['FieldDefinition'][] = []\n let sections\n let interactive\n let filtersData\n let defaultFilterValues: defaultFilterValue[] = []\n\n if (type === ReportType.REPORT) {\n ;({ name, reportName, description, fields, interactive } = await renderReportRequestData(definition))\n }\n\n if (type === ReportType.DASHBOARD) {\n ;({ name, reportName, description, sections, fields } = await renderDashboardRequestData({\n ...definitionApiArgs,\n definition,\n }))\n }\n\n if (fields) {\n const filterData = await getFilterData(req, res, fields, interactive || false, services, dprUser.id)\n defaultFilterValues = filterData.defaultFilterValues || defaultFilterValues\n filtersData = filterData.filtersData\n }\n\n const reportData: RequestReportData = {\n reportName,\n name,\n description,\n reportId,\n id,\n ...(dpdPathFromQuery && { definitionPath }),\n csrfToken,\n template,\n sections,\n hasDefaults: defaultFilterValues?.length > 0,\n defaultsSaved,\n type: type as ReportType,\n saveDefaultsEnabled: res.locals['saveDefaultsEnabled'],\n }\n\n return {\n title: `Request ${type}`,\n filtersDescription: `Customise your ${type} using the filters below and submit your request.`,\n filtersData,\n reportData,\n }\n } catch (error) {\n next(error)\n return false\n }\n}\n\nexport const getFiltersFromReqBody = (req: Request) => {\n return Object.keys(req.body)\n .filter((attr) => attr.includes('filters.'))\n .filter((attr) => !!req.body[attr])\n .map((attr) => {\n return { name: attr, value: req.body[attr] }\n })\n}\n\nexport default {\n request,\n cancelRequest,\n renderRequest,\n getFiltersFromReqBody,\n getDefintionByType,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["utils_exports", "__export", "cancelRequest", "utils_default", "getDefintionByType", "getFiltersFromReqBody", "renderRequest", "request", "updateStore", "__toCommonJS", "import_utils", "import_localsHelper", "import_reportStoreHelper", "import_UserStoreItemBuilder", "import_UserReports", "import_personalisationUtils", "import_filtersTypeEnum", "req", "res", "services", "queryData", "executionData", "childExecutionData", "search", "id", "type", "dprUser", "definitionsPath", "dpdPathFromQuery", "LocalsHelper", "requestFormData", "reportData", "requestedReportData", "UserStoreItemBuilder", "requestChildReports", "childVariants", "reportingService", "token", "reportId", "dataProductDefinitionsPath", "query", "childVariant", "response", "executionId", "tableId", "requestProduct", "dashboardService", "fields", "definition", "FiltersFormUtils", "renderDashboardRequestData", "definitionPath", "reportName", "def", "name", "description", "sections", "renderReportRequestData", "_next", "variantId", "getFilterData", "interactive", "userId", "filtersData", "PersonalistionUtils", "defaultFilterValues", "FiltersUtils", "requestArgs", "service", "next", "csrfToken", "defaultsSaved", "definitionApiArgs", "template", "filterData", "error", "attr"]
|
|
7
7
|
}
|
|
@@ -109,11 +109,18 @@ async function requestChildReports(
|
|
|
109
109
|
queryData?: SetQueryFromFiltersResult,
|
|
110
110
|
dataProductDefinitionsPath?: string,
|
|
111
111
|
): Promise<Array<ChildReportExecutionData>> {
|
|
112
|
+
let query: Record<string, string>
|
|
113
|
+
if (queryData) {
|
|
114
|
+
query = queryData.query
|
|
115
|
+
delete query['sortColumn']
|
|
116
|
+
delete query['sortedAsc']
|
|
117
|
+
}
|
|
118
|
+
|
|
112
119
|
return Promise.all(
|
|
113
120
|
childVariants.map((childVariant) =>
|
|
114
121
|
reportingService
|
|
115
122
|
.requestAsyncReport(token, reportId, childVariant.id, {
|
|
116
|
-
...(
|
|
123
|
+
...(query && query),
|
|
117
124
|
...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),
|
|
118
125
|
})
|
|
119
126
|
.then((response) => {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var x=Object.create;var g=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var B=(e,o)=>{for(var t in o)g(e,t,{get:o[t],enumerable:!0})},C=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of T(o))!z.call(e,n)&&n!==t&&g(e,n,{get:()=>o[n],enumerable:!(i=E(o,n))||i.enumerable});return e};var D=(e,o,t)=>(t=e!=null?x(j(e)):{},C(o||!e||!e.__esModule?g(t,"default",{value:e,enumerable:!0}):t,e)),M=e=>C(g({},"__esModule",{value:!0}),e);var H={};B(H,{applyDashboardInteractiveQuery:()=>P,applyReportInteractiveQuery:()=>A,default:()=>$});module.exports=M(H);var f=require("../../../components/_filters/filter-input/enum"),y=D(require("../../../utils/localsHelper")),F=D(require("../../../utils/definitionUtils")),I=D(require("../../../utils/DateMapper/DateMapper")),V=D(require("../../../components/_reports/report-columns-form/utils"));const A=async(e,o,t,i)=>{const{reportId:n,id:r}=e.params,{token:l,definitionsPath:a}=y.default.getValues(o),s=(await t.reportingService.getDefinition(l,n,r,a)).variant.specification?.fields||[];return L(e,o,t,i,s)},P=async(e,o,t,i)=>{const{reportId:n,id:r}=e.params,{token:l,definitionsPath:a}=y.default.getValues(o),s=(await t.dashboardService.getDefinition(l,n,r,a)).filterFields||[];return L(e,o,t,i,s)},L=async(e,o,t,i,n)=>{const{tableId:r,id:l}=e.params,{dprUser:a}=y.default.getValues(o);let d;r?d=await t.recentlyViewedService?.getReportByTableId(r,a.id):d=await t.recentlyViewedService?.getReportById(l,a.id);const s=d?.interactiveQuery?.data,p=s?.preventDefault,R=s?.pageSize,S=i==="columns"?s?.selectedPage:1,b=s?.sortColumn,h=s?.sortedAsc;let v={};s&&(v=Object.keys(s).filter(c=>c.includes("filters.")).reduce((c,u)=>({...c,[u]:s[u]}),{}));let m={...p&&{preventDefault:p},...S&&{selectedPage:S},...R&&{pageSize:R},...b&&{sortColumn:b},...h&&{sortedAsc:h},...e.body};if(i==="columns"){const{columns:c}=e.body,u=V.default.mandatoryColumns(n);let w=[];c&&(w=Array.isArray(c)?c:[c]);const U=[...u,...w];m={...m,columns:U,...v}}else{const c=s?.columns||[];m={...m,columns:c}}const Q=O({formData:m,fields:n});o.redirect(`${e.baseUrl}?${Q}`)},O=({formData:e,fields:o})=>{const t=new URLSearchParams;Object.keys(e).forEach(n=>{const r=e[n];if(r&&n!=="_csrf"){const l=n.split(".")[1];if(l){const a=F.default.getFilter(o,l);if(a){const{type:d}=a;switch(d.toLocaleLowerCase()){case f.FilterType.date.toLocaleLowerCase():case f.FilterType.dateRange.toLocaleLowerCase():case f.FilterType.granularDateRange.toLocaleLowerCase():{let s=r;const p=new I.default;p.getDateType(s)!=="none"&&(s=p.toDateString(s,"iso")||""),s&&t.append(n,s)}break;case f.FilterType.multiselect.toLocaleLowerCase():Array.isArray(r)?r.forEach(p=>{t.append(n,p)}):t.append(n,r);break;default:t.append(n,r);break}}}else Array.isArray(r)?r.forEach(a=>{t.append(n,a)}):t.append(n,r)}});const i=t.toString();return decodeURIComponent(i)};var $={applyDashboardInteractiveQuery:P,applyReportInteractiveQuery:A};0&&(module.exports={applyDashboardInteractiveQuery,applyReportInteractiveQuery});
|
|
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/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { Request, Response } from 'express'\nimport { FilterType } from '../../../components/_filters/filter-input/enum'\nimport { components } from '../../../types/api'\nimport { StoredReportData } from '../../../types/UserReports'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport definitionUtils from '../../../utils/definitionUtils'\nimport DateMapper from '../../../utils/DateMapper/DateMapper'\nimport ColumnsUtils from '../../../components/_reports/report-columns-form/utils'\n\nexport const applyReportInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n) => {\n const { reportId, id } = req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition: components['schemas']['SingleVariantReportDefinition'] =\n await services.reportingService.getDefinition(token, reportId, id, definitionsPath)\n const fields = definition.variant.specification?.fields || []\n\n return applyInteractiveQuery(req, res, services, applyType, fields)\n}\n\nexport const applyDashboardInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n) => {\n const { reportId, id } = req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition: components['schemas']['DashboardDefinition'] = await services.dashboardService.getDefinition(\n token,\n reportId,\n id,\n definitionsPath,\n )\n const fields = definition.filterFields || []\n\n return applyInteractiveQuery(req, res, services, applyType, fields)\n}\n\nconst applyInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { tableId, id } = req.params\n const { dprUser } = LocalsHelper.getValues(res)\n\n // get the report state\n let reportStateData: StoredReportData | undefined\n if (tableId) {\n // means its an async report\n reportStateData = await services.recentlyViewedService?.getReportByTableId(tableId, dprUser.id)\n } else {\n // its a sync report and can be indentified by ID as will always only be 1\n reportStateData = await services.recentlyViewedService?.getReportById(id, dprUser.id)\n }\n\n // Get the stored interactive query data\n const interactiveQueryData = reportStateData?.interactiveQuery?.data\n\n const preventDefault = interactiveQueryData?.['preventDefault']\n const pageSize = interactiveQueryData?.['pageSize']\n const selectedPage = interactiveQueryData?.['selectedPage']\n const sortColumn = interactiveQueryData?.['sortColumn']\n const sortedAsc = interactiveQueryData?.['sortedAsc']\n\n let filters = {}\n if (interactiveQueryData) {\n filters = Object.keys(interactiveQueryData)\n .filter((key) => key.includes('filters.'))\n .reduce((acc, key) => ({ ...acc, [key]: interactiveQueryData[key] }), {})\n }\n\n // Create merged form data\n let formData: Record<string, string | string[]> = {\n ...(preventDefault && { preventDefault }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...req.body,\n }\n\n if (applyType === 'columns') {\n const { columns } = req.body\n const mandatoryCols = ColumnsUtils.mandatoryColumns(fields)\n\n let bodyColumns = []\n if (columns) {\n bodyColumns = Array.isArray(columns) ? columns : [columns]\n }\n const columnsData = [...mandatoryCols, ...bodyColumns]\n formData = { ...formData, columns: columnsData, ...filters }\n } else {\n const columns = interactiveQueryData?.['columns'] || []\n formData = { ...formData, columns }\n }\n\n // Create query string\n const filtersString = createQueryParamsFromFormData({\n formData,\n fields,\n })\n\n // Redirect back to report\n res.redirect(`${req.baseUrl}?${filtersString}`)\n}\n\nconst createQueryParamsFromFormData = ({\n formData,\n fields,\n}: {\n fields: components['schemas']['FieldDefinition'][]\n formData: Record<string, string | string[]>\n}) => {\n // create the query string\n const params = new URLSearchParams()\n Object.keys(formData).forEach((key) => {\n const value = formData[key]\n\n if (value && key !== '_csrf') {\n const fieldId = key.split('.')[1] // filters are prefixed with 'filters.'\n if (fieldId) {\n const filter = definitionUtils.getFilter(fields, fieldId)\n if (filter) {\n const { type: filterType } = filter\n switch (filterType.toLocaleLowerCase()) {\n // DATE RANGE TYPES\n case FilterType.date.toLocaleLowerCase():\n case FilterType.dateRange.toLocaleLowerCase():\n case FilterType.granularDateRange.toLocaleLowerCase():\n {\n let dateValue: string = <string>value\n const dateMapper = new DateMapper()\n const currentDateFormat = dateMapper.getDateType(dateValue)\n if (currentDateFormat !== 'none') {\n dateValue = dateMapper.toDateString(dateValue, 'iso') || ''\n }\n if (dateValue) {\n params.append(key, dateValue)\n }\n }\n break\n\n // MULTIVALUE TYPES: string[] || string if only one value selected\n case FilterType.multiselect.toLocaleLowerCase():\n if (Array.isArray(value)) {\n const multiselectValue = <string[]>value\n multiselectValue.forEach((v: string) => {\n params.append(key, v)\n })\n } else {\n params.append(key, <string>value)\n }\n break\n\n // OTHER TYPES - always a string\n default:\n params.append(key, <string>value)\n break\n }\n }\n } else if (Array.isArray(value)) {\n value.forEach((v: string) => {\n params.append(key, v)\n })\n } else {\n params.append(key, value)\n }\n }\n })\n\n const encodedFilters = params.toString()\n return decodeURIComponent(encodedFilters)\n}\n\nexport default {\n applyDashboardInteractiveQuery,\n applyReportInteractiveQuery,\n}\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,EAAA,gCAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAL,GACA,IAAAM,EAA2B,0DAI3BC,EAAyB,0CACzBC,EAA4B,6CAC5BC,EAAuB,mDACvBC,EAAyB,qEAElB,MAAMP,EAA8B,MACzCQ,EACAC,EACAC,EACAC,IACG,CACH,KAAM,CAAE,SAAAC,EAAU,GAAAC,CAAG,EAAIL,EAAI,OACvB,CAAE,MAAAM,EAAO,gBAAAC,CAAgB,EAAI,EAAAC,QAAa,UAAUP,CAAG,EAKvDQ,GADJ,MAAMP,EAAS,iBAAiB,cAAcI,EAAOF,EAAUC,EAAIE,CAAe,GAC1D,QAAQ,eAAe,QAAU,CAAC,EAE5D,OAAOG,EAAsBV,EAAKC,EAAKC,EAAUC,EAAWM,CAAM,CACpE,EAEalB,EAAiC,MAC5CS,EACAC,EACAC,EACAC,IACG,CACH,KAAM,CAAE,SAAAC,EAAU,GAAAC,CAAG,EAAIL,EAAI,OACvB,CAAE,MAAAM,EAAO,gBAAAC,CAAgB,EAAI,EAAAC,QAAa,UAAUP,CAAG,EASvDQ,GAN2D,MAAMP,EAAS,iBAAiB,cAC/FI,EACAF,EACAC,EACAE,CACF,GAC0B,cAAgB,CAAC,EAE3C,OAAOG,EAAsBV,EAAKC,EAAKC,EAAUC,EAAWM,CAAM,CACpE,EAEMC,EAAwB,MAC5BV,EACAC,EACAC,EACAC,EACAM,IACG,CACH,KAAM,CAAE,QAAAE,EAAS,GAAAN,CAAG,EAAIL,EAAI,OACtB,CAAE,QAAAY,CAAQ,EAAI,EAAAJ,QAAa,UAAUP,CAAG,EAG9C,IAAIY,EACAF,EAEFE,EAAkB,MAAMX,EAAS,uBAAuB,mBAAmBS,EAASC,EAAQ,EAAE,EAG9FC,EAAkB,MAAMX,EAAS,uBAAuB,cAAcG,EAAIO,EAAQ,EAAE,EAItF,MAAME,EAAuBD,GAAiB,kBAAkB,KAE1DE,EAAiBD,GAAuB,eACxCE,EAAWF,GAAuB,SAClCG,
|
|
4
|
+
"sourcesContent": ["import { Request, Response } from 'express'\nimport { FilterType } from '../../../components/_filters/filter-input/enum'\nimport { components } from '../../../types/api'\nimport { StoredReportData } from '../../../types/UserReports'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport definitionUtils from '../../../utils/definitionUtils'\nimport DateMapper from '../../../utils/DateMapper/DateMapper'\nimport ColumnsUtils from '../../../components/_reports/report-columns-form/utils'\n\nexport const applyReportInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n) => {\n const { reportId, id } = req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition: components['schemas']['SingleVariantReportDefinition'] =\n await services.reportingService.getDefinition(token, reportId, id, definitionsPath)\n const fields = definition.variant.specification?.fields || []\n\n return applyInteractiveQuery(req, res, services, applyType, fields)\n}\n\nexport const applyDashboardInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n) => {\n const { reportId, id } = req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition: components['schemas']['DashboardDefinition'] = await services.dashboardService.getDefinition(\n token,\n reportId,\n id,\n definitionsPath,\n )\n const fields = definition.filterFields || []\n\n return applyInteractiveQuery(req, res, services, applyType, fields)\n}\n\nconst applyInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { tableId, id } = req.params\n const { dprUser } = LocalsHelper.getValues(res)\n\n // get the report state\n let reportStateData: StoredReportData | undefined\n if (tableId) {\n // means its an async report\n reportStateData = await services.recentlyViewedService?.getReportByTableId(tableId, dprUser.id)\n } else {\n // its a sync report and can be indentified by ID as will always only be 1\n reportStateData = await services.recentlyViewedService?.getReportById(id, dprUser.id)\n }\n\n // Get the stored interactive query data\n const interactiveQueryData = reportStateData?.interactiveQuery?.data\n\n const preventDefault = interactiveQueryData?.['preventDefault']\n const pageSize = interactiveQueryData?.['pageSize']\n const selectedPage = applyType === 'columns' ? interactiveQueryData?.['selectedPage'] : 1\n const sortColumn = interactiveQueryData?.['sortColumn']\n const sortedAsc = interactiveQueryData?.['sortedAsc']\n\n let filters = {}\n if (interactiveQueryData) {\n filters = Object.keys(interactiveQueryData)\n .filter((key) => key.includes('filters.'))\n .reduce((acc, key) => ({ ...acc, [key]: interactiveQueryData[key] }), {})\n }\n\n // Create merged form data\n let formData: Record<string, string | string[]> = {\n ...(preventDefault && { preventDefault }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...req.body,\n }\n\n if (applyType === 'columns') {\n const { columns } = req.body\n const mandatoryCols = ColumnsUtils.mandatoryColumns(fields)\n\n let bodyColumns = []\n if (columns) {\n bodyColumns = Array.isArray(columns) ? columns : [columns]\n }\n const columnsData = [...mandatoryCols, ...bodyColumns]\n formData = { ...formData, columns: columnsData, ...filters }\n } else {\n const columns = interactiveQueryData?.['columns'] || []\n formData = { ...formData, columns }\n }\n\n // Create query string\n const filtersString = createQueryParamsFromFormData({\n formData,\n fields,\n })\n\n // Redirect back to report\n res.redirect(`${req.baseUrl}?${filtersString}`)\n}\n\nconst createQueryParamsFromFormData = ({\n formData,\n fields,\n}: {\n fields: components['schemas']['FieldDefinition'][]\n formData: Record<string, string | string[]>\n}) => {\n // create the query string\n const params = new URLSearchParams()\n Object.keys(formData).forEach((key) => {\n const value = formData[key]\n\n if (value && key !== '_csrf') {\n const fieldId = key.split('.')[1] // filters are prefixed with 'filters.'\n if (fieldId) {\n const filter = definitionUtils.getFilter(fields, fieldId)\n if (filter) {\n const { type: filterType } = filter\n switch (filterType.toLocaleLowerCase()) {\n // DATE RANGE TYPES\n case FilterType.date.toLocaleLowerCase():\n case FilterType.dateRange.toLocaleLowerCase():\n case FilterType.granularDateRange.toLocaleLowerCase():\n {\n let dateValue: string = <string>value\n const dateMapper = new DateMapper()\n const currentDateFormat = dateMapper.getDateType(dateValue)\n if (currentDateFormat !== 'none') {\n dateValue = dateMapper.toDateString(dateValue, 'iso') || ''\n }\n if (dateValue) {\n params.append(key, dateValue)\n }\n }\n break\n\n // MULTIVALUE TYPES: string[] || string if only one value selected\n case FilterType.multiselect.toLocaleLowerCase():\n if (Array.isArray(value)) {\n const multiselectValue = <string[]>value\n multiselectValue.forEach((v: string) => {\n params.append(key, v)\n })\n } else {\n params.append(key, <string>value)\n }\n break\n\n // OTHER TYPES - always a string\n default:\n params.append(key, <string>value)\n break\n }\n }\n } else if (Array.isArray(value)) {\n value.forEach((v: string) => {\n params.append(key, v)\n })\n } else {\n params.append(key, value)\n }\n }\n })\n\n const encodedFilters = params.toString()\n return decodeURIComponent(encodedFilters)\n}\n\nexport default {\n applyDashboardInteractiveQuery,\n applyReportInteractiveQuery,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["utils_exports", "__export", "applyDashboardInteractiveQuery", "applyReportInteractiveQuery", "utils_default", "__toCommonJS", "import_enum", "import_localsHelper", "import_definitionUtils", "import_DateMapper", "import_utils", "req", "res", "services", "applyType", "reportId", "id", "token", "definitionsPath", "LocalsHelper", "fields", "applyInteractiveQuery", "tableId", "dprUser", "reportStateData", "interactiveQueryData", "preventDefault", "pageSize", "selectedPage", "sortColumn", "sortedAsc", "filters", "key", "acc", "formData", "columns", "mandatoryCols", "ColumnsUtils", "bodyColumns", "columnsData", "filtersString", "createQueryParamsFromFormData", "params", "value", "fieldId", "filter", "definitionUtils", "filterType", "dateValue", "dateMapper", "DateMapper", "v", "encodedFilters"]
|
|
7
7
|
}
|
|
@@ -71,7 +71,7 @@ const applyInteractiveQuery = async (
|
|
|
71
71
|
|
|
72
72
|
const preventDefault = interactiveQueryData?.['preventDefault']
|
|
73
73
|
const pageSize = interactiveQueryData?.['pageSize']
|
|
74
|
-
const selectedPage = interactiveQueryData?.['selectedPage']
|
|
74
|
+
const selectedPage = applyType === 'columns' ? interactiveQueryData?.['selectedPage'] : 1
|
|
75
75
|
const sortColumn = interactiveQueryData?.['sortColumn']
|
|
76
76
|
const sortedAsc = interactiveQueryData?.['sortedAsc']
|
|
77
77
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var B=Object.create;var D=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var G=(e,s)=>{for(var n in s)D(e,n,{get:s[n],enumerable:!0})},v=(e,s,n,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of j(s))!S.call(e,o)&&o!==n&&D(e,o,{get:()=>s[o],enumerable:!(t=T(s,o))||t.enumerable});return e};var H=(e,s,n)=>(n=e!=null?B(A(e)):{},v(s||!e||!e.__esModule?D(n,"default",{value:e,enumerable:!0}):n,e)),L=e=>v(D({},"__esModule",{value:!0}),e);var U={};G(U,{default:()=>N,filterKeys:()=>g,filterRowsByDisplayColumns:()=>O,getDatasetRows:()=>C,getEarliestDataset:()=>E,getGroupKey:()=>I,getKeyIds:()=>R,getKeyVariations:()=>b,getLastestDataset:()=>V,groupRowsByKey:()=>k,groupRowsByTimestamp:()=>K});module.exports=L(U);var x=H(require("./logger"));const C=(e,s)=>{const{measures:n,filters:t,expectNulls:o}=e.columns;x.default.info("DEBUG: Dashboard vis filterValues:",t);const a=e.columns.keys,i=n.map(c=>c.id),r=a?.map(c=>c.id)||[];let l=t?.map(c=>c.id)||[];l=[...new Set(l)];const p=a?.some(c=>c.optional);s.length&&s[0].ts&&r.unshift("ts");const h=s.filter(c=>{const w=[];return Object.keys(c).forEach(f=>{const u=c[f].raw;let m=!0;if(l.includes(f)&&t){const q=t?t.filter(d=>d.id===f).map(d=>d.equals):[],y=[];q.forEach(d=>{d===null?y.push(u===""||u===void 0||u===null):y.push(d===u)}),m=y.some(Boolean)}else r.includes(f)&&p?m=!0:r.includes(f)&&!p||i.includes(f)?m=u!==""&&u!==void 0&&u!==null:o&&(m=u===""||u===void 0||u===null);w.push(m)}),w.every(f=>f)});return p?g(h,a||[]):h},b=e=>{const s=[],n=e.map(a=>a.id),t=e.every(a=>a.optional),o=[...n];return n.reverse().forEach(a=>{const i=e.find(r=>r.id===a);s.push([...o]),i&&i.optional&&o.pop()}),t&&s.push([]),s},R=(e,s)=>{let n=[];return s.every(t=>{const o=[];return e.forEach(a=>{const i=[];Object.keys(a).forEach(r=>{const l=a[r].raw;let p=!0;t.includes(r)&&(p=l!==""&&l!==void 0&&l!==null),i.push(p)}),i.every(r=>r)&&o.push(a)}),o.length>0?(n=t,!1):(n=t,!0)}),n},g=(e,s)=>{const n=b(s),t=R(e,n);return e.filter(o=>{const a=[];return Object.keys(o).forEach(i=>{const r=o[i].raw;let l=!0;t.includes(i)&&(l=r!==""&&r!==void 0&&r!==null),a.push(l)}),a.every(i=>i)})},V=e=>{const s=e[e.length-1]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},E=e=>{const s=e[0]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},K=e=>[...new Set(e.map(n=>n.ts.raw))].map(n=>e.filter(t=>t.ts.raw===n)),k=(e,s)=>[...new Set(e.map(t=>t[s].raw))].map(t=>e.filter(o=>o[s].raw===t)),I=(e,s)=>{if(!s||!s.length||!e.length)return;const n=e[0];let t=s.length-1,o=!1;for(;!o;){const a=`${s[t]?.id}`;a&&t!==-1&&(!n[a]||!n[a].raw||n[a].raw===""||n[a].raw===null)?t-=1:o=!0}return t!==-1?s[t]:void 0},O=(e,s,n=!1)=>{const{keys:t,measures:o}=e.columns,a=t||[];let i=[...o];n&&(i=[...a,...o]);const r=i.map(l=>l.id);return s.map(l=>Object.keys(l).filter(p=>r.includes(p)).reduce((p,h)=>(p[h]=l[h],p),{}))};var N={getDatasetRows:C,getLastestDataset:V,getEarliestDataset:E,filterRowsByDisplayColumns:O,groupRowsByTimestamp:K,groupRowsByKey:k,getGroupKey:I,getKeyVariations:b,getKeyIds:R,filterKeys:g};0&&(module.exports={filterKeys,filterRowsByDisplayColumns,getDatasetRows,getEarliestDataset,getGroupKey,getKeyIds,getKeyVariations,getLastestDataset,groupRowsByKey,groupRowsByTimestamp});
|
|
2
2
|
//# sourceMappingURL=datasetHelper.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dpr/utils/datasetHelper.ts"],
|
|
4
|
-
"sourcesContent": ["import { DashboardDataResponse } from '../types/Metrics'\nimport { components } from '../types/api'\n\nexport const getDatasetRows = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { measures, filters, expectNulls } = listDefinition.columns\n const keys = <Array<components['schemas']['DashboardVisualisationColumnDefinition']>>listDefinition.columns.keys\n\n const displayColumnsIds = measures.map((col) => col.id)\n const keyColumnsIds = keys?.map((col) => col.id) || []\n let filterColIds = filters?.map((col) => col.id) || []\n filterColIds = [...new Set(filterColIds)]\n const hasOptionalKeys = keys?.some((key) => key.optional)\n\n if (dashboardData.length && dashboardData[0]['ts']) keyColumnsIds.unshift('ts')\n\n const filtered = dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((fieldId) => {\n const value = datasetRow[fieldId].raw\n // All rows are valid until proven otherwise\n let valid = true\n\n // 1. check if the column value is equal to a defined column value\n if (filterColIds.includes(fieldId) && filters) {\n const filterValues = filters ? filters.filter((f) => f.id === fieldId).map((f) => f.equals) : []\n const validFilters: boolean[] = []\n filterValues.forEach((filterValue) => {\n if (filterValue === null) {\n validFilters.push(value === '' || value === undefined || value === null)\n } else {\n validFilters.push(filterValue === value)\n }\n })\n valid = validFilters.some(Boolean)\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(fieldId) && hasOptionalKeys) {\n valid = true\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(fieldId) && !hasOptionalKeys) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 2. check values exist in the defined columns\n } else if (displayColumnsIds.includes(fieldId)) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 3. check that all remaining columns are null.\n } else if (expectNulls) {\n valid = value === '' || value === undefined || value === null\n }\n\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n\n if (hasOptionalKeys) {\n return filterKeys(filtered, keys || [])\n }\n\n return filtered\n}\n\nexport const getKeyVariations = (keys: Array<components['schemas']['DashboardVisualisationColumnDefinition']>) => {\n const colIdVariations: string[][] = []\n const keyColumnsIds = keys.map((col) => col.id)\n const allOptional = keys.every((key) => key.optional)\n const colIdCopy = [...keyColumnsIds]\n\n keyColumnsIds.reverse().forEach((id) => {\n const key = keys.find((k) => k.id === id)\n colIdVariations.push([...colIdCopy])\n if (key && key.optional) {\n colIdCopy.pop()\n }\n })\n\n if (allOptional) colIdVariations.push([])\n return colIdVariations\n}\n\nexport const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariations: string[][]) => {\n let validHeadIds: string[] = []\n colIdVariations.every((ids: string[]) => {\n const validRows = []\n\n dashboardData.forEach((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (ids.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n if (validRow.every((val) => val)) {\n validRows.push(datasetRow)\n }\n })\n\n if (validRows.length > 0) {\n validHeadIds = ids\n return false\n }\n validHeadIds = ids\n return true\n })\n\n return validHeadIds\n}\n\nexport const filterKeys = (\n dashboardData: DashboardDataResponse[],\n keys: Array<components['schemas']['DashboardVisualisationColumnDefinition']>,\n) => {\n const colIdVariations = getKeyVariations(keys)\n const validHeadIds = getKeyIds(dashboardData, colIdVariations)\n\n return dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (validHeadIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n}\n\nexport const getLastestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[dashboardData.length - 1]?.['ts']?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data['ts'].raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const getEarliestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[0]?.['ts']?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data['ts'].raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const groupRowsByTimestamp = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[][] => {\n const uniqueTimestamps = [...new Set(dashboardData.map((item) => item['ts'].raw))]\n return uniqueTimestamps.map((ts) => {\n return dashboardData.filter((d) => d['ts'].raw === ts)\n })\n}\n\nexport const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: string): DashboardDataResponse[][] => {\n const uniqueKeyValues = [...new Set(dashboardData.map((item) => item[key].raw))]\n return uniqueKeyValues.map((keyValue) => {\n return dashboardData.filter((d) => d[key].raw === keyValue)\n })\n}\n\nexport const getGroupKey = (\n rawData: DashboardDataResponse[],\n keys?: Array<components['schemas']['DashboardVisualisationColumnDefinition']>,\n) => {\n if (!keys || !keys.length || !rawData.length) {\n return undefined\n }\n\n const data = rawData[0]\n let index = keys.length - 1\n let keyFound = false\n while (!keyFound) {\n const k = `${keys[index]?.id}`\n if (k && index !== -1 && (!data[k] || !data[k].raw || data[k].raw === '' || data[k].raw === null)) {\n index -= 1\n } else {\n keyFound = true\n }\n }\n\n return index !== -1 ? keys[index] : undefined\n}\n\nexport const filterRowsByDisplayColumns = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n includeKeys = false,\n) => {\n const { keys: keyCols, measures } = listDefinition.columns\n const keys = keyCols || []\n let displayColumns = [...measures]\n if (includeKeys) {\n displayColumns = [...keys, ...measures]\n }\n const displayColumnsIds = displayColumns.map((col) => col.id)\n\n return dashboardData.map((datasetRow: DashboardDataResponse) => {\n return Object.keys(datasetRow)\n .filter((key) => displayColumnsIds.includes(key))\n .reduce((acc, key) => {\n acc[key] = datasetRow[key]\n return acc\n }, {} as unknown as DashboardDataResponse)\n })\n}\n\nexport default {\n getDatasetRows,\n getLastestDataset,\n getEarliestDataset,\n filterRowsByDisplayColumns,\n groupRowsByTimestamp,\n groupRowsByKey,\n getGroupKey,\n getKeyVariations,\n getKeyIds,\n filterKeys,\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["datasetHelper_exports", "__export", "datasetHelper_default", "filterKeys", "filterRowsByDisplayColumns", "getDatasetRows", "getEarliestDataset", "getGroupKey", "getKeyIds", "getKeyVariations", "getLastestDataset", "groupRowsByKey", "groupRowsByTimestamp", "__toCommonJS", "listDefinition", "dashboardData", "measures", "filters", "expectNulls", "keys", "displayColumnsIds", "col", "keyColumnsIds", "filterColIds", "hasOptionalKeys", "key", "filtered", "datasetRow", "validRow", "fieldId", "value", "valid", "filterValues", "f", "validFilters", "filterValue", "val", "colIdVariations", "allOptional", "colIdCopy", "id", "k", "validHeadIds", "ids", "validRows", "datasetField", "latestTimestamp", "data", "item", "ts", "d", "keyValue", "rawData", "index", "keyFound", "includeKeys", "keyCols", "displayColumns", "acc"]
|
|
4
|
+
"sourcesContent": ["import { DashboardDataResponse } from '../types/Metrics'\nimport { components } from '../types/api'\nimport logger from './logger'\n\nexport const getDatasetRows = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { measures, filters, expectNulls } = listDefinition.columns\n logger.info('DEBUG: Dashboard vis filterValues:', filters)\n const keys = <Array<components['schemas']['DashboardVisualisationColumnDefinition']>>listDefinition.columns.keys\n\n const displayColumnsIds = measures.map((col) => col.id)\n const keyColumnsIds = keys?.map((col) => col.id) || []\n let filterColIds = filters?.map((col) => col.id) || []\n filterColIds = [...new Set(filterColIds)]\n const hasOptionalKeys = keys?.some((key) => key.optional)\n\n if (dashboardData.length && dashboardData[0]['ts']) keyColumnsIds.unshift('ts')\n\n const filtered = dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((fieldId) => {\n const value = datasetRow[fieldId].raw\n // All rows are valid until proven otherwise\n let valid = true\n\n // 1. check if the column value is equal to a defined column value\n if (filterColIds.includes(fieldId) && filters) {\n const filterValues = filters ? filters.filter((f) => f.id === fieldId).map((f) => f.equals) : []\n const validFilters: boolean[] = []\n filterValues.forEach((filterValue) => {\n if (filterValue === null) {\n validFilters.push(value === '' || value === undefined || value === null)\n } else {\n validFilters.push(filterValue === value)\n }\n })\n valid = validFilters.some(Boolean)\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(fieldId) && hasOptionalKeys) {\n valid = true\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(fieldId) && !hasOptionalKeys) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 2. check values exist in the defined columns\n } else if (displayColumnsIds.includes(fieldId)) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 3. check that all remaining columns are null.\n } else if (expectNulls) {\n valid = value === '' || value === undefined || value === null\n }\n\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n\n if (hasOptionalKeys) {\n return filterKeys(filtered, keys || [])\n }\n\n return filtered\n}\n\nexport const getKeyVariations = (keys: Array<components['schemas']['DashboardVisualisationColumnDefinition']>) => {\n const colIdVariations: string[][] = []\n const keyColumnsIds = keys.map((col) => col.id)\n const allOptional = keys.every((key) => key.optional)\n const colIdCopy = [...keyColumnsIds]\n\n keyColumnsIds.reverse().forEach((id) => {\n const key = keys.find((k) => k.id === id)\n colIdVariations.push([...colIdCopy])\n if (key && key.optional) {\n colIdCopy.pop()\n }\n })\n\n if (allOptional) colIdVariations.push([])\n return colIdVariations\n}\n\nexport const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariations: string[][]) => {\n let validHeadIds: string[] = []\n colIdVariations.every((ids: string[]) => {\n const validRows = []\n\n dashboardData.forEach((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (ids.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n if (validRow.every((val) => val)) {\n validRows.push(datasetRow)\n }\n })\n\n if (validRows.length > 0) {\n validHeadIds = ids\n return false\n }\n validHeadIds = ids\n return true\n })\n\n return validHeadIds\n}\n\nexport const filterKeys = (\n dashboardData: DashboardDataResponse[],\n keys: Array<components['schemas']['DashboardVisualisationColumnDefinition']>,\n) => {\n const colIdVariations = getKeyVariations(keys)\n const validHeadIds = getKeyIds(dashboardData, colIdVariations)\n\n return dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (validHeadIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n}\n\nexport const getLastestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[dashboardData.length - 1]?.['ts']?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data['ts'].raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const getEarliestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[0]?.['ts']?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data['ts'].raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const groupRowsByTimestamp = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[][] => {\n const uniqueTimestamps = [...new Set(dashboardData.map((item) => item['ts'].raw))]\n return uniqueTimestamps.map((ts) => {\n return dashboardData.filter((d) => d['ts'].raw === ts)\n })\n}\n\nexport const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: string): DashboardDataResponse[][] => {\n const uniqueKeyValues = [...new Set(dashboardData.map((item) => item[key].raw))]\n return uniqueKeyValues.map((keyValue) => {\n return dashboardData.filter((d) => d[key].raw === keyValue)\n })\n}\n\nexport const getGroupKey = (\n rawData: DashboardDataResponse[],\n keys?: Array<components['schemas']['DashboardVisualisationColumnDefinition']>,\n) => {\n if (!keys || !keys.length || !rawData.length) {\n return undefined\n }\n\n const data = rawData[0]\n let index = keys.length - 1\n let keyFound = false\n while (!keyFound) {\n const k = `${keys[index]?.id}`\n if (k && index !== -1 && (!data[k] || !data[k].raw || data[k].raw === '' || data[k].raw === null)) {\n index -= 1\n } else {\n keyFound = true\n }\n }\n\n return index !== -1 ? keys[index] : undefined\n}\n\nexport const filterRowsByDisplayColumns = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n includeKeys = false,\n) => {\n const { keys: keyCols, measures } = listDefinition.columns\n const keys = keyCols || []\n let displayColumns = [...measures]\n if (includeKeys) {\n displayColumns = [...keys, ...measures]\n }\n const displayColumnsIds = displayColumns.map((col) => col.id)\n\n return dashboardData.map((datasetRow: DashboardDataResponse) => {\n return Object.keys(datasetRow)\n .filter((key) => displayColumnsIds.includes(key))\n .reduce((acc, key) => {\n acc[key] = datasetRow[key]\n return acc\n }, {} as unknown as DashboardDataResponse)\n })\n}\n\nexport default {\n getDatasetRows,\n getLastestDataset,\n getEarliestDataset,\n filterRowsByDisplayColumns,\n groupRowsByTimestamp,\n groupRowsByKey,\n getGroupKey,\n getKeyVariations,\n getKeyIds,\n filterKeys,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["datasetHelper_exports", "__export", "datasetHelper_default", "filterKeys", "filterRowsByDisplayColumns", "getDatasetRows", "getEarliestDataset", "getGroupKey", "getKeyIds", "getKeyVariations", "getLastestDataset", "groupRowsByKey", "groupRowsByTimestamp", "__toCommonJS", "import_logger", "listDefinition", "dashboardData", "measures", "filters", "expectNulls", "logger", "keys", "displayColumnsIds", "col", "keyColumnsIds", "filterColIds", "hasOptionalKeys", "key", "filtered", "datasetRow", "validRow", "fieldId", "value", "valid", "filterValues", "f", "validFilters", "filterValue", "val", "colIdVariations", "allOptional", "colIdCopy", "id", "k", "validHeadIds", "ids", "validRows", "datasetField", "latestTimestamp", "data", "item", "ts", "d", "keyValue", "rawData", "index", "keyFound", "includeKeys", "keyCols", "displayColumns", "acc"]
|
|
7
7
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { DashboardDataResponse } from '../types/Metrics'
|
|
2
2
|
import { components } from '../types/api'
|
|
3
|
+
import logger from './logger'
|
|
3
4
|
|
|
4
5
|
export const getDatasetRows = (
|
|
5
6
|
listDefinition: components['schemas']['DashboardVisualisationDefinition'],
|
|
6
7
|
dashboardData: DashboardDataResponse[],
|
|
7
8
|
) => {
|
|
8
9
|
const { measures, filters, expectNulls } = listDefinition.columns
|
|
10
|
+
logger.info('DEBUG: Dashboard vis filterValues:', filters)
|
|
9
11
|
const keys = <Array<components['schemas']['DashboardVisualisationColumnDefinition']>>listDefinition.columns.keys
|
|
10
12
|
|
|
11
13
|
const displayColumnsIds = measures.map((col) => col.id)
|
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.26.
|
|
4
|
+
"version": "4.26.2",
|
|
5
5
|
"main": "dpr/all.mjs",
|
|
6
6
|
"sass": "dpr/all.scss",
|
|
7
7
|
"engines": {
|