Merged PR 2252: refactor(representations): extract journey step-resolution helpers (Slice R3,...
refactor(representations): extract journey step-resolution helpers (Slice R3, behaviour-preserving) Related work items: #22441
This commit is contained in:
@@ -33,6 +33,12 @@ import RepLPACapacitySelection from "./representationLPACapacitySelection";
|
||||
import RepLandOwner from "./representationLandowner";
|
||||
import RepresentationProgress_enforcement from "./representationProgress/representationProgress_enforcement";
|
||||
import RepresentationProgress_s78 from "./representationProgress/representationProgress_s78";
|
||||
import {
|
||||
getQuestionnaireNextSection,
|
||||
resolveJourneyStageFlags,
|
||||
resolveRepresentationControlKey,
|
||||
resolveSubmitTransition
|
||||
} from "./utils/stepResolution";
|
||||
|
||||
let MakeRepresentation = (props) => {
|
||||
let { t } = useTranslation();
|
||||
@@ -105,6 +111,11 @@ let MakeRepresentation = (props) => {
|
||||
: false;
|
||||
|
||||
const isNRW = currentView.caseReference?.isNRW;
|
||||
const { showCheckStage } = resolveJourneyStageFlags({
|
||||
"representationSubmit": currentView.representationSubmit,
|
||||
"representationSubmitConfirmation":
|
||||
currentView.representationSubmitConfirmation
|
||||
});
|
||||
|
||||
const setRepFileName = (values) => {
|
||||
if (
|
||||
@@ -586,19 +597,16 @@ let MakeRepresentation = (props) => {
|
||||
setCurrentReference
|
||||
};
|
||||
|
||||
const getNormalizedCapacity = () => {
|
||||
const rawCapacity =
|
||||
currentView.representationCapacity ||
|
||||
currentView.caseReference?.repDetails?.representationCapacity ||
|
||||
"false";
|
||||
return rawCapacity.toLowerCase();
|
||||
};
|
||||
const { controlKey } = resolveRepresentationControlKey({
|
||||
"isLPA": isLPA,
|
||||
"representationCapacity": currentView.representationCapacity,
|
||||
"repDetailsCapacity":
|
||||
currentView.caseReference?.repDetails?.representationCapacity,
|
||||
"appealType": appealType,
|
||||
"normalizeCapacity": normalizeCapacity
|
||||
});
|
||||
|
||||
if (
|
||||
isLPA &&
|
||||
(!currentView.representationCapacity ||
|
||||
currentView.representationCapacity === "")
|
||||
) {
|
||||
if (controlKey === "lpa-capacity-selection") {
|
||||
return (
|
||||
<RepLPACapacitySelection
|
||||
{...commonProps}
|
||||
@@ -616,10 +624,8 @@ let MakeRepresentation = (props) => {
|
||||
);
|
||||
}
|
||||
|
||||
const capacity = normalizeCapacity(getNormalizedCapacity());
|
||||
|
||||
switch (capacity) {
|
||||
case "appellant": {
|
||||
switch (controlKey) {
|
||||
case "capacity-appellant": {
|
||||
const Component =
|
||||
appealType === 846040002
|
||||
? ConsultationAppellant
|
||||
@@ -634,7 +640,7 @@ let MakeRepresentation = (props) => {
|
||||
);
|
||||
}
|
||||
|
||||
case "lpa": {
|
||||
case "capacity-lpa": {
|
||||
return (
|
||||
<RepLPA
|
||||
{...commonProps}
|
||||
@@ -650,7 +656,7 @@ let MakeRepresentation = (props) => {
|
||||
);
|
||||
}
|
||||
|
||||
case "agent": {
|
||||
case "capacity-agent": {
|
||||
const Component =
|
||||
appealType === 846040002 ? ConsultationAgent : RepAgent;
|
||||
return (
|
||||
@@ -663,7 +669,7 @@ let MakeRepresentation = (props) => {
|
||||
);
|
||||
}
|
||||
|
||||
case "interestedparty": {
|
||||
case "capacity-interestedparty": {
|
||||
const Component =
|
||||
appealType === 846040002
|
||||
? ConsultationInterestedPartyPerson
|
||||
@@ -678,7 +684,7 @@ let MakeRepresentation = (props) => {
|
||||
);
|
||||
}
|
||||
|
||||
case "landowner": {
|
||||
case "capacity-landowner": {
|
||||
return (
|
||||
<RepLandOwner
|
||||
{...commonProps}
|
||||
@@ -1078,19 +1084,20 @@ let MakeRepresentation = (props) => {
|
||||
: normalizeCapacity(values.representationCapacity);
|
||||
setRepresentationCapacity(capacity);
|
||||
} else {
|
||||
if (repType === "Questionnaire") {
|
||||
if (
|
||||
questionnaireCount !== 0 &&
|
||||
showQuestionnaireSection < questionnaireCount
|
||||
) {
|
||||
setShowQuestionnaireSection(
|
||||
showQuestionnaireSection + 1
|
||||
);
|
||||
updateRepresentation(values, false, false);
|
||||
} else {
|
||||
updateRepresentation(values, false, false);
|
||||
setRepresentationSubmit(true);
|
||||
}
|
||||
const submitTransition = resolveSubmitTransition({
|
||||
"representationType": repType,
|
||||
"showQuestionnaireSection": showQuestionnaireSection,
|
||||
"questionnaireCount": questionnaireCount
|
||||
});
|
||||
|
||||
if (submitTransition === "advanceQuestionnaire") {
|
||||
setShowQuestionnaireSection(
|
||||
getQuestionnaireNextSection(
|
||||
showQuestionnaireSection,
|
||||
questionnaireCount
|
||||
)
|
||||
);
|
||||
updateRepresentation(values, false, false);
|
||||
} else {
|
||||
updateRepresentation(values, false, false);
|
||||
setRepresentationSubmit(true);
|
||||
@@ -1252,7 +1259,7 @@ let MakeRepresentation = (props) => {
|
||||
return (
|
||||
<div>
|
||||
<form onSubmit={handleSubmit(onHandleSubmit)}>
|
||||
{currentView.representationSubmit ? (
|
||||
{showCheckStage ? (
|
||||
<RepCompleteSubmit
|
||||
formObj={formObj}
|
||||
capacityOptionsArr={capacityOptionsArr}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
export const resolveJourneyStageFlags = ({
|
||||
representationSubmit,
|
||||
representationSubmitConfirmation
|
||||
}) => {
|
||||
const showCheckStage =
|
||||
representationSubmit === true || representationSubmit === "true";
|
||||
const showCompletionStage =
|
||||
representationSubmitConfirmation === true ||
|
||||
representationSubmitConfirmation === "true";
|
||||
|
||||
return {
|
||||
showFormStage: !showCheckStage,
|
||||
showCheckStage,
|
||||
showCompletionStage
|
||||
};
|
||||
};
|
||||
|
||||
export const resolveRepresentationControlKey = ({
|
||||
isLPA,
|
||||
representationCapacity,
|
||||
repDetailsCapacity,
|
||||
appealType,
|
||||
normalizeCapacity
|
||||
}) => {
|
||||
if (isLPA && (!representationCapacity || representationCapacity === "")) {
|
||||
return {
|
||||
controlKey: "lpa-capacity-selection",
|
||||
normalizedCapacity: ""
|
||||
};
|
||||
}
|
||||
|
||||
const rawCapacity = representationCapacity || repDetailsCapacity || "false";
|
||||
const normalizedCapacity = normalizeCapacity(rawCapacity.toLowerCase());
|
||||
|
||||
return {
|
||||
controlKey: `capacity-${normalizedCapacity}`,
|
||||
normalizedCapacity
|
||||
};
|
||||
};
|
||||
|
||||
export const resolveSubmitTransition = ({
|
||||
representationType,
|
||||
showQuestionnaireSection,
|
||||
questionnaireCount
|
||||
}) => {
|
||||
if (representationType !== "Questionnaire") {
|
||||
return "goToCheck";
|
||||
}
|
||||
|
||||
if (
|
||||
questionnaireCount !== 0 &&
|
||||
showQuestionnaireSection < questionnaireCount
|
||||
) {
|
||||
return "advanceQuestionnaire";
|
||||
}
|
||||
|
||||
return "goToCheck";
|
||||
};
|
||||
|
||||
export const getQuestionnaireNextSection = (
|
||||
currentSection,
|
||||
questionnaireCount
|
||||
) => {
|
||||
if (questionnaireCount !== 0 && currentSection < questionnaireCount) {
|
||||
return currentSection + 1;
|
||||
}
|
||||
|
||||
return currentSection;
|
||||
};
|
||||
|
||||
export const getQuestionnairePreviousSection = (currentSection) => {
|
||||
return currentSection > 1 ? currentSection - 1 : currentSection;
|
||||
};
|
||||
@@ -6,8 +6,8 @@ Base branch: `refactor`
|
||||
|
||||
## Status
|
||||
|
||||
Current slice: Slice R2 — Representation Page Loader Separation
|
||||
Status: COMPLETE
|
||||
Current slice: Slice R3 — Journey Step Resolution Extraction
|
||||
Status: IMPLEMENTED (manual validation pending)
|
||||
|
||||
---
|
||||
|
||||
@@ -94,6 +94,30 @@ Isolate step navigation logic.
|
||||
- next/previous step logic
|
||||
- validation gating between steps
|
||||
|
||||
**Completion notes (this slice):**
|
||||
|
||||
- Added pure step-resolution helpers in `components/case/representation/utils/stepResolution.js`:
|
||||
- `resolveJourneyStageFlags({ representationSubmit, representationSubmitConfirmation })`
|
||||
- `resolveRepresentationControlKey({ isLPA, representationCapacity, repDetailsCapacity, appealType, normalizeCapacity })`
|
||||
- `resolveSubmitTransition({ representationType, showQuestionnaireSection, questionnaireCount })`
|
||||
- `getQuestionnaireNextSection(currentSection, questionnaireCount)`
|
||||
- `getQuestionnairePreviousSection(currentSection)`
|
||||
- Updated `components/case/representation/index.js` to call helpers for:
|
||||
- check-stage flag resolution (`showCheckStage`)
|
||||
- control key resolution in `whichControl()`
|
||||
- questionnaire/non-questionnaire submit transition decision
|
||||
- questionnaire next-section increment calculation
|
||||
- Preserved behaviour-critical constraints:
|
||||
- no JSX structure redesign
|
||||
- no route/query changes
|
||||
- no payload/Redux shape changes
|
||||
- no dispatch/API side-effect sequencing changes
|
||||
- no representation-type availability logic changes (`buildRepsArr` unchanged)
|
||||
- Validation evidence:
|
||||
- `npm run lint` completed (warnings only, no new errors).
|
||||
- `npm run test:reps` re-run completed: **6 passed**.
|
||||
- Manual APP/IP/Agent/LPA and EN/CY checks: **pending for this slice**.
|
||||
|
||||
---
|
||||
|
||||
### Slice R4 — Flow Shell Decomposition
|
||||
|
||||
Reference in New Issue
Block a user