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