-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathStudentQueues.tsx
More file actions
97 lines (91 loc) · 3.58 KB
/
StudentQueues.tsx
File metadata and controls
97 lines (91 loc) · 3.58 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { useState, useMemo, useEffect } from "react";
import { Grid, Message, Menu } from "semantic-ui-react";
import { mutateResourceListFunction } from "@pennlabs/rest-hooks/dist/types";
import { useMediaQuery } from "@material-ui/core";
import StudentQueue from "./StudentQueue";
import {
Queue,
Course,
QuestionMap,
Tag,
NotificationProps,
} from "../../../types";
import { QueueMenuItem } from "./QueueMenuItem";
import { MOBILE_BP } from "../../../constants";
import { QUEUES_LABEL, queuesLabel } from "../../../utils/branding";
interface StudentQueuesProps {
queues: Queue[];
course: Course;
queueMutate: mutateResourceListFunction<Queue>;
questionmap: QuestionMap;
play: NotificationProps;
tags: Tag[];
}
const StudentQueues = (props: StudentQueuesProps) => {
const { queues, course, queueMutate, questionmap, play, tags } = props;
const dispQueues = queues.filter((q) => !q.archived);
const [selQueue, setSelQueue] = useState<number | undefined>(
dispQueues.find((q) => !q.archived)?.id
);
const currQueue = useMemo(() => {
return dispQueues.find((q) => q.id === selQueue);
}, [selQueue, dispQueues]);
useEffect(() => {
const q = dispQueues.find((currQ) => !currQ.archived);
if (q && !currQueue) {
setSelQueue(q.id);
}
}, [dispQueues, currQueue]);
const isMobile = useMediaQuery(`(max-width: ${MOBILE_BP})`);
return (
queues && (
<Grid.Row style={{ marginTop: "2rem" }} columns={2}>
{currQueue && (
<>
<Grid.Column width={4}>
<Menu
fluid
vertical
style={{
display: "flex",
minHeight: isMobile ? "0rem" : "20rem",
}}
>
{dispQueues.map((q) => (
<QueueMenuItem
key={q.id}
queue={q}
courseId={course.id}
initialQuestions={questionmap[q.id]}
active={selQueue === q.id}
setActiveQueue={setSelQueue}
play={play}
/>
))}
</Menu>
</Grid.Column>
<Grid.Column stretched width={12}>
<StudentQueue
key={currQueue.id}
course={course}
queue={currQueue}
tags={tags}
queueMutate={queueMutate}
questions={questionmap[currQueue.id] || []}
/>
</Grid.Column>
</>
)}
{!currQueue && (
<Grid.Column width={16}>
<Message info>
<Message.Header>No {QUEUES_LABEL}</Message.Header>
This course currently has no {queuesLabel}!
</Message>
</Grid.Column>
)}
</Grid.Row>
)
);
};
export default StudentQueues;