@gov-cy/govcy-express-services 1.3.0-alpha.3 → 1.3.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gov-cy/govcy-express-services",
3
- "version": "1.3.0-alpha.3",
3
+ "version": "1.3.0-alpha.4",
4
4
  "description": "An Express-based system that dynamically renders services using @gov-cy/govcy-frontend-renderer and posts data to a submission API.",
5
5
  "author": "DMRID - DSF Team",
6
6
  "license": "MIT",
@@ -23,11 +23,19 @@ export function govcyReviewPostHandler() {
23
23
  // ✅ Load service and check if it exists
24
24
  const service = req.serviceData;
25
25
  let validationErrors = {};
26
-
26
+ // to be used for sending email
27
+ let updateMyDetailsData = null;
28
+
27
29
  // Loop through all pages in the service
28
30
  for (const page of service.pages) {
29
31
  //get page url
30
32
  const pageUrl = page.pageData.url;
33
+
34
+ // to be used for sending email
35
+ // get updateMyDetails data if not found before
36
+ if (!updateMyDetailsData) {
37
+ updateMyDetailsData = dataLayer.getPageUpdateMyDetails(req.session, siteId, pageUrl);
38
+ }
31
39
 
32
40
  // ----- Conditional logic comes here
33
41
  // ✅ Skip validation if page is conditionally excluded
@@ -165,9 +173,22 @@ export function govcyReviewPostHandler() {
165
173
  // Generate the email body
166
174
  let emailBody = generateSubmitEmail(service, submissionData.printFriendlyData, referenceNo, req);
167
175
  logger.debug("Email generated:", emailBody);
176
+
177
+ let emailAddress = "";
178
+ // if Update my details not provided the use user email
179
+ if (!updateMyDetailsData || !updateMyDetailsData.email) {
180
+ emailAddress = dataLayer.getUser(req.session).email;
181
+ } else {
182
+ emailAddress = updateMyDetailsData.email;
183
+ }
184
+
168
185
  // Send the email
169
- sendEmail(service.site.title[service.site.lang], emailBody, [dataLayer.getUser(req.session).email], "eMail").catch(err => {
170
- logger.error("Email sending failed (async):", err);
186
+ sendEmail(
187
+ service.site.title[service.site.lang],
188
+ emailBody,
189
+ [emailAddress],
190
+ "eMail").catch(err => {
191
+ logger.error("Email sending failed (async):", err);
171
192
  });
172
193
  // --- End of email sending
173
194
 
@@ -442,12 +442,14 @@ export function govcyUpdateMyDetailsPostHandler() {
442
442
  // --------------- Page variant 1:Manual form for non-eligible users
443
443
  //⤴️ Store validated form data in session
444
444
  dataLayer.storePageData(req.session, siteId, pageUrl, formData);
445
+ dataLayer.storePageUpdateMyDetails(req.session, siteId, pageUrl, formData);
445
446
  } else if (pageVariant === 2) {
446
447
  // --------------- Page variant 2: Confirmation radio for eligible users with data
447
448
  const userChoice = req.body?.useTheseDetails?.trim().toLowerCase();
448
449
  if (userChoice === "yes") {
449
450
  //⤴️ Store validated form data in session
450
451
  dataLayer.storePageData(req.session, siteId, pageUrl, userDetails);
452
+ dataLayer.storePageUpdateMyDetails(req.session, siteId, pageUrl, userDetails);
451
453
  } else if (userChoice === "no") {
452
454
  // construct the return url to go to `:siteId/:pageUrl` + `?route=` + `review`
453
455
  const returnUrl = `${req.protocol}://${req.get("host")}${govcyResources.constructPageUrl(siteId, page.pageData.url, (req.query.route === "review" ? "review" : ""))}`;
@@ -248,6 +248,34 @@ export function getSiteEligibilityResult(store, siteId, endpointKey, maxAgeMs =
248
248
  return entry.result;
249
249
  }
250
250
 
251
+ /**
252
+ * Stores the update my details data for contact purposes, outside the scope of formData
253
+ *
254
+ * For example `store.siteData[siteId].inputData[pageUrl]["updateMyDetails"] = value`
255
+ *
256
+ * @param {object} store The session store
257
+ * @param {string} siteId The site id
258
+ * @param {string} pageUrl The page url
259
+ * @param {object} userData The user's update my details data
260
+ */
261
+ export function storePageUpdateMyDetails(store, siteId, pageUrl, userData) {
262
+ // Ensure session structure is initialized
263
+ initializeSiteData(store, siteId, pageUrl);
264
+
265
+ store.siteData[siteId].inputData[pageUrl]["updateMyDetails"] = userData;
266
+ }
267
+
268
+ /**
269
+ * Get the update my details data for contact purposes, outside the scope of formData
270
+ * @param {object} store The session store
271
+ * @param {string} siteId The site id
272
+ * @param {string} pageUrl The page url
273
+ * @returns The user's update my details data
274
+ */
275
+ export function getPageUpdateMyDetails(store, siteId, pageUrl) {
276
+ return store?.siteData?.[siteId]?.inputData?.[pageUrl]?.["updateMyDetails"] || null;
277
+ }
278
+
251
279
  /**
252
280
  * Get the page validation errors from the store and clear them
253
281
  *