Merged PR 2235: refactor(newappeal): extract file merge and dedupe helpers (Slice 2b)
refactor(newappeal): extract file merge and dedupe helpers (Slice 2b) Related work items: #22577
This commit is contained in:
@@ -21,6 +21,10 @@ import {
|
||||
updateLinks,
|
||||
getDocLink
|
||||
} from "../utils";
|
||||
import {
|
||||
dedupeFilesListByName,
|
||||
removeDuplicatesByKey
|
||||
} from "../../lib/newappeal/fileListHelpers";
|
||||
|
||||
let BuildCheckSection = (props) => {
|
||||
useEffect(() => {
|
||||
@@ -97,20 +101,10 @@ let BuildCheckSection = (props) => {
|
||||
});
|
||||
//console.log(buildAppealFilesArray);
|
||||
|
||||
function removeDuplicates(arr, key) {
|
||||
const seen = new Set();
|
||||
return arr.filter((item) => {
|
||||
const value = item[key];
|
||||
if (seen.has(value)) {
|
||||
return false; // Duplicate found
|
||||
} else {
|
||||
seen.add(value); // Add value to the set
|
||||
return true; // Keep the item
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
buildAppealFilesArray = removeDuplicates(buildAppealFilesArray, "name");
|
||||
buildAppealFilesArray = removeDuplicatesByKey(
|
||||
buildAppealFilesArray,
|
||||
"name"
|
||||
);
|
||||
|
||||
let pdfObj = props.props.form.appealForm.values;
|
||||
|
||||
@@ -152,10 +146,7 @@ let BuildCheckSection = (props) => {
|
||||
const finaliseAppeal = async () => {
|
||||
//console.log("finalising appeal:", pdfObj);
|
||||
|
||||
const uniqueArray = pdfObj.filesList.filter(
|
||||
(value, index, self) =>
|
||||
index === self.findIndex((t) => t.name === value.name)
|
||||
);
|
||||
const uniqueArray = dedupeFilesListByName(pdfObj.filesList);
|
||||
|
||||
pdfObj.filesList = uniqueArray;
|
||||
pdfObj.locale = locale;
|
||||
@@ -197,10 +188,7 @@ let BuildCheckSection = (props) => {
|
||||
try {
|
||||
setDownloadInProgress(true);
|
||||
|
||||
const uniqueArray = pdfObj.filesList.filter(
|
||||
(value, index, self) =>
|
||||
index === self.findIndex((t) => t.name === value.name)
|
||||
);
|
||||
const uniqueArray = dedupeFilesListByName(pdfObj.filesList);
|
||||
|
||||
pdfObj.filesList = uniqueArray;
|
||||
pdfObj.locale = locale;
|
||||
|
||||
@@ -6,6 +6,7 @@ import { connect } from "react-redux";
|
||||
import { formValueSelector, reduxForm } from "redux-form";
|
||||
import { uploadFiles } from "../../actions/services/documentService";
|
||||
import { sendEmail } from "../../actions/services/notifyService";
|
||||
import { mergeWithExistingFilesList } from "../../lib/newappeal/fileListHelpers";
|
||||
import {
|
||||
normalizeYesNoBooleans,
|
||||
removeNullKeys,
|
||||
@@ -166,12 +167,10 @@ let BuildSection = (props) => {
|
||||
|
||||
//console.log(buildAppealFilesArray);
|
||||
|
||||
buildAppealFilesArray = values.hasOwnProperty("filesList")
|
||||
? (buildAppealFilesArray.concat(values.filesList),
|
||||
buildAppealFilesArray.filter(function (item, idx) {
|
||||
return item.name;
|
||||
}))
|
||||
: buildAppealFilesArray;
|
||||
buildAppealFilesArray = mergeWithExistingFilesList(
|
||||
buildAppealFilesArray,
|
||||
values
|
||||
);
|
||||
|
||||
Object.assign(values, { "filesList": buildAppealFilesArray });
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Base branch for this tracker: `refactor`
|
||||
|
||||
## Status
|
||||
|
||||
Current slice: Slice 2b — File Merge/Dedupe Helpers
|
||||
Current slice: Slice 3 — Side Effect Facade
|
||||
Status: READY TO START
|
||||
|
||||
---
|
||||
@@ -32,7 +32,7 @@ Status: COMPLETE
|
||||
|
||||
### Slice 2b — File Merge/Dedupe Helpers
|
||||
|
||||
Status: NOT STARTED
|
||||
Status: COMPLETE
|
||||
|
||||
- Extract file list merge logic
|
||||
- Extract dedupe logic
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
export const mergeWithExistingFilesList = (buildAppealFilesArray, values) => {
|
||||
return values.hasOwnProperty("filesList")
|
||||
? (buildAppealFilesArray.concat(values.filesList),
|
||||
buildAppealFilesArray.filter(function (item, idx) {
|
||||
return item.name;
|
||||
}))
|
||||
: buildAppealFilesArray;
|
||||
};
|
||||
|
||||
export const removeDuplicatesByKey = (arr, key) => {
|
||||
const seen = new Set();
|
||||
return arr.filter((item) => {
|
||||
const value = item[key];
|
||||
if (seen.has(value)) {
|
||||
return false; // Duplicate found
|
||||
} else {
|
||||
seen.add(value); // Add value to the set
|
||||
return true; // Keep the item
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const dedupeFilesListByName = (filesList) => {
|
||||
return filesList.filter(
|
||||
(value, index, self) =>
|
||||
index === self.findIndex((t) => t.name === value.name)
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user