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,
|
||||
resolveSubmitTransition
|
||||
} from "./utils/stepResolution";
|
||||
import {
|
||||
findDetailsObjForSubmit,
|
||||
findDetailsObjForView,
|
||||
findResultsObjForCurrentReference,
|
||||
resolveInitialCaseDataSources,
|
||||
resolveSubmitCaseDetailsSource
|
||||
} from "./utils/dataResolution";
|
||||
|
||||
let MakeRepresentation = (props) => {
|
||||
let { t } = useTranslation();
|
||||
@@ -261,52 +268,31 @@ let MakeRepresentation = (props) => {
|
||||
const isEditState = router.query.state === "edit";
|
||||
const hasState = router.query.hasOwnProperty("state");
|
||||
|
||||
const getCaseDetailsObj = () => {
|
||||
if (hasState) {
|
||||
return isEditState
|
||||
? props.props.myRepresentations.myRepresentations
|
||||
: props.props.searchResultsObj.searchDetailsObj;
|
||||
}
|
||||
return props.currentType === "watchedCases"
|
||||
? props.props.watchedCases.watchedCasesDetails
|
||||
: props.props.searchResultsObj.searchDetailsObj;
|
||||
};
|
||||
const { caseDetailsSource, caseResultsSource } =
|
||||
resolveInitialCaseDataSources({
|
||||
hasState,
|
||||
isEditState,
|
||||
currentType: props.currentType,
|
||||
myRepresentations: props.props.myRepresentations.myRepresentations,
|
||||
searchDetailsObj: props.props.searchResultsObj.searchDetailsObj,
|
||||
searchResultsObj: props.props.searchResultsObj.searchResultsObj,
|
||||
watchedCasesDetails: props.props.watchedCases.watchedCasesDetails
|
||||
});
|
||||
|
||||
const getCaseResultsObj = () => {
|
||||
if (hasState) {
|
||||
return isEditState
|
||||
? 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 resultsObj = findResultsObjForCurrentReference({
|
||||
"currentReference": currentView.caseReference.currentReference,
|
||||
"caseResultsSource": caseResultsSource
|
||||
});
|
||||
|
||||
// let detailsObj;
|
||||
|
||||
if (hasState && isEditState) {
|
||||
detailsObj = jsonpath({
|
||||
path: `$..[?(@ && @.repfile_name=="${router.query.created}")]`,
|
||||
json: setCaseDetailsObj,
|
||||
eval: true
|
||||
})[0];
|
||||
} else {
|
||||
detailsObj = jsonpath({
|
||||
path: `$..[?(@ && @.ticketnumber=="${currentView.caseReference.ticketnumber}")]`,
|
||||
json: setCaseDetailsObj,
|
||||
eval: true
|
||||
})[0];
|
||||
}
|
||||
detailsObj = findDetailsObjForView({
|
||||
hasState,
|
||||
isEditState,
|
||||
"queryCreated": router.query.created,
|
||||
"ticketnumber": currentView.caseReference.ticketnumber,
|
||||
"caseDetailsSource": caseDetailsSource
|
||||
});
|
||||
|
||||
const safeDetailsObj = detailsObj || {};
|
||||
const safeResultsObj = resultsObj || {};
|
||||
@@ -963,24 +949,20 @@ let MakeRepresentation = (props) => {
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine case data source
|
||||
const getCaseDetailsSource = () => {
|
||||
if (router.query?.state === "edit") {
|
||||
return props.props.myRepresentations.myRepresentations;
|
||||
}
|
||||
return props.currentType === "watchedCases"
|
||||
? props.props.watchedCases.watchedCasesDetails
|
||||
: props.props.searchResultsObj.searchDetailsObj;
|
||||
};
|
||||
|
||||
const setCaseDetailsObj = getCaseDetailsSource();
|
||||
const caseDetailsSource = resolveSubmitCaseDetailsSource({
|
||||
"isEditState": router.query?.state === "edit",
|
||||
"currentType": props.currentType,
|
||||
"myRepresentations":
|
||||
props.props.myRepresentations.myRepresentations,
|
||||
"watchedCasesDetails": props.props.watchedCases.watchedCasesDetails,
|
||||
"searchDetailsObj": props.props.searchResultsObj.searchDetailsObj
|
||||
});
|
||||
|
||||
// Find correct case details
|
||||
let detailsObj = jsonpath({
|
||||
path: `$..[?(@ && @.ticketnumber=="${ticketnumber}")]`,
|
||||
json: setCaseDetailsObj,
|
||||
eval: true
|
||||
})[0];
|
||||
let detailsObj = findDetailsObjForSubmit({
|
||||
ticketnumber,
|
||||
caseDetailsSource
|
||||
});
|
||||
|
||||
// Cancel submit status if editing
|
||||
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];
|
||||
};
|
||||
Reference in New Issue
Block a user