Bug cockpit

This commit is contained in:
2026-05-07 21:30:17 +02:00
parent dd3f849416
commit e531076862

View File

@@ -199,6 +199,32 @@ function exportReviewRows(rows, filters) {
URL.revokeObjectURL(url) URL.revokeObjectURL(url)
} }
function buildSelectedReviewExportRow(node, form) {
if (!node) return null
const meta = getProgramNodeReviewMeta({
...node,
review: {
...(node.review || {}),
status: form?.status || node.review?.status,
comment: form?.comment ?? node.review?.comment,
},
})
const comment = form?.comment ?? node.review?.comment ?? ''
if (meta.status === 'unreviewed' && !comment.trim()) return null
return {
node: {
...node,
review: {
...(node.review || {}),
status: meta.status,
comment,
},
},
depth: 0,
meta,
}
}
function ProgramReviewPanel({ selectedNode, reviewForm, onReviewChange, onSaveReview, readOnly = false, onOpenValidation }) { function ProgramReviewPanel({ selectedNode, reviewForm, onReviewChange, onSaveReview, readOnly = false, onOpenValidation }) {
const [isFullscreen, setIsFullscreen] = useState(false) const [isFullscreen, setIsFullscreen] = useState(false)
@@ -1971,6 +1997,13 @@ function TutorApp({ currentUser, onLogout }) {
) )
}) })
const exportableReviewRows = filteredReviewRows.filter(({ node, meta }) => meta.status !== 'unreviewed' || Boolean(node.review?.comment)) const exportableReviewRows = filteredReviewRows.filter(({ node, meta }) => meta.status !== 'unreviewed' || Boolean(node.review?.comment))
const selectedReviewExportRow = buildSelectedReviewExportRow(selectedProgramNode, programReviewForm)
const selectedReviewAlreadyIncluded = selectedReviewExportRow
? exportableReviewRows.some(({ node }) => node.key === selectedReviewExportRow.node.key)
: true
const reviewRowsToExport = selectedReviewExportRow && !selectedReviewAlreadyIncluded
? [selectedReviewExportRow]
: exportableReviewRows
const selectedNodeStatus = selectedProgramNode?.status || {} const selectedNodeStatus = selectedProgramNode?.status || {}
const totalLessonCards = studentProgram?.assets?.reduce((sum, asset) => sum + (asset.sections?.length || 0), 0) || 0 const totalLessonCards = studentProgram?.assets?.reduce((sum, asset) => sum + (asset.sections?.length || 0), 0) || 0
const remainingCards = Math.max(totalLessonCards - validatedCards, 0) const remainingCards = Math.max(totalLessonCards - validatedCards, 0)
@@ -2385,10 +2418,10 @@ function TutorApp({ currentUser, onLogout }) {
<button <button
type="button" type="button"
className="secondary-button" className="secondary-button"
onClick={() => exportReviewRows(exportableReviewRows, reviewFilters)} onClick={() => exportReviewRows(reviewRowsToExport, reviewFilters)}
disabled={!exportableReviewRows.length} disabled={!reviewRowsToExport.length}
> >
Exporter JSON ({exportableReviewRows.length}) Exporter JSON ({reviewRowsToExport.length})
</button> </button>
</div> </div>
<div className="review-filters"> <div className="review-filters">