diff --git a/src/App.tsx b/src/App.tsx
index 521593b..580fb31 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,33 +1,48 @@
-import { usePopMovies, useCurMovies } from './hooks/useMovies';
+import { useState } from 'react';
+import { usePopMovies, useCurMovies, useSearchMovies } from './hooks/useMovies';
import { usePopularPeople } from './hooks/usePeople';
import { Sidebar } from './components/sidebar';
import { Section } from './components/Section';
import MovieList from './components/MovieList';
import { PersonList } from './components/PersonList';
import './App.css';
+import { useDebouncedValue } from './hooks/useDebouncedValue';
function App() {
+ const [query, setQuery] = useState('');
+
const popular = usePopMovies()
const current = useCurMovies()
const people = usePopularPeople()
+ const debouncedQuery = useDebouncedValue(query, 400);
+ const search = useSearchMovies(debouncedQuery)
+ const isSearching = query.trim().length > 0;
return (
-
+
-
-
-
-
-
+ {isSearching ? (
+
+ ) : (
+ <>
+
+
+
+
+
+ >
+ )}
diff --git a/src/api/tmdb.ts b/src/api/tmdb.ts
index af9db24..9a2df84 100644
--- a/src/api/tmdb.ts
+++ b/src/api/tmdb.ts
@@ -33,9 +33,13 @@ export function fetchPopularPeople(): Promise
> {
return tmdbFetch('/person/popular?language=en-US&page=1', 'Klarte ikke hente skuespillere...');
}
+export function fetchSearchMovies(query: string): Promise> {
+ return tmdbFetch(`/search/movie?query=${encodeURIComponent(query)}&language=en-US&page=1`, 'Søket feilet...');
+}
+
export function fetchMovieCredits(movieId: number): Promise {
return tmdbFetch(
`/movie/${movieId}/credits?language=en-US`,
'Klarte ikke hente skuespillere...',
);
-}
\ No newline at end of file
+}
diff --git a/src/components/sidebar.tsx b/src/components/sidebar.tsx
index b9ba39e..b9e7248 100644
--- a/src/components/sidebar.tsx
+++ b/src/components/sidebar.tsx
@@ -3,6 +3,7 @@ import './sidebar.css';
type SidebarProps = {
onSearch?: (query: string) => void;
+ searchValue?: string;
};
//under kommer seksjonene i midtkolonnen som sidebaren skal kunne hoppe mellom
@@ -12,7 +13,7 @@ const sections = [
{ id: "skuespillere", label: "Skuespillere"},
];
-export function Sidebar({onSearch}: SidebarProps) {
+export function Sidebar({onSearch, searchValue}: SidebarProps) {
return (
@@ -32,9 +34,19 @@ export function Sidebar({onSearch}: SidebarProps) {
diff --git a/src/hooks/useDebouncedValue.ts b/src/hooks/useDebouncedValue.ts
new file mode 100644
index 0000000..2b002fa
--- /dev/null
+++ b/src/hooks/useDebouncedValue.ts
@@ -0,0 +1,15 @@
+import { useState, useEffect } from 'react';
+
+export function useDebouncedValue(value: T, delay: number): T {
+ const [debouncedValue, setDebouncedValue] = useState(value);
+
+ useEffect(() => {
+ const timeoutId = setTimeout(() => {
+ setDebouncedValue(value);
+ }, delay);
+
+ return () => clearTimeout(timeoutId);
+ }, [value, delay]);
+
+ return debouncedValue;
+}
\ No newline at end of file
diff --git a/src/hooks/useMovies.ts b/src/hooks/useMovies.ts
index 50912a7..6a59a98 100644
--- a/src/hooks/useMovies.ts
+++ b/src/hooks/useMovies.ts
@@ -1,6 +1,6 @@
// hooks/useMovies.ts
import { useQuery } from '@tanstack/react-query'
-import { fetchCurrentMovies, fetchPopularMovies } from '../api/tmdb'
+import { fetchCurrentMovies, fetchPopularMovies, fetchSearchMovies } from '../api/tmdb'
export function usePopMovies() {
return useQuery({
@@ -15,4 +15,12 @@ export function useCurMovies() {
queryFn: fetchCurrentMovies,
})
+}
+
+export function useSearchMovies(query: string) {
+ return useQuery({
+ queryKey: ['movies', 'search', query],
+ queryFn: () => fetchSearchMovies(query),
+ enabled: query.trim().length > 0,
+ })
}
\ No newline at end of file