develop #159

Merged
andrey.dekterev merged 4 commits from develop into master 3 years ago
  1. 10
      .eslintrc
  2. 50486
      package-lock.json
  3. 12
      package.json
  4. 2
      src/components/AccessTimer/index.tsx
  5. 2
      src/components/PictureInPicture/PiP.tsx
  6. 5
      src/components/SimplePopup/index.tsx
  7. 1
      src/components/SmartBanner/index.tsx
  8. 2
      src/config/clients/facr.tsx
  9. 2
      src/config/clients/tunisia.tsx
  10. 1
      src/features/AddCardForm/index.tsx
  11. 12
      src/features/AudioTracks/index.tsx
  12. 4
      src/features/AuthServiceApp/components/ConfirmPopup/index.tsx
  13. 5
      src/features/AuthServiceApp/components/Login/index.tsx
  14. 6
      src/features/AuthServiceApp/components/RegisterPopup/index.tsx
  15. 2
      src/features/AuthServiceApp/components/Registration/index.tsx
  16. 14
      src/features/AuthServiceApp/hooks/useParamsUrl.tsx
  17. 1
      src/features/BuyMatchPopup/components/PackageSelectionStep/index.tsx
  18. 13
      src/features/BuyMatchPopup/components/SelectSubscription/index.tsx
  19. 4
      src/features/BuyMatchPopup/store/hooks/useSubscriptions.tsx
  20. 3
      src/features/Common/Input/index.tsx
  21. 8
      src/features/CompanyInfo/index.tsx
  22. 6
      src/features/HeaderFilters/components/DateFilter/index.tsx
  23. 2
      src/features/HeaderMenu/index.tsx
  24. 3
      src/features/HeaderMobile/styled.tsx
  25. 1
      src/features/HomePage/components/Header/index.tsx
  26. 3
      src/features/HomePage/components/HeaderFilters/index.tsx
  27. 6
      src/features/MatchPage/components/MatchDescription/index.tsx
  28. 9
      src/features/MatchPage/store/hooks/index.tsx
  29. 6
      src/features/MatchPage/store/hooks/useFitersPopup.tsx
  30. 2
      src/features/MatchPage/store/hooks/useStatsTab.tsx
  31. 4
      src/features/MatchPopup/components/LiveMatchPlaylist/index.tsx
  32. 18
      src/features/MatchSidePlaylists/components/MatchPlaylists/index.tsx
  33. 2
      src/features/MatchSidePlaylists/components/PlayersPlaylists/index.tsx
  34. 24
      src/features/MatchSidePlaylists/components/PlayersTable/index.tsx
  35. 4
      src/features/MatchSidePlaylists/components/TabEvents/index.tsx
  36. 6
      src/features/MatchSidePlaylists/components/TabStats/index.tsx
  37. 4
      src/features/MatchSidePlaylists/index.tsx
  38. 1
      src/features/MatchSwitches/components/ScoreSwitch/index.tsx
  39. 1
      src/features/Menu/index.tsx
  40. 2
      src/features/MultiSourcePlayer/components/Settings/index.tsx
  41. 46
      src/features/ProfileCard/index.tsx
  42. 49
      src/features/ProfileHeader/index.tsx
  43. 3
      src/features/ProfileHeader/styled.tsx
  44. 1
      src/features/Search/index.tsx
  45. 2
      src/features/SportsFilter/components/SelectSport/index.tsx
  46. 54
      src/features/SportsFilter/components/SelectSportPopup/index.tsx
  47. 3
      src/features/SportsFilter/components/SelectSportPopup/styled.tsx
  48. 2
      src/features/StreamPlayer/components/Controls/Components/ControlsMobile/index.tsx
  49. 2
      src/features/StreamPlayer/components/Controls/Components/ControlsMobile/styled.tsx
  50. 7
      src/features/StreamPlayer/components/Controls/Components/ControlsWeb/index.tsx
  51. 2
      src/features/StreamPlayer/components/VolumeBar/index.tsx
  52. 5
      src/features/StreamPlayer/index.tsx
  53. 18
      src/features/TeamPage/hooks.tsx
  54. 26
      src/features/TournamentPage/hooks.tsx
  55. 2
      src/features/UserAccount/components/Header/index.tsx
  56. 2
      src/features/UserAccount/components/LogoutButton/index.tsx
  57. 3
      src/features/UserAccount/components/PagePersonalInfo/hooks/index.tsx
  58. 2
      src/features/UserAccount/components/PersonalInfoForm/index.tsx
  59. 1
      src/features/UserAccount/components/ScoreSwitch/index.tsx
  60. 12
      src/features/UserAccount/index.tsx
  61. 1
      src/features/UserFavorites/index.tsx
  62. 3
      src/helpers/bodyScrollLock/index.tsx
  63. 3
      src/pages/HighlightsPage/components/FormHighlights/hooks.tsx
  64. 3
      src/requests/getSelectedSubscriptions.tsx
  65. 6
      src/requests/getTeamPlayers.tsx

@ -80,8 +80,16 @@
], ],
"typescript-sort-keys/interface": 1, "typescript-sort-keys/interface": 1,
"typescript-sort-keys/string-enum": 1, "typescript-sort-keys/string-enum": 1,
"react/function-component-definition": [
2,
{
"namedComponents": "arrow-function",
"unnamedComponents": "arrow-function"
},
],
"react/jsx-no-useless-fragment": [2, { "allowExpressions": true }],
"camelcase": "off", "camelcase": "off",
"default-param-last": 0,
"import/no-unresolved": "off", "import/no-unresolved": "off",
"import/prefer-default-export": "off", "import/prefer-default-export": "off",
"indent": "off", "indent": "off",

50486
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -27,6 +27,7 @@
"@stripe/stripe-js": "^1.13.2", "@stripe/stripe-js": "^1.13.2",
"babel-polyfill": "^6.26.0", "babel-polyfill": "^6.26.0",
"date-fns": "^2.14.0", "date-fns": "^2.14.0",
"eslint-plugin-typescript-sort-keys": "^2.3.0",
"history": "^4.10.1", "history": "^4.10.1",
"hls.js": "^1.1.1", "hls.js": "^1.1.1",
"lodash": "^4.17.15", "lodash": "^4.17.15",
@ -53,10 +54,10 @@
"@storybook/addon-actions": "^6.3.12", "@storybook/addon-actions": "^6.3.12",
"@storybook/addon-docs": "^6.3.12", "@storybook/addon-docs": "^6.3.12",
"@storybook/addon-links": "^5.3.19", "@storybook/addon-links": "^5.3.19",
"@storybook/addons": "^5.3.19", "@storybook/addons": "^7.0.2",
"@storybook/preset-create-react-app": "^3.0.0", "@storybook/preset-create-react-app": "^3.0.0",
"@storybook/preset-typescript": "^3.0.0", "@storybook/preset-typescript": "^3.0.0",
"@storybook/react": "^6.3.12", "@storybook/react": "^7.0.2",
"@testing-library/jest-dom": "^5.15.0", "@testing-library/jest-dom": "^5.15.0",
"@testing-library/react": "^12.1.2", "@testing-library/react": "^12.1.2",
"@testing-library/user-event": "^7.1.2", "@testing-library/user-event": "^7.1.2",
@ -73,8 +74,8 @@
"@types/react-window": "^1.8.5", "@types/react-window": "^1.8.5",
"@types/styled-components": "^5.1.15", "@types/styled-components": "^5.1.15",
"commitizen": "^4.2.4", "commitizen": "^4.2.4",
"eslint": "^7.0.1", "eslint": "^8.38.0",
"eslint-config-airbnb": "18.2.1", "eslint-config-airbnb": "^19.0.4",
"eslint-config-react-app": "^7.0.1", "eslint-config-react-app": "^7.0.1",
"eslint-plugin-import": "^2.22.1", "eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-jsx-a11y": "^6.4.1",
@ -82,13 +83,12 @@
"eslint-plugin-react": "^7.21.5", "eslint-plugin-react": "^7.21.5",
"eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-sort-destructure-keys": "^1.3.5", "eslint-plugin-sort-destructure-keys": "^1.3.5",
"eslint-plugin-typescript-sort-keys": "^1.5.0",
"fork-ts-checker-webpack-plugin": "^7.2.13", "fork-ts-checker-webpack-plugin": "^7.2.13",
"gzipper": "^3.7.0", "gzipper": "^3.7.0",
"husky": "^4.2.5", "husky": "^4.2.5",
"lint-staged": "^10.2.7", "lint-staged": "^10.2.7",
"miragejs": "^0.1.45", "miragejs": "^0.1.45",
"storybook-addon-styled-component-theme": "^1.3.0", "storybook-addon-styled-component-theme": "^2.0.0",
"stylelint": "^13.13.1", "stylelint": "^13.13.1",
"stylelint-config-recommended": "^5.0.0", "stylelint-config-recommended": "^5.0.0",
"stylelint-config-styled-components": "^0.1.1", "stylelint-config-styled-components": "^0.1.1",

