UNPKG

@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
"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;