11import { FC , useEffect , useState } from 'react'
2+ import { css } from 'styled-components/macro'
23
34import { debounce } from '../../../utils'
45
@@ -7,6 +8,8 @@ import { ParamType, useGetPredictionQuery } from './rankSlice'
78type ItmeType = {
89 row : number
910 hasMyRank : boolean
11+ showNewRating : boolean
12+ showPredictordelta : boolean
1013}
1114
1215function getParam ( ) : ParamType {
@@ -48,7 +51,12 @@ function useUrlChange() {
4851 return [ param ] as const
4952}
5053
51- const Item : FC < ItmeType > = ( { row, hasMyRank } ) => {
54+ const Item : FC < ItmeType > = ( {
55+ row,
56+ hasMyRank,
57+ showNewRating,
58+ showPredictordelta,
59+ } ) => {
5260 const [ param ] = useUrlChange ( )
5361 const params : ParamType = { ...param }
5462 if ( hasMyRank ) {
@@ -62,17 +70,53 @@ const Item: FC<ItmeType> = ({ row, hasMyRank }) => {
6270 return < span > ...loading</ span >
6371 }
6472
65- let predictor : number | undefined = items ?. [ row ] ?. delta
73+ const predictor : number | undefined = items ?. [ row ] ?. delta ?. toFixed ( 1 ) ,
74+ newRating = items ?. [ row ] ?. newRating ?. toFixed ( 1 )
6675
67- if ( ! predictor ) {
68- return < span > { '' } </ span >
76+ if ( ! predictor || ! newRating ) {
77+ return < > </ >
6978 }
7079
71- predictor = Math . round ( predictor * 100 ) / 100
72-
7380 return (
74- < div style = { { color : predictor >= 0 ? 'green' : 'gray' } } >
75- { predictor > 0 ? `+${ predictor } ` : predictor }
81+ < div
82+ css = { css `
83+ display : flex;
84+ ` }
85+ >
86+ { showPredictordelta && (
87+ < div
88+ css = { css `
89+ color : ${ predictor >= 0 ? 'green' : 'gray' } ;
90+ width : 55px ;
91+ ` }
92+ >
93+ { predictor > 0 ? `+${ predictor } ` : predictor }
94+ </ div >
95+ ) }
96+ { showNewRating && (
97+ < div
98+ css = {
99+ showPredictordelta
100+ ? // 如果有显示分数变化,则新分数只需要区分颜色
101+ css `
102+ color : ${ predictor >= 0 ? `green` : `gray` } ;
103+ `
104+ : // 如果没有显示分数变化,则需要将分数变化反应到颜色的深浅中
105+ css `
106+ font-weight : bold;
107+ color : ${ predictor >= 0
108+ ? `rgb(0 136 0 / ${
109+ Math . min ( predictor / 100 , 1 ) * 70 + 30
110+ } %)`
111+ : `rgb(64 64 64 / ${
112+ Math . min ( - predictor / 100 , 1 ) * 70 + 30
113+ } %)`} ;
114+ `
115+ }
116+ >
117+ { newRating }
118+ </ div >
119+ ) }
76120 </ div >
77121 )
78122}
0 commit comments