@ -107,7 +107,7 @@ export const AccessTimer = ({
<T9n t='sign_in_full_game' /> <T9n t='sign_in_full_game' />
</SignText> </SignText>
</TimerContainer> </TimerContainer>
<SignInBtn onClick={() => logout('saveToken')}> <SignInBtn onClick={() => logout('saveToken')} id='match_register'>
<T9n t='sign_in' /> <T9n t='sign_in' />
</SignInBtn> </SignInBtn>
</AccessTimerContainer> </AccessTimerContainer>

@ -53,7 +53,7 @@ export const PiP = memo(({ isPlaying, videoRef }: PipProps) => {
}, [videoRef, isPlaying, user]) }, [videoRef, isPlaying, user])
return ( return (
<PipWrapper> <PipWrapper id='match_video_pic_in_pic'>
<Icon refIcon='PiP' onClick={togglePip} /> <Icon refIcon='PiP' onClick={togglePip} />
</PipWrapper> </PipWrapper>
) )

@ -58,7 +58,10 @@ export const SimplePopup = (props: Props) => {
{buttonName {buttonName
&& ( && (
<Footer> <Footer>
<ScApplyButton onClick={onHandle}> <ScApplyButton
onClick={onHandle}
id='match_afterlimit_register'
>
<T9n t={buttonName} /> <T9n t={buttonName} />
</ScApplyButton> </ScApplyButton>
</Footer> </Footer>

@ -51,6 +51,7 @@ export const SmartBanner = ({ setIsOpenDownload }: SmartBannerProps) => (
) )
setIsOpenDownload(false) setIsOpenDownload(false)
}} }}
id='download_app'
> >
<ScBtnDownload>Download</ScBtnDownload> <ScBtnDownload>Download</ScBtnDownload>
</a> </a>

