diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 5225276..ad01a56 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -201,21 +201,32 @@ function exportReviewRows(rows, filters) { function buildSelectedReviewExportRow(node, form) { if (!node) return null + const savedReview = node.review || {} + const formStatus = form?.status || '' + const formComment = form?.comment ?? '' + const hasSavedReview = Boolean(savedReview.status || savedReview.comment || savedReview.updated_at) + const formChanged = Boolean( + formStatus + && (formStatus !== (savedReview.status || '') || formComment !== (savedReview.comment || '')) + && formComment.trim() + ) + if (!hasSavedReview && !formChanged) return null + const meta = getProgramNodeReviewMeta({ ...node, review: { - ...(node.review || {}), - status: form?.status || node.review?.status, - comment: form?.comment ?? node.review?.comment, + ...savedReview, + status: formChanged ? formStatus : savedReview.status, + comment: formChanged ? formComment : savedReview.comment, }, }) - const comment = form?.comment ?? node.review?.comment ?? '' + const comment = formChanged ? formComment : (savedReview.comment || '') if (meta.status === 'unreviewed' && !comment.trim()) return null return { node: { ...node, review: { - ...(node.review || {}), + ...savedReview, status: meta.status, comment, }, @@ -2002,7 +2013,7 @@ function TutorApp({ currentUser, onLogout }) { ? exportableReviewRows.some(({ node }) => node.key === selectedReviewExportRow.node.key) : true const reviewRowsToExport = selectedReviewExportRow && !selectedReviewAlreadyIncluded - ? [selectedReviewExportRow] + ? [...exportableReviewRows, selectedReviewExportRow] : exportableReviewRows const selectedNodeStatus = selectedProgramNode?.status || {} const totalLessonCards = studentProgram?.assets?.reduce((sum, asset) => sum + (asset.sections?.length || 0), 0) || 0