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.

146 lines (142 loc) 4.68 kB
'use strict'; var UserReports = require('../../../types/UserReports.js'); var types = require('../types.js'); var dateHelper = require('../../../utils/dateHelper.js'); var localsHelper = require('../../../utils/localsHelper.js'); var reportStoreHelper = require('../../../utils/reportStoreHelper.js'); var utils = require('./my-reports-list-item-actions/utils.js'); /** * Builds the row * * @param {StoredReportData} data * @param {RequestStatus} status * @param {Request} req * @param {Response} res * @param {ListType} listType * @return {*} */ const buildMyReportListRow = (data, status, req, res, listType) => { if (listType !== types.ListType.SUBSCRIPTIONS) { return { title: buildTitleCell(data), filters: buildFiltersCell(data), status, actions: utils.buildActionsCell(data, res, req, listType), meta: buildMeta(data, res, listType), }; } return { title: buildTitleCell(data), description: buildDescriptionCell(data), schedule: buildScheduleCell(data), actions: utils.buildActionsCell(data, res, req, listType), }; }; /** * Builds the titls cell data * * @param {StoredReportData} data * @return {*} {DprMyReportTitle} */ const buildTitleCell = (data) => { return { ...reportStoreHelper.getReportTitleData(data), reportType: data.type, timestamp: buildTimestamp(data), }; }; const buildDescriptionCell = (data) => { const { description } = data; return description; }; const buildScheduleCell = (data) => { const { schedule } = data; return schedule; }; /** * Builds the timestamp to display * * @param {StoredReportData} data * @return {*} */ const buildTimestamp = (data) => { const { status, timestamp } = data; const now = dateHelper.todayAsUiDateTime(); switch (status) { case UserReports.RequestStatus.FAILED: { const { failed } = timestamp; const ts = failed ? dateHelper.apiTimestampToUiDateTime(failed) : now; return `Failed at ${ts}`; } case UserReports.RequestStatus.ABORTED: { const { aborted } = timestamp; const ts = aborted ? dateHelper.apiTimestampToUiDateTime(aborted) : now; return `Aborted at ${ts}`; } case UserReports.RequestStatus.FINISHED: { const { completed } = timestamp; const ts = completed ? dateHelper.apiTimestampToUiDateTime(completed) : now; return `Ready at ${ts}`; } case UserReports.RequestStatus.EXPIRED: { const { expired } = timestamp; const ts = expired ? dateHelper.apiTimestampToUiDateTime(expired) : now; return `Expired at ${ts}`; } case UserReports.RequestStatus.READY: { const { lastViewed, refresh } = timestamp; if (refresh) { const ts = refresh ? dateHelper.apiTimestampToUiDateTime(refresh) : now; return `Refreshed at ${ts}`; } const ts = lastViewed ? dateHelper.apiTimestampToUiDateTime(lastViewed) : now; return `Last viewed at ${ts}`; } case UserReports.RequestStatus.SUBMITTED: case UserReports.RequestStatus.STARTED: case UserReports.RequestStatus.PICKED: { const { requested } = timestamp; const ts = requested ? dateHelper.apiTimestampToUiDateTime(requested) : now; return `Requested at ${ts}`; } default: { const { lastViewed } = timestamp; const ts = lastViewed ? dateHelper.apiTimestampToUiDateTime(lastViewed) : now; return `Last viewed at ${ts}`; } } }; /** * Builds the filters cell data * * @param {StoredReportData} data * @return {*} {DprMyReportFilters} */ const buildFiltersCell = (data) => { const prerequest = data.query?.summary || []; const interactive = data.interactiveQuery?.summary || []; return { ...(prerequest && { prerequest }), ...(interactive && { interactive }), }; }; /** * Builds the meta data needed by the polling class * * @param {StoredReportData} data * @param {Response} res * @return {*} */ const buildMeta = (data, res, listType) => { const { userReportsList } = localsHelper.getRouteLocals(res); return { id: data.id, reportId: data.reportId, tableId: data.tableId, executionId: data.executionId, path: userReportsList, listType, }; }; exports.buildMyReportListRow = buildMyReportListRow; //# sourceMappingURL=utils.js.map