## Summary This PR merges the completed new-appeal refactor stream (Slices 1–8) into SIPS-Development. This refactor was executed in controlled slices with regression validation at each step. ## Scope Structural and readability improvements only: - XML/form derivation extraction - payload and file helper extraction - side-effect facade introduction - BuildSection and BuildCheckSection decomposition - BuildCheckRow formatter map refactor - nested prop boundary cleanup - start-flow cleanup (CreateCase / AboutYou) ## Behaviour No intended behavioural changes. The following were explicitly preserved: - S78 journey behaviour - payload shapes and field names/ids - HASCAS mapping logic - appellant/agent branching - validation rules and messages - redirect/query parameters (`lpa`, `apt`, `id`) - navigation and side-effect sequencing - EN/CY output parity ## Validation Full regression has been performed on: - start flow (CreateCase / AboutYou) - save and resume flows - file upload handling - check answers rendering - submit/finalisation sequence - confirmation flow - CRM insertion path - EN/CY parity Additional checks: - docsOffline branch behaviour - completion and partial-save email paths - negative-path validation scenarios - lint (warnings baseline unchanged) ## Risk Low: - changes are structural only - no business logic changes - no contract changes ## Rollback Safe rollback via reverting this merge commit. ## Notes This refactor reduces coupling and prepares the new-appeal flow for future appeal-type expansion. Related work items: #22570, #22576, #22577, #22583, #22586, #22587, #22588, #22590
103 lines
2.6 KiB
JavaScript
103 lines
2.6 KiB
JavaScript
import xpath from "xpath";
|
|
|
|
export const parseXml = (xmlStr) => {
|
|
const parser = new DOMParser();
|
|
return parser.parseFromString(xmlStr, "text/xml");
|
|
};
|
|
|
|
export const selectCurrentSectionTitleDescriptions = (doc, currentSection) => {
|
|
return xpath.select(
|
|
"//form/tabs/tab[" + currentSection + " ]/labels/label/@description",
|
|
doc
|
|
);
|
|
};
|
|
|
|
export const selectCurrentSectionRows = (doc, currentSection) => {
|
|
return xpath.select(
|
|
"/form/tabs/tab[" +
|
|
currentSection +
|
|
"]/columns//sections/section/rows/row",
|
|
doc
|
|
);
|
|
};
|
|
|
|
export const selectFormTabs = (doc) => {
|
|
return xpath.select("/form/tabs", doc);
|
|
};
|
|
|
|
export const selectAllTabTitleDescriptions = (doc) => {
|
|
return xpath.select("//form/tabs/tab[*]/labels/label/@description", doc);
|
|
};
|
|
|
|
export const parseRowOuterHTML = (outerHTML) => {
|
|
const parser = new DOMParser();
|
|
return parser.parseFromString(outerHTML, "text/xml");
|
|
};
|
|
|
|
export const selectRowLabelDescriptions = (doc) => {
|
|
return xpath.select("//label/@description", doc);
|
|
};
|
|
|
|
export const selectRowFieldType = (doc) => {
|
|
return xpath.select("//@classid", doc);
|
|
};
|
|
|
|
export const selectRowValidation = (doc) => {
|
|
return xpath.select("//@validation", doc);
|
|
};
|
|
|
|
export const selectRowMaxFieldLength = (doc) => {
|
|
return xpath.select("//@maxFieldLength", doc);
|
|
};
|
|
|
|
export const selectRowMaxSubField = (doc) => {
|
|
return xpath.select("//@maxsubfield", doc);
|
|
};
|
|
|
|
export const selectRowDataFieldName = (doc) => {
|
|
return xpath.select("//@datafieldname", doc);
|
|
};
|
|
|
|
export const selectRowDataFieldContent = (doc) => {
|
|
return xpath.select("//@datafieldcontent", doc);
|
|
};
|
|
|
|
export const selectRowParentField = (doc) => {
|
|
return xpath.select("//@parentField", doc);
|
|
};
|
|
|
|
export const selectRowParentFieldShowOnValue = (doc) => {
|
|
return xpath.select("//@parentFieldShowOnValue", doc);
|
|
};
|
|
|
|
export const selectRowRequiredDocumentValue = (doc) => {
|
|
return xpath.select("//@requiredDocumentValue", doc);
|
|
};
|
|
|
|
export const selectRowRequiredDocumentLabel = (doc) => {
|
|
return xpath.select("//@requiredDocumentLabel", doc);
|
|
};
|
|
|
|
export const selectRowDocumentTypeCode = (doc) => {
|
|
return xpath.select("//@ishareDocumentCode", doc);
|
|
};
|
|
|
|
export const selectRowHint = (doc) => {
|
|
return xpath.select("//label/@hint", doc);
|
|
};
|
|
|
|
export const selectRowDateStart = (doc) => {
|
|
return xpath.select("//@dateStart", doc);
|
|
};
|
|
|
|
export const selectRowDateEnd = (doc) => {
|
|
return xpath.select("//@dateEnd", doc);
|
|
};
|
|
|
|
export const selectErrorFieldLabelDescription = (doc, whichField) => {
|
|
return xpath.select(
|
|
"//*[control/@id='" + whichField + "']//@description",
|
|
doc
|
|
);
|
|
};
|