-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathRealTimePredict.tsx
88 lines (81 loc) · 2 KB
/
RealTimePredict.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
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
import { FC } from 'react'
import { Portal } from '@/components/Portal'
import { Item, useUrlChange } from './Item'
import { useFetchPreviousRatingData, usePredict, useUser } from './utils'
import { TDWrap } from './Predict'
interface RealTimePredictItemProps {
isVirtual?: boolean
hasMyRank: boolean
showOldRating: boolean
showPredictordelta: boolean
showNewRating: boolean
showExpectingRanking: boolean
index: number
row: HTMLElement
beta?: boolean
}
export const RealTimePredictItem: FC<RealTimePredictItemProps> = ({
hasMyRank,
index,
row,
beta,
...props
}) => {
const { username, region } = useUser(hasMyRank, index, row, beta)
const [{ contestId: contestSlug }] = useUrlChange(beta)
usePredict({
username,
region,
contestSlug,
})
return (
<Item
realTime={true}
{...{ ...props, contestSlug, region, username }}
beta={beta}
/>
)
}
interface RealTimePredictProps {
rows: HTMLElement[]
hasMyRank: boolean
showOldRating: boolean
showPredictordelta: boolean
showNewRating: boolean
showExpectingRanking: boolean
beta?: boolean
}
export const RealTimePredict: FC<RealTimePredictProps> = ({
rows,
hasMyRank,
...props
}) => {
const [{ contestId: contestSlug }] = useUrlChange(props.beta)
useFetchPreviousRatingData(contestSlug)
const borderColor = props.beta ? '#888' : '#ddd'
return (
<>
{rows.map((row, i) => (
<Portal container={row} key={i}>
<TDWrap
style={{
borderLeft: `2px dashed ${borderColor}`,
borderRight: `2px dashed ${borderColor}`,
borderBottom:
i === rows.length - 1 ? `2px dashed ${borderColor}` : '',
height: '100%',
width: 300,
padding: 8,
}}
beta={props.beta}
>
<RealTimePredictItem
row={row}
{...{ ...props, hasMyRank, index: i }}
/>
</TDWrap>
</Portal>
))}
</>
)
}