-
Notifications
You must be signed in to change notification settings - Fork 9
/
GradebookUploadConfirmationTable.tsx
42 lines (34 loc) · 1.47 KB
/
GradebookUploadConfirmationTable.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import React, { useState } from 'react'
import CustomTable from './CustomTable.js'
interface StudentGrade {
rowNumber: number
uniqname: string
grade: string
overrideGrade: string | undefined
}
interface GradebookUploadConfirmationTableProps {
grades: StudentGrade[]
}
interface TableHeaderColumnInfoShouldUseMatUIType {
id: keyof StudentGrade
label: string
minWidth: number
align?: 'left' | 'right' | undefined
}
const columns: TableHeaderColumnInfoShouldUseMatUIType[] = [
{ id: 'rowNumber', label: 'Row Number', minWidth: 25 },
{ id: 'uniqname', label: 'Uniqname', minWidth: 100 },
{ id: 'grade', label: 'Grade', minWidth: 75 },
{ id: 'overrideGrade', label: 'Override Grade', minWidth: 75 }
]
function GradebookUploadConfirmationTable (props: GradebookUploadConfirmationTableProps): JSX.Element {
const [page, setPage] = useState<number>(0)
const tableRows = props.grades.sort((a, b) => (a.rowNumber < b.rowNumber ? -1 : 1))
const confirmationTableColumns = (tableRows.filter(grade => { return grade.overrideGrade !== undefined }).length > 0)
? columns
: columns.filter(column => { return column.id !== 'overrideGrade' })
const caption = `Trimmed gradebook data, containing ${props.grades.length} records, was generated.`
return <CustomTable<StudentGrade> {...{ tableRows, columns: confirmationTableColumns, page, setPage, caption }} />
}
export type { GradebookUploadConfirmationTableProps, StudentGrade }
export default GradebookUploadConfirmationTable