diff --git a/components/case/representation/index.js b/components/case/representation/index.js
index 0a8f8245..bd8b4a37 100644
--- a/components/case/representation/index.js
+++ b/components/case/representation/index.js
@@ -9,7 +9,7 @@ import { formValueSelector, reduxForm } from "redux-form";
import { signIn, useSession } from "next-auth/react";
import { generateRepPDF, sendEmail, uploadRepFiles } from "../../../actions";
-import { formatDates } from "../../../components/utils";
+import { formatDates, updateLinks } from "../../../components/utils";
import {
setRepresentationCapacity,
setRepresentationMessageSent,
@@ -1100,6 +1100,8 @@ let MakeRepresentation = (props) => {
? cleanFilesList(values)
: values;
+ values = updateLinks(values);
+
// get filelists from values object
let fileListObj = _.filter(values, function (v, key) {
return _.includes(key, "representationDocuments");
diff --git a/components/case/representation/representationElements.js b/components/case/representation/representationElements.js
index 0ada8933..fd97ae60 100644
--- a/components/case/representation/representationElements.js
+++ b/components/case/representation/representationElements.js
@@ -16,7 +16,16 @@ import {
getFilesFromBlobproxy,
} from "../../../actions";
-const ReactQuill = dynamic(() => import("react-quill-new"), { ssr: false });
+const LoadingMessage = () =>
Loading the editor...
;
+
+// Dynamically import ReactQuill with a proper loading state
+const ReactQuill = dynamic(
+ () => import("react-quill-new").then((mod) => mod.default),
+ {
+ ssr: false,
+ loading: () => , // This is valid as long as it's a valid React component
+ }
+);
import { useDispatch } from "react-redux"; // Import the useDispatch hook
import {
diff --git a/components/case/summary.js b/components/case/summary.js
index 4c838f75..44f0201e 100644
--- a/components/case/summary.js
+++ b/components/case/summary.js
@@ -258,9 +258,13 @@ const CaseSummary = (props) => {
: t("case:summary-applicant-label")}
- {detailsObj[
- "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue"
- ] || "not entered"}
+ {casesObj.pinswg_appellantagent == 846040001
+ ? casesObj.pinswg_appellantfirstname +
+ " " +
+ casesObj.pinswg_appellantlastname
+ : detailsObj[
+ "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue"
+ ] || "not entered"}
{detailsObj.pinswg_agentcontactname != null &&
diff --git a/components/newappeal/buildsection.js b/components/newappeal/buildsection.js
index 98c000c2..91498eb0 100644
--- a/components/newappeal/buildsection.js
+++ b/components/newappeal/buildsection.js
@@ -13,7 +13,7 @@ import {
setNewAppealProgress,
setFileCount,
} from "../../store/appealType/action";
-import { getFormCollectionByID, getProgressObj } from "../utils";
+import { getFormCollectionByID, getProgressObj, updateLinks } from "../utils";
import BuildRow from "./buildrow";
import { FieldsTranslations } from "../elements";
@@ -141,6 +141,8 @@ let BuildSection = (props) => {
let buildAppealFilesArray = [];
//console.log("attached docs: - ", buildAppealFilesArray);
+ values = updateLinks(values);
+
let filesUploadObj = Object.keys(values)
.filter(function (k) {
return k.indexOf("pinswg_fileUpload") == 0;
diff --git a/components/utils/index.js b/components/utils/index.js
index a684a3a7..51280560 100644
--- a/components/utils/index.js
+++ b/components/utils/index.js
@@ -550,3 +550,67 @@ export const getDocumentTypeFromFilename = (filename) => {
return doctypeCode;
};
+
+export const updateLinks = (jsonObject) => {
+ const wrapPlainUrlsInAnchorTags = (htmlString) => {
+ return htmlString
+ .replace(
+ /(?<=^|>|\s)(?=\S)(?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?:\/[^\s]*)?(?=\s|<|$)/g,
+ (match) => {
+ // If the match is already wrapped in tag, return it as is
+ if (match.includes(' tag
+ return `${match}`;
+ }
+ )
+ .replace(
+ /]*>]*>(.*?)<\/a><\/a>/g,
+ (match, innerContent) => {
+ return `${innerContent}`;
+ }
+ );
+ };
+ // Helper function to ensure that any href attributes in tags have https/http
+ const ensureHttpsInLinks = (inputString) => {
+ // Match tags with href attributes and check if they lack a scheme (http:// or https://)
+ return inputString.replace(
+ /]*href=["']([^"']*)["'][^>]*>/g,
+ (match, url) => {
+ // If the URL doesn't already have a scheme (http:// or https://), add https://
+ if (!/^https?:\/\//.test(url)) {
+ const newUrl = `https://${url}`;
+ return match.replace(url, newUrl);
+ }
+ return match; // Return the unchanged anchor tag if it already has a scheme
+ }
+ );
+ };
+
+ // Iterate through all properties of the JSON object
+ Object.keys(jsonObject).forEach((key) => {
+ const value = jsonObject[key];
+
+ // If the value is a string and contains plain URLs that are not wrapped
+ if (typeof value === "string") {
+ // Step 1: Wrap plain URLs in anchor tags if not already wrapped
+ let updatedValue = wrapPlainUrlsInAnchorTags(value);
+
+ // Step 2: Ensure that hrefs in anchor tags have https:// or http://
+ updatedValue = ensureHttpsInLinks(updatedValue);
+
+ // Assign the updated value back to the key
+ jsonObject[key] = updatedValue;
+ }
+ });
+
+ return jsonObject;
+};