@ -9,7 +9,7 @@ import {
} from './types' } from './types'
const randomHash = () => ( const randomHash = () => (
(Math.random() ** Math.random()) * 9999999999999999 (Math.random() ** Math.random()) * 100000000000000
) )
const params = { const params = {

@ -7,7 +7,7 @@ import {
} from './types' } from './types'
const randomHash = () => ( const randomHash = () => (
(Math.random() ** Math.random()) * 9999999999999999 (Math.random() ** Math.random()) * 100000000000000
) )
export const tunisia: ClientConfig = { export const tunisia: ClientConfig = {

@ -42,6 +42,7 @@ export const AddCardForm = ({
<OutlineButton <OutlineButton
type='button' type='button'
onClick={onAddClick} onClick={onAddClick}
id='personal_cards_add'
> >
<Icon src='plusIcon' /> <Icon src='plusIcon' />
<T9n t='add_card' /> <T9n t='add_card' />

@ -89,13 +89,11 @@ export const AudioTracks = ({
return ( return (
<Fragment> <Fragment>
{audioTracks?.length > 1 && ( {audioTracks?.length > 1 && (
<Fragment> <SelectedAudioTrack onClick={open}>
<SelectedAudioTrack onClick={open}> {!selectedAudioTrack && audioTracks[0].name}
{!selectedAudioTrack && audioTracks[0].name} {selectedAudioTrack?.name}
{selectedAudioTrack?.name} <IconArrow active={isOpen} />
<IconArrow active={isOpen} /> </SelectedAudioTrack>
</SelectedAudioTrack>
</Fragment>
)} )}
{content} {content}
</Fragment> </Fragment>

@ -44,11 +44,11 @@ export const ConfirmPopup = (props: Props) => {
</ScText> </ScText>
<ScText> <ScText>
<T9n t='by_clicking' /> <T9n t='by_clicking' />
<ScLink href={`${AUTH_SERVICE}${client.termsLink}`} target='_blank'> <ScLink href={`${AUTH_SERVICE}${client.termsLink}`} target='_blank' id='personal_t_k'>
<T9n t='terms_and_conditions' /> <T9n t='terms_and_conditions' />
</ScLink>&nbsp; </ScLink>&nbsp;
<T9n t='and' /> <T9n t='and' />
<ScLink href={`${AUTH_SERVICE}${client.privacyLink}`} target='_blank'> <ScLink href={`${AUTH_SERVICE}${client.privacyLink}`} target='_blank' id='personal_policy'>
<T9n t='privacy_policy_and_statement' /> <T9n t='privacy_policy_and_statement' />
</ScLink> </ScLink>
</ScText> </ScText>

@ -121,7 +121,10 @@ const Login = () => {
} }
</ButtonSolid> </ButtonSolid>
<RegisterButton to={`${PAGES.registration}${window.location.search}`}> <RegisterButton
to={`${PAGES.registration}${window.location.search}`}
id='auth_registration'
>
<T9n t='register' /> <T9n t='register' />
</RegisterButton> </RegisterButton>
<ContinueWith t='or_continue_with' /> <ContinueWith t='or_continue_with' />

@ -47,7 +47,11 @@ export const RegisterPopup = (props: Props) => {
</Text> </Text>
</Body> </Body>
<Footer> <Footer>
<ApplyButton onClick={() => handleModalClose()}>Ok</ApplyButton> <ApplyButton
onClick={() => handleModalClose()}
id='auth_register_ok'
>Ok
</ApplyButton>
</Footer> </Footer>
</Wrapper> </Wrapper>
</Modal> </Modal>

@ -131,7 +131,7 @@ const Registration = () => {
</CheckboxWrapper> </CheckboxWrapper>
<ButtonsBlock> <ButtonsBlock>
<ButtonSolid disabled={isSubmitDisabled} type='submit'> <ButtonSolid disabled={isSubmitDisabled} type='submit' id='auth_register'>
{ {
isFetching isFetching
? <ScArrowLoader /> ? <ScArrowLoader />

@ -22,12 +22,14 @@ export const useParamsUrl = () => {
const urlSearchParams = useMemo(() => new URLSearchParams(location.search), [location.search]) const urlSearchParams = useMemo(() => new URLSearchParams(location.search), [location.search])
// safari начал поддержку Object.fromEntries с версии 12.1 // safari начал поддержку Object.fromEntries с версии 12.1
const params = useMemo(() => ( const params = useMemo(
Array.from(urlSearchParams.entries()).reduce((acc, [key, value]) => ({ () => (
...acc, Array.from(urlSearchParams.entries()).reduce((acc, [key, value]) => ({
[key]: value, ...acc,
}), {})), [key]: value,
[urlSearchParams]) }), {})),
[urlSearchParams],
)
return { return {
client_id, client_id,

@ -152,6 +152,7 @@ export const PackageSelectionStep = () => {
logout('saveToken') logout('saveToken')
} }
}} }}
id='purchase_buy'
> >
{loader ? ( {loader ? (
<ArrowLoader disabled /> <ArrowLoader disabled />

@ -45,12 +45,12 @@ export const SelectSubscriptionStep = () => {
selectedSubscription, selectedSubscription,
} = useBuyMatchPopupStore() } = useBuyMatchPopupStore()
const getPackagesCurrency = useCallback( const getPackagesCurrency = useCallback((
(packages: Record<SubscriptionType, Array<MatchPackage>>) => { packages: Record<SubscriptionType, Array<MatchPackage>>,
const packageWithValue = Object.entries(packages).find(([key, value]) => value.length)?.[1][0] ) => {
return packageWithValue ? packageWithValue.currency : 'RUB' const packageWithValue = Object.entries(packages).find(([key, value]) => value.length)?.[1][0]
}, [], return packageWithValue ? packageWithValue.currency : 'RUB'
) }, [])
if (!match || !matchSubscriptions) return null if (!match || !matchSubscriptions) return null
@ -105,6 +105,7 @@ export const SelectSubscriptionStep = () => {
<Button <Button
disabled={!selectedSubscription} disabled={!selectedSubscription}
onClick={onNext} onClick={onNext}
id='purchase_next'
> >
<T9n t='next_choose' /> <T9n t='next_choose' />
</Button> </Button>

@ -83,9 +83,7 @@ export const useSubscriptions = () => {
}) })
setMatchSubscriptionsList(convertedSubscriptions) setMatchSubscriptionsList(convertedSubscriptions)
fetchLexics(subscriptions.data || []) fetchLexics(subscriptions.data || [])
const firstPackage = find( const firstPackage = find(convertedSubscriptions, (subscription) => !isEmpty(subscription))
convertedSubscriptions, (subscription) => !isEmpty(subscription),
)
setSelectedPeriod(getInitialPeriod(firstPackage)) setSelectedPeriod(getInitialPeriod(firstPackage))
}, [fetchLexics, suffix]) }, [fetchLexics, suffix])

@ -26,6 +26,7 @@ type Props = {
disabled?: boolean, disabled?: boolean,
editIcon?: boolean, editIcon?: boolean,
iconName?: string, iconName?: string,
id?: string,
inputWidth?: number, inputWidth?: number,
label?: string, label?: string,
labelAfter?: string, labelAfter?: string,
@ -54,6 +55,7 @@ export const Input = ({
editIcon = false, editIcon = false,
error, error,
iconName, iconName,
id,
inputWidth, inputWidth,
label, label,
labelAfter, labelAfter,
@ -84,6 +86,7 @@ export const Input = ({
wrapperHeight={wrapperHeight} wrapperHeight={wrapperHeight}
hasRightIcon={editIcon} hasRightIcon={editIcon}
error={error} error={error}
id={id}
> >
<Label> <Label>
<LabelTitle labelWidth={labelWidth} isUserAccountPage={isUserAccountPage}> <LabelTitle labelWidth={labelWidth} isUserAccountPage={isUserAccountPage}>

@ -43,11 +43,9 @@ export const CompanyInfo = ({
return '' return ''
case ClientNames.Lff: case ClientNames.Lff:
return ( return (
<Fragment> <CompanyInfoText>
<CompanyInfoText> <T9n t='19590' />
<T9n t='19590' /> </CompanyInfoText>
</CompanyInfoText>
</Fragment>
) )
case ClientNames.Insports: case ClientNames.Insports:
return ( return (

@ -48,7 +48,11 @@ export const DateFilter = () => {
<MonthYear onClick={openDatePicker}> <MonthYear onClick={openDatePicker}>
{date.month} {' '} {date.year} {date.month} {' '} {date.year}
</MonthYear> </MonthYear>
<DateButton isActive={isOpen} onClick={openDatePicker}> <DateButton
isActive={isOpen}
onClick={openDatePicker}
id='main_calendar'
>
<Icon refIcon='Calendar' color='#fff' /> <Icon refIcon='Calendar' color='#fff' />
</DateButton> </DateButton>
</MonthWrapper> </MonthWrapper>

@ -10,7 +10,7 @@ import { HeaderGroup, HeaderLogo } from './styled'
export const HeaderMenu = () => ( export const HeaderMenu = () => (
<HeaderGroup> <HeaderGroup>
<Search /> <Search />
<Link to={PAGES.home}> <Link to={PAGES.home} id='general_main_page'>
<HeaderLogo /> <HeaderLogo />
</Link> </Link>
<Menu /> <Menu />

@ -12,7 +12,8 @@ import { customScrollbar } from 'features/Common'
export const DEFAULT_HEADER_COLOR = 'rgba(53, 96, 225, 0.56)' export const DEFAULT_HEADER_COLOR = 'rgba(53, 96, 225, 0.56)'
export const defaultHeaderStyles = ( export const defaultHeaderStyles = (
color: string = DEFAULT_HEADER_COLOR, headerImage: string | undefined | null, color: string = DEFAULT_HEADER_COLOR,
headerImage: string | undefined | null,
) => { ) => {
if (['lff', 'tunisia'].includes(client.name)) { if (['lff', 'tunisia'].includes(client.name)) {
return client.styles.homePageHeader return client.styles.homePageHeader

@ -34,6 +34,7 @@ export const Header = () => {
updateDate() updateDate()
resetFilters() resetFilters()
}} }}
id='general_main_page'
> >
<HeaderLogo /> <HeaderLogo />
</Link> </Link>

@ -76,18 +76,21 @@ export const HeaderFilters = () => {
<ScFilterItem <ScFilterItem
className={isActiveFilter('live') ? 'activeLive' : ''} className={isActiveFilter('live') ? 'activeLive' : ''}
onClick={() => checkFilter('live')} onClick={() => checkFilter('live')}
id='main_live'
> >
<T9n t='live' /> <T9n t='live' />
</ScFilterItem> </ScFilterItem>
<ScFilterItem <ScFilterItem
className={isActiveFilter('upcoming') ? 'activeButton' : ''} className={isActiveFilter('upcoming') ? 'activeButton' : ''}
onClick={() => checkFilter('upcoming')} onClick={() => checkFilter('upcoming')}
id='main_upcoming'
> >
<T9n t='upcoming' /> <T9n t='upcoming' />
</ScFilterItem> </ScFilterItem>
<ScFilterItem <ScFilterItem
className={isActiveFilter('completed') ? 'activeButton' : ''} className={isActiveFilter('completed') ? 'activeButton' : ''}
onClick={() => checkFilter('completed')} onClick={() => checkFilter('completed')}
id='main_completed'
> >
<T9n t='completed' /> <T9n t='completed' />
</ScFilterItem> </ScFilterItem>

@ -89,8 +89,10 @@ export const MatchDescription = () => {
const isChangedTimeFormat = includes(['US', 'CA'], user?.profile.country_code) const isChangedTimeFormat = includes(['US', 'CA'], user?.profile.country_code)
const localDate = format(parseDate(date), isMobileDevice ? 'MMM d, y' : 'MMMM d, y') const localDate = format(parseDate(date), isMobileDevice ? 'MMM d, y' : 'MMMM d, y')
const changedTimeFormat = format(parseDate(date), const changedTimeFormat = format(
isChangedTimeFormat ? 'h:mm a' : 'HH:mm') parseDate(date),
isChangedTimeFormat ? 'h:mm a' : 'HH:mm',
)
return ( return (
<Description isHidden={!profileCardShown}> <Description isHidden={!profileCardShown}>

@ -160,20 +160,23 @@ export const useMatchPage = () => {
let getIntervalMatch: ReturnType<typeof setInterval> let getIntervalMatch: ReturnType<typeof setInterval>
if (matchProfile?.live && !matchProfile.youtube_link) { if (matchProfile?.live && !matchProfile.youtube_link) {
getIntervalMatch = setInterval( getIntervalMatch = setInterval(
() => getMatchInfo(sportType, matchId).then(setMatchProfile), 1000 * 60 * 3, () => getMatchInfo(sportType, matchId).then(setMatchProfile),
1000 * 60 * 3,
) )
} }
return () => clearInterval(getIntervalMatch) return () => clearInterval(getIntervalMatch)
}, [ }, [
matchProfile, matchProfile,
sportType, sportType,
matchId]) matchId,
])
useEffect(() => { useEffect(() => {
if (user || !userInfo?.email) return if (user || !userInfo?.email) return
const counter = setInterval( const counter = setInterval(
() => getMatchViewDuration(Number(userInfo?.email)), 1000 * 30, () => getMatchViewDuration(Number(userInfo?.email)),
1000 * 30,
) )
// eslint-disable-next-line // eslint-disable-next-line
return () => clearInterval(counter) return () => clearInterval(counter)

@ -46,10 +46,12 @@ export const useFiltersPopup = ({
const isAllActionsChecked = every(uniqEvents, (el) => (includes(activeEvents, el))) const isAllActionsChecked = every(uniqEvents, (el) => (includes(activeEvents, el)))
const isFirstTeamPlayersChecked = every( const isFirstTeamPlayersChecked = every(
uniqPlayersTeam1, (el) => (includes(activeFirstTeamPlayers, el)), uniqPlayersTeam1,
(el) => (includes(activeFirstTeamPlayers, el)),
) )
const isSecondTeamPlayersChecked = every( const isSecondTeamPlayersChecked = every(
uniqPlayersTeam2, (el) => (includes(activeSecondTeamPlayers, el)), uniqPlayersTeam2,
(el) => (includes(activeSecondTeamPlayers, el)),
) )
const toggle = () => { const toggle = () => {

@ -89,8 +89,8 @@ export const useStatsTab = ({
})) as Array<EventPlaylistOption> })) as Array<EventPlaylistOption>
const playNextEpisode = ({ const playNextEpisode = ({
order,
episodesToPlay = stateEpisodesToPlay, episodesToPlay = stateEpisodesToPlay,
order,
}: PlayNextEpisodeArgs = {}) => { }: PlayNextEpisodeArgs = {}) => {
const currentOrder = order === 0 ? order : plaingOrder const currentOrder = order === 0 ? order : plaingOrder
const isLastEpisode = currentOrder === episodesToPlay.length const isLastEpisode = currentOrder === episodesToPlay.length

@ -26,13 +26,13 @@ export const LiveMatchPlaylist = () => {
const sport = getSportLexic(match.sportType) const sport = getSportLexic(match.sportType)
return ( return (
<List> <List>
<Item> <Item id='main_watch_live'>
<SimplePlaylistButton <SimplePlaylistButton
to={`/${sport}${PAGES.match}/${match.id}`} to={`/${sport}${PAGES.match}/${match.id}`}
title={isMobileDevice ? 'watch' : 'watch_live_stream'} title={isMobileDevice ? 'watch' : 'watch_live_stream'}
/> />
</Item> </Item>
<Item> <Item id='main_watch_beginning'>
<SimplePlaylistButton <SimplePlaylistButton
to={`/${sport}${PAGES.match}/${match.id}/?resume=${0}`} to={`/${sport}${PAGES.match}/${match.id}/?resume=${0}`}
title='watch_from_beginning' title='watch_from_beginning'

@ -46,17 +46,19 @@ const Item = styled.li`
` `
export const MatchPlaylists = forwardRef( export const MatchPlaylists = forwardRef(
({ (
live, {
onSelect, live,
playlists, onSelect,
selectedMathPlaylist, playlists,
}: Props, selectedMathPlaylist,
ref: ForwardedRef<HTMLUListElement>) => ( }: Props,
ref: ForwardedRef<HTMLUListElement>,
) => (
<List ref={ref}> <List ref={ref}>
{ {
map(playlists, (playlist) => ( map(playlists, (playlist) => (
<Item key={playlist.id}> <Item key={playlist.id} id={`match_watch_${playlist.id}`}>
<PlayButton <PlayButton
duration={playlist.duration} duration={playlist.duration}
active={isEqual(playlist, selectedMathPlaylist)} active={isEqual(playlist, selectedMathPlaylist)}

@ -61,12 +61,14 @@ export const PlayersPlaylists = ({
<Tab <Tab
active={selectedTeam === Teams.TEAM1} active={selectedTeam === Teams.TEAM1}
onClick={() => setSelectedTeam(Teams.TEAM1)} onClick={() => setSelectedTeam(Teams.TEAM1)}
id='match_players_team1'
> >
<Name nameObj={profile.team1} prefix='abbrev_' /> <Name nameObj={profile.team1} prefix='abbrev_' />
</Tab> </Tab>
<Tab <Tab
active={selectedTeam === Teams.TEAM2} active={selectedTeam === Teams.TEAM2}
onClick={() => setSelectedTeam(Teams.TEAM2)} onClick={() => setSelectedTeam(Teams.TEAM2)}
id='match_players_team2'
> >
<Name nameObj={profile.team2} prefix='abbrev_' /> <Name nameObj={profile.team2} prefix='abbrev_' />
</Tab> </Tab>

@ -1,5 +1,3 @@
import { Fragment } from 'react'
import { useTour } from '@reactour/tour' import { useTour } from '@reactour/tour'
import map from 'lodash/map' import map from 'lodash/map'
@ -88,18 +86,16 @@ export const PlayersTable = (props: PlayersTableProps) => {
onScroll={handleScroll} onScroll={handleScroll}
> >
{!isExpanded && paramsCount > DISPLAYED_PARAMS_COLUMNS && ( {!isExpanded && paramsCount > DISPLAYED_PARAMS_COLUMNS && (
<Fragment> <ArrowButtonRight
<ArrowButtonRight aria-label='Scroll to right'
aria-label='Scroll to right' onClick={slideRight}
onClick={slideRight} visible={showRightArrow}
visible={showRightArrow} >
> <Arrow direction='right' data-step={Steps.ShowMoreStats} />
<Arrow direction='right' data-step={Steps.ShowMoreStats} /> {Boolean(currentStep === Steps.ShowMoreStats && isOpen) && (
{Boolean(currentStep === Steps.ShowMoreStats && isOpen) && ( <Spotlight />
<Spotlight /> )}
)} </ArrowButtonRight>
</ArrowButtonRight>
</Fragment>
)} )}
<Table <Table
role='marquee' role='marquee'

@ -76,14 +76,16 @@ export const TabEvents = ({
<Tab <Tab
active={activeStatus} active={activeStatus}
onClick={isLiveMatch ? setReversed : setUnreversed} onClick={isLiveMatch ? setReversed : setUnreversed}
id='match_plays_sort_start'
/> />
<Tab <Tab
active={!activeStatus} active={!activeStatus}
onClick={isLiveMatch ? setUnreversed : setReversed} onClick={isLiveMatch ? setUnreversed : setReversed}
id='match_plays_sort_final'
/> />
</Tabs> </Tabs>
<LikeToggle src={likeImage} onClick={likeToggle} /> <LikeToggle src={likeImage} onClick={likeToggle} />
<Filters active={!isEmptyFilters} onClick={togglePopup}> <Filters active={!isEmptyFilters} onClick={togglePopup} id='match_plays_filter'>
<HoverTooltip> <HoverTooltip>
<T9n t='filter_match_events' /> <T9n t='filter_match_events' />
</HoverTooltip> </HoverTooltip>

@ -95,6 +95,7 @@ export const TabStats = () => {
aria-pressed={selectedTab === Tabs.TEAM1} aria-pressed={selectedTab === Tabs.TEAM1}
onClick={() => setSelectedTab(Tabs.TEAM1)} onClick={() => setSelectedTab(Tabs.TEAM1)}
data-step={Steps.PlayersTab} data-step={Steps.PlayersTab}
id='match_stats_team1'
> >
<TabTitle <TabTitle
teamColor={team1.shirt_color} teamColor={team1.shirt_color}
@ -125,6 +126,7 @@ export const TabStats = () => {
<Tab <Tab
aria-pressed={selectedTab === Tabs.TEAM2} aria-pressed={selectedTab === Tabs.TEAM2}
onClick={() => setSelectedTab(Tabs.TEAM2)} onClick={() => setSelectedTab(Tabs.TEAM2)}
id='match_stats_team2'
> >
<TabTitle <TabTitle
teamColor={team2.shirt_color} teamColor={team2.shirt_color}
@ -160,13 +162,13 @@ export const TabStats = () => {
> >
<SwitchTitle t={switchTitleLexic} /> <SwitchTitle t={switchTitleLexic} />
<SwitchButton <SwitchButton
id='switchButton' id='match_stats_cur_final'
isFinalStatsType={isFinalStatsType} isFinalStatsType={isFinalStatsType}
onClick={toggleStatsType} onClick={toggleStatsType}
onMouseOver={isMobileDevice onMouseOver={isMobileDevice
? undefined ? undefined
: onMouseOver({ : onMouseOver({
anchorId: 'switchButton', anchorId: 'match_stats_cur/_inal',
horizontalPosition: 'right', horizontalPosition: 'right',
tooltipText: translate(switchButtonTooltipLexic), tooltipText: translate(switchButtonTooltipLexic),
})} })}

@ -144,6 +144,7 @@ export const MatchSidePlaylists = ({
<Tab <Tab
aria-pressed={selectedTab === Tabs.WATCH} aria-pressed={selectedTab === Tabs.WATCH}
onClick={() => onTabClick(Tabs.WATCH)} onClick={() => onTabClick(Tabs.WATCH)}
id='match_watch'
> >
<TabButton> <TabButton>
<TabIcon icon='watch' /> <TabIcon icon='watch' />
@ -155,6 +156,7 @@ export const MatchSidePlaylists = ({
<Tab <Tab
aria-pressed={selectedTab === Tabs.EVENTS} aria-pressed={selectedTab === Tabs.EVENTS}
onClick={() => onTabClick(Tabs.EVENTS)} onClick={() => onTabClick(Tabs.EVENTS)}
id='match_plays'
> >
<TabButton> <TabButton>
<TabIcon icon='plays' /> <TabIcon icon='plays' />
@ -166,6 +168,7 @@ export const MatchSidePlaylists = ({
<Tab <Tab
aria-pressed={selectedTab === Tabs.PLAYERS} aria-pressed={selectedTab === Tabs.PLAYERS}
onClick={() => onTabClick(Tabs.PLAYERS)} onClick={() => onTabClick(Tabs.PLAYERS)}
id='match_players'
> >
<TabButton> <TabButton>
<TabIcon icon='players' /> <TabIcon icon='players' />
@ -178,6 +181,7 @@ export const MatchSidePlaylists = ({
aria-pressed={selectedTab === Tabs.STATS} aria-pressed={selectedTab === Tabs.STATS}
onClick={() => onTabClick(Tabs.STATS)} onClick={() => onTabClick(Tabs.STATS)}
data-step={Steps.Start} data-step={Steps.Start}
id='match_stats'
> >
{Boolean(currentStep === Steps.Start && isOpen) && ( {Boolean(currentStep === Steps.Start && isOpen) && (
<Spotlight /> <Spotlight />

@ -18,6 +18,7 @@ export const ScoreSwitch = () => {
role='switch' role='switch'
onClick={toggleScore} onClick={toggleScore}
aria-checked={!isScoreHidden} aria-checked={!isScoreHidden}
id='general_scores'
> >
<Title t={isMobileDevice ? 'scores' : 'hide_score'} /> <Title t={isMobileDevice ? 'scores' : 'hide_score'} />
<Icon <Icon

@ -39,6 +39,7 @@ export const Menu = () => {
> >
<Link <Link
to={`${PAGES.useraccount}/personal-info`} to={`${PAGES.useraccount}/personal-info`}
id='general_personal_info'
> >
<Icon src='userAccount' size='0.95rem' /> <Icon src='userAccount' size='0.95rem' />
</Link> </Link>

@ -22,7 +22,7 @@ export const Settings = (props: Props) => {
} = useSettings(props) } = useSettings(props)
return ( return (
<Fragment> <Fragment>
<SettingsButton onClick={open} /> <SettingsButton onClick={open} id='match_video_quality' />
{ {
isOpen && ( isOpen && (
<OutsideClick onClick={close}> <OutsideClick onClick={close}>

@ -1,7 +1,3 @@
import { useMemo } from 'react'
import { Link } from 'react-router-dom'
import type { ObjectWithName } from 'features/Name' import type { ObjectWithName } from 'features/Name'
import { import {
@ -9,8 +5,6 @@ import {
ProfileTypes, ProfileTypes,
URL_AWS, URL_AWS,
} from 'config' } from 'config'
import { client } from 'config/clients'
import { ClientNames } from 'config/clients/types'
import { checkPage } from 'helpers/checkPage' import { checkPage } from 'helpers/checkPage'
@ -29,7 +23,6 @@ import {
InfoFlag, InfoFlag,
StyledLink, StyledLink,
SсBtnWrapper, SсBtnWrapper,
SсGetHighlightBtn,
DetailsWrapper, DetailsWrapper,
} from './styled' } from './styled'
import { useProfileCard } from './hooks' import { useProfileCard } from './hooks'
@ -50,22 +43,35 @@ export const ProfileCard = ({ profile }: ProfileType) => {
isFavorite, isFavorite,
profileId, profileId,
profileType, profileType,
setPlayerHighlight,
sportType, sportType,
toggleFavorites, toggleFavorites,
} = useProfileCard() } = useProfileCard()
const tournamentId = profile.additionalInfo?.tournamentId const tournamentId = profile.additionalInfo?.tournamentId
const isPlayerPage = checkPage(PAGES.player)
const isGetHighLightShown = useMemo(() => { const setGoogleAnalylicsID = () => {
switch (client.name) { switch (true) {
case ClientNames.Facr: case checkPage(PAGES.player):
return false return 'player_favourites'
case checkPage(PAGES.team):
return 'team_favourites'
case checkPage(PAGES.tournament):
return 'tournament_favourites'
default: default:
return true return ''
} }
}, []) }
// const isPlayerPage = checkPage(PAGES.player)
//
// const isGetHighLightShown = useMemo(() => {
// switch (client.name) {
// case ClientNames.Facr:
// return false
// default:
// return true
// }
// }, [])
return ( return (
<Wrapper> <Wrapper>
@ -94,10 +100,15 @@ export const ProfileCard = ({ profile }: ProfileType) => {
</InfoItems> </InfoItems>
</Details> </Details>
<SсBtnWrapper> <SсBtnWrapper>
<FavoriteButton isFavorite={isFavorite} onClick={toggleFavorites}> <FavoriteButton
isFavorite={isFavorite}
onClick={toggleFavorites}
id={setGoogleAnalylicsID()}
>
<StarIcon isFavorite={isFavorite} /> <StarIcon isFavorite={isFavorite} />
<T9n t='add_to_favorites' /> <T9n t='add_to_favorites' />
</FavoriteButton> </FavoriteButton>
{/* временно отключили
{!client.disabledHighlights && isPlayerPage && isGetHighLightShown && ( {!client.disabledHighlights && isPlayerPage && isGetHighLightShown && (
<Link to={PAGES.highlights}> <Link to={PAGES.highlights}>
<SсGetHighlightBtn <SсGetHighlightBtn
@ -108,11 +119,12 @@ export const ProfileCard = ({ profile }: ProfileType) => {
}, },
sportType, sportType,
})} })}
id='player_highlights'
> >
<T9n t='get_highlights' /> <T9n t='get_highlights' />
</SсGetHighlightBtn> </SсGetHighlightBtn>
</Link> </Link>
)} )} */}
</SсBtnWrapper> </SсBtnWrapper>
</DetailsWrapper> </DetailsWrapper>
</Wrapper> </Wrapper>

@ -1,4 +1,3 @@
import { Fragment } from 'react'
import type { ReactNode } from 'react' import type { ReactNode } from 'react'
import { Link } from 'react-router-dom' import { Link } from 'react-router-dom'
@ -56,34 +55,32 @@ export const ProfileHeader = ({
&& profileType === ProfileTypes.TOURNAMENTS ? `/images/${profileId}` : headerImage && profileType === ProfileTypes.TOURNAMENTS ? `/images/${profileId}` : headerImage
return ( return (
<Fragment> <HeaderStyled
<HeaderStyled headerImage={imageHeader}
headerImage={imageHeader} color={headerColor || color}
color={headerColor || color} height={height}
height={height} >
<Position
top={client.styles.logoTop}
left={client.styles.logoLeft}
> >
<Position <HeaderGroup>
top={client.styles.logoTop} <Link to={PAGES.home} id='general_main_page'>
left={client.styles.logoLeft} <HeaderLogo />
> </Link>
<HeaderGroup>
<Link to={PAGES.home}>
<HeaderLogo />
</Link>
{client.showSearch && <Search />} {client.showSearch && <Search />}
</HeaderGroup> </HeaderGroup>
</Position> </Position>
{children} {children}
<Position top={isMobileDevice ? client.styles.logoTop : undefined} right={0.71}> <Position top={isMobileDevice ? client.styles.logoTop : undefined} right={0.71}>
<HeaderGroup> <HeaderGroup>
{!isMobileDevice ? <ScoreSwitch /> : null} {!isMobileDevice ? <ScoreSwitch /> : null}
<Menu /> <Menu />
</HeaderGroup> </HeaderGroup>
</Position> </Position>
</HeaderStyled> </HeaderStyled>
</Fragment>
) )
} }

@ -14,7 +14,8 @@ import { isMatchPage } from 'helpers/isMatchPage'
export const DEFAULT_HEADER_COLOR = 'rgba(53, 96, 225, 0.56)' export const DEFAULT_HEADER_COLOR = 'rgba(53, 96, 225, 0.56)'
export const defaultHeaderStyles = ( export const defaultHeaderStyles = (
color: string = DEFAULT_HEADER_COLOR, headerImage: string | undefined | null, color: string = DEFAULT_HEADER_COLOR,
headerImage: string | undefined | null,
) => { ) => {
if ([ClientNames.Lff, ClientNames.Tunisia, ClientNames.Facr].includes(client.name) if ([ClientNames.Lff, ClientNames.Tunisia, ClientNames.Facr].includes(client.name)
&& !isMatchPage()) { && !isMatchPage()) {

@ -62,6 +62,7 @@ export const Search = () => {
type='search' type='search'
value={query} value={query}
onChange={onChange} onChange={onChange}
id='general_search'
/> />
{(query || isOpen) && <ClearButton onClick={clearQuery} />} {(query || isOpen) && <ClearButton onClick={clearQuery} />}
{isFetching && ( {isFetching && (

@ -18,7 +18,7 @@ export const SelectSport = ({
open, open,
sport, sport,
}: SportsFilterProps) => ( }: SportsFilterProps) => (
<ScSportsFilter onClick={onModalOpen}> <ScSportsFilter onClick={onModalOpen} id='main_filters'>
<ScFilterTitle opacity={sport[0] === 'all_sports' ? 0.5 : 1}> <ScFilterTitle opacity={sport[0] === 'all_sports' ? 0.5 : 1}>
<T9n t={ <T9n t={
sport[0] === 'all_sports' sport[0] === 'all_sports'

@ -33,33 +33,31 @@ export const SelectSportPopup = ({
// TODO: переделать на вариант без указания all_sports // TODO: переделать на вариант без указания all_sports
return ( return (
<> <ScModal
<ScModal isOpen={isOpen}
isOpen={isOpen} withCloseButton={isMobileDevice}
withCloseButton={isMobileDevice} close={onModalClose}
close={onModalClose} closeSize={9}
closeSize={9} >
> <ScHeaderGroup>
<ScHeaderGroup> <ScHeaderTitle>
<ScHeaderTitle> <T9n t='choose_sport' />
<T9n t='choose_sport' /> </ScHeaderTitle>
</ScHeaderTitle> </ScHeaderGroup>
</ScHeaderGroup> <ScBody>
<ScBody> {sportNames?.map((sport: string) => (
{sportNames?.map((sport: string) => ( <ScSport
<ScSport key={sport}
key={sport} onClick={() => onSportClick(sport)}
onClick={() => onSportClick(sport)} className={selectedSport.indexOf(sport) >= 0 ? 'active' : ''}
className={selectedSport.indexOf(sport) >= 0 ? 'active' : ''} active={selectedSport.indexOf(sport) >= 0}
active={selectedSport.indexOf(sport) >= 0} >
> <ScSportName>
<ScSportName> <T9n t={getSport({ sportName: sport })?.lexic ?? 'all_sports'} />
<T9n t={getSport({ sportName: sport })?.lexic ?? 'all_sports'} /> </ScSportName>
</ScSportName> </ScSport>
</ScSport> ))}
))} </ScBody>
</ScBody> </ScModal>
</ScModal>
</>
) )
} }

@ -13,7 +13,8 @@ import { customScrollbar } from 'features/Common'
export const DEFAULT_HEADER_COLOR = 'rgba(53, 96, 225, 0.56)' export const DEFAULT_HEADER_COLOR = 'rgba(53, 96, 225, 0.56)'
export const defaultHeaderStyles = ( export const defaultHeaderStyles = (
color: string = DEFAULT_HEADER_COLOR, headerImage: string | undefined | null, color: string = DEFAULT_HEADER_COLOR,
headerImage: string | undefined | null,
) => { ) => {
if (headerImage && client.name !== 'facr') { if (headerImage && client.name !== 'facr') {
return css`background: url(${headerImage}.png); return css`background: url(${headerImage}.png);

@ -54,6 +54,7 @@ export const ControlsMobile = (controlsProps: {props: ControlsPropsExtended}) =>
<LiveBtn <LiveBtn
onClick={backToLive} onClick={backToLive}
isLiveTime={isLiveTime} isLiveTime={isLiveTime}
id='main_watch_live'
> >
<T9n t='live' /> <T9n t='live' />
</LiveBtn> </LiveBtn>
@ -68,6 +69,7 @@ export const ControlsMobile = (controlsProps: {props: ControlsPropsExtended}) =>
<Fullscreen <Fullscreen
onClick={onFullscreenClick} onClick={onFullscreenClick}
isFullscreen={isFullscreen} isFullscreen={isFullscreen}
id='match_video_full_screen'
/> />
</ControlsGroup> </ControlsGroup>
</ControlsRow> </ControlsRow>

@ -1,4 +1,4 @@
import styled from 'styled-components' import styled from 'styled-components/macro'
import { ButtonBase, hoverStyles } from '../../../../styled' import { ButtonBase, hoverStyles } from '../../../../styled'

@ -73,6 +73,7 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) =>
<PlayStop <PlayStop
playing={playing} playing={playing}
onClickCapture={togglePlaying} onClickCapture={togglePlaying}
id='match_video_start_stop'
/> />
{!isLive && !isStorage && ( {!isLive && !isStorage && (
<Fragment> <Fragment>
@ -98,8 +99,8 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) =>
<PlaybackTime> <PlaybackTime>
{playBackTime} {playBackTime}
</PlaybackTime> </PlaybackTime>
<Backward onClick={rewindBackward}>{REWIND_SECONDS}</Backward> <Backward onClick={rewindBackward} id='match_video_back'>{REWIND_SECONDS}</Backward>
<Forward onClick={rewindForward}>{REWIND_SECONDS}</Forward> <Forward onClick={rewindForward} id='match_video_forward'>{REWIND_SECONDS}</Forward>
</ControlsGroup> </ControlsGroup>
<ControlsGroup> <ControlsGroup>
@ -112,6 +113,7 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) =>
<LiveBtn <LiveBtn
onClick={backToLive} onClick={backToLive}
isLiveTime={isLiveTime} isLiveTime={isLiveTime}
id='match_video_live'
> >
<T9n t='live' /> <T9n t='live' />
</LiveBtn> </LiveBtn>
@ -128,6 +130,7 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) =>
<Fullscreen <Fullscreen
onClick={onFullscreenClick} onClick={onFullscreenClick}
isFullscreen={isFullscreen} isFullscreen={isFullscreen}
id='match_video_full_screen'
/> />
</ControlsGroup> </ControlsGroup>
</ControlsRow> </ControlsRow>

@ -24,7 +24,7 @@ export const VolumeBar = ({
const progressRef = useSlider({ onChange }) const progressRef = useSlider({ onChange })
return ( return (
<Wrapper> <Wrapper>
<VolumeButton onClick={onClick} muted={muted} /> <VolumeButton onClick={onClick} muted={muted} id='match_video_mute' />
<VolumeProgressList ref={progressRef}> <VolumeProgressList ref={progressRef}>
<VolumeProgress value={muted ? 0 : value} /> <VolumeProgress value={muted ? 0 : value} />
<Scrubber value={muted ? 0 : value} /> <Scrubber value={muted ? 0 : value} />

@ -155,7 +155,7 @@ export const StreamPlayer = (props: Props) => {
<CenterControls controlsVisible={centerControlsVisible} playing={playing}> <CenterControls controlsVisible={centerControlsVisible} playing={playing}>
{isMobileDevice {isMobileDevice
? <RewindMobile isBackward rewindCallback={rewindBackward} /> ? <RewindMobile isBackward rewindCallback={rewindBackward} />
: <Backward size='lg' onClick={rewindBackward}>{REWIND_SECONDS}</Backward>} : <Backward size='lg' onClick={rewindBackward} id='match_video_screen_back'>{REWIND_SECONDS}</Backward>}
<PlayStop <PlayStop
size='lg' size='lg'
fullWidth fullWidth
@ -165,10 +165,11 @@ export const StreamPlayer = (props: Props) => {
togglePlaying() togglePlaying()
hideCenterControls() hideCenterControls()
}} }}
id='match_video_screen_start_stop'
/> />
{isMobileDevice {isMobileDevice
? <RewindMobile isForward rewindCallback={rewindForward} /> ? <RewindMobile isForward rewindCallback={rewindForward} />
: <Forward size='lg' onClick={rewindForward}>{REWIND_SECONDS}</Forward>} : <Forward size='lg' onClick={rewindForward} id='match_video_screen_forward'>{REWIND_SECONDS}</Forward>}
</CenterControls> </CenterControls>
)} )}

@ -17,14 +17,16 @@ export const useTeamPage = () => {
const { profileId: teamId, sportType } = usePageParams() const { profileId: teamId, sportType } = usePageParams()
const { open: openBuyMatchPopup } = useBuyMatchPopupStore() const { open: openBuyMatchPopup } = useBuyMatchPopupStore()
useEffect(() => { useEffect(
getTeamInfo(sportType, teamId) () => {
.then(setTeamProfile) getTeamInfo(sportType, teamId)
}, .then(setTeamProfile)
[ },
sportType, [
teamId, sportType,
]) teamId,
],
)
useEffect(() => { useEffect(() => {
openSubscribePopup({ openSubscribePopup({

@ -34,18 +34,20 @@ export const useTournamentPage = () => {
const { isFavorite, toggleFavorites } = useProfileCard() const { isFavorite, toggleFavorites } = useProfileCard()
useEffect(() => { useEffect(
if (!isPermittedTournament(tournamentId, sportType)) { () => {
history.push('/') if (!isPermittedTournament(tournamentId, sportType)) {
} history.push('/')
getTournamentInfo(sportType, tournamentId) }
.then(setTournamentProfile) getTournamentInfo(sportType, tournamentId)
}, .then(setTournamentProfile)
[ },
history, [
sportType, history,
tournamentId, sportType,
]) tournamentId,
],
)
useEffect(() => { useEffect(() => {
!isFavorite !isFavorite

@ -37,7 +37,7 @@ export const HeaderLogo = styled(Logo)`
export const Header = () => ( export const Header = () => (
<HeaderStyled> <HeaderStyled>
<Link to={PAGES.home}> <Link to={PAGES.home} id='general_main_page'>
<HeaderLogo /> <HeaderLogo />
</Link> </Link>
<LogoutButton /> <LogoutButton />

@ -44,7 +44,7 @@ export const LogoutButton = () => {
const { logout } = useAuthStore() const { logout } = useAuthStore()
return ( return (
<Button onClick={() => logout()}> <Button onClick={() => logout()} id='personal_log_out'>
<ExitIcon /> <ExitIcon />
<T9n t='logout' /> <T9n t='logout' />
</Button> </Button>

@ -77,8 +77,7 @@ export const useUserInfo = () => {
saveUserInfo(data).then(() => { saveUserInfo(data).then(() => {
fetchUserInfo() fetchUserInfo()
const lang_iso = find(languageList, const lang_iso = find(languageList, (language) => language.id === data.language_id)?.iso_639_1
(language) => language.id === data.language_id)?.iso_639_1
if (lang_iso) { if (lang_iso) {
changeLang(lang_iso) changeLang(lang_iso)

@ -132,6 +132,7 @@ export const PersonalInfoForm = (props: Props) => {
<PrivacyPolicyLink <PrivacyPolicyLink
target='_blank' target='_blank'
href={`${AUTH_SERVICE}${client.termsLink}`} href={`${AUTH_SERVICE}${client.termsLink}`}
id='personal_t_k'
> >
<T9n t='terms_and_conditions' /> <T9n t='terms_and_conditions' />
</PrivacyPolicyLink> </PrivacyPolicyLink>
@ -139,6 +140,7 @@ export const PersonalInfoForm = (props: Props) => {
<PrivacyPolicyLink <PrivacyPolicyLink
target='_blank' target='_blank'
href={`${AUTH_SERVICE}${client.privacyLink}`} href={`${AUTH_SERVICE}${client.privacyLink}`}
id='personal_policy'
> >
<T9n t='privacy_policy_and_statement' /> <T9n t='privacy_policy_and_statement' />
</PrivacyPolicyLink> </PrivacyPolicyLink>

@ -64,6 +64,7 @@ export const ScoreSwitch = ({ className }: Props) => {
role='switch' role='switch'
onClick={toggleScore} onClick={toggleScore}
aria-checked={isScoreHidden} aria-checked={isScoreHidden}
id='general_scores'
> >
<Title t='hide_score' /> <Title t='hide_score' />
<Icon <Icon

@ -1,6 +1,6 @@
import { Fragment } from 'react' import { Fragment } from 'react'
import { Route, Link } from 'react-router-dom' import { Route } from 'react-router-dom'
import { PAGES } from 'config' import { PAGES } from 'config'
import { isProduction } from 'config/env' import { isProduction } from 'config/env'
@ -34,7 +34,6 @@ import {
Navigations, Navigations,
StyledLink, StyledLink,
UserAccountWrapper, UserAccountWrapper,
ScButtonGetHighlight,
} from './styled' } from './styled'
import { CompanyInfo } from '../CompanyInfo' import { CompanyInfo } from '../CompanyInfo'
import { PoweredByInsports } from './components/PoweredByInsports/PoweredByInsports' import { PoweredByInsports } from './components/PoweredByInsports/PoweredByInsports'
@ -58,14 +57,19 @@ const UserAccount = () => {
<StyledLink <StyledLink
disabled={user?.profile?.country_code === 'BR'} disabled={user?.profile?.country_code === 'BR'}
to={`${PAGES.useraccount}/bank-cards`} to={`${PAGES.useraccount}/bank-cards`}
id='personal_cards'
> >
<T9n t='bank_card' /> <T9n t='bank_card' />
</StyledLink> </StyledLink>
<StyledLink to={`${PAGES.useraccount}/subscriptions`}> <StyledLink
to={`${PAGES.useraccount}/subscriptions`}
id='personal_subscriptions'
>
<T9n t='my_subscriptions' /> <T9n t='my_subscriptions' />
</StyledLink> </StyledLink>
<StyledLink <StyledLink
to={`${PAGES.useraccount}/payment-history`} to={`${PAGES.useraccount}/payment-history`}
id='personal_history'
> >
<T9n t='payment_history' /> <T9n t='payment_history' />
</StyledLink> </StyledLink>
@ -86,6 +90,7 @@ const UserAccount = () => {
</Fragment> </Fragment>
)} )}
<ScoreSwitch /> <ScoreSwitch />
{/* временно отключили
{!client.disabledHighlights && ( {!client.disabledHighlights && (
<Link to={`${PAGES.highlights}`}> <Link to={`${PAGES.highlights}`}>
<ScButtonGetHighlight> <ScButtonGetHighlight>
@ -93,6 +98,7 @@ const UserAccount = () => {
</ScButtonGetHighlight> </ScButtonGetHighlight>
</Link> </Link>
)} )}
*/}
</Navigations> </Navigations>
</Aside> </Aside>
<ContentWrapper> <ContentWrapper>

@ -83,6 +83,7 @@ export const UserFavorites = ({ marginTop }: Props) => {
onFocus={getPosition} onFocus={getPosition}
onMouseOver={getPosition} onMouseOver={getPosition}
key={`${item.type}_${item.sport}_${item.id}`} key={`${item.type}_${item.sport}_${item.id}`}
id='main_favourites'
> >
<UserSportFavXWrapper <UserSportFavXWrapper
onClick={() => addRemoveFavorite({ onClick={() => addRemoveFavorite({

@ -212,7 +212,8 @@ export const enableBodyScroll = (targetElement: HTMLElement | Element) => {
// Disable body scroll locking // Disable body scroll locking
export const disableBodyScroll = ( export const disableBodyScroll = (
targetElement: HTMLElement | Element, options?: BodyScrollOptions, targetElement: HTMLElement | Element,
options?: BodyScrollOptions,
) => { ) => {
// targetElement must be provided // targetElement must be provided
if (!targetElement) { if (!targetElement) {

@ -378,7 +378,8 @@ export const useHighlightsForm = () => {
useEffect(() => { useEffect(() => {
formState?.selectedTeam?.id formState?.selectedTeam?.id
&& getTeamPlayers( && getTeamPlayers(
formState?.sport?.id || playerHighlight.sportType, formState?.selectedTeam?.id formState?.sport?.id || playerHighlight.sportType,
formState?.selectedTeam?.id
|| playerHighlight?.profile?.additionalInfo?.id, || playerHighlight?.profile?.additionalInfo?.id,
) )
.then((state) => { .then((state) => {

@ -2,8 +2,7 @@ import { callApi } from 'helpers'
import { Subscriptions } from './getSubscriptions' import { Subscriptions } from './getSubscriptions'
import { API_ROOT } from '../config' import { API_ROOT } from '../config'
export const getSelectedSubscriptions = async ( export const getSelectedSubscriptions = async (): Promise<Subscriptions> => {
): Promise<Subscriptions> => {
const config = { const config = {
method: 'GET', method: 'GET',
} }

@ -21,8 +21,10 @@ export type Player = {
weight: string | number | null, weight: string | number | null,
} }
export const getTeamPlayers = (_p_sport_id: number, export const getTeamPlayers = (
_p_team_id: number) _p_sport_id: number,
_p_team_id: number,
)
: Promise<Array<Player>> => { : Promise<Array<Player>> => {
const config = { const config = {
body: { body: {

Loading…
Cancel
Save