Skip to content

Commit

Permalink
Merge branch 'integrationTesting' into B-21941-INT-v3
Browse files Browse the repository at this point in the history
  • Loading branch information
traskowskycaci committed Feb 13, 2025
2 parents fafa569 + 0ed23ba commit e709cc0
Show file tree
Hide file tree
Showing 13 changed files with 262 additions and 75 deletions.
2 changes: 1 addition & 1 deletion pkg/testdatagen/scenario/shared.go
Original file line number Diff line number Diff line change
Expand Up @@ -5011,7 +5011,7 @@ func createHHGWithPaymentServiceItems(
}

destEntryDate := actualPickupDate
destDepDate := actualPickupDate
destDepDate := actualPickupDate.AddDate(0, 0, 1)
destSITAddress := factory.BuildAddress(db, nil, nil)
destSIT := factory.BuildMTOServiceItem(nil, []factory.Customization{
{
Expand Down
95 changes: 91 additions & 4 deletions src/components/DocumentViewer/DocumentViewer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,40 @@ import { bulkDownloadPaymentRequest, updateUpload } from 'services/ghcApi';
import { formatDate } from 'shared/dates';
import { filenameFromPath } from 'utils/formatters';
import AsyncPacketDownloadLink from 'shared/AsyncPacketDownloadLink/AsyncPacketDownloadLink';
import { UPLOAD_DOC_STATUS, UPLOAD_SCAN_STATUS, UPLOAD_DOC_STATUS_DISPLAY_MESSAGE } from 'shared/constants';
import Alert from 'shared/Alert';

/**
* TODO
* - implement next/previous pages instead of scroll through pages
* - implement rotate left/right
*/

const DocumentViewer = ({ files, allowDownload, paymentRequestId }) => {
const DocumentViewer = ({ files, allowDownload, paymentRequestId, isFileUploading }) => {
const [selectedFileIndex, selectFile] = useState(0);
const [disableSaveButton, setDisableSaveButton] = useState(false);
const [menuIsOpen, setMenuOpen] = useState(false);
const [showContentError, setShowContentError] = useState(false);
const sortedFiles = files.sort((a, b) => moment(b.createdAt) - moment(a.createdAt));
const selectedFile = sortedFiles[parseInt(selectedFileIndex, 10)];
const [isJustUploadedFile, setIsJustUploadedFile] = useState(false);
const [fileStatus, setFileStatus] = useState(null);

const [rotationValue, setRotationValue] = useState(selectedFile?.rotation || 0);

const mountedRef = useRef(true);

const queryClient = useQueryClient();

useEffect(() => {
if (isFileUploading) {
setIsJustUploadedFile(true);
setFileStatus(UPLOAD_DOC_STATUS.UPLOADING);
} else {
setIsJustUploadedFile(false);
}
}, [isFileUploading]);

const { mutate: mutateUploads } = useMutation(updateUpload, {
onSuccess: async (data, variables) => {
if (mountedRef.current) {
Expand Down Expand Up @@ -75,12 +88,85 @@ const DocumentViewer = ({ files, allowDownload, paymentRequestId }) => {
useEffect(() => {
setShowContentError(false);
setRotationValue(selectedFile?.rotation || 0);
}, [selectedFile]);

const handleFileProcessing = async (status) => {
switch (status) {
case UPLOAD_SCAN_STATUS.PROCESSING:
setFileStatus(UPLOAD_DOC_STATUS.SCANNING);
break;
case UPLOAD_SCAN_STATUS.CLEAN:
setFileStatus(UPLOAD_DOC_STATUS.ESTABLISHING);
break;
case UPLOAD_SCAN_STATUS.INFECTED:
setFileStatus(UPLOAD_DOC_STATUS.INFECTED);
break;
default:
throw new Error(`unrecognized file status`);
}
};
if (!isFileUploading && isJustUploadedFile) {
setFileStatus(UPLOAD_DOC_STATUS.UPLOADING);
}

let sse;
if (selectedFile) {
sse = new EventSource(`/ghc/v1/uploads/${selectedFile.id}/status`, { withCredentials: true });
sse.onmessage = (event) => {
handleFileProcessing(event.data);
if (
event.data === UPLOAD_SCAN_STATUS.CLEAN ||
event.data === UPLOAD_SCAN_STATUS.INFECTED ||
event.data === 'Connection closed'
) {
sse.close();
}
};
sse.onerror = () => {
sse.close();
setFileStatus(null);
};
}

return () => {
sse?.close();
};
}, [selectedFile, isFileUploading, isJustUploadedFile]);
useEffect(() => {
if (fileStatus === UPLOAD_DOC_STATUS.ESTABLISHING) {
setTimeout(() => {
setFileStatus(UPLOAD_DOC_STATUS.LOADED);
}, 2000);
}
}, [fileStatus]);
const fileType = useRef(selectedFile?.contentType);

if (!selectedFile) {
return <h2>File Not Found</h2>;
const getStatusMessage = (currentFileStatus, currentSelectedFile) => {
switch (currentFileStatus) {
case UPLOAD_DOC_STATUS.UPLOADING:
return UPLOAD_DOC_STATUS_DISPLAY_MESSAGE.UPLOADING;
case UPLOAD_DOC_STATUS.SCANNING:
return UPLOAD_DOC_STATUS_DISPLAY_MESSAGE.SCANNING;
case UPLOAD_DOC_STATUS.ESTABLISHING:
return UPLOAD_DOC_STATUS_DISPLAY_MESSAGE.ESTABLISHING_DOCUMENT_FOR_VIEWING;
case UPLOAD_DOC_STATUS.INFECTED:
return UPLOAD_DOC_STATUS_DISPLAY_MESSAGE.INFECTED_FILE_MESSAGE;
default:
if (!currentSelectedFile) {
return UPLOAD_DOC_STATUS_DISPLAY_MESSAGE.FILE_NOT_FOUND;
}
return null;
}
};

const alertMessage = getStatusMessage(fileStatus, selectedFile);
const alertType = fileStatus === UPLOAD_SCAN_STATUS.INFECTED ? 'error' : 'info';
const alertHeading = fileStatus === UPLOAD_SCAN_STATUS.INFECTED ? 'Ask for a new file' : 'Document Status';
if (alertMessage) {
return (
<Alert type={alertType} className="usa-width-one-whole" heading={alertHeading} data-testid="documentAlertHeading">
<span data-testid="documentAlertMessage">{alertMessage}</span>
</Alert>
);
}

const openMenu = () => {
Expand All @@ -92,6 +178,7 @@ const DocumentViewer = ({ files, allowDownload, paymentRequestId }) => {

const handleSelectFile = (index) => {
selectFile(index);
setFileStatus(UPLOAD_DOC_STATUS.ESTABLISHING);
closeMenu();
};

Expand Down
Loading

0 comments on commit e709cc0

Please sign in to comment.