@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.18.3 → 4.20.0
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/components/_async/async-filters-form/view.njk +1 -1
- package/dpr/components/_async/async-polling/clientClass.mjs +0 -22
- package/dpr/components/_async/async-polling/view.njk +11 -8
- package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
- package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
- package/dpr/components/_catalogue/catalogue-list/utils.ts +50 -57
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.ts +17 -9
- package/dpr/components/_sync/sync-load/view.njk +1 -1
- package/dpr/components/user-reports/utils.js +1 -1
- package/dpr/components/user-reports/utils.js.map +2 -2
- package/dpr/components/user-reports/utils.ts +4 -4
- package/dpr/data/dashboardClient.js +1 -1
- package/dpr/data/dashboardClient.js.map +2 -2
- package/dpr/data/dashboardClient.ts +17 -0
- package/dpr/data/reportingClient.js +1 -1
- package/dpr/data/reportingClient.js.map +3 -3
- package/dpr/data/reportingClient.ts +1 -24
- package/dpr/middleware/setUpDprResources.js +1 -1
- package/dpr/middleware/setUpDprResources.js.map +3 -3
- package/dpr/middleware/setUpDprResources.ts +21 -3
- package/dpr/routes/authError.njk +10 -0
- package/dpr/routes/index.js +1 -1
- package/dpr/routes/index.js.map +3 -3
- package/dpr/routes/index.ts +7 -1
- package/dpr/routes/journeys/api-failures.cy.js +2 -0
- package/dpr/routes/journeys/api-failures.cy.js.map +7 -0
- package/dpr/routes/journeys/api-failures.cy.ts +377 -0
- package/dpr/routes/journeys/my-reports/bookmarks/service.js.map +2 -2
- package/dpr/routes/journeys/my-reports/bookmarks/service.ts +1 -0
- package/dpr/routes/journeys/request-report/controller.js +1 -1
- package/dpr/routes/journeys/request-report/controller.js.map +3 -3
- package/dpr/routes/journeys/request-report/controller.ts +25 -5
- package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js.map +2 -2
- package/dpr/routes/journeys/request-report/filters/controller.ts +1 -1
- package/dpr/routes/journeys/request-report/routes.js +1 -1
- package/dpr/routes/journeys/request-report/routes.js.map +3 -3
- package/dpr/routes/journeys/request-report/routes.ts +16 -0
- package/dpr/routes/journeys/request-report/status/controller.js +1 -1
- package/dpr/routes/journeys/request-report/status/controller.js.map +3 -3
- package/dpr/routes/journeys/request-report/status/controller.ts +0 -17
- package/dpr/routes/journeys/request-report/status/routes.js +1 -1
- package/dpr/routes/journeys/request-report/status/routes.js.map +2 -2
- package/dpr/routes/journeys/request-report/status/routes.ts +0 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -4
- package/dpr/routes/journeys/view-report/sync/dashboard/controller.js +2 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/controller.js.map +7 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/controller.ts +39 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/routes.js +2 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/routes.js.map +7 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/routes.ts +18 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/utils.js +2 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/utils.js.map +7 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/utils.ts +149 -0
- package/dpr/routes/journeys/view-report/sync/load-report/controller.js +1 -1
- package/dpr/routes/journeys/view-report/sync/load-report/controller.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/load-report/controller.ts +43 -13
- package/dpr/routes/journeys/view-report/sync/report/routes.js +1 -1
- package/dpr/routes/journeys/view-report/sync/report/routes.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/report/routes.ts +2 -2
- package/dpr/routes/journeys/view-report/sync/routes.js +1 -1
- package/dpr/routes/journeys/view-report/sync/routes.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/routes.ts +2 -0
- package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
- package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/view-report/sync/tests.cy.ts +21 -1
- package/dpr/routes/serviceProblem.njk +10 -0
- package/dpr/services/dashboardService.js +1 -1
- package/dpr/services/dashboardService.js.map +2 -2
- package/dpr/services/dashboardService.ts +9 -0
- package/dpr/types/ReportQuery.js +1 -1
- package/dpr/types/ReportQuery.js.map +2 -2
- package/dpr/types/ReportQuery.ts +1 -1
- package/dpr/types/api.d.js +1 -1
- package/dpr/types/api.d.js.map +1 -1
- package/dpr/types/api.d.ts +139 -3
- package/dpr/utils/datasetHelper.js +1 -1
- package/dpr/utils/datasetHelper.js.map +3 -3
- package/dpr/utils/datasetHelper.ts +18 -9
- package/package.json +6 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var $=Object.create;var
|
|
1
|
+
"use strict";var $=Object.create;var n=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var E=(e,r)=>{for(var t in r)n(e,t,{get:r[t],enumerable:!0})},R=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of q(r))!A.call(e,s)&&s!==t&&n(e,s,{get:()=>r[s],enumerable:!(o=S(r,s))||o.enumerable});return e};var u=(e,r,t)=>(t=e!=null?$(O(e)):{},R(r||!e||!e.__esModule?n(t,"default",{value:e,enumerable:!0}):t,e)),B=e=>R(n({},"__esModule",{value:!0}),e);var N={};E(N,{Redirects:()=>x,RequestReportRoutes:()=>C,Routes:()=>g});module.exports=B(N);var d=require("express"),l=u(require("./controller")),f=u(require("./filters/routes")),I=u(require("./status/routes")),c=u(require("../../../middleware/reportAuthoriser"));function g({layoutPath:e,services:r}){const t=(0,d.Router)({mergeParams:!0}),o=new l.default(e,r);return t.post("/:type/:reportId/:id/:executionId/cancel",o.CANCEL),t.use("/:type/:reportId/:id/filters",(0,c.default)(r,e),(0,f.default)({layoutPath:e,services:r}),o.errorHandler),t.use("/:type/:reportId/:id/:executionId/status",(0,c.default)(r,e),(0,I.default)({layoutPath:e,services:r}),o.errorHandler),t.get("/:type/:reportId/:id/:executionId/cancel/failed",(s,p,a)=>{const m=JSON.parse(s.flash("ERROR_BODY")?.[0]||""),i=JSON.parse(s.flash("ERROR_PARAMS")?.[0]||""),y=s.flash("ERROR");p.render("dpr/routes/journeys/view-report/error",{layoutPath:e,...m&&{...m},...i&&{...i},error:y,params:i})}),t}function x(){const e=(0,d.Router)({mergeParams:!0});return e.get("/async/:type/:reportId/:id/request",(r,t)=>{const{type:o,reportId:s,id:p}=r.params;t.redirect(`${t.locals.nestedBaseUrl}/dpr/request-report/${o}/${s}/${p}/filters`)}),e.get("/async/:type/:reportId/:id/request/:executionId",(r,t)=>{const{type:o,reportId:s,id:p,executionId:a}=r.params;t.redirect(`${t.locals.nestedBaseUrl}/dpr/request-report/${o}/${s}/${p}/${a}/status`)}),e}const C=({services:e,path:r,layoutPath:t})=>{const o=(0,d.Router)({mergeParams:!0});return o.use(r,g({services:e,layoutPath:t})),o.use("/",x()),o};0&&(module.exports={Redirects,RequestReportRoutes,Routes});
|
|
2
2
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/dpr/routes/journeys/request-report/routes.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Router } from 'express'\nimport { Services } from '../../../types/Services'\nimport RequestReportController from './controller'\n\n// Routes\nimport requestReportRoutes from './filters/routes'\nimport requestStatusRoutes from './status/routes'\n\n// middleware\nimport reportAuthoriser from '../../../middleware/reportAuthoriser'\n\nexport function Routes({ layoutPath, services }: { services: Services; layoutPath: string }) {\n const router = Router({ mergeParams: true })\n\n const controller = new RequestReportController(layoutPath, services)\n router.use(\n `/:type/:reportId/:id/filters`,\n reportAuthoriser(services, layoutPath),\n requestReportRoutes({ layoutPath, services }),\n controller.errorHandler,\n )\n router.use(\n `/:type/:reportId/:id/:executionId/status`,\n reportAuthoriser(services, layoutPath),\n requestStatusRoutes({ layoutPath, services }),\n controller.errorHandler,\n )\n\n return router\n}\n\nexport function Redirects() {\n const router = Router({ mergeParams: true })\n\n // Request route redirect\n router.get(`/async/:type/:reportId/:id/request`, (req, res) => {\n const { type, reportId, id } = req.params\n res.redirect(`${res.locals['nestedBaseUrl']}/dpr/request-report/${type}/${reportId}/${id}/filters`)\n })\n\n // Status route redirect\n router.get(`/async/:type/:reportId/:id/request/:executionId`, (req, res) => {\n const { type, reportId, id, executionId } = req.params\n res.redirect(`${res.locals['nestedBaseUrl']}/dpr/request-report/${type}/${reportId}/${id}/${executionId}/status`)\n })\n\n return router\n}\n\nexport const RequestReportRoutes = ({\n services,\n path,\n layoutPath,\n}: {\n services: Services\n path: string\n layoutPath: string\n}) => {\n const router = Router({ mergeParams: true })\n router.use(path, Routes({ services, layoutPath }))\n router.use('/', Redirects())\n\n return router\n}\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,EAAA,wBAAAC,EAAA,WAAAC,IAAA,eAAAC,EAAAL,GACA,IAAAM,EAAuB,mBAEvBC,EAAoC,2BAGpCC,EAAgC,+BAChCA,EAAgC,8BAGhCC,EAA6B,mDAEtB,SAASL,EAAO,CAAE,WAAAM,EAAY,SAAAC,CAAS,EAA+C,CAC3F,MAAMC,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EAErCC,EAAa,IAAI,EAAAC,QAAwBJ,EAAYC,CAAQ,
|
|
6
|
-
"names": ["routes_exports", "__export", "Redirects", "RequestReportRoutes", "Routes", "__toCommonJS", "import_express", "import_controller", "import_routes", "import_reportAuthoriser", "layoutPath", "services", "router", "controller", "RequestReportController", "reportAuthoriser", "requestReportRoutes", "requestStatusRoutes", "req", "res", "type", "reportId", "id", "executionId", "path"]
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Router } from 'express'\nimport { Services } from '../../../types/Services'\nimport RequestReportController from './controller'\n\n// Routes\nimport requestReportRoutes from './filters/routes'\nimport requestStatusRoutes from './status/routes'\n\n// middleware\nimport reportAuthoriser from '../../../middleware/reportAuthoriser'\n\nexport function Routes({ layoutPath, services }: { services: Services; layoutPath: string }) {\n const router = Router({ mergeParams: true })\n\n const controller = new RequestReportController(layoutPath, services)\n\n router.post(`/:type/:reportId/:id/:executionId/cancel`, controller.CANCEL)\n router.use(\n `/:type/:reportId/:id/filters`,\n reportAuthoriser(services, layoutPath),\n requestReportRoutes({ layoutPath, services }),\n controller.errorHandler,\n )\n router.use(\n `/:type/:reportId/:id/:executionId/status`,\n reportAuthoriser(services, layoutPath),\n requestStatusRoutes({ layoutPath, services }),\n controller.errorHandler,\n )\n\n router.get(`/:type/:reportId/:id/:executionId/cancel/failed`, (req, res, _next) => {\n const body = JSON.parse(req.flash('ERROR_BODY')?.[0] || '')\n const params = JSON.parse(req.flash('ERROR_PARAMS')?.[0] || '')\n const error = req.flash('ERROR')\n\n res.render(`dpr/routes/journeys/view-report/error`, {\n layoutPath,\n ...(body && { ...body }),\n ...(params && { ...params }),\n error,\n params,\n })\n })\n\n return router\n}\n\nexport function Redirects() {\n const router = Router({ mergeParams: true })\n\n // Request route redirect\n router.get(`/async/:type/:reportId/:id/request`, (req, res) => {\n const { type, reportId, id } = req.params\n res.redirect(`${res.locals['nestedBaseUrl']}/dpr/request-report/${type}/${reportId}/${id}/filters`)\n })\n\n // Status route redirect\n router.get(`/async/:type/:reportId/:id/request/:executionId`, (req, res) => {\n const { type, reportId, id, executionId } = req.params\n res.redirect(`${res.locals['nestedBaseUrl']}/dpr/request-report/${type}/${reportId}/${id}/${executionId}/status`)\n })\n\n return router\n}\n\nexport const RequestReportRoutes = ({\n services,\n path,\n layoutPath,\n}: {\n services: Services\n path: string\n layoutPath: string\n}) => {\n const router = Router({ mergeParams: true })\n router.use(path, Routes({ services, layoutPath }))\n router.use('/', Redirects())\n\n return router\n}\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,EAAA,wBAAAC,EAAA,WAAAC,IAAA,eAAAC,EAAAL,GACA,IAAAM,EAAuB,mBAEvBC,EAAoC,2BAGpCC,EAAgC,+BAChCA,EAAgC,8BAGhCC,EAA6B,mDAEtB,SAASL,EAAO,CAAE,WAAAM,EAAY,SAAAC,CAAS,EAA+C,CAC3F,MAAMC,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EAErCC,EAAa,IAAI,EAAAC,QAAwBJ,EAAYC,CAAQ,EAEnE,OAAAC,EAAO,KAAK,2CAA4CC,EAAW,MAAM,EACzED,EAAO,IACL,kCACA,EAAAG,SAAiBJ,EAAUD,CAAU,KACrC,EAAAM,SAAoB,CAAE,WAAAN,EAAY,SAAAC,CAAS,CAAC,EAC5CE,EAAW,YACb,EACAD,EAAO,IACL,8CACA,EAAAG,SAAiBJ,EAAUD,CAAU,KACrC,EAAAO,SAAoB,CAAE,WAAAP,EAAY,SAAAC,CAAS,CAAC,EAC5CE,EAAW,YACb,EAEAD,EAAO,IAAI,kDAAmD,CAACM,EAAKC,EAAKC,IAAU,CACjF,MAAMC,EAAO,KAAK,MAAMH,EAAI,MAAM,YAAY,IAAI,CAAC,GAAK,EAAE,EACpDI,EAAS,KAAK,MAAMJ,EAAI,MAAM,cAAc,IAAI,CAAC,GAAK,EAAE,EACxDK,EAAQL,EAAI,MAAM,OAAO,EAE/BC,EAAI,OAAO,wCAAyC,CAClD,WAAAT,EACA,GAAIW,GAAQ,CAAE,GAAGA,CAAK,EACtB,GAAIC,GAAU,CAAE,GAAGA,CAAO,EAC1B,MAAAC,EACA,OAAAD,CACF,CAAC,CACH,CAAC,EAEMV,CACT,CAEO,SAASV,GAAY,CAC1B,MAAMU,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EAG3C,OAAAA,EAAO,IAAI,qCAAsC,CAACM,EAAKC,IAAQ,CAC7D,KAAM,CAAE,KAAAK,EAAM,SAAAC,EAAU,GAAAC,CAAG,EAAIR,EAAI,OACnCC,EAAI,SAAS,GAAGA,EAAI,OAAO,aAAgB,uBAAuBK,CAAI,IAAIC,CAAQ,IAAIC,CAAE,UAAU,CACpG,CAAC,EAGDd,EAAO,IAAI,kDAAmD,CAACM,EAAKC,IAAQ,CAC1E,KAAM,CAAE,KAAAK,EAAM,SAAAC,EAAU,GAAAC,EAAI,YAAAC,CAAY,EAAIT,EAAI,OAChDC,EAAI,SAAS,GAAGA,EAAI,OAAO,aAAgB,uBAAuBK,CAAI,IAAIC,CAAQ,IAAIC,CAAE,IAAIC,CAAW,SAAS,CAClH,CAAC,EAEMf,CACT,CAEO,MAAMT,EAAsB,CAAC,CAClC,SAAAQ,EACA,KAAAiB,EACA,WAAAlB,CACF,IAIM,CACJ,MAAME,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EAC3C,OAAAA,EAAO,IAAIgB,EAAMxB,EAAO,CAAE,SAAAO,EAAU,WAAAD,CAAW,CAAC,CAAC,EACjDE,EAAO,IAAI,IAAKV,EAAU,CAAC,EAEpBU,CACT",
|
|
6
|
+
"names": ["routes_exports", "__export", "Redirects", "RequestReportRoutes", "Routes", "__toCommonJS", "import_express", "import_controller", "import_routes", "import_reportAuthoriser", "layoutPath", "services", "router", "controller", "RequestReportController", "reportAuthoriser", "requestReportRoutes", "requestStatusRoutes", "req", "res", "_next", "body", "params", "error", "type", "reportId", "id", "executionId", "path"]
|
|
7
7
|
}
|
|
@@ -14,6 +14,8 @@ export function Routes({ layoutPath, services }: { services: Services; layoutPat
|
|
|
14
14
|
const router = Router({ mergeParams: true })
|
|
15
15
|
|
|
16
16
|
const controller = new RequestReportController(layoutPath, services)
|
|
17
|
+
|
|
18
|
+
router.post(`/:type/:reportId/:id/:executionId/cancel`, controller.CANCEL)
|
|
17
19
|
router.use(
|
|
18
20
|
`/:type/:reportId/:id/filters`,
|
|
19
21
|
reportAuthoriser(services, layoutPath),
|
|
@@ -27,6 +29,20 @@ export function Routes({ layoutPath, services }: { services: Services; layoutPat
|
|
|
27
29
|
controller.errorHandler,
|
|
28
30
|
)
|
|
29
31
|
|
|
32
|
+
router.get(`/:type/:reportId/:id/:executionId/cancel/failed`, (req, res, _next) => {
|
|
33
|
+
const body = JSON.parse(req.flash('ERROR_BODY')?.[0] || '')
|
|
34
|
+
const params = JSON.parse(req.flash('ERROR_PARAMS')?.[0] || '')
|
|
35
|
+
const error = req.flash('ERROR')
|
|
36
|
+
|
|
37
|
+
res.render(`dpr/routes/journeys/view-report/error`, {
|
|
38
|
+
layoutPath,
|
|
39
|
+
...(body && { ...body }),
|
|
40
|
+
...(params && { ...params }),
|
|
41
|
+
error,
|
|
42
|
+
params,
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
|
|
30
46
|
return router
|
|
31
47
|
}
|
|
32
48
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.create;var
|
|
1
|
+
"use strict";var p=Object.create;var i=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var f=(r,t)=>{for(var e in t)i(r,e,{get:t[e],enumerable:!0})},u=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of h(t))!m.call(r,s)&&s!==e&&i(r,s,{get:()=>t[s],enumerable:!(o=y(t,s))||o.enumerable});return r};var a=(r,t,e)=>(e=r!=null?p(v(r)):{},u(t||!r||!r.__esModule?i(e,"default",{value:r,enumerable:!0}):e,r)),P=r=>u(i({},"__esModule",{value:!0}),r);var g={};f(g,{RequestStatusController:()=>n,default:()=>R});module.exports=P(g);var c=a(require("./utils")),l=a(require("../../../../components/user-reports/requested/utils")),d=a(require("../../../../utils/ErrorHandler"));class n{constructor(t,e){this.GET=async(t,e,o)=>{try{const s=await c.default.renderPolling({req:t,res:e,services:this.services,next:o});e.render("dpr/routes/journeys/request-report/status/view",{layoutPath:this.layoutPath,...s})}catch(s){t.body.title="Failed to retrieve report status",t.body.errorDescription="We were unable to retrieve the report status:",t.body.error=new d.default(s).formatError(),o()}};this.POST=async(t,e,o)=>{try{const s=await l.default.getRequestStatus({req:t,res:e,services:this.services});e.send({status:s.status})}catch{e.send({status:"FAILED"})}};this.layoutPath=t,this.services=e}}var R=n;0&&(module.exports={RequestStatusController});
|
|
2
2
|
//# sourceMappingURL=controller.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/dpr/routes/journeys/request-report/status/controller.ts"],
|
|
4
|
-
"sourcesContent": ["import { RequestHandler } from 'express'\nimport { Services } from '../../../../types/Services'\nimport AsyncPollingUtils from './utils'\nimport
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,EAA8B,sBAC9BA,
|
|
6
|
-
"names": ["controller_exports", "__export", "RequestStatusController", "controller_default", "__toCommonJS", "import_utils", "import_ErrorHandler", "layoutPath", "services", "req", "res", "next", "pollingRenderData", "AsyncPollingUtils", "error", "ErrorHandler", "_next", "response", "AsyncRequestListUtils"
|
|
4
|
+
"sourcesContent": ["import { RequestHandler } from 'express'\nimport { Services } from '../../../../types/Services'\nimport AsyncPollingUtils from './utils'\nimport AsyncRequestListUtils from '../../../../components/user-reports/requested/utils'\nimport ErrorHandler from '../../../../utils/ErrorHandler'\n\nclass RequestStatusController {\n layoutPath: string\n\n services: Services\n\n constructor(layoutPath: string, services: Services) {\n this.layoutPath = layoutPath\n this.services = services\n }\n\n // Render status page\n GET: RequestHandler = async (req, res, next) => {\n try {\n const pollingRenderData = await AsyncPollingUtils.renderPolling({\n req,\n res,\n services: this.services,\n next,\n })\n res.render(`dpr/routes/journeys/request-report/status/view`, {\n layoutPath: this.layoutPath,\n ...pollingRenderData,\n })\n } catch (error) {\n req.body.title = 'Failed to retrieve report status'\n req.body.errorDescription = 'We were unable to retrieve the report status:'\n req.body.error = new ErrorHandler(error).formatError()\n next()\n }\n }\n\n // Poll request status\n POST: RequestHandler = async (req, res, _next) => {\n try {\n const response = await AsyncRequestListUtils.getRequestStatus({ req, res, services: this.services })\n res.send({ status: response.status })\n } catch (error) {\n res.send({ status: 'FAILED' })\n }\n }\n}\n\nexport { RequestStatusController }\nexport default RequestStatusController\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,EAA8B,sBAC9BA,EAAkC,kEAClCC,EAAyB,6CAEzB,MAAMJ,CAAwB,CAK5B,YAAYK,EAAoBC,EAAoB,CAMpD,SAAsB,MAAOC,EAAKC,EAAKC,IAAS,CAC9C,GAAI,CACF,MAAMC,EAAoB,MAAM,EAAAC,QAAkB,cAAc,CAC9D,IAAAJ,EACA,IAAAC,EACA,SAAU,KAAK,SACf,KAAAC,CACF,CAAC,EACDD,EAAI,OAAO,iDAAkD,CAC3D,WAAY,KAAK,WACjB,GAAGE,CACL,CAAC,CACH,OAASE,EAAO,CACdL,EAAI,KAAK,MAAQ,mCACjBA,EAAI,KAAK,iBAAmB,gDAC5BA,EAAI,KAAK,MAAQ,IAAI,EAAAM,QAAaD,CAAK,EAAE,YAAY,EACrDH,EAAK,CACP,CACF,EAGA,UAAuB,MAAOF,EAAKC,EAAKM,IAAU,CAChD,GAAI,CACF,MAAMC,EAAW,MAAM,EAAAC,QAAsB,iBAAiB,CAAE,IAAAT,EAAK,IAAAC,EAAK,SAAU,KAAK,QAAS,CAAC,EACnGA,EAAI,KAAK,CAAE,OAAQO,EAAS,MAAO,CAAC,CACtC,MAAgB,CACdP,EAAI,KAAK,CAAE,OAAQ,QAAS,CAAC,CAC/B,CACF,EAjCE,KAAK,WAAaH,EAClB,KAAK,SAAWC,CAClB,CAgCF,CAGA,IAAOL,EAAQD",
|
|
6
|
+
"names": ["controller_exports", "__export", "RequestStatusController", "controller_default", "__toCommonJS", "import_utils", "import_ErrorHandler", "layoutPath", "services", "req", "res", "next", "pollingRenderData", "AsyncPollingUtils", "error", "ErrorHandler", "_next", "response", "AsyncRequestListUtils"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { RequestHandler } from 'express'
|
|
2
2
|
import { Services } from '../../../../types/Services'
|
|
3
3
|
import AsyncPollingUtils from './utils'
|
|
4
|
-
import AsyncRequestUtils from '../filters/utils'
|
|
5
4
|
import AsyncRequestListUtils from '../../../../components/user-reports/requested/utils'
|
|
6
5
|
import ErrorHandler from '../../../../utils/ErrorHandler'
|
|
7
6
|
|
|
@@ -45,22 +44,6 @@ class RequestStatusController {
|
|
|
45
44
|
res.send({ status: 'FAILED' })
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
|
-
|
|
49
|
-
DELETE: RequestHandler = async (req, res, next) => {
|
|
50
|
-
try {
|
|
51
|
-
await AsyncRequestUtils.cancelRequest({
|
|
52
|
-
req,
|
|
53
|
-
res,
|
|
54
|
-
services: this.services,
|
|
55
|
-
})
|
|
56
|
-
res.end()
|
|
57
|
-
} catch (error) {
|
|
58
|
-
req.body.title = 'Failed to abort request'
|
|
59
|
-
req.body.errorDescription = 'We were unable to abort the report request for the following reason:'
|
|
60
|
-
req.body.error = new ErrorHandler(error).formatError()
|
|
61
|
-
next()
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
47
|
}
|
|
65
48
|
|
|
66
49
|
export { RequestStatusController }
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var a=Object.create;var u=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var g=(r,t)=>{for(var e in t)u(r,e,{get:t[e],enumerable:!0})},n=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of p(t))!S.call(r,s)&&s!==e&&u(r,s,{get:()=>t[s],enumerable:!(o=l(t,s))||o.enumerable});return r};var v=(r,t,e)=>(e=r!=null?a(f(r)):{},n(t||!r||!r.__esModule?u(e,"default",{value:r,enumerable:!0}):e,r)),P=r=>n(u({},"__esModule",{value:!0}),r);var R={};g(R,{default:()=>x,routes:()=>c});module.exports=P(R);var i=require("express"),m=v(require("./controller"));function c({layoutPath:r,services:t}){const e=(0,i.Router)({mergeParams:!0}),o=new m.default(r,t);return e.get("/",o.GET),e.post("/",o.POST),e}var x=c;0&&(module.exports={routes});
|
|
2
2
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/dpr/routes/journeys/request-report/status/routes.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Router } from 'express'\nimport RequestStatusController from './controller'\nimport { Services } from '../../../../types/Services'\n\nexport function routes({ layoutPath, services }: { layoutPath: string; services: Services }) {\n const router = Router({ mergeParams: true })\n const controller = new RequestStatusController(layoutPath, services)\n\n router.get(`/`, controller.GET)\n router.post(`/`, controller.POST)\n
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,WAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAuB,mBACvBC,EAAoC,2BAG7B,SAASH,EAAO,CAAE,WAAAI,EAAY,SAAAC,CAAS,EAA+C,CAC3F,MAAMC,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EACrCC,EAAa,IAAI,EAAAC,QAAwBJ,EAAYC,CAAQ,EAEnE,OAAAC,EAAO,IAAI,IAAKC,EAAW,GAAG,EAC9BD,EAAO,KAAK,IAAKC,EAAW,IAAI,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Router } from 'express'\nimport RequestStatusController from './controller'\nimport { Services } from '../../../../types/Services'\n\nexport function routes({ layoutPath, services }: { layoutPath: string; services: Services }) {\n const router = Router({ mergeParams: true })\n const controller = new RequestStatusController(layoutPath, services)\n\n router.get(`/`, controller.GET)\n router.post(`/`, controller.POST)\n\n return router\n}\n\nexport default routes\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,WAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAuB,mBACvBC,EAAoC,2BAG7B,SAASH,EAAO,CAAE,WAAAI,EAAY,SAAAC,CAAS,EAA+C,CAC3F,MAAMC,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EACrCC,EAAa,IAAI,EAAAC,QAAwBJ,EAAYC,CAAQ,EAEnE,OAAAC,EAAO,IAAI,IAAKC,EAAW,GAAG,EAC9BD,EAAO,KAAK,IAAKC,EAAW,IAAI,EAEzBD,CACT,CAEA,IAAOP,EAAQC",
|
|
6
6
|
"names": ["routes_exports", "__export", "routes_default", "routes", "__toCommonJS", "import_express", "import_controller", "layoutPath", "services", "router", "controller", "RequestStatusController"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var v=Object.create;var y=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var W=(e,t)=>{for(var r in t)y(e,r,{get:t[r],enumerable:!0})},E=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Q(t))!J.call(e,o)&&o!==r&&y(e,o,{get:()=>t[o],enumerable:!(a=H(t,o))||a.enumerable});return e};var d=(e,t,r)=>(r=e!=null?v(G(e)):{},E(t||!e||!e.__esModule?y(r,"default",{value:e,enumerable:!0}):r,e)),X=e=>E(y({},"__esModule",{value:!0}),e);var K={};W(K,{default:()=>z,renderAsyncDashboard:()=>O});module.exports=X(K);var m=require("../../../../../components/_dashboards/dashboard-visualisation/types"),S=require("../../../../../types/UserReports"),b=d(require("../../../../../components/_charts/utils")),F=d(require("../../../../../utils/definitionUtils")),C=d(require("../../../../../components/user-reports/utils")),B=d(require("../../../../../components/_dashboards/dashboard-list/utils")),g=d(require("../../../../../components/_filters/utils")),L=d(require("../../../../../components/_dashboards/scorecard/utils")),I=d(require("../../../../../components/_dashboards/scorecard/Scorecard")),N=d(require("../../../../../components/_reports/report-actions/utils")),x=d(require("../../../../../types/ReportQuery")),A=d(require("../../../../../utils/localsHelper")),M=require("../../../../../components/_filters/filtersTypeEnum");const w=(e,t,r)=>{const a=t.name,{name:o}=e,i=r?.url?.request?.fullUrl,c=r?.executionId;let s={};return i&&(s={share:{reportName:a,name:o,url:i},copy:{url:i}},c&&(s={...s,refresh:{url:i,executionId:c}})),N.default.getActions(s)},V=async({req:e,res:t,services:r,queryData:a})=>{const{token:o}=A.default.getValues(t),{reportId:i,id:c}=e.params,s=e.query.dataProductDefinitionsPath,p=await r.dashboardService.getDefinition(o,i,c,s,a),n=await F.default.getReportSummary(i,r.reportingService,o,s),u=await g.default.getFilters({fields:p.filterFields||[],req:e,filtersType:M.FiltersType.INTERACTIVE}),f=g.default.setRequestQueryFromFilterValues(u.filters);return{query:new x.default({fields:p.filterFields||[],queryParams:f,definitionsPath:s,reportType:S.ReportType.DASHBOARD}).toRecordWithFilterPrefix(!0),filters:u,dashboardDefinition:p,reportDefinition:n}},P=(e,t,r)=>e.sections.map(a=>{const{id:o,display:i,description:c}=a;let s=!1;const p=a.visualisations.map(n=>{const{type:u,display:f,description:D,id:R}=n;let l;switch(u){case m.DashboardVisualisationType.LIST:l=B.default.createList(n,t);break;case m.DashboardVisualisationType.SCORECARD:s=!0,l=new I.default(t,n).build();break;case m.DashboardVisualisationType.SCORECARD_GROUP:l=new I.default(t,n,!0).build();break;case m.DashboardVisualisationType.BAR:case m.DashboardVisualisationType.LINE:case m.DashboardVisualisationType.DONUT:{l=b.default.createChart(n,t);break}case m.DashboardVisualisationType.MATRIX_TIMESERIES:{l=b.default.createMatrixChart(n,t,r);break}case m.DashboardVisualisationType.BAR_TIMESERIES:case m.DashboardVisualisationType.LINE_TIMESERIES:{l=b.default.createTimeseriesCharts(n,t);break}default:break}return{id:R,title:f||"",description:D||"",type:u,data:l}});return s&&L.default.mergeScorecardsIntoGroup(p),{id:o,title:i||"",description:c||"",visualisations:p}}),j=async(e,t,r,a,o,i)=>{const{requestedReportService:c}=e,s=await c.getReportByTableId(t,r);return a&&a.length&&s&&C.default.updateLastViewed({services:e,reportStateData:s,userId:r,req:o,filters:i}),s},O=async({req:e,res:t,services:r})=>{const{token:a,csrfToken:o,dprUser:i,nestedBaseUrl:c}=A.default.getValues(t),{reportId:s,id:p,tableId:n}=e.params,{bookmarkService:u,requestedReportService:f}=r,{id:D}=i;let R=await f.getReportByTableId(n,D);const l=R?.query?.data,{query:U,filters:q,reportDefinition:T,dashboardDefinition:h}=await V({req:e,res:t,services:r,queryData:l}),_=(await r.dashboardService.getAsyncDashboard(a,p,s,n,U)).flat(),k=P(h,_,U);return f&&(R=await j(r,n,i.id,k,e,q.filters)),{dashboardData:{token:a,id:p,reportId:s,name:h.name,description:h.description,reportName:T.name,bookmarked:await u.isBookmarked(p,s,i.id),nestedBaseUrl:c,csrfToken:o,sections:k,filters:q,type:S.ReportType.DASHBOARD,actions:w(h,T,R)}}};var z={renderAsyncDashboard:O,getDefinitionData:V,getSections:P,setDashboardActions:w};0&&(module.exports={renderAsyncDashboard});
|
|
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/dashboard/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { Request, Response } from 'express'\nimport { Services } from '../../../../../types/Services'\nimport Dict = NodeJS.Dict\nimport {\n DashboardSection,\n DashboardVisualisation,\n DashboardVisualisationType,\n} from '../../../../../components/_dashboards/dashboard-visualisation/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\n\nimport type { DashboardDataResponse } from '../../../../../types/Metrics'\nimport type { RequestedReport } from '../../../../../types/UserReports'\nimport { ReportType } from '../../../../../types/UserReports'\nimport type { components } from '../../../../../types/api'\n\nimport ChartUtils from '../../../../../components/_charts/utils'\nimport DefinitionUtils from '../../../../../utils/definitionUtils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport DashboardListUtils from '../../../../../components/_dashboards/dashboard-list/utils'\nimport FilterUtils from '../../../../../components/_filters/utils'\nimport ScorecardsUtils from '../../../../../components/_dashboards/scorecard/utils'\nimport ScorecardVisualisation from '../../../../../components/_dashboards/scorecard/Scorecard'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\n\nconst setDashboardActions = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n reportDefinition: components['schemas']['ReportDefinitionSummary'],\n requestData?: RequestedReport,\n) => {\n const reportName = reportDefinition.name\n const { name } = dashboardDefinition\n const actionsUrl = requestData?.url?.request?.fullUrl\n const executionId = requestData?.executionId\n\n let actions = {}\n if (actionsUrl) {\n actions = {\n share: {\n reportName,\n name,\n url: actionsUrl,\n },\n copy: {\n url: actionsUrl,\n },\n }\n if (executionId) {\n actions = {\n ...actions,\n refresh: {\n url: actionsUrl,\n executionId,\n },\n }\n }\n }\n\n return ReportActionsUtils.getActions(actions)\n}\n\nconst getDefinitionData = async ({\n req,\n res,\n services,\n queryData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,yBAAAC,IAAA,eAAAC,EAAAJ,GAGA,IAAAK,EAIO,+EAKPC,EAA2B,4CAG3BC,EAAuB,sDACvBC,EAA4B,mDAC5BD,EAA6B,2DAC7BA,EAA+B,yEAC/BA,EAAwB,uDACxBA,EAA4B,oEAC5BE,EAAmC,wEACnCF,EAA+B,sEAC/BG,EAAwB,+CACxBC,EAAyB,gDAEzBC,EAA4B,8DAE5B,MAAMC,EAAsB,CAC1BC,EACAC,EACAC,IACG,CACH,MAAMC,EAAaF,EAAiB,KAC9B,CAAE,KAAAG,CAAK,EAAIJ,EACXK,EAAaH,GAAa,KAAK,SAAS,QACxCI,EAAcJ,GAAa,YAEjC,IAAIK,EAAU,CAAC,EACf,OAAIF,IACFE,EAAU,CACR,MAAO,CACL,WAAAJ,EACA,KAAAC,EACA,IAAKC,CACP,EACA,KAAM,CACJ,IAAKA,CACP,CACF,EACIC,IACFC,EAAU,CACR,GAAGA,EACH,QAAS,CACP,IAAKF,EACL,YAAAC,CACF,CACF,IAIG,EAAAE,QAAmB,WAAWD,CAAO,CAC9C,EAEME,EAAoB,MAAO,CAC/B,IAAAC,EACA,IAAAC,EACA,SAAAC,EACA,UAAAC,CACF,IAKM,CACJ,KAAM,CAAE,MAAAC,CAAM,EAAI,EAAAC,QAAa,UAAUJ,CAAG,EACtC,CAAE,SAAAK,EAAU,GAAAC,CAAG,EAAIP,EAAI,OACvBQ,EAAqCR,EAAI,MAAM,2BAG/CV,
|
|
4
|
+
"sourcesContent": ["import { Request, Response } from 'express'\nimport { Services } from '../../../../../types/Services'\nimport Dict = NodeJS.Dict\nimport {\n DashboardSection,\n DashboardVisualisation,\n DashboardVisualisationType,\n} from '../../../../../components/_dashboards/dashboard-visualisation/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\n\nimport type { DashboardDataResponse } from '../../../../../types/Metrics'\nimport type { RequestedReport } from '../../../../../types/UserReports'\nimport { ReportType } from '../../../../../types/UserReports'\nimport type { components } from '../../../../../types/api'\n\nimport ChartUtils from '../../../../../components/_charts/utils'\nimport DefinitionUtils from '../../../../../utils/definitionUtils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport DashboardListUtils from '../../../../../components/_dashboards/dashboard-list/utils'\nimport FilterUtils from '../../../../../components/_filters/utils'\nimport ScorecardsUtils from '../../../../../components/_dashboards/scorecard/utils'\nimport ScorecardVisualisation from '../../../../../components/_dashboards/scorecard/Scorecard'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\n\nconst setDashboardActions = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n reportDefinition: components['schemas']['ReportDefinitionSummary'],\n requestData?: RequestedReport,\n) => {\n const reportName = reportDefinition.name\n const { name } = dashboardDefinition\n const actionsUrl = requestData?.url?.request?.fullUrl\n const executionId = requestData?.executionId\n\n let actions = {}\n if (actionsUrl) {\n actions = {\n share: {\n reportName,\n name,\n url: actionsUrl,\n },\n copy: {\n url: actionsUrl,\n },\n }\n if (executionId) {\n actions = {\n ...actions,\n refresh: {\n url: actionsUrl,\n executionId,\n },\n }\n }\n }\n\n return ReportActionsUtils.getActions(actions)\n}\n\nconst getDefinitionData = async ({\n req,\n res,\n services,\n queryData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: Dict<string | string[]> | undefined\n}) => {\n const { token } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const dataProductDefinitionsPath = <string>req.query['dataProductDefinitionsPath']\n\n // Dashboard Definition,\n const dashboardDefinition = await services.dashboardService.getDefinition(\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n queryData,\n )\n\n // Report summary data\n const reportDefinition = await DefinitionUtils.getReportSummary(\n reportId,\n services.reportingService,\n token,\n <string>dataProductDefinitionsPath,\n )\n\n // Get the filters\n const filtersData = await FilterUtils.getFilters({\n fields: dashboardDefinition.filterFields || [],\n req,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n const filtersQuery = FilterUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n // Create the query\n const query = new ReportQuery({\n fields: dashboardDefinition.filterFields || [],\n queryParams: filtersQuery,\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.DASHBOARD,\n }).toRecordWithFilterPrefix(true)\n\n return {\n query,\n filters: filtersData,\n dashboardDefinition,\n reportDefinition,\n }\n}\n\nconst getSections = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n dashboardData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n): DashboardSection[] => {\n return dashboardDefinition.sections.map((section: components['schemas']['DashboardSectionDefinition']) => {\n const { id, display: title, description } = section\n\n let hasScorecard = false\n const visualisations: DashboardVisualisation[] = section.visualisations.map(\n (visDefinition: components['schemas']['DashboardVisualisationDefinition']) => {\n const { type, display, description: visDescription, id: visId } = visDefinition\n\n let data: DashboardVisualisation['data'] | undefined\n\n switch (type) {\n case DashboardVisualisationType.LIST:\n data = DashboardListUtils.createList(visDefinition, dashboardData)\n break\n\n case DashboardVisualisationType.SCORECARD:\n hasScorecard = true\n data = new ScorecardVisualisation(dashboardData, visDefinition).build()\n break\n\n case DashboardVisualisationType.SCORECARD_GROUP:\n data = new ScorecardVisualisation(dashboardData, visDefinition, true).build()\n break\n\n case DashboardVisualisationType.BAR:\n case DashboardVisualisationType.LINE:\n case DashboardVisualisationType.DONUT: {\n data = ChartUtils.createChart(visDefinition, dashboardData)\n break\n }\n case DashboardVisualisationType.MATRIX_TIMESERIES: {\n data = ChartUtils.createMatrixChart(visDefinition, dashboardData, query)\n break\n }\n case DashboardVisualisationType.BAR_TIMESERIES:\n case DashboardVisualisationType.LINE_TIMESERIES: {\n data = ChartUtils.createTimeseriesCharts(visDefinition, dashboardData)\n break\n }\n default:\n break\n }\n\n return {\n id: visId,\n title: display || '',\n description: visDescription || '',\n type,\n data,\n }\n },\n )\n\n if (hasScorecard) ScorecardsUtils.mergeScorecardsIntoGroup(visualisations)\n\n return { id, title: title || '', description: description || '', visualisations }\n })\n}\n\nconst updateStore = async (\n services: Services,\n tableId: string,\n userId: string,\n sections: DashboardSection[],\n req: Request,\n filters: FilterValue[],\n): Promise<RequestedReport | undefined> => {\n const { requestedReportService } = services\n const dashboardRequestData = await requestedReportService.getReportByTableId(tableId, userId)\n\n // Add to recently viewed\n if (sections && sections.length && dashboardRequestData) {\n UserReportsUtils.updateLastViewed({\n services,\n reportStateData: dashboardRequestData,\n userId,\n req,\n filters,\n })\n }\n\n return dashboardRequestData\n}\n\nexport const renderAsyncDashboard = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n const { reportId, id, tableId } = req.params\n const { bookmarkService, requestedReportService } = services\n const { id: userId } = dprUser\n\n let requestData: RequestedReport | undefined = await requestedReportService.getReportByTableId(tableId, userId)\n const queryData = requestData?.query?.data\n\n // Get the definition Data\n const { query, filters, reportDefinition, dashboardDefinition } = await getDefinitionData({\n req,\n res,\n services,\n queryData,\n })\n\n // Get the results data\n const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getAsyncDashboard(\n token,\n id,\n reportId,\n tableId,\n query,\n )\n\n const flattenedData: DashboardDataResponse[] = dashboardData.flat()\n\n // Get the dashboard parts\n const sections: DashboardSection[] = getSections(dashboardDefinition, flattenedData, query)\n\n // Update the store\n if (requestedReportService) {\n requestData = await updateStore(services, tableId, dprUser.id, sections, req, filters.filters)\n }\n\n return {\n dashboardData: {\n token,\n id,\n reportId,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description,\n reportName: reportDefinition.name,\n bookmarked: await bookmarkService.isBookmarked(id, reportId, dprUser.id),\n nestedBaseUrl,\n csrfToken,\n sections,\n filters,\n type: ReportType.DASHBOARD,\n actions: setDashboardActions(dashboardDefinition, reportDefinition, requestData),\n },\n }\n}\n\nexport default {\n renderAsyncDashboard,\n getDefinitionData,\n getSections,\n setDashboardActions,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["utils_exports", "__export", "utils_default", "renderAsyncDashboard", "__toCommonJS", "import_types", "import_UserReports", "import_utils", "import_definitionUtils", "import_Scorecard", "import_ReportQuery", "import_localsHelper", "import_filtersTypeEnum", "setDashboardActions", "dashboardDefinition", "reportDefinition", "requestData", "reportName", "name", "actionsUrl", "executionId", "actions", "ReportActionsUtils", "getDefinitionData", "req", "res", "services", "queryData", "token", "LocalsHelper", "reportId", "id", "dataProductDefinitionsPath", "DefinitionUtils", "filtersData", "FilterUtils", "filtersQuery", "ReportQuery", "getSections", "dashboardData", "query", "section", "title", "description", "hasScorecard", "visualisations", "visDefinition", "type", "display", "visDescription", "visId", "data", "DashboardListUtils", "ScorecardVisualisation", "ChartUtils", "ScorecardsUtils", "updateStore", "tableId", "userId", "sections", "filters", "requestedReportService", "dashboardRequestData", "UserReportsUtils", "csrfToken", "dprUser", "nestedBaseUrl", "bookmarkService", "flattenedData"]
|
|
7
7
|
}
|
|
@@ -71,15 +71,20 @@ const getDefinitionData = async ({
|
|
|
71
71
|
req: Request
|
|
72
72
|
res: Response
|
|
73
73
|
services: Services
|
|
74
|
-
queryData
|
|
74
|
+
queryData?: Dict<string | string[]> | undefined
|
|
75
75
|
}) => {
|
|
76
76
|
const { token } = LocalsHelper.getValues(res)
|
|
77
77
|
const { reportId, id } = req.params
|
|
78
78
|
const dataProductDefinitionsPath = <string>req.query['dataProductDefinitionsPath']
|
|
79
79
|
|
|
80
80
|
// Dashboard Definition,
|
|
81
|
-
const dashboardDefinition
|
|
82
|
-
|
|
81
|
+
const dashboardDefinition = await services.dashboardService.getDefinition(
|
|
82
|
+
token,
|
|
83
|
+
reportId,
|
|
84
|
+
id,
|
|
85
|
+
dataProductDefinitionsPath,
|
|
86
|
+
queryData,
|
|
87
|
+
)
|
|
83
88
|
|
|
84
89
|
// Report summary data
|
|
85
90
|
const reportDefinition = await DefinitionUtils.getReportSummary(
|
|
@@ -247,7 +252,7 @@ export const renderAsyncDashboard = async ({ req, res, services }: AsyncReportUt
|
|
|
247
252
|
name: dashboardDefinition.name,
|
|
248
253
|
description: dashboardDefinition.description,
|
|
249
254
|
reportName: reportDefinition.name,
|
|
250
|
-
bookmarked:
|
|
255
|
+
bookmarked: await bookmarkService.isBookmarked(id, reportId, dprUser.id),
|
|
251
256
|
nestedBaseUrl,
|
|
252
257
|
csrfToken,
|
|
253
258
|
sections,
|
|
@@ -260,4 +265,7 @@ export const renderAsyncDashboard = async ({ req, res, services }: AsyncReportUt
|
|
|
260
265
|
|
|
261
266
|
export default {
|
|
262
267
|
renderAsyncDashboard,
|
|
268
|
+
getDefinitionData,
|
|
269
|
+
getSections,
|
|
270
|
+
setDashboardActions,
|
|
263
271
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var y=Object.create;var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var f=(e,r)=>{for(var t in r)a(e,t,{get:r[t],enumerable:!0})},l=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of u(r))!m.call(e,o)&&o!==t&&a(e,o,{get:()=>r[o],enumerable:!(s=p(r,o))||s.enumerable});return e};var i=(e,r,t)=>(t=e!=null?y(b(e)):{},l(r||!e||!e.__esModule?a(t,"default",{value:e,enumerable:!0}):t,e)),v=e=>l(a({},"__esModule",{value:!0}),e);var D={};f(D,{ViewSyncDashboardController:()=>n,default:()=>w});module.exports=v(D);var d=i(require("../../../../../utils/ErrorHandler")),c=i(require("./utils")),h=i(require("../../utils"));class n{constructor(r,t){this.GET=async(r,t,s)=>{try{const o=await c.default.renderSyncDashboard({req:r,res:t,services:this.services});t.render("dpr/routes/journeys/view-report/dashboard",{layoutPath:this.layoutPath,...o})}catch(o){r.body.title="Dashboard Failed",r.body.errorDescription="We were unable to show this dashboard for the following reason:",r.body.error=new d.default(o).formatError(),s()}};this.applyFilters=async(r,t,s)=>{await h.default.applyDashboardInteractiveQuery(r,t,this.services,"filters")};this.layoutPath=r,this.services=t}}var w=n;0&&(module.exports={ViewSyncDashboardController});
|
|
2
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/dpr/routes/journeys/view-report/sync/dashboard/controller.ts"],
|
|
4
|
+
"sourcesContent": ["import { RequestHandler } from 'express'\nimport ErrorHandler from '../../../../../utils/ErrorHandler'\nimport { Services } from '../../../../../types/Services'\nimport SyncDashboardUtils from './utils'\nimport ViewReportUtils from '../../utils'\n\nclass ViewSyncDashboardController {\n layoutPath: string\n\n services: Services\n\n constructor(layoutPath: string, services: Services) {\n this.layoutPath = layoutPath\n this.services = services\n }\n\n GET: RequestHandler = async (req, res, next) => {\n try {\n const renderData = await SyncDashboardUtils.renderSyncDashboard({ req, res, services: this.services })\n\n res.render(`dpr/routes/journeys/view-report/dashboard`, {\n layoutPath: this.layoutPath,\n ...renderData,\n })\n } catch (error) {\n req.body.title = `Dashboard Failed`\n req.body.errorDescription = 'We were unable to show this dashboard for the following reason:'\n req.body.error = new ErrorHandler(error).formatError()\n next()\n }\n }\n\n applyFilters: RequestHandler = async (req, res, _next) => {\n await ViewReportUtils.applyDashboardInteractiveQuery(req, res, this.services, 'filters')\n }\n}\n\nexport { ViewSyncDashboardController }\nexport default ViewSyncDashboardController\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAyB,gDAEzBC,EAA+B,sBAC/BA,EAA4B,0BAE5B,MAAMJ,CAA4B,CAKhC,YAAYK,EAAoBC,EAAoB,CAKpD,SAAsB,MAAOC,EAAKC,EAAKC,IAAS,CAC9C,GAAI,CACF,MAAMC,EAAa,MAAM,EAAAC,QAAmB,oBAAoB,CAAE,IAAAJ,EAAK,IAAAC,EAAK,SAAU,KAAK,QAAS,CAAC,EAErGA,EAAI,OAAO,4CAA6C,CACtD,WAAY,KAAK,WACjB,GAAGE,CACL,CAAC,CACH,OAASE,EAAO,CACdL,EAAI,KAAK,MAAQ,mBACjBA,EAAI,KAAK,iBAAmB,kEAC5BA,EAAI,KAAK,MAAQ,IAAI,EAAAM,QAAaD,CAAK,EAAE,YAAY,EACrDH,EAAK,CACP,CACF,EAEA,kBAA+B,MAAOF,EAAKC,EAAKM,IAAU,CACxD,MAAM,EAAAC,QAAgB,+BAA+BR,EAAKC,EAAK,KAAK,SAAU,SAAS,CACzF,EAtBE,KAAK,WAAaH,EAClB,KAAK,SAAWC,CAClB,CAqBF,CAGA,IAAOL,EAAQD",
|
|
6
|
+
"names": ["controller_exports", "__export", "ViewSyncDashboardController", "controller_default", "__toCommonJS", "import_ErrorHandler", "import_utils", "layoutPath", "services", "req", "res", "next", "renderData", "SyncDashboardUtils", "error", "ErrorHandler", "_next", "ViewReportUtils"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { RequestHandler } from 'express'
|
|
2
|
+
import ErrorHandler from '../../../../../utils/ErrorHandler'
|
|
3
|
+
import { Services } from '../../../../../types/Services'
|
|
4
|
+
import SyncDashboardUtils from './utils'
|
|
5
|
+
import ViewReportUtils from '../../utils'
|
|
6
|
+
|
|
7
|
+
class ViewSyncDashboardController {
|
|
8
|
+
layoutPath: string
|
|
9
|
+
|
|
10
|
+
services: Services
|
|
11
|
+
|
|
12
|
+
constructor(layoutPath: string, services: Services) {
|
|
13
|
+
this.layoutPath = layoutPath
|
|
14
|
+
this.services = services
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
GET: RequestHandler = async (req, res, next) => {
|
|
18
|
+
try {
|
|
19
|
+
const renderData = await SyncDashboardUtils.renderSyncDashboard({ req, res, services: this.services })
|
|
20
|
+
|
|
21
|
+
res.render(`dpr/routes/journeys/view-report/dashboard`, {
|
|
22
|
+
layoutPath: this.layoutPath,
|
|
23
|
+
...renderData,
|
|
24
|
+
})
|
|
25
|
+
} catch (error) {
|
|
26
|
+
req.body.title = `Dashboard Failed`
|
|
27
|
+
req.body.errorDescription = 'We were unable to show this dashboard for the following reason:'
|
|
28
|
+
req.body.error = new ErrorHandler(error).formatError()
|
|
29
|
+
next()
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
applyFilters: RequestHandler = async (req, res, _next) => {
|
|
34
|
+
await ViewReportUtils.applyDashboardInteractiveQuery(req, res, this.services, 'filters')
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { ViewSyncDashboardController }
|
|
39
|
+
export default ViewSyncDashboardController
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var c=Object.create;var i=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var g=(r,e)=>{for(var t in e)i(r,t,{get:e[t],enumerable:!0})},l=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of u(e))!y.call(r,s)&&s!==t&&i(r,s,{get:()=>e[s],enumerable:!(o=m(e,s))||o.enumerable});return r};var v=(r,e,t)=>(t=r!=null?c(f(r)):{},l(e||!r||!r.__esModule?i(t,"default",{value:r,enumerable:!0}):t,r)),S=r=>l(i({},"__esModule",{value:!0}),r);var h={};g(h,{default:()=>d,routes:()=>a});module.exports=S(h);var n=require("express"),p=v(require("./controller"));function a({layoutPath:r,services:e}){const t=(0,n.Router)({mergeParams:!0}),o=new p.default(r,e);return t.get(["/"],o.GET),t.post("/apply-filters",o.applyFilters),t}var d=a;0&&(module.exports={routes});
|
|
2
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/dpr/routes/journeys/view-report/sync/dashboard/routes.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Router } from 'express'\nimport ViewSyncDashboardController from './controller'\nimport { Services } from '../../../../../types/Services'\n\nexport function routes({ layoutPath, services }: { layoutPath: string; services: Services }) {\n const router = Router({ mergeParams: true })\n const controller = new ViewSyncDashboardController(layoutPath, services)\n\n router.get([`/`], controller.GET)\n\n // Interactive controls\n router.post('/apply-filters', controller.applyFilters)\n\n return router\n}\n\nexport default routes\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,WAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAuB,mBACvBC,EAAwC,2BAGjC,SAASH,EAAO,CAAE,WAAAI,EAAY,SAAAC,CAAS,EAA+C,CAC3F,MAAMC,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EACrCC,EAAa,IAAI,EAAAC,QAA4BJ,EAAYC,CAAQ,EAEvE,OAAAC,EAAO,IAAI,CAAC,GAAG,EAAGC,EAAW,GAAG,EAGhCD,EAAO,KAAK,iBAAkBC,EAAW,YAAY,EAE9CD,CACT,CAEA,IAAOP,EAAQC",
|
|
6
|
+
"names": ["routes_exports", "__export", "routes_default", "routes", "__toCommonJS", "import_express", "import_controller", "layoutPath", "services", "router", "controller", "ViewSyncDashboardController"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
|
2
|
+
import { Router } from 'express'
|
|
3
|
+
import ViewSyncDashboardController from './controller'
|
|
4
|
+
import { Services } from '../../../../../types/Services'
|
|
5
|
+
|
|
6
|
+
export function routes({ layoutPath, services }: { layoutPath: string; services: Services }) {
|
|
7
|
+
const router = Router({ mergeParams: true })
|
|
8
|
+
const controller = new ViewSyncDashboardController(layoutPath, services)
|
|
9
|
+
|
|
10
|
+
router.get([`/`], controller.GET)
|
|
11
|
+
|
|
12
|
+
// Interactive controls
|
|
13
|
+
router.post('/apply-filters', controller.applyFilters)
|
|
14
|
+
|
|
15
|
+
return router
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default routes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var V=Object.create;var y=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var r in t)y(e,r,{get:t[r],enumerable:!0})},g=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of I(t))!N.call(e,o)&&o!==r&&y(e,o,{get:()=>t[o],enumerable:!(s=q(t,o))||s.enumerable});return e};var c=(e,t,r)=>(r=e!=null?V(B(e)):{},g(t||!e||!e.__esModule?y(r,"default",{value:e,enumerable:!0}):r,e)),F=e=>g(y({},"__esModule",{value:!0}),e);var T={};x(T,{default:()=>Q,renderSyncDashboard:()=>w,setActions:()=>U});module.exports=F(T);var m=require("../../../../../types/UserReports"),h=c(require("../../../../../components/_filters/filters-selected/utils")),R=c(require("../../../../../utils/localsHelper")),b=c(require("../../../../../utils/UserStoreItemBuilder")),S=c(require("../../async/dashboard/utils")),A=c(require("../../../../../components/_reports/report-actions/utils"));const H=async({req:e,services:t,reportName:r,name:s,description:o,reportId:d,id:u,userId:a,filters:n})=>{const f={type:m.ReportType.DASHBOARD,reportId:d,id:u,reportName:r,description:o,name:s},p={query:e.query,querySummary:h.default.getQuerySummary(e.query,n)},D=new b.default(f).addInteractiveQuery(p).addStatus(m.RequestStatus.READY).addTimestamp().addReportUrls(e).build();await t.recentlyViewedService.setRecentlyViewed(D,a)},w=async({req:e,res:t,services:r})=>{const{token:s,csrfToken:o,dprUser:d,nestedBaseUrl:u}=R.default.getValues(t),{reportId:a,id:n}=e.params,f=`${e.protocol}://${e.get("host")}${e.originalUrl}`,{query:p,filters:D,reportDefinition:l,dashboardDefinition:i}=await S.default.getDefinitionData({req:e,res:t,services:r}),k=(await r.dashboardService.getSyncDashboard(s,a,a,p)).flat(),v=S.default.getSections(i,k,p);return await H({req:e,services:r,reportName:l.name,name:i.name,description:i.description||l.description||"",reportId:a,id:n,userId:d.id,filters:D.filters}),{dashboardData:{token:s,id:n,reportId:a,name:i.name,description:i.description,reportName:l.name,bookmarked:await r.bookmarkService.isBookmarked(n,a,d.id),nestedBaseUrl:u,csrfToken:o,sections:v,filters:D,type:m.ReportType.DASHBOARD,actions:U(i,l,f)}}},U=(e,t,r)=>{const{name:s}=t,{name:o}=e;return A.default.getActions({share:{reportName:s,name:o,url:r},copy:{url:r}})};var Q={renderSyncDashboard:w};0&&(module.exports={renderSyncDashboard,setActions});
|
|
2
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/dpr/routes/journeys/view-report/sync/dashboard/utils.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Request, Response } from 'express'\nimport Dict = NodeJS.Dict\n\nimport type { Services } from '../../../../../types/Services'\nimport { ReportType, RequestStatus } from '../../../../../types/UserReports'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'\nimport { DashboardDataResponse } from '../../../../../types/Metrics'\nimport AsyncDashboardUtils from '../../async/dashboard/utils'\nimport { DashboardSection } from '../../../../../components/_dashboards/dashboard-visualisation/types'\nimport { components } from '../../../../../types/api'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\n\nconst setAsRecentlyViewed = async ({\n req,\n services,\n reportName,\n name,\n description,\n reportId,\n id,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportName: string\n name: string\n description: string\n reportId: string\n id: string\n userId: string\n filters: FilterValue[]\n}) => {\n const stateData = {\n type: ReportType.DASHBOARD,\n reportId,\n id,\n reportName,\n description,\n name,\n }\n\n const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {\n query: <Dict<string>>req.query,\n querySummary: SelectedFiltersUtils.getQuerySummary(<Dict<string>>req.query, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(stateData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addReportUrls(req)\n .build()\n\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport const renderSyncDashboard = async ({\n req,\n res,\n services,\n}: {\n req: Request\n res: Response\n services: Services\n}) => {\n const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n\n const {\n query,\n filters: filterData,\n reportDefinition,\n dashboardDefinition,\n } = await AsyncDashboardUtils.getDefinitionData({\n req,\n res,\n services,\n })\n\n const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getSyncDashboard(\n token,\n reportId,\n reportId,\n query,\n )\n const flattenedData: DashboardDataResponse[] = dashboardData.flat()\n\n // Get the dashboard parts\n const sections: DashboardSection[] = AsyncDashboardUtils.getSections(dashboardDefinition, flattenedData, query)\n\n await setAsRecentlyViewed({\n req,\n services,\n reportName: reportDefinition.name,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description || reportDefinition.description || '',\n reportId,\n id,\n userId: dprUser.id,\n filters: filterData.filters,\n })\n\n return {\n dashboardData: {\n token,\n id,\n reportId,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description,\n reportName: reportDefinition.name,\n bookmarked: await services.bookmarkService.isBookmarked(id, reportId, dprUser.id),\n nestedBaseUrl,\n csrfToken,\n sections,\n filters: filterData,\n type: ReportType.DASHBOARD,\n actions: setActions(dashboardDefinition, reportDefinition, fullUrl),\n },\n }\n}\n\nexport const setActions = (\n definition: components['schemas']['DashboardDefinition'],\n summaryDefinition: components['schemas']['ReportDefinitionSummary'],\n url: string,\n) => {\n const { name: reportName } = summaryDefinition\n const { name } = definition\n\n return ReportActionsUtils.getActions({\n share: {\n reportName,\n name,\n url,\n },\n copy: {\n url,\n },\n })\n}\n\nexport default {\n renderSyncDashboard,\n}\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,wBAAAC,EAAA,eAAAC,IAAA,eAAAC,EAAAL,GAIA,IAAAM,EAA0C,4CAE1CC,EAAiC,wEACjCC,EAAyB,gDACzBC,EAAiC,wDAEjCF,EAAgC,0CAGhCA,EAA+B,sEAE/B,MAAMG,EAAsB,MAAO,CACjC,IAAAC,EACA,SAAAC,EACA,WAAAC,EACA,KAAAC,EACA,YAAAC,EACA,SAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,CACF,IAUM,CACJ,MAAMC,EAAY,CAChB,KAAM,aAAW,UACjB,SAAAJ,EACA,GAAAC,EACA,WAAAJ,EACA,YAAAE,EACA,KAAAD,CACF,EAEMO,EAAmF,CACvF,MAAqBV,EAAI,MACzB,aAAc,EAAAW,QAAqB,gBAA8BX,EAAI,MAAOQ,CAAO,CACrF,EAEMI,EAAqB,IAAI,EAAAC,QAAqBJ,CAAS,EAC1D,oBAAoBC,CAAoB,EACxC,UAAU,gBAAc,KAAK,EAC7B,aAAa,EACb,cAAcV,CAAG,EACjB,MAAM,EAET,MAAMC,EAAS,sBAAsB,kBAAkBW,EAAoBL,CAAM,CACnF,EAEaf,EAAsB,MAAO,CACxC,IAAAQ,EACA,IAAAc,EACA,SAAAb,CACF,IAIM,CACJ,KAAM,CAAE,MAAAc,EAAO,UAAAC,EAAW,QAAAC,EAAS,cAAAC,CAAc,EAAI,EAAAC,QAAa,UAAUL,CAAG,EACzE,CAAE,SAAAT,EAAU,GAAAC,CAAG,EAAIN,EAAI,OACvBoB,EAAU,GAAGpB,EAAI,QAAQ,MAAMA,EAAI,IAAI,MAAM,CAAC,GAAGA,EAAI,WAAW,GAEhE,CACJ,MAAAqB,EACA,QAASC,EACT,iBAAAC,EACA,oBAAAC,CACF,EAAI,MAAM,EAAAC,QAAoB,kBAAkB,CAC9C,IAAAzB,EACA,IAAAc,EACA,SAAAb,CACF,CAAC,EAQKyB,GAN2C,MAAMzB,EAAS,iBAAiB,iBAC/Ec,EACAV,EACAA,EACAgB,CACF,GAC6D,KAAK,EAG5DM,EAA+B,EAAAF,QAAoB,YAAYD,EAAqBE,EAAeL,CAAK,EAE9G,aAAMtB,EAAoB,CACxB,IAAAC,EACA,SAAAC,EACA,WAAYsB,EAAiB,KAC7B,KAAMC,EAAoB,KAC1B,YAAaA,EAAoB,aAAeD,EAAiB,aAAe,GAChF,SAAAlB,EACA,GAAAC,EACA,OAAQW,EAAQ,GAChB,QAASK,EAAW,OACtB,CAAC,EAEM,CACL,cAAe,CACb,MAAAP,EACA,GAAAT,EACA,SAAAD,EACA,KAAMmB,EAAoB,KAC1B,YAAaA,EAAoB,YACjC,WAAYD,EAAiB,KAC7B,WAAY,MAAMtB,EAAS,gBAAgB,aAAaK,EAAID,EAAUY,EAAQ,EAAE,EAChF,cAAAC,EACA,UAAAF,EACA,SAAAW,EACA,QAASL,EACT,KAAM,aAAW,UACjB,QAAS7B,EAAW+B,EAAqBD,EAAkBH,CAAO,CACpE,CACF,CACF,EAEa3B,EAAa,CACxBmC,EACAC,EACAC,IACG,CACH,KAAM,CAAE,KAAM5B,CAAW,EAAI2B,EACvB,CAAE,KAAA1B,CAAK,EAAIyB,EAEjB,OAAO,EAAAG,QAAmB,WAAW,CACnC,MAAO,CACL,WAAA7B,EACA,KAAAC,EACA,IAAA2B,CACF,EACA,KAAM,CACJ,IAAAA,CACF,CACF,CAAC,CACH,EAEA,IAAOvC,EAAQ,CACb,oBAAAC,CACF",
|
|
6
|
+
"names": ["utils_exports", "__export", "utils_default", "renderSyncDashboard", "setActions", "__toCommonJS", "import_UserReports", "import_utils", "import_localsHelper", "import_UserStoreItemBuilder", "setAsRecentlyViewed", "req", "services", "reportName", "name", "description", "reportId", "id", "userId", "filters", "stateData", "interactiveQueryData", "SelectedFiltersUtils", "recentlyViewedData", "UserStoreItemBuilder", "res", "token", "csrfToken", "dprUser", "nestedBaseUrl", "LocalsHelper", "fullUrl", "query", "filterData", "reportDefinition", "dashboardDefinition", "AsyncDashboardUtils", "flattenedData", "sections", "definition", "summaryDefinition", "url", "ReportActionsUtils"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { Request, Response } from 'express'
|
|
2
|
+
import Dict = NodeJS.Dict
|
|
3
|
+
|
|
4
|
+
import type { Services } from '../../../../../types/Services'
|
|
5
|
+
import { ReportType, RequestStatus } from '../../../../../types/UserReports'
|
|
6
|
+
import { FilterValue } from '../../../../../components/_filters/types'
|
|
7
|
+
import SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'
|
|
8
|
+
import LocalsHelper from '../../../../../utils/localsHelper'
|
|
9
|
+
import UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'
|
|
10
|
+
import { DashboardDataResponse } from '../../../../../types/Metrics'
|
|
11
|
+
import AsyncDashboardUtils from '../../async/dashboard/utils'
|
|
12
|
+
import { DashboardSection } from '../../../../../components/_dashboards/dashboard-visualisation/types'
|
|
13
|
+
import { components } from '../../../../../types/api'
|
|
14
|
+
import ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'
|
|
15
|
+
|
|
16
|
+
const setAsRecentlyViewed = async ({
|
|
17
|
+
req,
|
|
18
|
+
services,
|
|
19
|
+
reportName,
|
|
20
|
+
name,
|
|
21
|
+
description,
|
|
22
|
+
reportId,
|
|
23
|
+
id,
|
|
24
|
+
userId,
|
|
25
|
+
filters,
|
|
26
|
+
}: {
|
|
27
|
+
req: Request
|
|
28
|
+
services: Services
|
|
29
|
+
reportName: string
|
|
30
|
+
name: string
|
|
31
|
+
description: string
|
|
32
|
+
reportId: string
|
|
33
|
+
id: string
|
|
34
|
+
userId: string
|
|
35
|
+
filters: FilterValue[]
|
|
36
|
+
}) => {
|
|
37
|
+
const stateData = {
|
|
38
|
+
type: ReportType.DASHBOARD,
|
|
39
|
+
reportId,
|
|
40
|
+
id,
|
|
41
|
+
reportName,
|
|
42
|
+
description,
|
|
43
|
+
name,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {
|
|
47
|
+
query: <Dict<string>>req.query,
|
|
48
|
+
querySummary: SelectedFiltersUtils.getQuerySummary(<Dict<string>>req.query, filters),
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const recentlyViewedData = new UserStoreItemBuilder(stateData)
|
|
52
|
+
.addInteractiveQuery(interactiveQueryData)
|
|
53
|
+
.addStatus(RequestStatus.READY)
|
|
54
|
+
.addTimestamp()
|
|
55
|
+
.addReportUrls(req)
|
|
56
|
+
.build()
|
|
57
|
+
|
|
58
|
+
await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export const renderSyncDashboard = async ({
|
|
62
|
+
req,
|
|
63
|
+
res,
|
|
64
|
+
services,
|
|
65
|
+
}: {
|
|
66
|
+
req: Request
|
|
67
|
+
res: Response
|
|
68
|
+
services: Services
|
|
69
|
+
}) => {
|
|
70
|
+
const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)
|
|
71
|
+
const { reportId, id } = req.params
|
|
72
|
+
const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`
|
|
73
|
+
|
|
74
|
+
const {
|
|
75
|
+
query,
|
|
76
|
+
filters: filterData,
|
|
77
|
+
reportDefinition,
|
|
78
|
+
dashboardDefinition,
|
|
79
|
+
} = await AsyncDashboardUtils.getDefinitionData({
|
|
80
|
+
req,
|
|
81
|
+
res,
|
|
82
|
+
services,
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getSyncDashboard(
|
|
86
|
+
token,
|
|
87
|
+
reportId,
|
|
88
|
+
reportId,
|
|
89
|
+
query,
|
|
90
|
+
)
|
|
91
|
+
const flattenedData: DashboardDataResponse[] = dashboardData.flat()
|
|
92
|
+
|
|
93
|
+
// Get the dashboard parts
|
|
94
|
+
const sections: DashboardSection[] = AsyncDashboardUtils.getSections(dashboardDefinition, flattenedData, query)
|
|
95
|
+
|
|
96
|
+
await setAsRecentlyViewed({
|
|
97
|
+
req,
|
|
98
|
+
services,
|
|
99
|
+
reportName: reportDefinition.name,
|
|
100
|
+
name: dashboardDefinition.name,
|
|
101
|
+
description: dashboardDefinition.description || reportDefinition.description || '',
|
|
102
|
+
reportId,
|
|
103
|
+
id,
|
|
104
|
+
userId: dprUser.id,
|
|
105
|
+
filters: filterData.filters,
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
dashboardData: {
|
|
110
|
+
token,
|
|
111
|
+
id,
|
|
112
|
+
reportId,
|
|
113
|
+
name: dashboardDefinition.name,
|
|
114
|
+
description: dashboardDefinition.description,
|
|
115
|
+
reportName: reportDefinition.name,
|
|
116
|
+
bookmarked: await services.bookmarkService.isBookmarked(id, reportId, dprUser.id),
|
|
117
|
+
nestedBaseUrl,
|
|
118
|
+
csrfToken,
|
|
119
|
+
sections,
|
|
120
|
+
filters: filterData,
|
|
121
|
+
type: ReportType.DASHBOARD,
|
|
122
|
+
actions: setActions(dashboardDefinition, reportDefinition, fullUrl),
|
|
123
|
+
},
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export const setActions = (
|
|
128
|
+
definition: components['schemas']['DashboardDefinition'],
|
|
129
|
+
summaryDefinition: components['schemas']['ReportDefinitionSummary'],
|
|
130
|
+
url: string,
|
|
131
|
+
) => {
|
|
132
|
+
const { name: reportName } = summaryDefinition
|
|
133
|
+
const { name } = definition
|
|
134
|
+
|
|
135
|
+
return ReportActionsUtils.getActions({
|
|
136
|
+
share: {
|
|
137
|
+
reportName,
|
|
138
|
+
name,
|
|
139
|
+
url,
|
|
140
|
+
},
|
|
141
|
+
copy: {
|
|
142
|
+
url,
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export default {
|
|
148
|
+
renderSyncDashboard,
|
|
149
|
+
}
|