fix(#2341): fix click on tournament

keep-around/26e96e2488f7881e90a1e330fecc8568ebc21871
Andrei Dekterev 4 years ago
parent 9c0e1adefb
commit 26e96e2488
  1. 26
      src/components/SelectFilter/index.tsx
  2. 3
      src/components/SelectFilter/styled.tsx
  3. 7
      src/features/HeaderFilters/store/hooks/index.tsx
  4. 29
      src/features/HomePage/components/HeaderFilters/index.tsx
  5. 2
      src/features/Matches/hooks.tsx
  6. 7
      src/features/MatchesGrid/index.tsx
  7. 9
      src/features/SportsFilter/index.tsx
  8. 7
      src/features/TournamentList/components/CollapseTournament/index.tsx
  9. 3
      src/features/TournamentList/hooks.tsx

@ -1,20 +1,34 @@
import { T9n } from 'features/T9n' import { useName } from 'features/Name'
import { ScSelectFilter, ScArrow } from './styled' import { TournamentType } from 'requests/getMatches/types'
import {
ScSelectFilter,
ScArrow,
ScTournamentName,
} from './styled'
type SportsFilterProps = { type SportsFilterProps = {
onModalOpen: () => void, onModalOpen?: () => void,
open: boolean, open: boolean,
selectItem: string, selectItem: TournamentType | undefined,
withArrow?: boolean,
} }
export const SelectFilter = ({ export const SelectFilter = ({
onModalOpen, onModalOpen,
open, open,
selectItem, selectItem,
}: SportsFilterProps) => ( withArrow,
}: SportsFilterProps) => {
// eslint-disable-next-line
const tournamentName = selectItem && useName(selectItem)
return (
<ScSelectFilter onClick={onModalOpen}> <ScSelectFilter onClick={onModalOpen}>
<T9n t={selectItem} /> <ScTournamentName>{tournamentName}</ScTournamentName>
{withArrow && (
<ScArrow refIcon='Arrow' color='#ffffff' direction={open ? 180 : 0} /> <ScArrow refIcon='Arrow' color='#ffffff' direction={open ? 180 : 0} />
)}
</ScSelectFilter> </ScSelectFilter>
) )
}

@ -24,3 +24,6 @@ export const ScSelectFilter = styled.div`
export const ScArrow = styled(Icon)` export const ScArrow = styled(Icon)`
margin-left: 14px; margin-left: 14px;
` `
export const ScTournamentName = styled.div`
`

@ -7,6 +7,8 @@ import {
import { useLocation } from 'react-router-dom' import { useLocation } from 'react-router-dom'
import { isToday } from 'date-fns' import { isToday } from 'date-fns'
import type { TournamentType } from 'requests/getMatches/types'
import { useQueryParamStore } from 'hooks' import { useQueryParamStore } from 'hooks'
import { filterKeys } from '../config' import { filterKeys } from '../config'
@ -27,6 +29,7 @@ export const useFilters = () => {
const [selectedLeague, setSelectedLeague] = useState<Array<string | number>>(['all_competitions']) const [selectedLeague, setSelectedLeague] = useState<Array<string | number>>(['all_competitions'])
const [selectedFilters, setSelectedFilters] = useState<Array<string>>([]) const [selectedFilters, setSelectedFilters] = useState<Array<string>>([])
const [isShowTournament, setIsShowTournament] = useState(true) const [isShowTournament, setIsShowTournament] = useState(true)
const [selectTournament, setSelectTournament] = useState<TournamentType>()
const [sportIds, setSportIds] = useState<any>() const [sportIds, setSportIds] = useState<any>()
const isTodaySelected = isToday(selectedDate) const isTodaySelected = isToday(selectedDate)
@ -47,11 +50,13 @@ export const useFilters = () => {
const store = useMemo(() => ({ const store = useMemo(() => ({
isShowTournament, isShowTournament,
isTodaySelected, isTodaySelected,
selectTournament,
selectedDate, selectedDate,
selectedFilters, selectedFilters,
selectedLeague, selectedLeague,
selectedSport, selectedSport,
setIsShowTournament, setIsShowTournament,
setSelectTournament,
setSelectedDate, setSelectedDate,
setSelectedFilters, setSelectedFilters,
setSelectedLeague, setSelectedLeague,
@ -65,6 +70,8 @@ export const useFilters = () => {
selectedFilters, selectedFilters,
selectedLeague, selectedLeague,
selectedSport, selectedSport,
selectTournament,
setSelectTournament,
setIsShowTournament, setIsShowTournament,
setSelectedDate, setSelectedDate,
setSelectedFilters, setSelectedFilters,

@ -1,4 +1,5 @@
import { SportsFilter } from 'features/SportsFilter' import { SportsFilter } from 'features/SportsFilter'
import { SelectFilter } from 'components/SelectFilter'
import { useHeaderFiltersStore } from 'features/HeaderFilters' import { useHeaderFiltersStore } from 'features/HeaderFilters'
import { T9n } from 'features/T9n' import { T9n } from 'features/T9n'
@ -13,10 +14,10 @@ export const HeaderFilters = () => {
const { const {
isShowTournament, isShowTournament,
selectedFilters, selectedFilters,
selectTournament,
setIsShowTournament, setIsShowTournament,
setSelectedFilters, setSelectedFilters,
setSelectedLeague, setSelectedLeague,
setSelectedSport,
} = useHeaderFiltersStore() } = useHeaderFiltersStore()
const isActiveFilter = (filterItem: string) => selectedFilters.indexOf(filterItem) >= 0 const isActiveFilter = (filterItem: string) => selectedFilters.indexOf(filterItem) >= 0
@ -30,19 +31,30 @@ export const HeaderFilters = () => {
const handleClickBack = () => { const handleClickBack = () => {
setIsShowTournament(true) setIsShowTournament(true)
setSelectedFilters([]) setSelectedFilters([])
setSelectedSport(['all_sports'])
setSelectedLeague(['all_competitions']) setSelectedLeague(['all_competitions'])
} }
return ( return (
<ScHeaderFilters> <ScHeaderFilters>
{!isShowTournament && <ScArrow refIcon='Arrow' color='#ffffff' direction={90} onClick={() => handleClickBack()} />} {!isShowTournament && (
<SportsFilter /> <>
{/* <SelectFilter <ScArrow
onModalOpen={() => console.log(1)} refIcon='Arrow'
color='#ffffff'
direction={90}
onClick={() => handleClickBack()}
/>
<SelectFilter
// onModalOpen={() => console.log()}
open={false} open={false}
selectItem='all_competitions' selectItem={selectTournament}
/> */} withArrow={false}
/>
</>
)}
{isShowTournament && <SportsFilter />}
{isShowTournament && (
<ScFilterItemsWrap> <ScFilterItemsWrap>
<ScFilterItem <ScFilterItem
className={isActiveFilter('live') ? 'activeLive' : ''} className={isActiveFilter('live') ? 'activeLive' : ''}
@ -63,6 +75,7 @@ export const HeaderFilters = () => {
<T9n t='completed' /> <T9n t='completed' />
</ScFilterItem> </ScFilterItem>
</ScFilterItemsWrap> </ScFilterItemsWrap>
)}
</ScHeaderFilters> </ScHeaderFilters>
) )
} }

@ -21,7 +21,7 @@ export type Props = {
fetch: (limit: number, offset: number) => Promise<MatchesBySection>, fetch: (limit: number, offset: number) => Promise<MatchesBySection>,
} }
const MATCHES_LIMIT = isMobileDevice ? 1000 : 60 const MATCHES_LIMIT = 1000
const initialState = { const initialState = {
broadcast: [], broadcast: [],

@ -23,14 +23,12 @@ export const MatchesGrid = memo(({ matches }: MatchesGridProps) => {
selectedLeague, selectedLeague,
} = useHeaderFiltersStore() } = useHeaderFiltersStore()
const filteredMatches = isHomePage && selectedFilters?.length const filteredMatches = isHomePage && selectedFilters.length
? matches.filter((match) => ( ? matches.filter((match) => (
((match.live ((match.live
&& selectedFilters.indexOf('live') >= 0) && selectedFilters.indexOf('live') >= 0)
|| (selectedFilters.indexOf('upcoming') >= 0 && match.date > new Date()) || (selectedFilters.indexOf('upcoming') >= 0 && match.date > new Date())
|| (selectedFilters.indexOf('completed') >= 0 && match.is_finished)))) || (selectedFilters.indexOf('completed') >= 0 && match.is_finished))))
.filter((match) => ((selectedLeague.indexOf(match.tournament.id) >= 0
|| selectedLeague[0] === 'all_competitions')))
: matches : matches
return ( return (
@ -38,7 +36,8 @@ export const MatchesGrid = memo(({ matches }: MatchesGridProps) => {
{isHomePage && isShowTournament ? ( {isHomePage && isShowTournament ? (
<TournamentList matches={filteredMatches} /> <TournamentList matches={filteredMatches} />
) : ( ) : (
filteredMatches.map((match) => <MatchCard key={match.id} match={match} />) filteredMatches.filter((match) => ((selectedLeague.indexOf(match.tournament.id) >= 0
|| selectedLeague[0] === 'all_competitions'))).map((match) => <MatchCard key={match.id} match={match} />)
)} )}
</Wrapper> </Wrapper>
) )

@ -1,4 +1,4 @@
import { useState } from 'react' import { useEffect, useState } from 'react'
import { useHeaderFiltersStore } from 'features/HeaderFilters' import { useHeaderFiltersStore } from 'features/HeaderFilters'
@ -31,7 +31,8 @@ export const SportsFilter = () => {
]) ])
} else { } else {
setSelectedSport((prev) => [ setSelectedSport((prev) => [
...prev.filter((item) => item !== 'all_sports' && item === sport), ...prev.filter((item) => item !== 'all_sports'
&& item !== sport),
]) ])
} }
setSelectedLeague(['all_competitions']) setSelectedLeague(['all_competitions'])
@ -47,6 +48,10 @@ export const SportsFilter = () => {
setIsOpen(false) setIsOpen(false)
} }
useEffect(() => {
if (selectedSport.length === 0) setSelectedSport(['all_sports'])
}, [selectedSport, setSelectedSport])
return ( return (
<> <>
<SelectSport <SelectSport

@ -1,7 +1,5 @@
import { ProfileTypes } from 'config' import { ProfileTypes } from 'config'
import { getSportLexic } from 'helpers'
import { T9n } from 'features/T9n' import { T9n } from 'features/T9n'
import { useUserFavoritesStore } from 'features/UserFavorites/store' import { useUserFavoritesStore } from 'features/UserFavorites/store'
import { Icon } from 'features/Icon' import { Icon } from 'features/Icon'
@ -35,7 +33,7 @@ export const CollapseTournament = ({
const { const {
setIsShowTournament, setIsShowTournament,
setSelectedLeague, setSelectedLeague,
setSelectedSport, setSelectTournament,
} = useHeaderFiltersStore() } = useHeaderFiltersStore()
const { isInFavorites } = useUserFavoritesStore() const { isInFavorites } = useUserFavoritesStore()
const { const {
@ -50,10 +48,9 @@ export const CollapseTournament = ({
) )
const handleClick = () => { const handleClick = () => {
const sportName = getSportLexic(sportType)
setIsShowTournament(false) setIsShowTournament(false)
setSelectedSport([sportName])
setSelectedLeague([tournament.id]) setSelectedLeague([tournament.id])
setSelectTournament(tournament)
} }
return ( return (

@ -7,6 +7,7 @@ import { useHeaderFiltersStore } from 'features/HeaderFilters'
export const useTournaments = (matches: Array<Match>) => { export const useTournaments = (matches: Array<Match>) => {
const { const {
selectedDate,
selectedLeague, selectedLeague,
selectedSport, selectedSport,
setSportIds, setSportIds,
@ -67,7 +68,7 @@ export const useTournaments = (matches: Array<Match>) => {
useEffect(() => { useEffect(() => {
sportIds && setSportIds(sportIds) sportIds && setSportIds(sportIds)
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [matches]) }, [selectedDate, matches])
return { return {
tournamentSort, tournamentSort,

Loading…
Cancel
Save