chore(refactor): commit current refactor branch updates and slice1 xml/form derivation extraction

This commit is contained in:
2026-04-10 09:39:28 +01:00
parent bd3d311cfb
commit e9d4b65a3d
28 changed files with 1340 additions and 439 deletions
+32 -36
View File
@@ -2,20 +2,28 @@ import { JSONPath as jsonpath } from "jsonpath-plus";
import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router";
import { connect } from "react-redux";
import xpath from "xpath";
import {
getPickListLabel,
getRadioLabel,
bytesToSize,
getDocumentTypeFromFilename,
getThumbnailIconByExtension,
getThumbnailIconByExtension
} from "../../components/utils";
import fieldLookup from "../../data/crmfieldlookuptranslations.json";
import {
setCurrentSection,
setFormComplete,
setFormComplete
} from "../../store/appealType/action";
import {
parseRowOuterHTML,
parseXml,
selectCurrentSectionRows,
selectRowDataFieldName,
selectRowDocumentTypeCode,
selectRowFieldType,
selectRowLabelDescriptions
} from "../../lib/newappeal/formDerivation";
let BuildCheckRow = (props) => {
let { t } = useTranslation();
@@ -30,18 +38,12 @@ let BuildCheckRow = (props) => {
onSubmit,
updateCurrentSection,
setCurrentSection,
mandatoryFieldsData,
mandatoryFieldsData
} = props;
const parser = new DOMParser();
var doc = parser.parseFromString(props.formXML, "text/xml");
var doc = parseXml(props.formXML);
var rowXML = xpath.select(
"/form/tabs/tab[" +
whichSection +
"]/columns//sections/section/rows/row",
doc
);
var rowXML = selectCurrentSectionRows(doc, whichSection);
function formatDate(dateObj) {
var m = new Date(dateObj);
@@ -66,7 +68,7 @@ let BuildCheckRow = (props) => {
let formObj = jsonpath({
path: "$['" + appealtypes + "']",
json: fieldLookup,
eval: true,
eval: true
});
let labelTrans =
@@ -74,7 +76,7 @@ let BuildCheckRow = (props) => {
? jsonpath({
path: '$..[?(@ && @.value=="' + label + '")].value_cy',
json: formObj,
eval: true,
eval: true
})
: label;
return labelTrans;
@@ -91,29 +93,23 @@ let BuildCheckRow = (props) => {
return (
<>
{Object.keys(rowXML).map((key, index) => {
var doc = parser.parseFromString(
rowXML[key].outerHTML,
"text/xml"
);
var doc = parseRowOuterHTML(rowXML[key].outerHTML);
if (_.isEmpty(rowXML[key].innerHTML)) {
("");
} else {
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
var rows = selectRowLabelDescriptions(doc);
var fieldtype = selectRowFieldType(doc);
var datafieldname = selectRowDataFieldName(doc);
const isRequiredField = jsonpath({
path:
"$..value[?(@ && @.LogicalName=='" +
datafieldname[0].value +
"')]",
json: mandatoryFieldsData,
eval: true,
eval: true
});
var documentTypeCode = xpath.select(
"//@ishareDocumentCode",
doc
);
var documentTypeCode = selectRowDocumentTypeCode(doc);
// if (datafieldname[0].value.indexOf("fileUpload") > 0) {
// isRequiredField.push({
@@ -155,7 +151,7 @@ let BuildCheckRow = (props) => {
dangerouslySetInnerHTML={{
__html: props.props.form[
"appealForm"
].values[datafieldname[0].value],
].values[datafieldname[0].value]
}}
/>
) : fieldtype[0].value ==
@@ -212,14 +208,14 @@ let BuildCheckRow = (props) => {
style={{
display: "flex",
alignItems:
"flex-start",
"flex-start"
}}
className="govuk-!-margin-bottom-2"
>
<img
style={{
minWidth: "50",
width: "50",
width: "50"
}}
src={getThumbnailIconByExtension(
blob.name
@@ -229,7 +225,7 @@ let BuildCheckRow = (props) => {
/>
<span
style={{
maxWidth: "85%",
maxWidth: "85%"
}}
className="govuk-body govuk-!-font-size-14 govuk-!-margin-left-2"
>
@@ -266,7 +262,7 @@ let BuildCheckRow = (props) => {
display:
"flex",
alignItems:
"flex-start",
"flex-start"
}}
className="govuk-!-margin-bottom-2"
>
@@ -274,7 +270,7 @@ let BuildCheckRow = (props) => {
style={{
minWidth:
"50",
width: "50",
width: "50"
}}
src={getThumbnailIconByExtension(
blob.name
@@ -287,7 +283,7 @@ let BuildCheckRow = (props) => {
<span
style={{
maxWidth:
"85%",
"85%"
}}
className="govuk-body govuk-!-font-size-14 govuk-!-margin-left-2"
>
@@ -326,7 +322,7 @@ let BuildCheckRow = (props) => {
<div
key={index}
style={{
display: "flex",
display: "flex"
}}
>
<div className="govuk-!-width-one-half">
@@ -397,12 +393,12 @@ const mapDispatchToProps = (dispatch) => {
updateCurrentSection: (whichSection) => {
dispatch(setCurrentSection(whichSection));
dispatch(setFormComplete("true"));
},
}
};
};
const mapStateToProps = (state) => ({
count: state.count,
count: state.count
});
export default connect(mapStateToProps, mapDispatchToProps)(BuildCheckRow);
+38 -38
View File
@@ -1,8 +1,25 @@
import _ from "lodash";
import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router";
import xpath from "xpath";
import BuildField from "./buildfield";
import {
parseRowOuterHTML,
selectRowDataFieldContent,
selectRowDataFieldName,
selectRowDateEnd,
selectRowDateStart,
selectRowDocumentTypeCode,
selectRowFieldType,
selectRowHint,
selectRowLabelDescriptions,
selectRowMaxFieldLength,
selectRowMaxSubField,
selectRowParentField,
selectRowParentFieldShowOnValue,
selectRowRequiredDocumentLabel,
selectRowRequiredDocumentValue,
selectRowValidation
} from "../../lib/newappeal/formDerivation";
export default function BuildRow(props) {
let { t } = useTranslation();
@@ -20,56 +37,39 @@ export default function BuildRow(props) {
uploadCount,
setFileCount,
completedUploadFilesCount,
setCompletedUploadFilesCount,
setCompletedUploadFilesCount
} = props;
const parser = new DOMParser();
return (
<div className="govuk-grid-column-full">
{Object.keys(rowXML).map((key, index) => {
var doc = parser.parseFromString(
rowXML[key].outerHTML,
"text/xml"
);
var doc = parseRowOuterHTML(rowXML[key].outerHTML);
if (_.isEmpty(rowXML[key].innerHTML)) {
("");
} else {
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var validation = xpath.select("//@validation", doc);
var maxFieldLength = xpath.select("//@maxFieldLength", doc);
var maxSubField = xpath.select("//@maxsubfield", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
var datafieldcontent = xpath.select(
"//@datafieldcontent",
doc
);
var parentField = xpath.select("//@parentField", doc);
var rows = selectRowLabelDescriptions(doc);
var fieldtype = selectRowFieldType(doc);
var validation = selectRowValidation(doc);
var maxFieldLength = selectRowMaxFieldLength(doc);
var maxSubField = selectRowMaxSubField(doc);
var datafieldname = selectRowDataFieldName(doc);
var datafieldcontent = selectRowDataFieldContent(doc);
var parentField = selectRowParentField(doc);
var parentFieldShowOnValue = xpath.select(
"//@parentFieldShowOnValue",
doc
);
var parentFieldShowOnValue =
selectRowParentFieldShowOnValue(doc);
var requiredDocumentValue = xpath.select(
"//@requiredDocumentValue",
doc
);
var requiredDocumentValue =
selectRowRequiredDocumentValue(doc);
var requiredDocumentLabel = xpath.select(
"//@requiredDocumentLabel",
doc
);
var requiredDocumentLabel =
selectRowRequiredDocumentLabel(doc);
var documentTypeCode = xpath.select(
"//@ishareDocumentCode",
doc
);
var documentTypeCode = selectRowDocumentTypeCode(doc);
var hint = xpath.select("//label/@hint", doc);
var dateStart = xpath.select("//@dateStart", doc);
var dateEnd = xpath.select("//@dateEnd", doc);
var hint = selectRowHint(doc);
var dateStart = selectRowDateStart(doc);
var dateEnd = selectRowDateEnd(doc);
hint = !_.isEmpty(hint) && hint[0].value;
+17 -23
View File
@@ -4,7 +4,6 @@ import { useRouter } from "next/router";
import { useState } from "react";
import { connect } from "react-redux";
import { formValueSelector, reduxForm } from "redux-form";
import xpath from "xpath";
import { uploadFiles } from "../../actions/services/documentService";
import { sendEmail } from "../../actions/services/notifyService";
import {
@@ -16,6 +15,14 @@ import {
} from "../../store/appealType/action";
import { getFormCollectionByID, getProgressObj, updateLinks } from "../utils";
import BuildRow from "./buildrow";
import {
parseXml,
selectAllTabTitleDescriptions,
selectCurrentSectionRows,
selectCurrentSectionTitleDescriptions,
selectErrorFieldLabelDescription,
selectFormTabs
} from "../../lib/newappeal/formDerivation";
import { FieldsTranslations } from "../elements";
import BuildProgress from "./buildprogress";
@@ -55,26 +62,13 @@ let BuildSection = (props) => {
const documentListObj = props.appealType.documentList;
const currentSection = props.appealType.currentSection;
const parser = new DOMParser();
var doc = parser.parseFromString(props.formXML, "text/xml");
var titles = xpath.select(
"//form/tabs/tab[" + currentSection + " ]/labels/label/@description",
doc
);
var rowXML = xpath.select(
"/form/tabs/tab[" +
currentSection +
"]/columns//sections/section/rows/row",
//"/form/tabs/tab/columns//sections/section/rows/row",
doc
);
var doc = parseXml(props.formXML);
var titles = selectCurrentSectionTitleDescriptions(doc, currentSection);
var rowXML = selectCurrentSectionRows(doc, currentSection);
var formObjXML = xpath.select("/form/tabs", doc);
var formObjXML = selectFormTabs(doc);
var titleList = xpath.select(
"//form/tabs/tab[*]/labels/label/@description",
doc
);
var titleList = selectAllTabTitleDescriptions(doc);
const progObj = getProgressObj(
formXML,
@@ -370,10 +364,10 @@ let BuildSection = (props) => {
errorsobj = _.keys(errorsobj);
const getErrorLabel = (whichField) => {
var doc = parser.parseFromString(props.formXML, "text/xml");
var errorFieldLabel = xpath.select(
"//*[control/@id='" + whichField + "']//@description",
doc
var doc = parseXml(props.formXML);
var errorFieldLabel = selectErrorFieldLabelDescription(
doc,
whichField
);
return errorFieldLabel[0].value;