|
|
|
@ -4,6 +4,13 @@ import includes from 'lodash/includes' |
|
|
|
import filter from 'lodash/filter' |
|
|
|
import filter from 'lodash/filter' |
|
|
|
import isEmpty from 'lodash/isEmpty' |
|
|
|
import isEmpty from 'lodash/isEmpty' |
|
|
|
import size from 'lodash/size' |
|
|
|
import size from 'lodash/size' |
|
|
|
|
|
|
|
import uniq from 'lodash/uniq' |
|
|
|
|
|
|
|
import difference from 'lodash/difference' |
|
|
|
|
|
|
|
import map from 'lodash/map' |
|
|
|
|
|
|
|
import every from 'lodash/every' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import type { Events } from 'requests' |
|
|
|
|
|
|
|
import type { Playlists } from 'features/MatchPage/types' |
|
|
|
|
|
|
|
|
|
|
|
type TTogglePlayers = { |
|
|
|
type TTogglePlayers = { |
|
|
|
id: Number, |
|
|
|
id: Number, |
|
|
|
@ -15,13 +22,36 @@ type TFilters = { |
|
|
|
players: Array<Number>, |
|
|
|
players: Array<Number>, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
export const useFiltersPopup = () => { |
|
|
|
type Props = { |
|
|
|
|
|
|
|
events: Events, |
|
|
|
|
|
|
|
matchPlaylists: Playlists, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export const useFiltersPopup = ({ |
|
|
|
|
|
|
|
events, |
|
|
|
|
|
|
|
matchPlaylists, |
|
|
|
|
|
|
|
}: Props) => { |
|
|
|
const [isOpen, setIsOpen] = useState(false) |
|
|
|
const [isOpen, setIsOpen] = useState(false) |
|
|
|
const [activeEvents, setActiveEvents] = useState<Array<Number>>([]) |
|
|
|
const [activeEvents, setActiveEvents] = useState<Array<Number>>([]) |
|
|
|
const [activeFirstTeamPlayers, setActiveFirstTeamPlayers] = useState<Array<Number>>([]) |
|
|
|
const [activeFirstTeamPlayers, setActiveFirstTeamPlayers] = useState<Array<Number>>([]) |
|
|
|
const [activeSecondTeamPlayers, setActiveSecondTeamPlayers] = useState<Array<Number>>([]) |
|
|
|
const [activeSecondTeamPlayers, setActiveSecondTeamPlayers] = useState<Array<Number>>([]) |
|
|
|
const [activeFilters, setActiveFilters] = useState<TFilters>({ events: [], players: [] }) |
|
|
|
const [activeFilters, setActiveFilters] = useState<TFilters>({ events: [], players: [] }) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const currentEvents = filter(events, (event) => event.pl !== undefined |
|
|
|
|
|
|
|
&& event.t !== undefined) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const uniqEvents = uniq(map(currentEvents, ({ l }) => l)) |
|
|
|
|
|
|
|
const uniqPlayersTeam1 = uniq(map(matchPlaylists.players.team1, ({ id }) => id)) |
|
|
|
|
|
|
|
const uniqPlayersTeam2 = uniq(map(matchPlaylists.players.team2, ({ id }) => id)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const isAllActionsChecked = every(uniqEvents, (el) => (includes(activeEvents, el))) |
|
|
|
|
|
|
|
const isFirstTeamPlayersChecked = every( |
|
|
|
|
|
|
|
uniqPlayersTeam1, (el) => (includes(activeFirstTeamPlayers, el)), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
const isSecondTeamPlayersChecked = every( |
|
|
|
|
|
|
|
uniqPlayersTeam2, (el) => (includes(activeSecondTeamPlayers, el)), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
const toggle = () => { |
|
|
|
const toggle = () => { |
|
|
|
setIsOpen(!isOpen) |
|
|
|
setIsOpen(!isOpen) |
|
|
|
} |
|
|
|
} |
|
|
|
@ -50,22 +80,28 @@ export const useFiltersPopup = () => { |
|
|
|
: [...teamState, id]) |
|
|
|
: [...teamState, id]) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const resetPlayers = (team: string) => () => { |
|
|
|
const allPlayersToggle = (team: string) => () => { |
|
|
|
const teamState = team === 'team1' |
|
|
|
|
|
|
|
? activeFirstTeamPlayers |
|
|
|
|
|
|
|
: activeSecondTeamPlayers |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const setterTeamState = team === 'team1' |
|
|
|
const setterTeamState = team === 'team1' |
|
|
|
? setActiveFirstTeamPlayers |
|
|
|
? setActiveFirstTeamPlayers |
|
|
|
: setActiveSecondTeamPlayers |
|
|
|
: setActiveSecondTeamPlayers |
|
|
|
|
|
|
|
|
|
|
|
if (isEmpty(teamState)) return |
|
|
|
const uniqValues = team === 'team1' |
|
|
|
setterTeamState([]) |
|
|
|
? uniqPlayersTeam1 |
|
|
|
|
|
|
|
: uniqPlayersTeam2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const isAllPlayersChecked = team === 'team1' |
|
|
|
|
|
|
|
? isFirstTeamPlayersChecked |
|
|
|
|
|
|
|
: isSecondTeamPlayersChecked |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
isAllPlayersChecked |
|
|
|
|
|
|
|
? setterTeamState((currentValues) => difference(currentValues, uniqValues)) |
|
|
|
|
|
|
|
: setterTeamState((currentValues) => uniq([...currentValues, ...uniqValues])) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const resetEvents = () => { |
|
|
|
const allActionsToggle = () => { |
|
|
|
if (isEmpty(activeEvents)) return |
|
|
|
isAllActionsChecked |
|
|
|
setActiveEvents([]) |
|
|
|
? setActiveEvents((currentValues) => difference(currentValues, uniqEvents)) |
|
|
|
|
|
|
|
: setActiveEvents((currentValues) => uniq([...currentValues, ...uniqEvents])) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const applyFilters = () => { |
|
|
|
const applyFilters = () => { |
|
|
|
@ -86,16 +122,20 @@ export const useFiltersPopup = () => { |
|
|
|
activeEvents, |
|
|
|
activeEvents, |
|
|
|
activeFirstTeamPlayers, |
|
|
|
activeFirstTeamPlayers, |
|
|
|
activeSecondTeamPlayers, |
|
|
|
activeSecondTeamPlayers, |
|
|
|
|
|
|
|
allActionsToggle, |
|
|
|
|
|
|
|
allPlayersToggle, |
|
|
|
applyFilters, |
|
|
|
applyFilters, |
|
|
|
close, |
|
|
|
close, |
|
|
|
countOfFilters, |
|
|
|
countOfFilters, |
|
|
|
filters: activeFilters, |
|
|
|
filters: activeFilters, |
|
|
|
|
|
|
|
isAllActionsChecked, |
|
|
|
isEmptyFilters, |
|
|
|
isEmptyFilters, |
|
|
|
|
|
|
|
isFirstTeamPlayersChecked, |
|
|
|
isOpen, |
|
|
|
isOpen, |
|
|
|
resetEvents, |
|
|
|
isSecondTeamPlayersChecked, |
|
|
|
resetPlayers, |
|
|
|
|
|
|
|
toggle, |
|
|
|
toggle, |
|
|
|
toggleActiveEvents, |
|
|
|
toggleActiveEvents, |
|
|
|
toggleActivePlayers, |
|
|
|
toggleActivePlayers, |
|
|
|
|
|
|
|
uniqEvents, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|