Merged PR 2255: refactor(representations): extract deterministic data-resolution helpers for...
refactor(representations): extract deterministic data-resolution helpers for representation flow (Slice R6, behaviour-preserving) Related work items: #22441
This commit is contained in:
@@ -39,6 +39,13 @@ import {
|
|||||||
resolveRepresentationControlKey,
|
resolveRepresentationControlKey,
|
||||||
resolveSubmitTransition
|
resolveSubmitTransition
|
||||||
} from "./utils/stepResolution";
|
} from "./utils/stepResolution";
|
||||||
|
import {
|
||||||
|
findDetailsObjForSubmit,
|
||||||
|
findDetailsObjForView,
|
||||||
|
findResultsObjForCurrentReference,
|
||||||
|
resolveInitialCaseDataSources,
|
||||||
|
resolveSubmitCaseDetailsSource
|
||||||
|
} from "./utils/dataResolution";
|
||||||
|
|
||||||
let MakeRepresentation = (props) => {
|
let MakeRepresentation = (props) => {
|
||||||
let { t } = useTranslation();
|
let { t } = useTranslation();
|
||||||
@@ -261,52 +268,31 @@ let MakeRepresentation = (props) => {
|
|||||||
const isEditState = router.query.state === "edit";
|
const isEditState = router.query.state === "edit";
|
||||||
const hasState = router.query.hasOwnProperty("state");
|
const hasState = router.query.hasOwnProperty("state");
|
||||||
|
|
||||||
const getCaseDetailsObj = () => {
|
const { caseDetailsSource, caseResultsSource } =
|
||||||
if (hasState) {
|
resolveInitialCaseDataSources({
|
||||||
return isEditState
|
hasState,
|
||||||
? props.props.myRepresentations.myRepresentations
|
isEditState,
|
||||||
: props.props.searchResultsObj.searchDetailsObj;
|
currentType: props.currentType,
|
||||||
}
|
myRepresentations: props.props.myRepresentations.myRepresentations,
|
||||||
return props.currentType === "watchedCases"
|
searchDetailsObj: props.props.searchResultsObj.searchDetailsObj,
|
||||||
? props.props.watchedCases.watchedCasesDetails
|
searchResultsObj: props.props.searchResultsObj.searchResultsObj,
|
||||||
: props.props.searchResultsObj.searchDetailsObj;
|
watchedCasesDetails: props.props.watchedCases.watchedCasesDetails
|
||||||
};
|
});
|
||||||
|
|
||||||
const getCaseResultsObj = () => {
|
let resultsObj = findResultsObjForCurrentReference({
|
||||||
if (hasState) {
|
"currentReference": currentView.caseReference.currentReference,
|
||||||
return isEditState
|
"caseResultsSource": caseResultsSource
|
||||||
? props.props.myRepresentations.myRepresentations
|
});
|
||||||
: props.props.searchResultsObj.searchResultsObj;
|
|
||||||
}
|
|
||||||
return props.currentType === "watchedCases"
|
|
||||||
? props.props.watchedCases.watchedCasesDetails
|
|
||||||
: props.props.searchResultsObj.searchResultsObj;
|
|
||||||
};
|
|
||||||
|
|
||||||
const setCaseDetailsObj = getCaseDetailsObj();
|
|
||||||
const setCaseResultsObj = getCaseResultsObj();
|
|
||||||
|
|
||||||
let resultsObj = jsonpath({
|
|
||||||
path: `$..[?(@ && @.ticketnumber=="${currentView.caseReference.currentReference}")]`,
|
|
||||||
json: setCaseResultsObj,
|
|
||||||
eval: true
|
|
||||||
})[0];
|
|
||||||
|
|
||||||
// let detailsObj;
|
// let detailsObj;
|
||||||
|
|
||||||
if (hasState && isEditState) {
|
detailsObj = findDetailsObjForView({
|
||||||
detailsObj = jsonpath({
|
hasState,
|
||||||
path: `$..[?(@ && @.repfile_name=="${router.query.created}")]`,
|
isEditState,
|
||||||
json: setCaseDetailsObj,
|
"queryCreated": router.query.created,
|
||||||
eval: true
|
"ticketnumber": currentView.caseReference.ticketnumber,
|
||||||
})[0];
|
"caseDetailsSource": caseDetailsSource
|
||||||
} else {
|
});
|
||||||
detailsObj = jsonpath({
|
|
||||||
path: `$..[?(@ && @.ticketnumber=="${currentView.caseReference.ticketnumber}")]`,
|
|
||||||
json: setCaseDetailsObj,
|
|
||||||
eval: true
|
|
||||||
})[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
const safeDetailsObj = detailsObj || {};
|
const safeDetailsObj = detailsObj || {};
|
||||||
const safeResultsObj = resultsObj || {};
|
const safeResultsObj = resultsObj || {};
|
||||||
@@ -963,24 +949,20 @@ let MakeRepresentation = (props) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine case data source
|
const caseDetailsSource = resolveSubmitCaseDetailsSource({
|
||||||
const getCaseDetailsSource = () => {
|
"isEditState": router.query?.state === "edit",
|
||||||
if (router.query?.state === "edit") {
|
"currentType": props.currentType,
|
||||||
return props.props.myRepresentations.myRepresentations;
|
"myRepresentations":
|
||||||
}
|
props.props.myRepresentations.myRepresentations,
|
||||||
return props.currentType === "watchedCases"
|
"watchedCasesDetails": props.props.watchedCases.watchedCasesDetails,
|
||||||
? props.props.watchedCases.watchedCasesDetails
|
"searchDetailsObj": props.props.searchResultsObj.searchDetailsObj
|
||||||
: props.props.searchResultsObj.searchDetailsObj;
|
});
|
||||||
};
|
|
||||||
|
|
||||||
const setCaseDetailsObj = getCaseDetailsSource();
|
|
||||||
|
|
||||||
// Find correct case details
|
// Find correct case details
|
||||||
let detailsObj = jsonpath({
|
let detailsObj = findDetailsObjForSubmit({
|
||||||
path: `$..[?(@ && @.ticketnumber=="${ticketnumber}")]`,
|
ticketnumber,
|
||||||
json: setCaseDetailsObj,
|
caseDetailsSource
|
||||||
eval: true
|
});
|
||||||
})[0];
|
|
||||||
|
|
||||||
// Cancel submit status if editing
|
// Cancel submit status if editing
|
||||||
if (router.query?.state === "edit") {
|
if (router.query?.state === "edit") {
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
import { JSONPath as jsonpath } from "jsonpath-plus";
|
||||||
|
|
||||||
|
export const resolveInitialCaseDataSources = ({
|
||||||
|
hasState,
|
||||||
|
isEditState,
|
||||||
|
currentType,
|
||||||
|
myRepresentations,
|
||||||
|
searchDetailsObj,
|
||||||
|
searchResultsObj,
|
||||||
|
watchedCasesDetails
|
||||||
|
}) => {
|
||||||
|
if (hasState) {
|
||||||
|
return {
|
||||||
|
"caseDetailsSource": isEditState
|
||||||
|
? myRepresentations
|
||||||
|
: searchDetailsObj,
|
||||||
|
"caseResultsSource": isEditState
|
||||||
|
? myRepresentations
|
||||||
|
: searchResultsObj
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"caseDetailsSource":
|
||||||
|
currentType === "watchedCases"
|
||||||
|
? watchedCasesDetails
|
||||||
|
: searchDetailsObj,
|
||||||
|
"caseResultsSource":
|
||||||
|
currentType === "watchedCases"
|
||||||
|
? watchedCasesDetails
|
||||||
|
: searchResultsObj
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const findResultsObjForCurrentReference = ({
|
||||||
|
currentReference,
|
||||||
|
caseResultsSource
|
||||||
|
}) => {
|
||||||
|
return jsonpath({
|
||||||
|
path: `$..[?(@ && @.ticketnumber=="${currentReference}")]`,
|
||||||
|
"json": caseResultsSource,
|
||||||
|
"eval": true
|
||||||
|
})[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const findDetailsObjForView = ({
|
||||||
|
hasState,
|
||||||
|
isEditState,
|
||||||
|
queryCreated,
|
||||||
|
ticketnumber,
|
||||||
|
caseDetailsSource
|
||||||
|
}) => {
|
||||||
|
if (hasState && isEditState) {
|
||||||
|
return jsonpath({
|
||||||
|
path: `$..[?(@ && @.repfile_name=="${queryCreated}")]`,
|
||||||
|
"json": caseDetailsSource,
|
||||||
|
"eval": true
|
||||||
|
})[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return jsonpath({
|
||||||
|
path: `$..[?(@ && @.ticketnumber=="${ticketnumber}")]`,
|
||||||
|
"json": caseDetailsSource,
|
||||||
|
"eval": true
|
||||||
|
})[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const resolveSubmitCaseDetailsSource = ({
|
||||||
|
isEditState,
|
||||||
|
currentType,
|
||||||
|
myRepresentations,
|
||||||
|
watchedCasesDetails,
|
||||||
|
searchDetailsObj
|
||||||
|
}) => {
|
||||||
|
if (isEditState) {
|
||||||
|
return myRepresentations;
|
||||||
|
}
|
||||||
|
|
||||||
|
return currentType === "watchedCases"
|
||||||
|
? watchedCasesDetails
|
||||||
|
: searchDetailsObj;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const findDetailsObjForSubmit = ({
|
||||||
|
ticketnumber,
|
||||||
|
caseDetailsSource
|
||||||
|
}) => {
|
||||||
|
return jsonpath({
|
||||||
|
path: `$..[?(@ && @.ticketnumber=="${ticketnumber}")]`,
|
||||||
|
"json": caseDetailsSource,
|
||||||
|
"eval": true
|
||||||
|
})[0];
|
||||||
|
};
|
||||||
@@ -6,7 +6,7 @@ Base branch: `refactor`
|
|||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
Current slice: Slice R5 — Representation Elements Normalisation
|
Current slice: Slice R6 — Async Data / Service Layer Cleanup
|
||||||
Status: COMPLETE
|
Status: COMPLETE
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -181,6 +181,27 @@ Reduce duplication and coupling in data fetching.
|
|||||||
- blob/file retrieval
|
- blob/file retrieval
|
||||||
- representation detail aggregation
|
- representation detail aggregation
|
||||||
|
|
||||||
|
**Completion notes (this slice):**
|
||||||
|
|
||||||
|
- Implemented on feature branch created from `refactor`: `rep-slice-r6-data-service-cleanup`.
|
||||||
|
- Added deterministic representation-specific data-resolution helpers in:
|
||||||
|
- `components/case/representation/utils/dataResolution.js`
|
||||||
|
- Updated `components/case/representation/index.js` to use extracted helper functions for:
|
||||||
|
- initial case details/results source resolution
|
||||||
|
- details/results lookup by current context (state/edit/ticket/created)
|
||||||
|
- submit-path details source resolution and details lookup
|
||||||
|
- Preserved slice boundary constraints:
|
||||||
|
- no service/API call execution movement
|
||||||
|
- no dispatch sequencing changes
|
||||||
|
- no loader branch redesign
|
||||||
|
- no blob retrieval orchestration changes
|
||||||
|
- no payload contract/Redux/route/query/EN-CY changes
|
||||||
|
- Validation evidence:
|
||||||
|
- `npm run lint` completed (warnings only, no new errors).
|
||||||
|
- `npm run test:reps` completed: **7 passed**.
|
||||||
|
- Manual APP/IP/Agent/LPA checks: **passed**.
|
||||||
|
- Manual EN/CY parity checks: **passed**.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Slice R7 — Summary / Case-Type Rendering Simplification (Optional)
|
### Slice R7 — Summary / Case-Type Rendering Simplification (Optional)
|
||||||
|
|||||||
Reference in New Issue
Block a user