🚧 still WIP on query params
Co-authored-by: haraldnilsen <harald_998@hotmail.com>
This commit is contained in:
		
							parent
							
								
									8648d58771
								
							
						
					
					
						commit
						a87cfe4d7b
					
				
					 2 changed files with 42 additions and 33 deletions
				
			
		
							
								
								
									
										68
									
								
								src/App.tsx
									
										
									
									
									
								
							
							
						
						
									
										68
									
								
								src/App.tsx
									
										
									
									
									
								
							|  | @ -24,22 +24,53 @@ function App() { | ||||||
|   const title = searchParams.get('title') || '' |   const title = searchParams.get('title') || '' | ||||||
|   const type = searchParams.get('type') || '' |   const type = searchParams.get('type') || '' | ||||||
|   const year = searchParams.get('y') || '' |   const year = searchParams.get('y') || '' | ||||||
| 
 |   const page = searchParams.get('page') || '' | ||||||
|   // testing testing
 |  | ||||||
| 
 | 
 | ||||||
|   useEffect(() => { |   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( |     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((response) => response.json()) | ||||||
|       .then((data) => { |       .then((data) => { | ||||||
|         setMovies(data.Search) |         setMovies(data.Search) | ||||||
|         console.log(data) |  | ||||||
|         setTotalPages(data.totalResults) |         setTotalPages(data.totalResults) | ||||||
|       }) |       }) | ||||||
|       .then(() => setLoading(false)) |       .then(() => setLoading(false)) | ||||||
|       .catch((error) => console.log(error)) |       .catch((error) => console.log(error)) | ||||||
|   }, [title, type, year]) |   } | ||||||
| 
 | 
 | ||||||
|   const calculatePages = (totalResults: number): number => { |   const calculatePages = (totalResults: number): number => { | ||||||
|     return Math.round(totalResults / 10) |     return Math.round(totalResults / 10) | ||||||
|  | @ -47,7 +78,7 @@ function App() { | ||||||
| 
 | 
 | ||||||
|   const handlePageChange = (pageNumber: number) => { |   const handlePageChange = (pageNumber: number) => { | ||||||
|     setCurrentPage(pageNumber) |     setCurrentPage(pageNumber) | ||||||
|     handleMovieSubmit() |     handleMovieSubmit({ pageNumber }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   const handleModalOpen = (movie: movieObject) => { |   const handleModalOpen = (movie: movieObject) => { | ||||||
|  | @ -55,30 +86,6 @@ function App() { | ||||||
|     setModalMovie(movie) |     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) => { |   const sortHandler = (sortType: string) => { | ||||||
|     let sortedMovies: movieObject[] = [] |     let sortedMovies: movieObject[] = [] | ||||||
| 
 | 
 | ||||||
|  | @ -113,6 +120,7 @@ function App() { | ||||||
|               setMovieTitle, |               setMovieTitle, | ||||||
|               setMovieType, |               setMovieType, | ||||||
|               setMovieYear, |               setMovieYear, | ||||||
|  |               movieTitle, | ||||||
|             }} |             }} | ||||||
|           /> |           /> | ||||||
|           <q.div className="flex pt-10"> |           <q.div className="flex pt-10"> | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| import type { movieObject } from '../../types/movie' |  | ||||||
| import Modal from 'react-modal' |  | ||||||
| import q from 'qjuul' | import q from 'qjuul' | ||||||
| 
 | 
 | ||||||
| interface MovieFormProps { | interface MovieFormProps { | ||||||
|  | @ -7,6 +5,7 @@ interface MovieFormProps { | ||||||
|   setMovieTitle: (title: string) => void |   setMovieTitle: (title: string) => void | ||||||
|   setMovieYear: (year: string) => void |   setMovieYear: (year: string) => void | ||||||
|   setMovieType: (type: string) => void |   setMovieType: (type: string) => void | ||||||
|  |   movieTitle: string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const MovieForm: React.FC<MovieFormProps> = ({ | const MovieForm: React.FC<MovieFormProps> = ({ | ||||||
|  | @ -14,17 +13,19 @@ const MovieForm: React.FC<MovieFormProps> = ({ | ||||||
|   setMovieTitle, |   setMovieTitle, | ||||||
|   setMovieType, |   setMovieType, | ||||||
|   setMovieYear, |   setMovieYear, | ||||||
|  |   movieTitle, | ||||||
| }) => { | }) => { | ||||||
|   return ( |   return ( | ||||||
|     <q.form |     <q.form | ||||||
|       className="flex flex-col gap-3 card p-4 rounded-lg w-full lg:px-14" |       className="flex flex-col gap-3 card p-4 rounded-lg w-full lg:px-14" | ||||||
|       onSubmit={handleMovieSubmit} |       onSubmit={(event) => handleMovieSubmit({ event: event })} | ||||||
|     > |     > | ||||||
|       <q.label>Choose a movie title:</q.label> |       <q.label>Choose a movie title:</q.label> | ||||||
|       <q.input |       <q.input | ||||||
|         type="text" |         type="text" | ||||||
|         id="movieTitle" |         id="movieTitle" | ||||||
|         placeholder="Movie title" |         placeholder="Movie title" | ||||||
|  |         value={movieTitle.length > 0 ? movieTitle : ''} | ||||||
|         onChange={(e) => setMovieTitle(e.target.value)} |         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" |         className="border text-black border-gray-300 rounded-md p-2 focus:outline-none focus:ring-2 focus:ring-blue-600 focus:border-transparent" | ||||||
|       /> |       /> | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Sindre Kjelsrud
						Sindre Kjelsrud