multiple file upload issues capped at 210mb for now

This commit is contained in:
2024-12-10 15:09:04 +00:00
parent b2e1c01dea
commit dcb6171dc1
10 changed files with 475 additions and 119 deletions
+129
View File
@@ -521,10 +521,123 @@ export const uploadFile = async (formContent, containerName, foldername) => {
const containerClient = new ContainerClient(sasUrl);
const files = formContent;
let blobResponseArr = [];
//console.log(...formContent);
console.log("files...", files, Object.keys(files).length, foldername);
for (const prop in files) {
console.log(`files[${prop}] = ${files[prop][0].size}`);
const blobName = foldername + "/files/" + files[prop][0].fieldName;
console.log(blobName);
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
const uploadBlobResponse = await blockBlobClient
.uploadFile(files[prop][0].path, files[prop].size)
.then((data) => {
console.log(
"////////////////////////\nfile name:",
files[prop][0].fieldName,
"\n////////////////////////////"
);
console.log(data);
let whichLocation =
files[prop][0].fieldName.indexOf("_Statement_of_Case") >
0 ||
files[prop][0].fieldName.indexOf("_-_Statement_of_Case") >
0 ||
files[prop][0].fieldName.indexOf("_-_Application_Form") >
0 ||
files[prop][0].fieldName.indexOf(
"_-_Site_Ownership_Certificate"
) > 0 ||
files[prop][0].fieldName.indexOf("_-_Decision_Notice") >
0 ||
files[prop][0].fieldName.indexOf("_-_Site_Location_Plan") >
0 ||
files[prop][0].fieldName.indexOf(
"_-_Plans_Drawing_Documents"
) > 0 ||
files[prop][0].fieldName.indexOf(
"_-_Additional_Plans_Drawings_Documents"
) > 0 ||
files[prop][0].fieldName.indexOf(
"_-_Design_and_Access_Statement"
) > 0 ||
files[prop][0].fieldName.indexOf(
"_-_NSB_LPA_Additional_Documents"
) > 0 ||
files[prop][0].fieldName.indexOf("_-_LPA_Correspondence") >
0 ||
files[prop][0].fieldName.indexOf(
"_-_LPA_Original_Permission"
) > 0 ||
files[prop][0].fieldName.indexOf(
"_-_LPA's_Registration_Letter"
) > 0 ||
files[prop][0].fieldName.indexOf(
+"_-_Environmental_Statement"
) > 0 ||
files[prop][0].fieldName.indexOf("_-_Cost_of_Application") >
0 ||
files[prop][0].fieldName.indexOf(
"_-_Other_Relevant_Material"
) > 0 ||
files[prop][0].fieldName.indexOf(
"_-_S106_Agreement_or_Unilateral_Undertaking" > 0
)
? "846040000"
: files[prop][0].fieldName.indexOf("_IP_") > 0
? "846040005"
: files[prop][0].fieldName.indexOf("_Statement_") > 0
? "846040002"
: files[prop][0].fieldName.indexOf("_Questionnaire_") >
0
? "846040001"
: files[prop][0].fieldName.indexOf("_Comments_") > 0
? "846040003"
: files[prop][0].fieldName.indexOf("_Impact_") > 0
? "846040001"
: "846040000";
const tags = {
containerid: containerName,
caseID: foldername.split("/")[0],
documentType: files[prop][0].fieldName.split(".")[1],
blobType: "RepresentationFile",
ishareLocation: whichLocation,
};
const withTags = blockBlobClient.setTags(tags);
const withMeta = blockBlobClient.setMetadata(tags);
console.log(
`Uploaded block blob ${files[prop][0].fieldName} successfully`
//uploadBlobResponse.requestId
);
blobResponseArr.push({ file: files[prop][0].fieldName });
});
}
return blobResponseArr;
};
export const uploadSingleFile = async (
formContent,
containerName,
foldername
) => {
const containerToken = await createContainerSas(containerName);
const sasUrl = `${STORAGE_PATH}/${containerName}?${containerToken}`;
const containerClient = new ContainerClient(sasUrl);
const files = formContent;
//console.log(...formContent);
console.log("files...", files, Object.keys(files).length, foldername);
let blobResponseArr = [];
for (const prop in files) {
console.log(`files[${prop}] = ${files[prop][0].size}`);
const blobName = foldername + "/files/" + files[prop][0].fieldName;
@@ -534,6 +647,17 @@ export const uploadFile = async (formContent, containerName, foldername) => {
const uploadBlobResponse = await blockBlobClient.uploadFile(
files[prop][0].path,
files[prop].size
// {
// blobHTTPHeaders: {
// blobContentType: "application/octet-stream",
// },
// onProgress: (progress) => {
// // Log upload progress, you can emit this back to the client
// console.log(
// `Progress: ${progress.loadedBytes} bytes uploaded`
// );
// },
// }
);
console.log(
@@ -600,7 +724,12 @@ export const uploadFile = async (formContent, containerName, foldername) => {
`Uploaded block blob ${files[prop][0].fieldName} successfully`,
uploadBlobResponse.requestId
);
blobResponseArr.push({ file: files[prop][0].fieldName });
// return uploadBlobResponse;
}
return blobResponseArr;
};
export const uploadRepFiles = async (
+38
View File
@@ -1497,6 +1497,44 @@ export const uploadFiles = async (
}
};
export const uploadSingleFile = async (filesObj, containerID, casefolderID) => {
let files = filesObj;
//console.log(formValues);
var formData = new FormData();
formData.append("containerID", containerID);
formData.append("casefolderID", casefolderID);
// files.forEach((file) => formData.append("files", file));
for (let i = 0; i < files.length; i++) {
console.log(files.length);
// for (let j = 0; j < files[i].length; j++) {
// console.log("upload files:", files[i][j].name);
formData.append(files[i].name, files[i]);
// }
}
//console.log(formData);
var queryUrl = "/api/file/uploadsinglefile";
const config = {
method: "post",
url: queryUrl,
data: formData,
headers: { "content-type": "multipart/form-data" },
};
//console.log(config);
try {
const res = await axios(config);
return res.data;
} catch (error) {
consoleLogger(error);
}
};
export const uploadRepFiles = async (
formValues,
filesObj,
+103 -4
View File
@@ -1,4 +1,6 @@
import { JSONPath as jsonpath } from "jsonpath-plus";
import axios from "axios";
import _ from "lodash";
import useTranslation from "next-translate/useTranslation";
import Link from "next/link";
@@ -8,12 +10,17 @@ import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import Dropzone from "react-dropzone";
import { Field, FieldArray } from "redux-form";
import { deleteBlob, getFilesFromBlobHashed } from "../../actions";
import {
deleteBlob,
getFilesFromBlobHashed,
uploadSingleFile,
} from "../../actions";
import fieldLookup from "../../data/crmfieldlookuptranslations.json";
import pickListLookup from "../../data/picklistLookups.json";
import dynamic from "next/dynamic";
import { bytesToSize, getThumbnailIconByExtension } from "../utils";
import { setFileCount } from "../../store/appealType/action";
import {
addDays,
@@ -27,6 +34,9 @@ import {
import "react-quill-new/dist/quill.snow.css";
const ReactQuill = dynamic(() => import("react-quill-new"), { ssr: false });
import { useStore as store, useSelector } from "react-redux";
import { useDispatch } from "react-redux";
const RenderTextfield = ({
id,
className,
@@ -1736,6 +1746,8 @@ export function FileUploadField(props) {
fileList={props.fileList}
setFilesForAppeal={props.setFilesForAppeal}
containerID={props.containerID}
uploadCount={props.uploadCount}
setFileCount={props.setFileCount}
/>
</>
);
@@ -1935,10 +1947,41 @@ const RenderFileUpload = (field) => {
return arr.filter((obj) => Object.keys(obj).length > 0);
}
const [errorMessage, setErrorMessage] = useState(null);
const [rejectedFiles, setRejectedFiles] = useState([]); // Store rejected files
const [completedUploadFiles, setCompletedUploadFiles] = useState(false);
const [uploadCountMessage, setUploadCountMessage] = useState("");
const handleDropRejected = (fileRejections) => {
const errors = fileRejections
.map(({ file, errors }) => {
return errors.map((error) => {
if (error.code === "file-too-large") {
return `${file.name} is too large. Please upload a smaller file.`;
}
if (error.code === "file-invalid-type") {
return `${file.name} has an invalid type. Please upload an image.`;
}
return `${file.name} is invalid.`;
});
})
.flat(); // Flatten the errors array
setRejectedFiles(errors); // Store the error messages for rejected files
};
// Handle accepted files (clear error message when files are accepted)
const handleDropAccepted = () => {
setErrorMessage(null); // Clear any previous error messages when files are accepted
setRejectedFiles([]); // Clear any previously rejected file errorsss
};
return (
<>
<Dropzone
key={field.input.name + "_key"}
maxSize={210 * 1024 * 1024}
accept={{
"application/pdf": [".pdf"],
"application/msword": [".doc"],
@@ -1952,6 +1995,7 @@ const RenderFileUpload = (field) => {
[".xlsx"],
}}
onDrop={(filesToUpload, e) => {
setCompletedUploadFiles(false);
const renamedAcceptedFiles = filesToUpload.map(
(file) =>
new File(
@@ -1965,7 +2009,25 @@ const RenderFileUpload = (field) => {
)
);
field.input.onChange(renamedAcceptedFiles);
setUploadCountMessage(renamedAcceptedFiles.length);
console.log("werwerw");
field.setFileCount(
field.uploadCount + renamedAcceptedFiles.length
);
uploadSingleFile(
renamedAcceptedFiles,
field.containerID,
field.ticketnumber
).then((data) => {
console.log(data);
setCompletedUploadFiles(true);
});
}}
onDropRejected={handleDropRejected}
onDropAccepted={handleDropAccepted}
>
{({ getRootProps, getInputProps }) => (
<>
@@ -1986,15 +2048,40 @@ const RenderFileUpload = (field) => {
)
</em>
</div>
<aside>{thumbs}</aside>
{/* <aside>{thumbs}</aside> */}
{uploadCountMessage > 0 &&
completedUploadFiles == false && (
<div className="govuk-body govuk-!-font-size-14">
Uploading {uploadCountMessage} files{" "}
</div>
)}
{completedUploadFiles > 0 && (
<div className="govuk-body govuk-!-font-size-14">
{uploadCountMessage} files completed{" "}
</div>
)}
</section>
</>
)}
</Dropzone>
{rejectedFiles.length > 0 && (
<div style={{ color: "red", marginTop: "10px" }}>
<ul>
{rejectedFiles.map((error, index) => (
<li key={index}>{error}</li>
))}
</ul>
</div>
)}
{field.meta.touched && field.meta.error && (
<span className="error">{field.meta.error}</span>
)}
{}
{filesList.length > 0 &&
(completedUploadFiles ? (
"Done"
) : (
<p className="govuk-body textloading">Uploading</p>
))}
{files && Array.isArray(files) && (
<>
{/* {(files = removeEmptyObjects(files))} */}
@@ -2020,7 +2107,19 @@ const RenderFileUpload = (field) => {
width="50"
/>
<span className="govuk-body govuk-!-font-size-14 govuk-!-padding-left-5">
{file.name}( ({bytesToSize(file.size)})
{file.name} ({bytesToSize(file.size)}){" "}
<br />
<div id={file.name + "_" + i}>
{completedUploadFiles ? (
<p className="govuk-body govuk-!-font-size-14">
Upload complete
</p>
) : (
<p className="govuk-body textloading govuk-!-font-size-14">
Uploading...
</p>
)}
</div>
</span>
</div>
)
+3
View File
@@ -214,6 +214,9 @@ export default function BuildField(props) {
props.props.props.props.accountDetails
.containerID
}
uploadCount={props.uploadCount}
setFileCount={props.props.setFileCount}
setUploadCount={props.setUploadCount}
/>
</div>
);
+8
View File
@@ -16,6 +16,11 @@ export default function BuildRow(props) {
sectionCount,
onSubmit,
mandatoryFieldsData,
setUploadCount,
uploadCount,
setFileCount,
completedUploadFilesCount,
setCompletedUploadFilesCount,
} = props;
const parser = new DOMParser();
@@ -127,6 +132,9 @@ export default function BuildRow(props) {
}
mandatoryFieldsData={mandatoryFieldsData}
documentTypeCode={documentTypeCode}
setFileCount={setFileCount}
setUploadCount={setUploadCount}
uploadCount={uploadCount}
/>
);
} else {
+168 -111
View File
@@ -11,6 +11,7 @@ import {
setDocumentsList,
setFilesForAppeal,
setNewAppealProgress,
setFileCount,
} from "../../store/appealType/action";
import { getFormCollectionByID, getProgressObj } from "../utils";
import BuildRow from "./buildrow";
@@ -21,8 +22,14 @@ import BuildProgress from "./buildprogress";
let BuildSection = (props) => {
const [currentSectionSelected, setCurrentSectionSelected] = useState(1);
const [pickupWhereLeftOff, setPickupWhereLeftOff] = useState(true);
const [savingStatus, setSavingStatus] = useState(false);
const [allFilesUploaded, setAllFilesuploaded] = useState(false);
const [showCompletedUploadFiles, setShowCompletedUploadFiles] =
useState(false);
const [completedUploadFiles, setCompletedUploadFiles] = useState(false);
const [uploadCount, setUploadCount] = useState(0);
const [completedUploadFilesCount, setCompletedUploadFilesCount] =
useState(0);
let { t } = useTranslation();
@@ -91,7 +98,7 @@ let BuildSection = (props) => {
const handleParam = (setValue) => (e) => setValue(e.target.value);
const uploadAppealFiles = (values) => {
const uploadAppealFiles = async (values) => {
// get filelists from values object
let fileListObj = _.filter(values, function (v, key) {
return _.includes(key, "pinswg_fileUpload");
@@ -110,14 +117,14 @@ let BuildSection = (props) => {
// _.includes(key, "pinswg_fileUpload") == true && delete dataObj[key];
// }
uploadFiles(
await uploadFiles(
dataObj,
fileListObj,
props.props.accountDetails.containerID,
props.props.appealType.caseReference.ticketnumber
).then((data) => {
//console.log("hello", data);
console.log("hello", data);
setCompletedUploadFiles(true);
return data;
});
};
@@ -166,122 +173,143 @@ let BuildSection = (props) => {
setSavingStatus(useSaveStatus);
uploadAppealFiles(values);
// console.log(
// "\n////////////////////////\n appeal pdf payload",
// values,
// props.props.accountDetails.containerID,
// props.appealType.caseReference.ticketnumber,
// props.appealType,
// "\n////////////////////////\n"
// );
setShowCompletedUploadFiles(true);
// let pdfObj = values;
uploadAppealFiles(values)
.then((data) => {
// console.log(
// "\n////////////////////////\n appeal pdf payload",
// values,
// props.props.accountDetails.containerID,
// props.appealType.caseReference.ticketnumber,
// props.appealType,
// "\n////////////////////////\n"
// );
// Object.assign(pdfObj, {
// "containerID": props.props.accountDetails.containerID,
// "casefolderID": props.appealType.caseReference.ticketnumber,
// });
// let pdfObj = values;
// generateAppealPDF(
// pdfObj,
// props.props.accountDetails.containerID,
// props.appealType.caseReference.ticketnumber,
// router.query.appealtypes,
// props.appealType.fileList
// ),
// Object.assign(pdfObj, {
// "containerID": props.props.accountDetails.containerID,
// "casefolderID": props.appealType.caseReference.ticketnumber,
// });
props.setNewAppealProgress(
getProgressObj(formXML, titleList, mandatoryFieldsData, props)
);
// generateAppealPDF(
// pdfObj,
// props.props.accountDetails.containerID,
// props.appealType.caseReference.ticketnumber,
// router.query.appealtypes,
// props.appealType.fileList
// ),
let appTypeCollection = getFormCollectionByID(
props.appealType.appealTypeID
);
let updateBindAppealTypeToIncident =
appTypeCollection.NavigationProperty;
props.setNewAppealProgress(
getProgressObj(
formXML,
titleList,
mandatoryFieldsData,
props
)
);
Object.assign(updateBody, {
"pinswg_appealcasetype": props.appealType.appealTypeID,
"pinswg_Appellant@odata.bind":
"/contacts(" + props.props.accountDetails.loggedinUserId + ")",
"pinswg_name": props.appealType.caseReference.ticketnumber,
[updateBindAppealTypeToIncident + "@odata.bind"]:
"/incidents(" + incidentId + ")",
});
let appTypeCollection = getFormCollectionByID(
props.appealType.appealTypeID
);
let updateBindAppealTypeToIncident =
appTypeCollection.NavigationProperty;
updateBody = JSON.stringify(updateBody);
updateBody = updateBody.replace(/:"Yes"/gm, `:true`);
updateBody = updateBody.replace(/:"No"/gm, `:false`);
updateBody = JSON.parse(updateBody);
Object.assign(updateBody, {
"pinswg_appealcasetype": props.appealType.appealTypeID,
"pinswg_Appellant@odata.bind":
"/contacts(" +
props.props.accountDetails.loggedinUserId +
")",
"pinswg_name": props.appealType.caseReference.ticketnumber,
[updateBindAppealTypeToIncident + "@odata.bind"]:
"/incidents(" + incidentId + ")",
});
Object.keys(updateBody).forEach((key) => {
if (updateBody[key] === null) {
delete updateBody[key];
}
if (key.indexOf("_") == 0) {
delete updateBody[key];
}
});
updateBody = JSON.stringify(updateBody);
updateBody = updateBody.replace(/:"Yes"/gm, `:true`);
updateBody = updateBody.replace(/:"No"/gm, `:false`);
updateBody = JSON.parse(updateBody);
//console.log(updateBody);
Object.keys(updateBody).forEach((key) => {
if (updateBody[key] === null) {
delete updateBody[key];
}
if (key.indexOf("_") == 0) {
delete updateBody[key];
}
});
let updateFormCollection = appTypeCollection.LogicalCollectionName;
let primaryAttribute = appTypeCollection.PrimaryIdAttribute;
//console.log(updateBody);
const reference = "PEDW-PARTIAL";
const templateId = "021b0a7b-df00-41f1-b94e-c269bee98c75";
const templateIdCY = "f3c4a56b-bfb8-4d39-97dd-888df3062b0a";
const emailAddress = props.props.accountDetails.loggedinUserEmail;
const personalisation = {
"caseReference": props.appealType.caseReference.ticketnumber,
"emailAddress": props.props.accountDetails.loggedinUserEmail,
"returnLink":
props.props.url +
(router.locale != "en" ? "/cy/fymhorth/" : "/myportal/") +
appTypeCollection.UrlName +
"?lpa=" +
props.appealType.appealLPA +
"&apt=" +
appTypeCollection.appealTypeID +
"&casereference=" +
props.appealType.caseReference.ticketnumber +
"&inid=" +
props.appealType.caseReference.incidentid,
"linkExpiry": 10 * 60,
};
let updateFormCollection =
appTypeCollection.LogicalCollectionName;
let primaryAttribute = appTypeCollection.PrimaryIdAttribute;
// console.log(
// "/////////////////////////////////",
// "returnLink:",
// props.props.url +
// (router.locale != "en" ? "/cy/fymhorth/" : "/myportal/") +
// appTypeCollection.UrlName +
// "?lpa=" +
// props.appealType.appealLPA +
// "&apt=" +
// appTypeCollection.appealTypeID +
// "&casereference=" +
// props.appealType.caseReference.ticketnumber +
// "&inid=" +
// props.appealType.caseReference.incidentid,
// "/////////////////////////////////"
// );
const reference = "PEDW-PARTIAL";
const templateId = "021b0a7b-df00-41f1-b94e-c269bee98c75";
const templateIdCY = "f3c4a56b-bfb8-4d39-97dd-888df3062b0a";
const emailAddress =
props.props.accountDetails.loggedinUserEmail;
const personalisation = {
"caseReference":
props.appealType.caseReference.ticketnumber,
"emailAddress":
props.props.accountDetails.loggedinUserEmail,
"returnLink":
props.props.url +
(router.locale != "en"
? "/cy/fymhorth/"
: "/myportal/") +
appTypeCollection.UrlName +
"?lpa=" +
props.appealType.appealLPA +
"&apt=" +
appTypeCollection.appealTypeID +
"&casereference=" +
props.appealType.caseReference.ticketnumber +
"&inid=" +
props.appealType.caseReference.incidentid,
"linkExpiry": 10 * 60,
};
sendSavedEmail == true &&
sendEmail(
router.locale != "en" ? templateIdCY : templateId,
emailAddress,
personalisation,
reference
);
// console.log(
// "/////////////////////////////////",
// "returnLink:",
// props.props.url +
// (router.locale != "en" ? "/cy/fymhorth/" : "/myportal/") +
// appTypeCollection.UrlName +
// "?lpa=" +
// props.appealType.appealLPA +
// "&apt=" +
// appTypeCollection.appealTypeID +
// "&casereference=" +
// props.appealType.caseReference.ticketnumber +
// "&inid=" +
// props.appealType.caseReference.incidentid,
// "/////////////////////////////////"
// );
})
.then(() => {
sendSavedEmail == true &&
sendEmail(
router.locale != "en" ? templateIdCY : templateId,
emailAddress,
personalisation,
reference
);
useSaveStatus &&
router.replace(
router.locale != "en"
? "/" + router.locale + "/myportal"
: "/myportal"
);
useSaveStatus &&
router.replace(
router.locale != "en"
? "/" + router.locale + "/myportal"
: "/myportal"
);
})
.then(() => {
setCompletedUploadFiles(true);
});
};
const onHandleSubmit = (values) => {
@@ -335,9 +363,11 @@ let BuildSection = (props) => {
delete valuesObj["_pinswg_appellant_value"];
//console.log("has errors:", props.invalid);
props.invalid == false && updateCaseProgress(valuesObj, false, false);
setCurrentSection(currentSection + 1);
props.invalid == false &&
updateCaseProgress(valuesObj, false, false).then((data) => {
console.log(data);
setCurrentSection(currentSection + 1);
});
};
const [hasErrors, setHasErrors] = useState("");
@@ -406,6 +436,16 @@ let BuildSection = (props) => {
);
};
const hasUploadFiles = () => {
const formArr = props.props.form["appealForm"].values;
const prefix = "pinswg_fileUpload";
const hasFiles = Object.keys(formArr).some((key) =>
key.startsWith(prefix)
);
return hasFiles;
};
return (
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds wgForm ">
@@ -429,6 +469,15 @@ let BuildSection = (props) => {
onSubmit={onSubmit}
mandatoryFieldsData={mandatoryFieldsData}
props={props}
allFilesUploaded={allFilesUploaded}
setAllFilesuploaded={setAllFilesuploaded}
setFileCount={setFileCount}
setUploadCount={setUploadCount}
uploadCount={uploadCount}
completedUploadFilesCount={completedUploadFilesCount}
setCompletedUploadFilesCount={
setCompletedUploadFilesCount
}
/>
<div className="govuk-button-group">
@@ -523,13 +572,18 @@ let BuildSection = (props) => {
)}
{props.sectionCount == currentSection ? (
<>
<div>
{showCompletedUploadFiles
? "UPlodeding, pleas ewait "
: ""}
</div>
<button
disabled={!isProgressComplete(progObj)}
type="submit"
className="govuk-button"
data-module="govuk-button"
>
{t("common:submit-button")}
{t("common:submit-button")}{" "}
</button>
{savingStatus ? (
<span className=" progress-save-active">
@@ -655,6 +709,9 @@ const mapDispatchToProps = (dispatch) => {
setNewAppealProgress: (progressObj) => {
dispatch(setNewAppealProgress(progressObj));
},
setFileCount: (fileCount) => {
dispatch(setFileCount(fileCount));
},
};
};
+11 -3
View File
@@ -32,18 +32,26 @@ ApiProxy.post(async (req, res) => {
//createContainer(containerID).then((containerName) => {
console.log("does this get folder name:", containerID, casefolderID);
repOrAppeal
? createRepBlob(appealData, containerID, casefolderID).then((data) => {
Object.keys(req.files).length > 0 &&
uploadFile(req.files, containerID, casefolderID);
uploadFile(req.files, containerID, casefolderID).then(
(data) => {
return res.status(200).json({ data });
}
);
})
: createBlob(appealData, containerID, casefolderID).then((data) => {
Object.keys(req.files).length > 0 &&
uploadFile(req.files, containerID, casefolderID);
uploadFile(req.files, containerID, casefolderID).then(
(data) => {
return res.status(200).json({ data });
}
);
});
//});
return res.status(200).json({ data: "success" });
// } else {
// return res.status(400).json();
// }
+8
View File
@@ -11,6 +11,7 @@ export const appealTypeDataActionTypes = {
SETDOCUMENTLIST: "SETDOCUMENTLIST",
SETFILELIST: "SETFILELIST",
SETNEWAPPEALPROGRESS: "SETNEWAPPEALPROGRESS",
SETFILECOUNT: "SETFILECOUNT",
};
export const getAppealTypeObj = () => (dispatch) => {
@@ -86,3 +87,10 @@ export const setNewAppealProgress = (progress) => (dispatch) => {
progress: progress,
});
};
export const setFileCount = (fileCount) => (dispatch) => {
return dispatch({
type: appealTypeDataActionTypes.SETFILECOUNT,
fileCount: fileCount,
});
};
+6
View File
@@ -10,6 +10,7 @@ const appealTypeDataInitialState = {
formComplete: "false",
documentList: {},
fileList: [],
fileCount: 0,
progress: [],
};
@@ -60,6 +61,11 @@ export default function reducer(state = appealTypeDataInitialState, action) {
...state,
fileList: action.fileList,
};
case appealTypeDataActionTypes.SETFILECOUNT:
return {
...state,
fileCount: action.fileCount,
};
case appealTypeDataActionTypes.SETNEWAPPEALPROGRESS:
return {
...state,
+1 -1
View File
@@ -2437,7 +2437,7 @@ ul#sharePageLinks.active {
&.watched_link {
color: $black !important;
background-color: $white;
width: 10px;
width: 24px;
display: block;
.eye {