fix(in-655): incorrect team stats lexics

pull/221/head
Ruslan Khayrullin 3 years ago
parent aa41e833c7
commit fe18150ee7
  1. 68
      src/features/MatchSidePlaylists/components/TeamsStatsTable/Cell.tsx
  2. 26
      src/features/MatchSidePlaylists/components/TeamsStatsTable/hooks.tsx
  3. 6
      src/features/MatchSidePlaylists/components/TeamsStatsTable/index.tsx
  4. 6
      src/features/MatchSidePlaylists/components/TeamsStatsTable/styled.tsx

@ -1,11 +1,16 @@
import { Fragment, useRef } from 'react' import { Fragment, useRef } from 'react'
import { createPortal } from 'react-dom'
import { useQueryClient } from 'react-query' import { useQueryClient } from 'react-query'
import { useTour } from '@reactour/tour' import { useTour } from '@reactour/tour'
import isNumber from 'lodash/isNumber' import isNumber from 'lodash/isNumber'
import { KEYBOARD_KEYS, querieKeys } from 'config' import {
isMobileDevice,
KEYBOARD_KEYS,
querieKeys,
} from 'config'
import type { import type {
Param, Param,
@ -14,7 +19,12 @@ import type {
} from 'requests' } from 'requests'
import { getStatsEvents } from 'requests' import { getStatsEvents } from 'requests'
import { usePageParams, useEventListener } from 'hooks' import {
usePageParams,
useEventListener,
useTooltip,
useModalRoot,
} from 'hooks'
import { getHalfTime } from 'features/MatchPage/helpers/getHalfTime' import { getHalfTime } from 'features/MatchPage/helpers/getHalfTime'
import { useMatchPageStore } from 'features/MatchPage/store' import { useMatchPageStore } from 'features/MatchPage/store'
@ -24,6 +34,7 @@ import { Spotlight, Steps } from 'features/MatchTour'
import { StatsType } from '../TabStats/config' import { StatsType } from '../TabStats/config'
import { CircleAnimationBar } from '../CircleAnimationBar' import { CircleAnimationBar } from '../CircleAnimationBar'
import { Tooltip } from '../TabStats/styled'
import { import {
CellContainer, CellContainer,
ParamValueContainer, ParamValueContainer,
@ -59,14 +70,28 @@ export const Cell = ({
watchAllEpisodesTimer, watchAllEpisodesTimer,
} = useMatchPageStore() } = useMatchPageStore()
const { shortSuffix, suffix } = useLexicsStore() const { suffix } = useLexicsStore()
const { currentStep, isOpen } = useTour() const { currentStep, isOpen } = useTour()
const client = useQueryClient() const client = useQueryClient()
const {
isTooltipShown,
onMouseLeave,
onMouseOver,
tooltipStyle,
tooltipText,
} = useTooltip()
const modalRoot = useModalRoot()
const { translate } = useLexicsStore()
const matchScore = client.getQueryData<MatchScore>(querieKeys.matchScore) const matchScore = client.getQueryData<MatchScore>(querieKeys.matchScore)
const isTeam1 = teamId === profile?.team1.id
const getDisplayedValue = (val: number | null) => ( const getDisplayedValue = (val: number | null) => (
isNumber(val) ? String(val) : '-' isNumber(val) ? String(val) : '-'
) )
@ -104,7 +129,7 @@ export const Cell = ({
setEpisodeInfo({ setEpisodeInfo({
episodesCount: param.val!, episodesCount: param.val!,
paramName, paramName,
playerOrTeamName: teamId === profile?.team1.id playerOrTeamName: isTeam1
? profile.team1[`name_${suffix}`] ? profile.team1[`name_${suffix}`]
: profile?.team2[`name_${suffix}`] || '', : profile?.team2[`name_${suffix}`] || '',
}) })
@ -122,7 +147,7 @@ export const Cell = ({
? teamStatItem.param1 ? teamStatItem.param1
: teamStatItem.param2) : teamStatItem.param2)
param && onParamClick(param, teamStatItem[`name_${shortSuffix}`]) param && onParamClick(param, translate(teamStatItem.lexic))
}, },
event: 'keydown', event: 'keydown',
target: paramValueContainerRef, target: paramValueContainerRef,
@ -137,7 +162,7 @@ export const Cell = ({
&& playingData.team.paramId === teamStatItem.param1.id && playingData.team.paramId === teamStatItem.param1.id
&& playingData.team.id === teamId && playingData.team.id === teamId
? ( ? (
<ParamValue> <ParamValue onMouseLeave={onMouseLeave}>
<CircleAnimationBar <CircleAnimationBar
text={getDisplayedValue(teamStatItem.param1.val)} text={getDisplayedValue(teamStatItem.param1.val)}
size={22} size={22}
@ -147,13 +172,21 @@ export const Cell = ({
: ( : (
<ParamValue <ParamValue
clickable={isClickable(teamStatItem.param1)} clickable={isClickable(teamStatItem.param1)}
onClick={() => onParamClick(teamStatItem.param1, teamStatItem[`name_${shortSuffix}`])} onClick={() => onParamClick(teamStatItem.param1, translate(teamStatItem.lexic))}
data-param-id={teamStatItem.param1.id} data-param-id={teamStatItem.param1.id}
hasValue={Boolean(teamStatItem.param1.val)} hasValue={Boolean(teamStatItem.param1.val)}
// eslint-disable-next-line react/jsx-props-no-spreading // eslint-disable-next-line react/jsx-props-no-spreading
{...firstClickableParam === teamStatItem.param1 && { {...firstClickableParam === teamStatItem.param1 && {
'data-step': Steps.ClickToWatchPlaylist, 'data-step': Steps.ClickToWatchPlaylist,
}} }}
// eslint-disable-next-line react/jsx-props-no-spreading
{...!isMobileDevice && isNumber(teamStatItem.param1.val) && teamStatItem.param2 && {
onMouseLeave,
onMouseOver: onMouseOver({
horizontalPosition: isTeam1 ? 'left' : 'right',
tooltipText: translate(teamStatItem.param1.lexic),
}),
}}
> >
{getDisplayedValue(teamStatItem.param1.val)} {getDisplayedValue(teamStatItem.param1.val)}
{firstClickableParam === teamStatItem.param1 {firstClickableParam === teamStatItem.param1
@ -168,7 +201,7 @@ export const Cell = ({
&& playingData.team.paramId === teamStatItem.param2.id && playingData.team.paramId === teamStatItem.param2.id
&& playingData.team.id === teamId && playingData.team.id === teamId
? ( ? (
<ParamValue> <ParamValue onMouseLeave={onMouseLeave}>
<CircleAnimationBar <CircleAnimationBar
text={getDisplayedValue(teamStatItem.param2.val)} text={getDisplayedValue(teamStatItem.param2.val)}
size={22} size={22}
@ -180,13 +213,24 @@ export const Cell = ({
<Divider>/</Divider> <Divider>/</Divider>
<ParamValue <ParamValue
clickable={isClickable(teamStatItem.param2)} clickable={isClickable(teamStatItem.param2)}
onClick={() => onParamClick(teamStatItem.param2!, teamStatItem[`name_${shortSuffix}`])} onClick={() => onParamClick(
teamStatItem.param2!,
translate(teamStatItem.lexic),
)}
data-param-id={teamStatItem.param2.id} data-param-id={teamStatItem.param2.id}
hasValue={Boolean(teamStatItem.param2.val)} hasValue={Boolean(teamStatItem.param2.val)}
// eslint-disable-next-line react/jsx-props-no-spreading // eslint-disable-next-line react/jsx-props-no-spreading
{...firstClickableParam === teamStatItem.param2 && { {...firstClickableParam === teamStatItem.param2 && {
'data-step': Steps.ClickToWatchPlaylist, 'data-step': Steps.ClickToWatchPlaylist,
}} }}
// eslint-disable-next-line react/jsx-props-no-spreading
{...!isMobileDevice && isNumber(teamStatItem.param2.val) && {
onMouseLeave,
onMouseOver: onMouseOver({
horizontalPosition: isTeam1 ? 'left' : 'right',
tooltipText: translate(teamStatItem.param2.lexic),
}),
}}
> >
{getDisplayedValue(teamStatItem.param2.val)} {getDisplayedValue(teamStatItem.param2.val)}
{firstClickableParam === teamStatItem.param2 {firstClickableParam === teamStatItem.param2
@ -198,6 +242,12 @@ export const Cell = ({
</Fragment> </Fragment>
)} )}
</ParamValueContainer> </ParamValueContainer>
{isTooltipShown && modalRoot.current && createPortal(
<Tooltip style={tooltipStyle}>
{tooltipText}
</Tooltip>,
modalRoot.current,
)}
</CellContainer> </CellContainer>
) )
} }

@ -1,8 +1,12 @@
import { useEffect } from 'react' import { useEffect, useMemo } from 'react'
import find from 'lodash/find' import find from 'lodash/find'
import reduce from 'lodash/reduce'
import type { TeamStatItem } from 'requests'
import { useMatchPageStore } from 'features/MatchPage/store' import { useMatchPageStore } from 'features/MatchPage/store'
import { useLexicsConfig } from 'features/LexicsStore'
export const useTeamsStatsTable = () => { export const useTeamsStatsTable = () => {
const { const {
@ -13,6 +17,26 @@ export const useTeamsStatsTable = () => {
teamsStats, teamsStats,
} = useMatchPageStore() } = useMatchPageStore()
const lexicsIds = useMemo(
() => (
profile
? reduce<TeamStatItem, Array<number>>(
teamsStats[profile.team1.id],
(acc, curr) => {
!acc.includes(curr.lexic) && acc.push(curr.lexic)
!acc.includes(curr.param1.lexic) && acc.push(curr.param1.lexic)
curr.param2 && !acc.includes(curr.param2.lexic) && acc.push(curr.param2.lexic)
return acc
},
[],
)
: []),
[profile, teamsStats],
)
useLexicsConfig(lexicsIds)
const getStatItemById = (paramId: number) => { const getStatItemById = (paramId: number) => {
if (!profile) return null if (!profile) return null

@ -3,7 +3,6 @@ import { useTour } from '@reactour/tour'
import map from 'lodash/map' import map from 'lodash/map'
import { useMatchPageStore } from 'features/MatchPage/store' import { useMatchPageStore } from 'features/MatchPage/store'
import { useLexicsStore } from 'features/LexicsStore'
import { Loader } from 'features/Loader' import { Loader } from 'features/Loader'
import { defaultTheme } from 'features/Theme/config' import { defaultTheme } from 'features/Theme/config'
@ -32,8 +31,6 @@ export const TeamsStatsTable = () => {
getStatItemById, getStatItemById,
} = useTeamsStatsTable() } = useTeamsStatsTable()
const { shortSuffix } = useLexicsStore()
const { isOpen } = useTour() const { isOpen } = useTour()
if (!profile) return null if (!profile) return null
@ -69,7 +66,6 @@ export const TeamsStatsTable = () => {
<tbody> <tbody>
{map(teamsStats[profile.team1.id], (team1StatItem) => { {map(teamsStats[profile.team1.id], (team1StatItem) => {
const team2StatItem = getStatItemById(team1StatItem.param1.id) const team2StatItem = getStatItemById(team1StatItem.param1.id)
const statItemTitle = team1StatItem[`name_${shortSuffix}`]
return ( return (
<Row key={team1StatItem.param1.id}> <Row key={team1StatItem.param1.id}>
@ -80,7 +76,7 @@ export const TeamsStatsTable = () => {
/> />
<CellContainer> <CellContainer>
<StatItemTitle>{statItemTitle}</StatItemTitle> <StatItemTitle t={team1StatItem.lexic} />
</CellContainer> </CellContainer>
<Cell <Cell

@ -4,6 +4,7 @@ import { isMobileDevice } from 'config'
import { Name } from 'features/Name' import { Name } from 'features/Name'
import { customScrollbar } from 'features/Common' import { customScrollbar } from 'features/Common'
import { T9n } from 'features/T9n'
export const Container = styled.div`` export const Container = styled.div``
@ -59,11 +60,12 @@ export const CellContainer = styled.td`
} }
:first-child, :last-child { :first-child, :last-child {
width: 32px; width: 50px;
} }
:first-child { :first-child {
padding-left: 12px; padding-left: 12px;
text-align: left;
} }
:last-child { :last-child {
@ -122,7 +124,7 @@ export const ParamValue = styled.span.attrs(({ clickable }: TParamValue) => ({
: '')} : '')}
` `
export const StatItemTitle = styled.span` export const StatItemTitle = styled(T9n)`
color: ${({ theme }) => theme.colors.white}; color: ${({ theme }) => theme.colors.white};
letter-spacing: -0.078px; letter-spacing: -0.078px;
text-transform: uppercase; text-transform: uppercase;

Loading…
Cancel
Save