Skip to content

Commit 01297b3

Browse files
committed
Sort the questions every 5 seconds.
1 parent 0c1a669 commit 01297b3

File tree

3 files changed

+40
-26
lines changed

3 files changed

+40
-26
lines changed

src/client/components/queue/QuestionList.tsx

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
Thead,
99
Tr,
1010
} from "@chakra-ui/react";
11-
import React, { useCallback, useMemo, useState } from "react";
11+
import React, { useCallback, useEffect, useState } from "react";
1212
import { QueueAction, QueueSortType } from "../../generated/graphql";
1313
import {
1414
QuestionContainer,
@@ -34,26 +34,10 @@ export const QuestionList: React.FC<Props> = ({
3434
isStaff,
3535
showEnrolledSession,
3636
}) => {
37-
// const [currentInterval, setCurrentInterval] = useState<
38-
// ReturnType<typeof setInterval>
39-
// >();
40-
const sortedQuestions = useMemo(() => {
41-
switch (sortType) {
42-
case QueueSortType.Questions:
43-
return sortBy(questions, (question) => question.questionCount);
44-
case QueueSortType.Time:
45-
return sortBy(questions, (question) =>
46-
question.askedTime.getTime()
47-
);
48-
case QueueSortType.QuestionsAndTime:
49-
return sortBy(questions, (question) => {
50-
const elapsedTime =
51-
new Date().getTime() - question.askedTime.getTime();
52-
return -elapsedTime / (question.questionCount + 1);
53-
});
54-
}
55-
}, [questions, sortType]);
5637
const [averageWaitTime, setAverageWaitTime] = useState(0);
38+
const [sortedQuestions, setSortedQuestions] = useState<
39+
Array<QuestionProps>
40+
>([]);
5741
const updateAverageTime = useCallback(() => {
5842
const totalWaitTime = questions
5943
.map((question) =>
@@ -62,7 +46,40 @@ export const QuestionList: React.FC<Props> = ({
6246
.reduce((a, b) => a + b, 0);
6347
setAverageWaitTime(totalWaitTime / questions.length);
6448
}, [questions]);
49+
const sortQuestions = useCallback(() => {
50+
switch (sortType) {
51+
case QueueSortType.Questions:
52+
setSortedQuestions(
53+
sortBy(questions, (question) => question.questionCount)
54+
);
55+
break;
56+
case QueueSortType.Time:
57+
setSortedQuestions(
58+
sortBy(questions, (question) =>
59+
question.askedTime.getTime()
60+
)
61+
);
62+
break;
63+
case QueueSortType.QuestionsAndTime:
64+
setSortedQuestions(
65+
sortBy(questions, (question) => {
66+
const elapsedTime =
67+
new Date().getTime() - question.askedTime.getTime();
68+
console.log(
69+
-elapsedTime / (question.questionCount + 1),
70+
new Date(),
71+
question.askerName
72+
);
73+
return -elapsedTime / (question.questionCount + 1);
74+
})
75+
);
76+
}
77+
}, [questions, sortType]);
78+
useEffect(() => {
79+
sortQuestions();
80+
}, [sortQuestions]);
6581
useInterval(updateAverageTime, 5000);
82+
useInterval(sortQuestions, 5000);
6683
return (
6784
<>
6885
<Divider />
@@ -88,7 +105,7 @@ export const QuestionList: React.FC<Props> = ({
88105
<Th isNumeric>Questions today</Th>
89106
<Th>Elapsed time</Th>
90107
{showEnrolledSession && <Th>Enrolled in</Th>}
91-
{isStaff && <Th />}
108+
<Th />
92109
</Tr>
93110
</Thead>
94111
<Tbody>

src/client/components/queue/Queue.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ export const Queue: React.FC<Props> = ({
119119
sortType={sortType}
120120
questions={questions}
121121
actions={actions}
122-
// buttonsOnClick={buttonsOnClick}
123122
isStaff={isStaff}
124123
showEnrolledSession={showEnrolledSession}
125124
/>

src/client/hooks/useInterval.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@ export const useInterval = (
2525
const tick = () => {
2626
savedCallback.current?.();
2727
};
28-
if (delay !== null) {
29-
const id = setInterval(tick, delay);
30-
return () => clearInterval(id);
31-
}
28+
const id = setInterval(tick, delay);
29+
return () => clearInterval(id);
3230
}, [delay]);
3331
};

0 commit comments

Comments
 (0)