From a87cfe4d7bf73efb7bc54c10ddb00262bd0786fd Mon Sep 17 00:00:00 2001 From: Sindre Kjelsrud Date: Mon, 11 Sep 2023 11:48:27 +0200 Subject: [PATCH] :construction: still WIP on query params Co-authored-by: haraldnilsen --- src/App.tsx | 68 +++++++++++++++++------------- src/components/MovieForm/index.tsx | 7 +-- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index aa99692..177ebf5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -24,22 +24,53 @@ function App() { const title = searchParams.get('title') || '' const type = searchParams.get('type') || '' const year = searchParams.get('y') || '' - - // testing testing + const page = searchParams.get('page') || '' useEffect(() => { + handleMovieSubmit() + }, [currentPage, title, type, year]) + + const handleMovieSubmit = ({ + event, + pageNumber, + }: { + event?: any + pageNumber?: number + } = {}) => { + if (event) event.preventDefault() + + let pageNum: number + if (pageNumber) { + pageNum = pageNumber + } else { + pageNum = Number(page) + } + + if (!movieTitle && !movieType && !movieYear) { + setLoading(false) + } + + // navigate( + // movieYear && movieType + // ? `?title=${movieTitle}&type=${movieType}&y=${movieYear}&page=${currentPage}` + // : movieYear + // ? `?title=${movieTitle}&y=${movieYear}&page=${currentPage}` + // : movieYear && movieType + // ? `?title=${movieTitle}&type=${movieType}&page=${currentPage}` + // : `?title=${movieTitle}&page=${currentPage}` + // ) + fetch( - `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${title}&type=${type}&y=${year}&page=${currentPage}` + `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${title}&type=${type}&y=${year}&page=${pageNum}` ) .then((response) => response.json()) .then((data) => { setMovies(data.Search) - console.log(data) setTotalPages(data.totalResults) }) .then(() => setLoading(false)) .catch((error) => console.log(error)) - }, [title, type, year]) + } const calculatePages = (totalResults: number): number => { return Math.round(totalResults / 10) @@ -47,7 +78,7 @@ function App() { const handlePageChange = (pageNumber: number) => { setCurrentPage(pageNumber) - handleMovieSubmit() + handleMovieSubmit({ pageNumber }) } const handleModalOpen = (movie: movieObject) => { @@ -55,30 +86,6 @@ function App() { setModalMovie(movie) } - const handleMovieSubmit = (event?: any) => { - if (event) event.preventDefault() - navigate( - movieYear && movieType - ? `?title=${movieTitle}&type=${movieType}&y=${movieYear}&page=${currentPage}` - : movieYear - ? `?title=${movieTitle}&y=${movieYear}&page=${currentPage}` - : movieYear && movieType - ? `?title=${movieTitle}&type=${movieType}&page=${currentPage}` - : `?title=${movieTitle}&page=${currentPage}` - ) - fetch( - `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${title}&type=${type}&y=${year}&page=${currentPage}` - ) - .then((response) => response.json()) - .then((data) => { - setMovies(data.Search) - console.log(data) - setTotalPages(data.totalResults) - }) - .then(() => setLoading(false)) - .catch((error) => console.log(error)) - } - const sortHandler = (sortType: string) => { let sortedMovies: movieObject[] = [] @@ -113,6 +120,7 @@ function App() { setMovieTitle, setMovieType, setMovieYear, + movieTitle, }} /> diff --git a/src/components/MovieForm/index.tsx b/src/components/MovieForm/index.tsx index eaa65ba..6273ea0 100644 --- a/src/components/MovieForm/index.tsx +++ b/src/components/MovieForm/index.tsx @@ -1,5 +1,3 @@ -import type { movieObject } from '../../types/movie' -import Modal from 'react-modal' import q from 'qjuul' interface MovieFormProps { @@ -7,6 +5,7 @@ interface MovieFormProps { setMovieTitle: (title: string) => void setMovieYear: (year: string) => void setMovieType: (type: string) => void + movieTitle: string } const MovieForm: React.FC = ({ @@ -14,17 +13,19 @@ const MovieForm: React.FC = ({ setMovieTitle, setMovieType, setMovieYear, + movieTitle, }) => { return ( handleMovieSubmit({ event: event })} > Choose a movie title: 0 ? movieTitle : ''} onChange={(e) => setMovieTitle(e.target.value)} className="border text-black border-gray-300 rounded-md p-2 focus:outline-none focus:ring-2 focus:ring-blue-600 focus:border-transparent" />