diff --git a/app/components/Form/ProjectQuarterlyReportForm.tsx b/app/components/Form/ProjectQuarterlyReportForm.tsx index 035ea466c2..a48d5dbf7e 100644 --- a/app/components/Form/ProjectQuarterlyReportForm.tsx +++ b/app/components/Form/ProjectQuarterlyReportForm.tsx @@ -205,10 +205,67 @@ const ProjectQuarterlyReportForm: React.FC = (props) => { return [filteredReports, nextIndex]; }, [projectRevision.projectQuarterlyReportFormChanges]); + const handleUndo = async () => { + let committedQuarterlyReports = []; + + projectRevision.projectQuarterlyReportFormChanges.edges.forEach( + ({ node }) => { + if ( + node.formChangeByPreviousFormChangeId?.changeStatus === "committed" + ) { + committedQuarterlyReports.push(node); + } + if (node.changeStatus === "pending" || node.changeStatus === "staged") { + deleteQuarterlyReport(node.id, "ARCHIVE"); + } + } + ); + + const completedPromises: Promise[] = []; + committedQuarterlyReports.forEach((node) => { + const undoneFormData = node.formChangeByPreviousFormChangeId.newFormData; + const promise = new Promise((resolve, reject) => { + applyUpdateFormChangeMutation({ + variables: { + input: { + id: node.id, + formChangePatch: { + changeStatus: "pending", + newFormData: undoneFormData, + operation: "UPDATE", + }, + }, + }, + debounceKey: node.id, + onCompleted: () => resolve(), + onError: reject, + }); + }); + completedPromises.push(promise); + }); + try { + await Promise.all(completedPromises); + } catch (e) { + // the failing mutation will display an error message and send the error to sentry + } + }; + return (

Quarterly Reports

+