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