diff --git a/components/newappeal/buildsection.js b/components/newappeal/buildsection.js index c8d53cf7..ea743e26 100644 --- a/components/newappeal/buildsection.js +++ b/components/newappeal/buildsection.js @@ -6,6 +6,11 @@ import { connect } from "react-redux"; import { formValueSelector, reduxForm } from "redux-form"; import { uploadFiles } from "../../actions/services/documentService"; import { sendEmail } from "../../actions/services/notifyService"; +import { + normalizeYesNoBooleans, + removeNullKeys, + stripInternalKeys +} from "../../lib/newappeal/payloadCleanup"; import { setCurrentSection, setDocumentsList, @@ -218,19 +223,9 @@ let BuildSection = (props) => { "/incidents(" + incidentId + ")" }); - updateBody = JSON.stringify(updateBody); - updateBody = updateBody.replace(/:"Yes"/gm, `:true`); - updateBody = updateBody.replace(/:"No"/gm, `:false`); - updateBody = JSON.parse(updateBody); - - Object.keys(updateBody).forEach((key) => { - if (updateBody[key] === null) { - delete updateBody[key]; - } - if (key.indexOf("_") == 0) { - delete updateBody[key]; - } - }); + updateBody = normalizeYesNoBooleans(updateBody); + updateBody = removeNullKeys(updateBody); + updateBody = stripInternalKeys(updateBody); //console.log(updateBody); diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index b1106c76..0c6a84fc 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -5,6 +5,7 @@ import { useEffect } from "react"; import { connect } from "react-redux"; import { formValueSelector } from "redux-form"; import { sendEmail } from "../../actions/services/notifyService"; +import { normalizeYesNoBooleans } from "../../lib/newappeal/payloadCleanup"; import { setCurrentSection } from "../../store/appealType/action"; import { getFormCollectionByID } from "../utils"; @@ -31,10 +32,7 @@ let CompleteAppeal = (props) => { "/incidents(" + incidentId + ")" }); - updateBody = JSON.stringify(updateBody); - updateBody = updateBody.replace(/:"Yes"/gm, `:true`); - updateBody = updateBody.replace(/:"No"/gm, `:false`); - updateBody = JSON.parse(updateBody); + updateBody = normalizeYesNoBooleans(updateBody); let updateFormCollection = appTypeCollection.LogicalCollectionName; let primaryAttribute = appTypeCollection.PrimaryIdAttribute; diff --git a/context/refactor-tracker.md b/context/refactor-tracker.md index b12e85c0..c093d347 100644 --- a/context/refactor-tracker.md +++ b/context/refactor-tracker.md @@ -4,8 +4,8 @@ Base branch for this tracker: `refactor` ## Status -Current slice: Slice 1 — XML/Form Derivation Extraction -Status: NOT STARTED +Current slice: Slice 2b — File Merge/Dedupe Helpers +Status: READY TO START --- @@ -13,7 +13,7 @@ Status: NOT STARTED ### Slice 1 — XML/Form Derivation Extraction -Status: NOT STARTED +Status: COMPLETE - Extract XML parsing helpers into lib - Keep selectors identical @@ -23,7 +23,7 @@ Status: NOT STARTED ### Slice 2a — Payload Cleanup Helpers -Status: NOT STARTED +Status: COMPLETE - Extract boolean normalization - Extract null/internal key stripping diff --git a/lib/newappeal/payloadCleanup.js b/lib/newappeal/payloadCleanup.js new file mode 100644 index 00000000..762d2293 --- /dev/null +++ b/lib/newappeal/payloadCleanup.js @@ -0,0 +1,28 @@ +export const normalizeYesNoBooleans = (updateBody) => { + updateBody = JSON.stringify(updateBody); + updateBody = updateBody.replace(/:\"Yes\"/gm, `:true`); + updateBody = updateBody.replace(/:\"No\"/gm, `:false`); + updateBody = JSON.parse(updateBody); + + return updateBody; +}; + +export const removeNullKeys = (updateBody) => { + Object.keys(updateBody).forEach((key) => { + if (updateBody[key] === null) { + delete updateBody[key]; + } + }); + + return updateBody; +}; + +export const stripInternalKeys = (updateBody) => { + Object.keys(updateBody).forEach((key) => { + if (key.indexOf("_") == 0) { + delete updateBody[key]; + } + }); + + return updateBody; +};