import React, { useEffect, useCallback } from "react"; import PropTypes from "prop-types"; import { Map } from "immutable"; import { useSelector, useDispatch } from "react-redux"; import { fetchShows, selectShow, showWishlistToggle, updateFilter, getShowExploreOptions, } from "../../actions/shows"; import { isWishlisted } from "../../utils"; import ListDetails from "../list/details"; import ListPosters from "../list/posters"; const fetchUrl = (match) => { switch (match.path) { case "/shows/polochon": return "/shows/polochon"; case "/shows/wishlist": return "/wishlist/shows"; case "/shows/search/:search": return "/shows/search/" + match.params.search; case "/shows/explore/:source/:category": return ( "/shows/explore?source=" + encodeURI(match.params.source) + "&category=" + encodeURI(match.params.category) ); default: return null; } }; const ShowList = ({ match, history }) => { const dispatch = useDispatch(); useEffect(() => { const url = fetchUrl(match); if (url !== null) { dispatch(fetchShows(url)); } }, [dispatch, match]); const loading = useSelector((state) => state.showsStore.get("loading")); const shows = useSelector((state) => state.showsStore.get("shows")); const filter = useSelector((state) => state.showsStore.get("filter")); const selectedImdbId = useSelector((state) => state.showsStore.get("selectedImdbId") ); const exploreOptions = useSelector((state) => state.showsStore.get("exploreOptions") ); const showDetails = (imdbId) => { history.push("/shows/details/" + imdbId); }; let selectedShow = Map(); if (selectedImdbId !== "") { selectedShow = shows.get(selectedImdbId); } const selectFunc = useCallback((id) => dispatch(selectShow(id)), [dispatch]); const filterFunc = useCallback((filter) => dispatch(updateFilter(filter)), [ dispatch, ]); const exploreFetchOptions = useCallback( () => dispatch(getShowExploreOptions()), [dispatch] ); return (