@ministryofjustice/hmpps-digital-prison-reporting-frontend 8.2.2 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_networkMocks/mocks.d.ts +17 -0
- package/cjs/dpr/routes/journeys/request-report/controller.js +2 -2
- package/cjs/dpr/routes/journeys/request-report/controller.js.map +1 -1
- package/cjs/dpr/routes/journeys/request-report/filters/controller.js +2 -2
- package/cjs/dpr/routes/journeys/request-report/filters/controller.js.map +1 -1
- package/cjs/dpr/routes/journeys/request-report/filters/utils.js +2 -2
- package/cypress-tests/mockApis/reporting.d.ts +1 -0
- package/dpr/routes/journeys/request-report/controller.js +2 -2
- package/dpr/routes/journeys/request-report/controller.js.map +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js +5 -5
- package/dpr/routes/journeys/request-report/filters/controller.js.map +1 -1
- package/dpr/routes/journeys/request-report/filters/utils.js +2 -2
- package/package.json +2 -2
package/_networkMocks/mocks.d.ts
CHANGED
|
@@ -101,6 +101,23 @@ export declare const reportingApiFailures: {
|
|
|
101
101
|
fixedDelayMilliseconds: number;
|
|
102
102
|
};
|
|
103
103
|
};
|
|
104
|
+
readonly getSingleDefinitionVariantUnauthorizedFailure: {
|
|
105
|
+
priority: number;
|
|
106
|
+
request: {
|
|
107
|
+
method: "GET" | "POST" | "DELETE" | "PUT" | "OPTIONS";
|
|
108
|
+
queryParameters?: object | undefined;
|
|
109
|
+
bodyPatterns?: Array<object> | undefined;
|
|
110
|
+
urlPathPattern: string;
|
|
111
|
+
};
|
|
112
|
+
response: {
|
|
113
|
+
status: number;
|
|
114
|
+
headers: {
|
|
115
|
+
"Content-Type": "application/json;charset=UTF-8";
|
|
116
|
+
};
|
|
117
|
+
jsonBody: object;
|
|
118
|
+
fixedDelayMilliseconds: number;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
104
121
|
readonly requestAsyncReportFailure500: {
|
|
105
122
|
priority: number;
|
|
106
123
|
request: {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var captureError = require('../../../utils/captureError.js');
|
|
5
6
|
var ErrorHandler = require('../../../utils/ErrorHandler/ErrorHandler.js');
|
|
6
7
|
var utils = require('./utils.js');
|
|
7
|
-
var captureError = require('../../../utils/captureError.js');
|
|
8
8
|
|
|
9
9
|
class RequestReportController {
|
|
10
10
|
layoutPath;
|
|
@@ -19,7 +19,7 @@ class RequestReportController {
|
|
|
19
19
|
layoutPath: this.layoutPath,
|
|
20
20
|
...(req.body && { ...req.body }),
|
|
21
21
|
...req.params,
|
|
22
|
-
error: req.body?.error,
|
|
22
|
+
error: req.body?.error || error,
|
|
23
23
|
params: req?.params,
|
|
24
24
|
});
|
|
25
25
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/request-report/controller.ts"],"sourcesContent":["import { ErrorRequestHandler, RequestHandler } from 'express'\nimport { Services } from '../../../types/Services'\nimport
|
|
1
|
+
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/request-report/controller.ts"],"sourcesContent":["import { ErrorRequestHandler, RequestHandler } from 'express'\nimport { Services } from '../../../types/Services'\nimport { captureDprError } from '../../../utils/captureError'\nimport ErrorHandler from '../../../utils/ErrorHandler/ErrorHandler'\nimport { cancelRequest } from './utils'\n\nclass RequestReportController {\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 errorHandler: ErrorRequestHandler = async (error, req, res, _next) => {\n captureDprError(error)\n\n res.render(`dpr/routes/journeys/view-report/error`, {\n layoutPath: this.layoutPath,\n ...(req.body && { ...req.body }),\n ...req.params,\n error: req.body?.error || error,\n params: req?.params,\n })\n }\n\n CANCEL: RequestHandler = async (req, res, _next) => {\n try {\n await cancelRequest({\n req,\n res,\n services: this.services,\n })\n } catch (error) {\n req.body ??= {}\n req.body.title = 'Failed to abort request'\n req.body.errorDescription = 'We were unable to abort the report request for the following reason:'\n req.body.error = new ErrorHandler(error).formatError()\n\n req.flash('ERROR_BODY', JSON.stringify(req.body))\n req.flash('ERROR_PARAMS', JSON.stringify(req.params))\n req.flash('ERROR', JSON.stringify(req.body?.error || {}))\n\n return res.redirect(`${req.originalUrl}/failed`)\n }\n return res.redirect(req.originalUrl.replace('/cancel', '/status'))\n }\n}\n\nexport { RequestReportController }\nexport default RequestReportController\n"],"names":["captureDprError","cancelRequest","ErrorHandler"],"mappings":";;;;;;;;AAMA,MAAM,uBAAuB,CAAA;AAC3B,IAAA,UAAU;AAEV,IAAA,QAAQ;IAER,WAAA,CAAY,UAAkB,EAAE,QAAkB,EAAA;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;IAEA,YAAY,GAAwB,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,KAAI;QACnEA,4BAAe,CAAC,KAAK,CAAC;AAEtB,QAAA,GAAG,CAAC,MAAM,CAAC,CAAA,qCAAA,CAAuC,EAAE;YAClD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,GAAG,GAAG,CAAC,MAAM;AACb,YAAA,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK;YAC/B,MAAM,EAAE,GAAG,EAAE,MAAM;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,MAAM,GAAmB,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,KAAI;AACjD,QAAA,IAAI;AACF,YAAA,MAAMC,mBAAa,CAAC;gBAClB,GAAG;gBACH,GAAG;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,GAAG,CAAC,IAAI,KAAK,EAAE;AACf,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,yBAAyB;AAC1C,YAAA,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,sEAAsE;AAClG,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAIC,yBAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AAEtD,YAAA,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrD,YAAA,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAEzD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,WAAW,CAAA,OAAA,CAAS,CAAC;QAClD;AACA,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACpE,IAAA,CAAC;AACF;;;;;"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var utils = require('./utils.js');
|
|
6
|
-
var personalisationUtils = require('../../../../utils/Personalisation/personalisationUtils.js');
|
|
7
5
|
var filtersTypeEnum = require('../../../../components/_filters/filtersTypeEnum.js');
|
|
8
6
|
var ErrorHandler = require('../../../../utils/ErrorHandler/ErrorHandler.js');
|
|
7
|
+
var personalisationUtils = require('../../../../utils/Personalisation/personalisationUtils.js');
|
|
9
8
|
var sessionHelper = require('../../../../utils/sessionHelper.js');
|
|
9
|
+
var utils = require('./utils.js');
|
|
10
10
|
|
|
11
11
|
class RequestReportController {
|
|
12
12
|
layoutPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/request-report/filters/controller.ts"],"sourcesContent":["import { RequestHandler } from 'express'\nimport {
|
|
1
|
+
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/request-report/filters/controller.ts"],"sourcesContent":["import { RequestHandler } from 'express'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\nimport { RequestDataResult } from '../../../../types/AsyncReportUtils'\nimport { Services } from '../../../../types/Services'\nimport ErrorHandler from '../../../../utils/ErrorHandler/ErrorHandler'\nimport PersonalisationUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { getActiveJourneyValue } from '../../../../utils/sessionHelper'\nimport AsyncRequestUtils, { redirectWithDefaults, setDefaultQueryString } from './utils'\n\nclass RequestReportController {\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 if (redirectWithDefaults(res, req)) {\n return\n }\n\n // Get config to render the filters\n const requestRenderData = (await AsyncRequestUtils.renderRequest({\n req,\n res,\n services: this.services,\n next,\n })) as RequestDataResult\n\n // Get the validation errors\n const validationErrors = res.locals['validationErrors'] || []\n\n // Render the filters view\n res.render('dpr/routes/journeys/request-report/filters/view', {\n layoutPath: this.layoutPath,\n ...requestRenderData,\n validationErrors,\n })\n } catch (error) {\n req.body ??= {}\n req.body.title = 'Request failed'\n req.body.errorDescription = `Your ${req.params['type']} has failed to generate.`\n req.body.error = new ErrorHandler(error).formatError()\n\n next(req.body.error)\n }\n }\n\n POST: RequestHandler = async (req, res, next) => {\n try {\n const executionData = await AsyncRequestUtils.request({\n req,\n res,\n services: this.services,\n next,\n })\n\n const { executionId, dataProductDefinitionsPath } = executionData\n if (executionId) {\n const redirect = dataProductDefinitionsPath\n ? `${executionId}/status?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n : `${executionId}/status`\n res.redirect(redirect)\n } else {\n res.end()\n }\n } catch (error) {\n const filters = AsyncRequestUtils.getFiltersFromReqBody(req)\n\n req.body = {\n title: 'Request Failed',\n errorDescription: `Your ${req.params['type']} has failed to generate.`,\n error: new ErrorHandler(error).formatError(),\n retry: true,\n filters,\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n\n saveDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n await PersonalisationUtils.saveDefaults(FiltersType.REQUEST, res, req, this.services)\n\n res.redirect(req.baseUrl)\n } catch (error) {\n req.body = {\n title: 'Failed to save defaults',\n error: new ErrorHandler(error).formatError(),\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n\n removeDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n const { id, reportId } = req.params as { id: string; reportId: string }\n await PersonalisationUtils.removeDefaults(FiltersType.REQUEST, res, req, this.services)\n\n const defaultFiltersSearch = getActiveJourneyValue(req, { id, reportId }, 'defaultFiltersSearch')\n const defaultPath = defaultFiltersSearch ? `${req.baseUrl}?${defaultFiltersSearch}` : req.baseUrl\n\n res.redirect(defaultPath)\n } catch (error) {\n req.body = {\n title: 'Failed to remove defaults',\n error: new ErrorHandler(error).formatError(),\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n\n /**\n * Reset the form filters to default\n *\n * @param {*} req\n * @param {*} res\n * @param {*} next\n */\n resetFilters: RequestHandler = async (req, res, next) => {\n try {\n const effectiveQueryString = setDefaultQueryString(req)\n const defaultPath = effectiveQueryString ? `${req.baseUrl}?${effectiveQueryString}` : req.baseUrl\n res.redirect(defaultPath)\n } catch (error) {\n req.body = {\n title: 'Failed to reset filters',\n error: new ErrorHandler(error).formatError(),\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n}\n\nexport { RequestReportController }\nexport default RequestReportController\n"],"names":["redirectWithDefaults","AsyncRequestUtils","ErrorHandler","PersonalisationUtils","FiltersType","getActiveJourneyValue","setDefaultQueryString"],"mappings":"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"}
|
|
@@ -376,13 +376,13 @@ const setDefaultQueryString = (req) => {
|
|
|
376
376
|
}
|
|
377
377
|
return effectiveQueryString;
|
|
378
378
|
};
|
|
379
|
-
var
|
|
379
|
+
var AsyncRequestUtils = {
|
|
380
380
|
request,
|
|
381
381
|
renderRequest,
|
|
382
382
|
getFiltersFromReqBody,
|
|
383
383
|
};
|
|
384
384
|
|
|
385
|
-
exports.default =
|
|
385
|
+
exports.default = AsyncRequestUtils;
|
|
386
386
|
exports.getFiltersFromReqBody = getFiltersFromReqBody;
|
|
387
387
|
exports.redirectWithDefaults = redirectWithDefaults;
|
|
388
388
|
exports.renderRequest = renderRequest;
|
|
@@ -4,6 +4,7 @@ export declare const stubs: {
|
|
|
4
4
|
readonly getDefinitionSummariesUnauthorizedFailure: () => import("superagent/lib/node").Request;
|
|
5
5
|
readonly getSingleDefinitionFailure: () => import("superagent/lib/node").Request;
|
|
6
6
|
readonly getSingleDefinitionVariantFailure: () => import("superagent/lib/node").Request;
|
|
7
|
+
readonly getSingleDefinitionVariantUnauthorizedFailure: () => import("superagent/lib/node").Request;
|
|
7
8
|
readonly requestAsyncReportFailure500: () => import("superagent/lib/node").Request;
|
|
8
9
|
readonly requestAsyncReportFailure403: () => import("superagent/lib/node").Request;
|
|
9
10
|
readonly getAsyncReportStatusFailure: () => import("superagent/lib/node").Request;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { captureDprError } from '../../../utils/captureError.js';
|
|
1
2
|
import { ErrorHandler } from '../../../utils/ErrorHandler/ErrorHandler.js';
|
|
2
3
|
import { cancelRequest } from './utils.js';
|
|
3
|
-
import { captureDprError } from '../../../utils/captureError.js';
|
|
4
4
|
|
|
5
5
|
class RequestReportController {
|
|
6
6
|
layoutPath;
|
|
@@ -15,7 +15,7 @@ class RequestReportController {
|
|
|
15
15
|
layoutPath: this.layoutPath,
|
|
16
16
|
...(req.body && { ...req.body }),
|
|
17
17
|
...req.params,
|
|
18
|
-
error: req.body?.error,
|
|
18
|
+
error: req.body?.error || error,
|
|
19
19
|
params: req?.params,
|
|
20
20
|
});
|
|
21
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/request-report/controller.ts"],"sourcesContent":["import { ErrorRequestHandler, RequestHandler } from 'express'\nimport { Services } from '../../../types/Services'\nimport
|
|
1
|
+
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/request-report/controller.ts"],"sourcesContent":["import { ErrorRequestHandler, RequestHandler } from 'express'\nimport { Services } from '../../../types/Services'\nimport { captureDprError } from '../../../utils/captureError'\nimport ErrorHandler from '../../../utils/ErrorHandler/ErrorHandler'\nimport { cancelRequest } from './utils'\n\nclass RequestReportController {\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 errorHandler: ErrorRequestHandler = async (error, req, res, _next) => {\n captureDprError(error)\n\n res.render(`dpr/routes/journeys/view-report/error`, {\n layoutPath: this.layoutPath,\n ...(req.body && { ...req.body }),\n ...req.params,\n error: req.body?.error || error,\n params: req?.params,\n })\n }\n\n CANCEL: RequestHandler = async (req, res, _next) => {\n try {\n await cancelRequest({\n req,\n res,\n services: this.services,\n })\n } catch (error) {\n req.body ??= {}\n req.body.title = 'Failed to abort request'\n req.body.errorDescription = 'We were unable to abort the report request for the following reason:'\n req.body.error = new ErrorHandler(error).formatError()\n\n req.flash('ERROR_BODY', JSON.stringify(req.body))\n req.flash('ERROR_PARAMS', JSON.stringify(req.params))\n req.flash('ERROR', JSON.stringify(req.body?.error || {}))\n\n return res.redirect(`${req.originalUrl}/failed`)\n }\n return res.redirect(req.originalUrl.replace('/cancel', '/status'))\n }\n}\n\nexport { RequestReportController }\nexport default RequestReportController\n"],"names":[],"mappings":";;;;AAMA,MAAM,uBAAuB,CAAA;AAC3B,IAAA,UAAU;AAEV,IAAA,QAAQ;IAER,WAAA,CAAY,UAAkB,EAAE,QAAkB,EAAA;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;IAEA,YAAY,GAAwB,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,KAAI;QACnE,eAAe,CAAC,KAAK,CAAC;AAEtB,QAAA,GAAG,CAAC,MAAM,CAAC,CAAA,qCAAA,CAAuC,EAAE;YAClD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,GAAG,GAAG,CAAC,MAAM;AACb,YAAA,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK;YAC/B,MAAM,EAAE,GAAG,EAAE,MAAM;AACpB,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,MAAM,GAAmB,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,KAAI;AACjD,QAAA,IAAI;AACF,YAAA,MAAM,aAAa,CAAC;gBAClB,GAAG;gBACH,GAAG;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,GAAG,CAAC,IAAI,KAAK,EAAE;AACf,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,yBAAyB;AAC1C,YAAA,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,sEAAsE;AAClG,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AAEtD,YAAA,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrD,YAAA,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAEzD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,WAAW,CAAA,OAAA,CAAS,CAAC;QAClD;AACA,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACpE,IAAA,CAAC;AACF;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import AysncRequestUtils, { redirectWithDefaults, setDefaultQueryString } from './utils.js';
|
|
2
|
-
import PersonalisationUtils from '../../../../utils/Personalisation/personalisationUtils.js';
|
|
3
1
|
import { FiltersType } from '../../../../components/_filters/filtersTypeEnum.js';
|
|
4
2
|
import { ErrorHandler } from '../../../../utils/ErrorHandler/ErrorHandler.js';
|
|
3
|
+
import PersonalisationUtils from '../../../../utils/Personalisation/personalisationUtils.js';
|
|
5
4
|
import { getActiveJourneyValue } from '../../../../utils/sessionHelper.js';
|
|
5
|
+
import AsyncRequestUtils, { redirectWithDefaults, setDefaultQueryString } from './utils.js';
|
|
6
6
|
|
|
7
7
|
class RequestReportController {
|
|
8
8
|
layoutPath;
|
|
@@ -17,7 +17,7 @@ class RequestReportController {
|
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
// Get config to render the filters
|
|
20
|
-
const requestRenderData = (await
|
|
20
|
+
const requestRenderData = (await AsyncRequestUtils.renderRequest({
|
|
21
21
|
req,
|
|
22
22
|
res,
|
|
23
23
|
services: this.services,
|
|
@@ -42,7 +42,7 @@ class RequestReportController {
|
|
|
42
42
|
};
|
|
43
43
|
POST = async (req, res, next) => {
|
|
44
44
|
try {
|
|
45
|
-
const executionData = await
|
|
45
|
+
const executionData = await AsyncRequestUtils.request({
|
|
46
46
|
req,
|
|
47
47
|
res,
|
|
48
48
|
services: this.services,
|
|
@@ -60,7 +60,7 @@ class RequestReportController {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
catch (error) {
|
|
63
|
-
const filters =
|
|
63
|
+
const filters = AsyncRequestUtils.getFiltersFromReqBody(req);
|
|
64
64
|
req.body = {
|
|
65
65
|
title: 'Request Failed',
|
|
66
66
|
errorDescription: `Your ${req.params['type']} has failed to generate.`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/request-report/filters/controller.ts"],"sourcesContent":["import { RequestHandler } from 'express'\nimport {
|
|
1
|
+
{"version":3,"file":"controller.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/request-report/filters/controller.ts"],"sourcesContent":["import { RequestHandler } from 'express'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\nimport { RequestDataResult } from '../../../../types/AsyncReportUtils'\nimport { Services } from '../../../../types/Services'\nimport ErrorHandler from '../../../../utils/ErrorHandler/ErrorHandler'\nimport PersonalisationUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { getActiveJourneyValue } from '../../../../utils/sessionHelper'\nimport AsyncRequestUtils, { redirectWithDefaults, setDefaultQueryString } from './utils'\n\nclass RequestReportController {\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 if (redirectWithDefaults(res, req)) {\n return\n }\n\n // Get config to render the filters\n const requestRenderData = (await AsyncRequestUtils.renderRequest({\n req,\n res,\n services: this.services,\n next,\n })) as RequestDataResult\n\n // Get the validation errors\n const validationErrors = res.locals['validationErrors'] || []\n\n // Render the filters view\n res.render('dpr/routes/journeys/request-report/filters/view', {\n layoutPath: this.layoutPath,\n ...requestRenderData,\n validationErrors,\n })\n } catch (error) {\n req.body ??= {}\n req.body.title = 'Request failed'\n req.body.errorDescription = `Your ${req.params['type']} has failed to generate.`\n req.body.error = new ErrorHandler(error).formatError()\n\n next(req.body.error)\n }\n }\n\n POST: RequestHandler = async (req, res, next) => {\n try {\n const executionData = await AsyncRequestUtils.request({\n req,\n res,\n services: this.services,\n next,\n })\n\n const { executionId, dataProductDefinitionsPath } = executionData\n if (executionId) {\n const redirect = dataProductDefinitionsPath\n ? `${executionId}/status?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n : `${executionId}/status`\n res.redirect(redirect)\n } else {\n res.end()\n }\n } catch (error) {\n const filters = AsyncRequestUtils.getFiltersFromReqBody(req)\n\n req.body = {\n title: 'Request Failed',\n errorDescription: `Your ${req.params['type']} has failed to generate.`,\n error: new ErrorHandler(error).formatError(),\n retry: true,\n filters,\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n\n saveDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n await PersonalisationUtils.saveDefaults(FiltersType.REQUEST, res, req, this.services)\n\n res.redirect(req.baseUrl)\n } catch (error) {\n req.body = {\n title: 'Failed to save defaults',\n error: new ErrorHandler(error).formatError(),\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n\n removeDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n const { id, reportId } = req.params as { id: string; reportId: string }\n await PersonalisationUtils.removeDefaults(FiltersType.REQUEST, res, req, this.services)\n\n const defaultFiltersSearch = getActiveJourneyValue(req, { id, reportId }, 'defaultFiltersSearch')\n const defaultPath = defaultFiltersSearch ? `${req.baseUrl}?${defaultFiltersSearch}` : req.baseUrl\n\n res.redirect(defaultPath)\n } catch (error) {\n req.body = {\n title: 'Failed to remove defaults',\n error: new ErrorHandler(error).formatError(),\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n\n /**\n * Reset the form filters to default\n *\n * @param {*} req\n * @param {*} res\n * @param {*} next\n */\n resetFilters: RequestHandler = async (req, res, next) => {\n try {\n const effectiveQueryString = setDefaultQueryString(req)\n const defaultPath = effectiveQueryString ? `${req.baseUrl}?${effectiveQueryString}` : req.baseUrl\n res.redirect(defaultPath)\n } catch (error) {\n req.body = {\n title: 'Failed to reset filters',\n error: new ErrorHandler(error).formatError(),\n ...(req.body && { ...req.body }),\n }\n next(error)\n }\n }\n}\n\nexport { RequestReportController }\nexport default RequestReportController\n"],"names":[],"mappings":"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"}
|
|
@@ -372,11 +372,11 @@ const setDefaultQueryString = (req) => {
|
|
|
372
372
|
}
|
|
373
373
|
return effectiveQueryString;
|
|
374
374
|
};
|
|
375
|
-
var
|
|
375
|
+
var AsyncRequestUtils = {
|
|
376
376
|
request,
|
|
377
377
|
renderRequest,
|
|
378
378
|
getFiltersFromReqBody,
|
|
379
379
|
};
|
|
380
380
|
|
|
381
|
-
export {
|
|
381
|
+
export { AsyncRequestUtils as default, getFiltersFromReqBody, redirectWithDefaults, renderRequest, request, setDefaultQueryString, updateStore };
|
|
382
382
|
//# sourceMappingURL=utils.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.1",
|
|
4
4
|
"description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"sideEffects": false,
|
|
68
68
|
"engines": {
|
|
69
69
|
"node": "^22 || ^24",
|
|
70
|
-
"npm": ">=10
|
|
70
|
+
"npm": ">=10"
|
|
71
71
|
},
|
|
72
72
|
"license": "MIT",
|
|
73
73
|
"author": "HMPPS Digital Prison Reporting Team",
|