8
8
Thead ,
9
9
Tr ,
10
10
} from "@chakra-ui/react" ;
11
- import React , { useCallback , useMemo , useState } from "react" ;
11
+ import React , { useCallback , useEffect , useState } from "react" ;
12
12
import { QueueAction , QueueSortType } from "../../generated/graphql" ;
13
13
import {
14
14
QuestionContainer ,
@@ -34,26 +34,10 @@ export const QuestionList: React.FC<Props> = ({
34
34
isStaff,
35
35
showEnrolledSession,
36
36
} ) => {
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 ] ) ;
56
37
const [ averageWaitTime , setAverageWaitTime ] = useState ( 0 ) ;
38
+ const [ sortedQuestions , setSortedQuestions ] = useState <
39
+ Array < QuestionProps >
40
+ > ( [ ] ) ;
57
41
const updateAverageTime = useCallback ( ( ) => {
58
42
const totalWaitTime = questions
59
43
. map ( ( question ) =>
@@ -62,7 +46,40 @@ export const QuestionList: React.FC<Props> = ({
62
46
. reduce ( ( a , b ) => a + b , 0 ) ;
63
47
setAverageWaitTime ( totalWaitTime / questions . length ) ;
64
48
} , [ 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 ] ) ;
65
81
useInterval ( updateAverageTime , 5000 ) ;
82
+ useInterval ( sortQuestions , 5000 ) ;
66
83
return (
67
84
< >
68
85
< Divider />
@@ -88,7 +105,7 @@ export const QuestionList: React.FC<Props> = ({
88
105
< Th isNumeric > Questions today</ Th >
89
106
< Th > Elapsed time</ Th >
90
107
{ showEnrolledSession && < Th > Enrolled in</ Th > }
91
- { isStaff && < Th /> }
108
+ < Th />
92
109
</ Tr >
93
110
</ Thead >
94
111
< Tbody >
0 commit comments