From cd63407d0332a3c57ba4ed94c4369f6e7e5dff5a Mon Sep 17 00:00:00 2001 From: haraldnilsen Date: Tue, 12 Sep 2023 11:53:12 +0200 Subject: [PATCH] :sparkles: working query params from url - not form Co-authored-by: Sindre Kjelsrud --- src/App.tsx | 32 ++++++++++++------------------ src/api/fetchMovie.ts | 4 ++-- src/components/MovieForm/index.tsx | 23 ++++++++------------- src/util/navigate.ts | 23 ++++++++++----------- 4 files changed, 33 insertions(+), 49 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c57d9b1..61e6cdc 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,23 +17,24 @@ function App() { const location = useLocation() useEffect(() => { + const handleFetchMovie = async () => { + const response = await fetchMovie(title, page, type, year) + if (response.Response == 'True') { + setMovies(response.Search) + setTotalPages(Number(response.totalResults)) + setLoading(false) + } + } const searchParams = new URLSearchParams(location.search) const title = searchParams.get('title') || '' const page = searchParams.get('page') || '' const type = searchParams.get('type') || '' const year = searchParams.get('y') || '' - const handleFetchMovie = async () => { - const response = await fetchMovie(title, page, type, year) - if (response.Response == 'true') { - setMovies(response.Search) - setTotalPages(Number(response.totalResults)) - setLoading(false) - } - } - if (title) { handleFetchMovie() + } else { + setLoading(false) } }, []) @@ -78,16 +79,9 @@ function App() { All movies - + - {!loading && totalPages && ( + {!loading && movies.length > 0 && ( {loading ? ( Loading... - ) : movies ? ( + ) : movies.length > 0 ? ( ) : ( Find a list of movies by searching above ☝️ diff --git a/src/api/fetchMovie.ts b/src/api/fetchMovie.ts index aaa92ff..83ff466 100644 --- a/src/api/fetchMovie.ts +++ b/src/api/fetchMovie.ts @@ -1,6 +1,6 @@ import { movieResponse } from '../types/movie' -const API_MOVIE_KEY = 'd92949d8' +const API_MOVIE_KEY = import.meta.env.VITE_API_MOVIE_KEY export const fetchMovie = async ( title: string, @@ -8,7 +8,7 @@ export const fetchMovie = async ( type?: string, year?: string ): Promise => { - let query = `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}s=${title}&page=${page}` + let query = `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${title}&page=${page}` if (type) query += `&type=${type}` if (year) query += `&year=${year}` diff --git a/src/components/MovieForm/index.tsx b/src/components/MovieForm/index.tsx index eaa65ba..1235ff6 100644 --- a/src/components/MovieForm/index.tsx +++ b/src/components/MovieForm/index.tsx @@ -1,24 +1,17 @@ -import type { movieObject } from '../../types/movie' -import Modal from 'react-modal' +import { useState } from 'react' import q from 'qjuul' +import { useNavigateToPage } from '../../util/navigate' -interface MovieFormProps { - handleMovieSubmit: (event: any) => void - setMovieTitle: (title: string) => void - setMovieYear: (year: string) => void - setMovieType: (type: string) => void -} +const MovieForm: React.FC = () => { + const [movieTitle, setMovieTitle] = useState('') + const [movieYear, setMovieYear] = useState('') + const [movieType, setMovieType] = useState('') + const navigateToPage = useNavigateToPage() -const MovieForm: React.FC = ({ - handleMovieSubmit, - setMovieTitle, - setMovieType, - setMovieYear, -}) => { return ( navigateToPage(movieTitle, movieYear, movieType)} > Choose a movie title: { + const navigate = useNavigate() -export const navigateToPage = ( - title?: string, - page: string = '1', - type?: string, - year?: string -) => { - if (!title) navigate('') - else { - let query = `?title=${title}&page=${page}` + return (title?: string, page: string = '1', type?: string, year?: string) => { + if (!title) navigate('') + else { + let query = `?title=${title}&page=${page}` - if (type) query += `&type=${type}` - if (year) query += `&year=${year}` + if (type) query += `&type=${type}` + if (year) query += `&year=${year}` - navigate(query) + navigate(query) + } } }