🚧 working on working query params

Co-authored-by: Sindre Kjelsrud <kjelsrudsindre@gmail.com>
This commit is contained in:
haraldnilsen 2023-09-11 09:48:05 +02:00
parent 6341339174
commit 8648d58771
3 changed files with 31 additions and 8 deletions

View file

@ -10,11 +10,13 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@types/react-router-dom": "^5.3.3",
"git-mob": "^2.4.0", "git-mob": "^2.4.0",
"qjuul": "^1.0.7", "qjuul": "^1.0.7",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-modal": "^3.16.1" "react-modal": "^3.16.1",
"react-router-dom": "^6.15.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^20.5.9", "@types/node": "^20.5.9",

View file

@ -3,6 +3,7 @@ import './App.css'
import q from 'qjuul' import q from 'qjuul'
import { MovieForm, Pagination, MovieTable, MovieModal } from './components' import { MovieForm, Pagination, MovieTable, MovieModal } from './components'
import type { movieObject } from './types/movie' import type { movieObject } from './types/movie'
import { useLocation, useNavigate } from 'react-router-dom'
function App() { function App() {
const API_MOVIE_KEY = 'd92949d8' const API_MOVIE_KEY = 'd92949d8'
@ -17,11 +18,18 @@ function App() {
const [movieTitle, setMovieTitle] = useState('') const [movieTitle, setMovieTitle] = useState('')
const [sortAscending, setSortAscending] = useState(true) const [sortAscending, setSortAscending] = useState(true)
console.log('App mounted') const navigate = useNavigate()
const location = useLocation()
const searchParams = new URLSearchParams(location.search)
const title = searchParams.get('title') || ''
const type = searchParams.get('type') || ''
const year = searchParams.get('y') || ''
// testing testing
useEffect(() => { useEffect(() => {
fetch( fetch(
`http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${movieTitle}&page=${currentPage}` `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${title}&type=${type}&y=${year}&page=${currentPage}`
) )
.then((response) => response.json()) .then((response) => response.json())
.then((data) => { .then((data) => {
@ -31,7 +39,7 @@ function App() {
}) })
.then(() => setLoading(false)) .then(() => setLoading(false))
.catch((error) => console.log(error)) .catch((error) => console.log(error))
}, [currentPage]) }, [title, type, year])
const calculatePages = (totalResults: number): number => { const calculatePages = (totalResults: number): number => {
return Math.round(totalResults / 10) return Math.round(totalResults / 10)
@ -39,6 +47,7 @@ function App() {
const handlePageChange = (pageNumber: number) => { const handlePageChange = (pageNumber: number) => {
setCurrentPage(pageNumber) setCurrentPage(pageNumber)
handleMovieSubmit()
} }
const handleModalOpen = (movie: movieObject) => { const handleModalOpen = (movie: movieObject) => {
@ -46,10 +55,19 @@ function App() {
setModalMovie(movie) setModalMovie(movie)
} }
const handleMovieSubmit = (event: any) => { const handleMovieSubmit = (event?: any) => {
event.preventDefault() 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( fetch(
`http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${movieTitle}&type=${movieType}&y=${movieYear}` `http://www.omdbapi.com/?apikey=${API_MOVIE_KEY}&s=${title}&type=${type}&y=${year}&page=${currentPage}`
) )
.then((response) => response.json()) .then((response) => response.json())
.then((data) => { .then((data) => {

View file

@ -1,9 +1,12 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom/client' import ReactDOM from 'react-dom/client'
import App from './App.tsx' import App from './App.tsx'
import { BrowserRouter, BrowserRouter as Router } from 'react-router-dom'
ReactDOM.createRoot(document.getElementById('root')!).render( ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode> <React.StrictMode>
<App /> <Router>
<App />
</Router>
</React.StrictMode> </React.StrictMode>
) )