✨ working query params from url - not form
Co-authored-by: Sindre Kjelsrud <kjelsrudsindre@gmail.com>
This commit is contained in:
		
							parent
							
								
									18c85a662a
								
							
						
					
					
						commit
						cd63407d03
					
				
					 4 changed files with 33 additions and 49 deletions
				
			
		
							
								
								
									
										32
									
								
								src/App.tsx
									
										
									
									
									
								
							
							
						
						
									
										32
									
								
								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() { | |||
|         <MovieModal {...{ setModalOpen, modalMovie, modalOpen }} /> | ||||
|         <q.div className="flex flex-col w-full items-center"> | ||||
|           <q.h1 className="py-4">All movies</q.h1> | ||||
|           <MovieForm | ||||
|             {...{ | ||||
|               handleMovieSubmit, | ||||
|               setMovieTitle, | ||||
|               setMovieType, | ||||
|               setMovieYear, | ||||
|             }} | ||||
|           /> | ||||
|           <MovieForm /> | ||||
|           <q.div className="flex pt-10"> | ||||
|             {!loading && totalPages && ( | ||||
|             {!loading && movies.length > 0 && ( | ||||
|               <Pagination | ||||
|                 currentPage={currentPage} | ||||
|                 totalPages={calculatePages(totalPages)} | ||||
|  | @ -97,7 +91,7 @@ function App() { | |||
|           </q.div> | ||||
|           {loading ? ( | ||||
|             <q.h1>Loading...</q.h1> | ||||
|           ) : movies ? ( | ||||
|           ) : movies.length > 0 ? ( | ||||
|             <MovieTable {...{ handleModalOpen, sortHandler, movies }} /> | ||||
|           ) : ( | ||||
|             <q.h2>Find a list of movies by searching above ☝️ </q.h2> | ||||
|  |  | |||
|  | @ -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<movieResponse> => { | ||||
|   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}` | ||||
|  |  | |||
|  | @ -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<MovieFormProps> = ({ | ||||
|   handleMovieSubmit, | ||||
|   setMovieTitle, | ||||
|   setMovieType, | ||||
|   setMovieYear, | ||||
| }) => { | ||||
|   return ( | ||||
|     <q.form | ||||
|       className="flex flex-col gap-3 card p-4 rounded-lg w-full lg:px-14" | ||||
|       onSubmit={handleMovieSubmit} | ||||
|       onSubmit={() => navigateToPage(movieTitle, movieYear, movieType)} | ||||
|     > | ||||
|       <q.label>Choose a movie title:</q.label> | ||||
|       <q.input | ||||
|  |  | |||
|  | @ -1,20 +1,17 @@ | |||
| import { useNavigate } from 'react-router' | ||||
| 
 | ||||
| const navigate = useNavigate() | ||||
| export const useNavigateToPage = () => { | ||||
|   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) | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Reference in a new issue
	
	 haraldnilsen
						haraldnilsen