@gov-cy/govcy-express-services
Version:
An Express-based system that dynamically renders services using @gov-cy/govcy-frontend-renderer and posts data to a submission API.
117 lines (103 loc) • 4.83 kB
JavaScript
import * as govcyResources from "../resources/govcyResources.mjs";
import * as dataLayer from "../utils/govcyDataLayer.mjs";
import { logger } from "../utils/govcyLogger.mjs";
import { handleMiddlewareError } from "../utils/govcyUtils.mjs";
import { generateReviewSummary } from "../utils/govcySubmitData.mjs";
import { whatsIsMyEnvironment } from '../utils/govcyEnvVariables.mjs';
/**
* Middleware to handle the success page for the service.
* This middleware shows the success page.
* @param {boolean} isPDF - True if the success page is for a PDF, false otherwise
*
*/
export function govcySuccessPageHandler(isPDF = false) {
return (req, res, next) => {
try {
const { siteId } = req.params;
// Create a deep copy of the service to avoid modifying the original
let serviceCopy = req.serviceData;
// Get the submission data
let submissionData = dataLayer.getSiteSubmissionData(req.session, siteId);
// ❌ Check if submission data is empty
if (!submissionData || Object.keys(submissionData).length === 0) {
return handleMiddlewareError("🚨 Submission data not found.", 404, next);
}
// Deep copy renderer pageData from
let pageData = JSON.parse(JSON.stringify(govcyResources.staticResources.rendererPageData));
// Handle isTesting
pageData.site.isTesting = (whatsIsMyEnvironment() === "staging");
if (isPDF) {
pageData.pageData.mainLayout = "max-width";
}
// Base page template structure
let pageTemplate = {
sections: [
// {
// name: "beforeMain",
// elements: [govcyResources.staticResources.elements.backLink]
// }
]
};
// Construct page title
const weHaveSendYouAnEmail = {
element: "textElement",
params: {
type: "p",
text: govcyResources.staticResources.text.weHaveSendYouAnEmail
}
};
// Construct page title
const theDataFromYourRequest = {
element: "textElement",
params: {
type: "p",
text: govcyResources.staticResources.text.theDataFromYourRequest
}
};
// Construct page title
const successPanel = {
element: "panel",
params: {
header: govcyResources.staticResources.text.submissionSuccessTitle,
body: govcyResources.staticResources.text.yourSubmissionId,
referenceNumber: govcyResources.getSameMultilingualObject(serviceCopy.site.languages,submissionData.referenceNumber)
}
};
const pdfLink = {
element: "htmlElement",
params: {
text: govcyResources.getSubmissionPDFLinkHtml(siteId)
}
}
let summaryList = submissionData.renderer_data;
let mainElements = [];
// Add elements to the main section
mainElements.push(
successPanel,
weHaveSendYouAnEmail,
pdfLink,
theDataFromYourRequest,
summaryList,
govcyResources.staticResources.elements["govcyFormsJs"]
);
// Append generated summary list to the page template
pageTemplate.sections.push({ name: "main", elements: mainElements });
//if user is logged in add he user bane section in the page template
if (dataLayer.getUser(req.session)) {
pageTemplate.sections.push(govcyResources.userNameSection(dataLayer.getUser(req.session).name)); // Add user name section
}
//prepare pageData
pageData.site = serviceCopy.site;
pageData.pageData.title = govcyResources.staticResources.text.submissionSuccessTitle;
// Attach processed page data to the request
req.processedPage = {
pageData: pageData,
pageTemplate: pageTemplate
};
logger.debug("Processed success page data:", req.processedPage, req);
next();
} catch (error) {
return next(error); // Pass error to govcyHttpErrorHandler
}
};
}