Laster filmer...
;
- }
-
- // Hvis noe gikk galt med kallet (f.eks. nettverksfeil eller ugyldig token),
- // viser vi en enkel feilmelding i stedet for å krasje siden.
- if (error) {
- return Klarte ikke hente filmer akkurat nå.
;
- }
+type MovieListProps = {
+ movies: Movie[];
+};
+function MovieList({ movies }: MovieListProps) {
return (
// Ytre container for hele filmlisten, kan style'es med CSS senere
- {/* data er svaret fra TMDB, som har en "results"-liste med filmobjekter.
- ?. brukes i tilfelle data enda ikke har kommet (undefined). */}
- {data?.results.map((movie: any) => (
+ {movies.map((movie) => (
// .map() går gjennom hver film og returnerer én MovieCard per film.
// key={movie.id} er påkrevd av React for å holde styr på hvert element i lista.
-export default MovieList;
+export default MovieList;
\ No newline at end of file
diff --git a/src/components/PersonList.tsx b/src/components/PersonList.tsx
new file mode 100644
index 0000000..bd732d1
--- /dev/null
+++ b/src/components/PersonList.tsx
@@ -0,0 +1,15 @@
+import type { Person } from '../types/tmdb';
+
+type PersonListProps = {
+ people: Person[];
+};
+
+export function PersonList({ people }: PersonListProps) {
+ return (
+
+ {people.map((person) => (
+ - {person.name}
+ ))}
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/Section.tsx b/src/components/Section.tsx
new file mode 100644
index 0000000..f2f77ce
--- /dev/null
+++ b/src/components/Section.tsx
@@ -0,0 +1,22 @@
+// denne filen eier overskrift + laster/feil-håndtering, tar innholdet som 'children':
+
+import type { ReactNode } from 'react';
+
+type SectionProps = {
+ id: string;
+ title: string;
+ isLoading: boolean;
+ error: Error | null;
+ children: ReactNode;
+};
+
+export function Section({ id, title, isLoading, error, children }: SectionProps) {
+ return (
+
+ {title}
+ {isLoading && Laster...
}
+ {error && Noe gikk galt: {error.message}
}
+ {!isLoading && !error && children}
+
+ );
+}
\ No newline at end of file
diff --git a/src/hooks/usePopMovies.ts b/src/hooks/usePopMovies.ts
index 5321147..9fe33f4 100644
--- a/src/hooks/usePopMovies.ts
+++ b/src/hooks/usePopMovies.ts
@@ -1,6 +1,6 @@
// hooks/useMovies.ts
import { useQuery } from '@tanstack/react-query'
-import { fetchCurrentMovies, fetchPopularMovies } from '../api/tmdb'
+import { fetchPopularMovies } from '../api/tmdb'
export function usePopMovies() {
return useQuery({
diff --git a/src/types/tmdb.ts b/src/types/tmdb.ts
new file mode 100644
index 0000000..843b689
--- /dev/null
+++ b/src/types/tmdb.ts
@@ -0,0 +1,21 @@
+export type Movie = {
+ id: number;
+ title: string;
+ poster_path: string | null;
+ vote_average: number;
+ release_date: string;
+};
+
+export type Person = {
+ id: number;
+ name: string;
+ profile_path: string | null;
+};
+
+// TMDB pakker alltid svaret i samme struktur, uansett hva results inneholder
+export type TmdbResponse
= {
+ page: number;
+ results: T[];
+ total_pages: number;
+ total_results: number;
+};
\ No newline at end of file
Connect with us
-Join the Vite community
---
-
-
- GitHub
-
-
- -
-
-
- Discord
-
-
- -
-
-
- X.com
-
-
- -
-
-
- Bluesky
-
-
-
-