@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
232 lines (231 loc) • 8.84 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const parseurl_1 = __importDefault(require("parseurl"));
const UserReports_1 = require("../types/UserReports");
const urlHelper_1 = require("./urlHelper");
class UserStoreItemBuilder {
constructor(reportData) {
this.build = () => {
return this.userStoreItem;
};
this.initialiseItem = () => {
return this.addReportData({
type: this.requestFormData.type,
reportId: this.requestFormData.reportId,
reportName: this.requestFormData.reportName,
description: this.requestFormData.description,
id: this.requestFormData.id,
name: this.requestFormData.name,
});
};
this.addReportData = ({ type, reportId, reportName, description, id, name, }) => {
this.userStoreItem = {
type: type,
reportId,
reportName,
description,
id,
name,
timestamp: {},
};
return this;
};
this.addExecutionData = (executionData) => {
this.userStoreItem = {
...this.userStoreItem,
...executionData,
};
return this;
};
this.addChildExecutionData = (childExecutionData) => {
this.userStoreItem = {
...this.userStoreItem,
childExecutionData,
};
return this;
};
this.addFilters = (filterData) => {
const filtersQueryString = new URLSearchParams(filterData).toString();
this.userStoreItem = {
...this.userStoreItem,
...{
filters: {
data: filterData,
queryString: filtersQueryString,
},
},
};
return this;
};
this.addSortData = (sortData) => {
const sortByQueryString = new URLSearchParams(sortData).toString();
this.userStoreItem = {
...this.userStoreItem,
...{
sortBy: {
data: sortData,
queryString: sortByQueryString,
},
},
};
return this;
};
this.addRequestUrls = () => {
const { origin, pathname, search, href, defaultInteractiveQueryString } = this.requestFormData;
const { executionId, dataProductDefinitionsPath, dpdPathFromQuery } = this.userStoreItem;
const dpdPath = dpdPathFromQuery ? `${(0, urlHelper_1.getDpdPathSuffix)(dataProductDefinitionsPath)}` : '';
this.userStoreItem = {
...this.userStoreItem,
...{
url: {
origin,
request: {
fullUrl: href,
pathname,
search,
},
polling: {
fullUrl: `${origin}${pathname}/${executionId}${dpdPath}`,
pathname: `${pathname}/${executionId}${dpdPath}`,
},
report: {
...((defaultInteractiveQueryString === null || defaultInteractiveQueryString === void 0 ? void 0 : defaultInteractiveQueryString.length) && {
search: dpdPath.length
? `${dpdPath}&${defaultInteractiveQueryString}`
: `?${defaultInteractiveQueryString}`,
default: `?${defaultInteractiveQueryString}`,
}),
},
},
},
};
return this;
};
this.addAsyncUrls = (url) => {
this.userStoreItem = {
...this.userStoreItem,
...{
url,
},
};
return this;
};
this.addReportUrls = (req) => {
var _a, _b, _c;
const origin = req.get('host');
const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`;
const urlData = (0, parseurl_1.default)(req);
this.userStoreItem = {
...this.userStoreItem,
...{
url: {
origin: origin || this.userStoreItem.url.origin,
...(((_a = this.userStoreItem.url) === null || _a === void 0 ? void 0 : _a.request) && { request: this.userStoreItem.url.request }),
...(((_b = this.userStoreItem.url) === null || _b === void 0 ? void 0 : _b.polling) && { polling: this.userStoreItem.url.polling }),
report: {
...(((_c = this.userStoreItem.url) === null || _c === void 0 ? void 0 : _c.report) && this.userStoreItem.url.report),
fullUrl,
...(urlData.search && { search: urlData.search }),
},
},
},
};
return this;
};
this.addLoadType = (loadType) => {
this.userStoreItem = {
...this.userStoreItem,
loadType,
};
return this;
};
this.addQuery = (queryData) => {
this.userStoreItem = {
...this.userStoreItem,
...{
query: {
data: queryData.query,
summary: queryData.querySummary,
},
},
};
return this;
};
this.addInteractiveQuery = (queryData) => {
if (queryData) {
this.userStoreItem = {
...this.userStoreItem,
...{
interactiveQuery: {
data: queryData.query,
summary: queryData.querySummary,
},
},
};
}
return this;
};
this.addStatus = (status) => {
this.userStoreItem = {
...this.userStoreItem,
status,
};
return this;
};
this.addMetrics = (metrics) => {
this.userStoreItem = {
...this.userStoreItem,
metrics: metrics.map((metric) => {
return { name: metric.display };
}),
};
return this;
};
this.addTimestamp = () => {
const { status } = this.userStoreItem;
const ts = new Date();
switch (status) {
case UserReports_1.RequestStatus.FAILED:
this.userStoreItem.timestamp.failed = ts;
break;
case UserReports_1.RequestStatus.EXPIRED:
this.userStoreItem.timestamp.expired = ts;
break;
case UserReports_1.RequestStatus.ABORTED:
this.userStoreItem.timestamp.aborted = ts;
break;
case UserReports_1.RequestStatus.FINISHED:
this.userStoreItem.timestamp.completed = ts;
break;
case UserReports_1.RequestStatus.SUBMITTED:
this.userStoreItem.timestamp.requested = ts;
break;
case UserReports_1.RequestStatus.STARTED:
case UserReports_1.RequestStatus.PICKED:
break;
default:
this.userStoreItem.timestamp.lastViewed = ts;
break;
}
return this;
};
this.addDefinitionsPath = (definitionsPath, dpdPathFromQuery) => {
if (definitionsPath) {
this.userStoreItem = {
...this.userStoreItem,
dataProductDefinitionsPath: definitionsPath,
dpdPathFromQuery,
};
}
return this;
};
this.requestFormData = reportData;
if (this.requestFormData) {
this.initialiseItem();
}
}
}
exports.default = UserStoreItemBuilder;