diff --git a/src/pages/Evaluation.tsx b/src/pages/Evaluation.tsx index 9d63285..40daa42 100644 --- a/src/pages/Evaluation.tsx +++ b/src/pages/Evaluation.tsx @@ -75,7 +75,7 @@ export default function Evaluation() { for (const a of assignments) { const meetingIds = (await db.meetingInstances .where('assignmentId').equals(a.id!).toArray() - ).map(m => m.id!) + ).filter(m => !m.deletedAt && m.status === 'done').map(m => m.id!) for (const instId of a.instituteeIds) { const inst = consultants.find(c => c.id === instId) @@ -87,7 +87,7 @@ export default function Evaluation() { if (instAssessments.length === 0) continue const getScore = (itemId: number): FeedbackRating | null => { - const relevant = instAssessments.filter(a => a.criteriaId === itemId && a.score !== null) + const relevant = instAssessments.filter(a => a.criteriaId === itemId && a.score !== null && a.score !== 'na') if (relevant.length === 0) return null const avg = relevant.reduce((s, a) => s + RATING_NUM_MAP[a.score!], 0) / relevant.length if (avg < 1.5) return 'not_client_ready' @@ -114,62 +114,82 @@ export default function Evaluation() { const rowKey = (r: InstScore) => `${r.assignment.id}-${r.institutee.id}` + const assignmentGroups = data.reduce>( + (map, row) => { + const key = row.assignment.id! + const group = map.get(key) + if (group) group.rows.push(row) + else map.set(key, { assignment: row.assignment, rows: [row] }) + return map + }, + new Map() + ) + return ( -
+

Auswertung

{data.length === 0 && (

Noch keine Bewertungen vorhanden.

)} - {data.map(row => ( -
-
setSelected(selected === rowKey(row) ? null : rowKey(row))}> -
-
- {row.institutee.firstName} {row.institutee.lastName} -
-
{row.assignment.title} ยท {row.assignment.client}
-
-
-
- {ratingLabel(row.overall)} -
- -
+ {[...assignmentGroups.values()].map(({ assignment, rows }) => ( +
+
+ {assignment.assignmentNumber && ( +
{assignment.assignmentNumber}
+ )} +

{assignment.title}

+
{assignment.client}
- {selected === rowKey(row) && ( -
- {dimensions.map(dim => { - const dimCats = categories.filter(c => c.dimensionId === dim.id) - const dimScores = row.catScores.filter(cs => - dimCats.some(c => c.id === cs.category.id) && cs.avg !== null - ) - if (dimScores.length === 0) return null - return ( -
-
- {dim.name} -
- {dimScores.map(({ category, avg }) => ( -
- {category.name} - - {ratingLabel(avg)} - -
- ))} + {rows.map(row => ( +
+
setSelected(selected === rowKey(row) ? null : rowKey(row))}> +
+ {row.institutee.firstName} {row.institutee.lastName} +
+
+
+ {ratingLabel(row.overall)}
- ) - })} + +
+
+ + {selected === rowKey(row) && ( +
+ {dimensions.map(dim => { + const dimCats = categories.filter(c => c.dimensionId === dim.id) + const dimScores = row.catScores.filter(cs => + dimCats.some(c => c.id === cs.category.id) && cs.avg !== null + ) + if (dimScores.length === 0) return null + return ( +
+
+ {dim.name} +
+ {dimScores.map(({ category, avg }) => ( +
+ {category.name} + + {ratingLabel(avg)} + +
+ ))} +
+ ) + })} +
+ )}
- )} + ))}
))}