Skip to content

Commit 35b7359

Browse files
Merge pull request #82 from microsoft/updateContinerName
fix: modernization page summary label issue
2 parents 4c7ca81 + 5509ee2 commit 35b7359

File tree

1 file changed

+104
-77
lines changed

1 file changed

+104
-77
lines changed

src/frontend/src/pages/modernizationPage.tsx

Lines changed: 104 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,7 @@ const ModernizationPage = () => {
719719
// Update files state when Redux fileList changes
720720
useEffect(() => {
721721
if (reduxFileList && reduxFileList.length > 0) {
722+
setAllFilesCompleted(false);
722723
// Map the Redux fileList to our FileItem format
723724
const fileItems: FileItem[] = reduxFileList.filter(file => file.type !== 'summary').map((file: any, index: number) => ({
724725

@@ -784,111 +785,137 @@ const ModernizationPage = () => {
784785

785786

786787
//new PT FR ends
788+
const updateSummaryStatus = async () => {
789+
try {
790+
const latestBatch = await fetchBatchSummary(batchId!);
791+
setBatchSummary(latestBatch);
792+
const allFilesDone = latestBatch.files.every(file =>
793+
["completed", "failed", "error"].includes(file.status?.toLowerCase() || "")
794+
);
795+
796+
if (allFilesDone) {
797+
setAllFilesCompleted(true);
798+
const hasUsableFile = latestBatch.files.some(file =>
799+
file.status?.toLowerCase() === "completed" &&
800+
file.file_result !== "error" &&
801+
!!file.translated_content?.trim()
802+
);
803+
804+
setIsZipButtonDisabled(!hasUsableFile);
805+
806+
setFiles(prevFiles => {
807+
const updated = [...prevFiles];
808+
const summaryIndex = updated.findIndex(f => f.id === "summary");
809+
810+
if (summaryIndex !== -1) {
811+
updated[summaryIndex] = {
812+
...updated[summaryIndex],
813+
status: "completed",
814+
errorCount: latestBatch.error_count,
815+
warningCount: latestBatch.warning_count,
816+
};
817+
}
818+
819+
return updated;
820+
});
821+
}
822+
} catch (err) {
823+
console.error("Failed to update summary status:", err);
824+
}
825+
};
826+
787827
// Handle WebSocket messages
788828
const handleWebSocketMessage = useCallback(async (data: WebSocketMessage) => {
789829
console.log('Received WebSocket message:', data);
790-
830+
791831
if (!data || !data.file_id) {
792832
console.warn('Received invalid WebSocket message:', data);
793833
return;
794834
}
795-
796-
if (data.file_id) {
797-
currentProcessingFileRef.current = data.file_id;
798-
}
799-
// Update process steps dynamically from agent_type
835+
836+
setFileId(data.file_id);
837+
800838
const agent = formatAgent(data.agent_type);
801839
const message = formatDescription(data.agent_message);
802-
setFileId(data.file_id);
803-
804-
// Update file status based on the message
840+
data.agent_type = agent;
841+
data.agent_message = message;
842+
805843
setFiles(prevFiles => {
806844
const fileIndex = prevFiles.findIndex(file => file.fileId === data.file_id);
807-
808-
if (fileIndex === -1) {
809-
console.warn(`File with ID ${data.file_id} not found in the file list`);
810-
return prevFiles;
811-
}
812-
data.agent_message = message;
813-
data.agent_type = agent;
814-
const updatedFiles = [...prevFiles];
815-
const newTrackLog = updatedFiles[fileIndex].file_track_log?.some(entry =>
845+
if (fileIndex === -1) return prevFiles;
846+
847+
const newTrackLog = prevFiles[fileIndex].file_track_log?.some(entry =>
816848
entry.agent_type === data.agent_type && entry.agent_message === data.agent_message
817849
)
818-
? updatedFiles[fileIndex].file_track_log
819-
: [data, ...(updatedFiles[fileIndex].file_track_log || [])];
850+
? prevFiles[fileIndex].file_track_log
851+
: [data, ...(prevFiles[fileIndex].file_track_log || [])];
852+
853+
const updatedFiles = [...prevFiles];
820854
updatedFiles[fileIndex] = {
821855
...updatedFiles[fileIndex],
822856
status: data.process_status,
823857
file_track_log: newTrackLog,
824858
file_track_percentage: getTrackPercentage(data.process_status, newTrackLog),
825859
};
826-
827-
// Update summary status
828-
const summaryIndex = updatedFiles.findIndex(file => file.id === 'summary');
829-
if (summaryIndex !== -1) {
830-
const totalFiles = updatedFiles.filter(file => file.id !== 'summary').length;
831-
const completedFiles = updatedFiles.filter(file => file.status === 'completed' && file.id !== 'summary').length;
832-
const newAllFilesCompleted = completedFiles === totalFiles && totalFiles > 0;
833-
setAllFilesCompleted(newAllFilesCompleted);
834-
835-
updatedFiles[summaryIndex] = {
836-
...updatedFiles[summaryIndex],
837-
status: newAllFilesCompleted ? 'completed' : 'Processing'
838-
};
839-
}
840-
860+
841861
return updatedFiles;
842862
});
843-
844-
// Fetch file content if processing is completed
863+
845864
if (data.process_status === 'completed') {
846865
try {
847866
const newFileUpdate = await fetchFileFromAPI(data.file_id);
848-
const batchSumamry = await fetchBatchSummary(data.batch_id);
849-
setBatchSummary(batchSumamry);
850-
setFiles(currentFiles => {
851-
const c = currentFiles.map(f =>
852-
f.fileId === data.file_id ? {
853-
...f,
854-
code: newFileUpdate.content,
855-
status: data.process_status,
856-
translatedCode: newFileUpdate.translated_content,
857-
errorCount: fileErrorCounter(newFileUpdate),
858-
warningCount: fileWarningCounter(newFileUpdate),
859-
file_result: newFileUpdate.file_result,
860-
file_logs: filesLogsBuilder(newFileUpdate),
861-
} : f
862-
863-
);
864-
// Update summary status
865-
const summaryIndex = c.findIndex(file => file.id === 'summary');
866-
if (summaryIndex !== -1) {
867-
868-
setAllFilesCompleted(batchSumamry.status === "completed");
869-
if (batchSumamry.status === "completed" && batchSumamry.hasFiles > 0) {
870-
setIsZipButtonDisabled(false);
871-
}
872-
873-
c[summaryIndex] = {
874-
...c[summaryIndex],
875-
errorCount: batchSumamry.error_count,
876-
warningCount: batchSumamry.warning_count,
877-
status: batchSumamry.status === "completed" ? batchSumamry.status : 'Processing'
878-
};
879-
}
880-
return c;
881-
}
867+
868+
setFiles(prevFiles =>
869+
prevFiles.map(file =>
870+
file.fileId === data.file_id
871+
? {
872+
...file,
873+
code: newFileUpdate.content,
874+
translatedCode: newFileUpdate.translated_content,
875+
status: data.process_status,
876+
errorCount: fileErrorCounter(newFileUpdate),
877+
warningCount: fileWarningCounter(newFileUpdate),
878+
file_result: newFileUpdate.file_result,
879+
file_logs: filesLogsBuilder(newFileUpdate),
880+
}
881+
: file
882+
)
882883
);
883-
// updateProgressPercentage();
884-
} catch (error) {
885-
console.error('Error fetching completed file:', error);
884+
885+
//Check and update summary + download status
886+
await updateSummaryStatus();
887+
888+
} catch (err) {
889+
console.error("Error updating after file completion:", err);
886890
}
887-
} else {
888-
// updateProgressPercentage();
889891
}
890-
}, [files, fileId]);
892+
}, [updateSummaryStatus]);
891893

894+
useEffect(() => {
895+
const areAllFilesTerminal = files.every(file =>
896+
file.id === "summary" || // skip summary
897+
["completed", "failed", "error"].includes(file.status?.toLowerCase() || "")
898+
);
899+
900+
if (files.length > 1 && areAllFilesTerminal && !allFilesCompleted) {
901+
updateSummaryStatus();
902+
}
903+
}, [files, allFilesCompleted]);
904+
905+
906+
useEffect(() => {
907+
const nonSummaryFiles = files.filter(f => f.id !== "summary");
908+
const completedCount = nonSummaryFiles.filter(f => f.status === "completed").length;
909+
910+
if (
911+
nonSummaryFiles.length > 0 &&
912+
completedCount === nonSummaryFiles.length &&
913+
!allFilesCompleted
914+
) {
915+
updateSummaryStatus(); //single source of truth
916+
}
917+
}, [files, allFilesCompleted, batchId]);
918+
//new end
892919
// Listen for WebSocket messages using the WebSocketService
893920
useEffect(() => {
894921
webSocketService.on('message', handleWebSocketMessage);

0 commit comments

Comments
 (0)