diff --git a/src/App.css b/src/App.css index f90339d..2da363b 100644 --- a/src/App.css +++ b/src/App.css @@ -182,3 +182,21 @@ border-right-color: var(--border); } } + + +.page { + display: flex; /* legger barna (aside + main) side om side i stedet for stablet */ + align-items: flex-start; /* gjør at sidebaren ikke strekker seg like høy som main automatisk */ + gap: 24px; /* luft mellom sidebar og hovedinnhold, juster selv */ + padding-top: 32px; + padding-left:24px; +} + +.page > main { + flex: 2 1 0; /* 2 deler av 4 = 2/4 (halvparten) av siden */ + min-width: 0; +} + +.page > .page-spacer { + flex: 1 1 0; /* 1 del av 4 = 1/4 av siden, samme som sidebar */ +} diff --git a/src/App.tsx b/src/App.tsx index d1d2c93..22660f9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,19 +1,26 @@ // App.tsx -import { useState } from 'react' -import { useCurMovies, usePopMovies } from './hooks/useMovies' -import { Button } from './components/Button' +import { useState } from 'react'; +import { useCurMovies, usePopMovies } from './hooks/useMovies'; + +import { usePopularPeople } from './hooks/usePeople'; +//import { Button } from './components/Button'; +import { Sidebar} from './components/sidebar'; +import './App.css'; function App() { - const [view, setView] = useState<'popular' | 'current'>('popular') - const popular = usePopMovies(view === 'popular') - const current = useCurMovies(view === 'current') + const [searchQuery, setSearchQuery] = useState('') + //const [view, setView] = useState<'popular' | 'current'>('popular') + + const popular = usePopMovies() + const current = useCurMovies() + const people = usePopularPeople() const viewConfig = { popular: { title: 'Populære filmer', query: popular }, current: { title: 'Nye filmer', query: current }, } - +/* const { title, query } = viewConfig[view] const { data, isLoading, error } = query @@ -38,5 +45,56 @@ function App() { ) } +*/ + + return ( +
+ + +
+ +
+

Populære filmer

+ {popular.isLoading &&

Laster filmer...

} + {popular.error &&

Noe gikk galt: {popular.error.message}

} + {popular.data && ( +
    + {popular.data.results.map((movie: any) => ( +
  • {movie.title}
  • + ))} +
+ )} +
+ +
+

Nye filmer

+ {current.isLoading &&

Laster filmer...

} + {current.error &&

Noe gikk galt: {current.error.message}

} + {current.data && ( +
    + {current.data.results.map((movie: any) => ( +
  • {movie.title}
  • + ))} +
+ )} +
+ +
+

Skuespillere

+ {people.isLoading &&

Laster skuespillere...

} + {people.error &&

Noe gikk galt: {people.error.message}

} + {people.data && ( +
    + {people.data.results.map((person: any) => ( +
  • {person.name}
  • + ))} +
+ )} +
+
+ +
+ ) +} export default App \ No newline at end of file diff --git a/src/api/tmdb.ts b/src/api/tmdb.ts index 05627dc..c298826 100644 --- a/src/api/tmdb.ts +++ b/src/api/tmdb.ts @@ -32,4 +32,19 @@ export async function fetchCurrentMovies() { ) if (!res.ok) throw new Error('Klarte ikke hente aktuelle filmer...') return res.json() +} +//lagt til popular people + +export async function fetchPopularPeople() { + const res = await fetch( + `${BASE_URL}/person/popular?language=en-US&page=1`, + { + headers: { + accept: 'application/json', + Authorization: `Bearer ${TOKEN}`, + }, + } + ) + if (!res.ok) throw new Error('Klarte ikke hente skuespillere...') + return res.json() } \ No newline at end of file diff --git a/src/components/sidebar.css b/src/components/sidebar.css new file mode 100644 index 0000000..7660d3d --- /dev/null +++ b/src/components/sidebar.css @@ -0,0 +1,49 @@ + + +/* Skjuler elementet visuelt uten å fjerne det fra DOM-en, + slik at skjermlesere fortsatt leser opp teksten (f.eks. labelen over). */ +.visually-hidden { + position: absolute; /* tar det ut av normal layout-flyt */ + width: 1px; + height: 1px; /* krymper det til nesten ingenting */ + padding: 0; + margin: -1px; /* trikser bort avrundingsproblemer i noen nettlesere */ + overflow: hidden; /* skjuler alt innhold som stikker utenfor 1x1px */ + clip: rect(0, 0, 0, 0); /* eldre metode for å "klippe bort" innholdet visuelt */ + white-space: nowrap; /* hindrer teksten fra å brekke og bli synlig */ + border: 0; +} + +/* Gjør at #-lenker (som href="#populaere") scroller mykt i stedet for å hoppe brått. */ +html { + scroll-behavior: smooth; +} + +.sidebar { + text-align: left; + flex: 1 1 0; /* 2 del av 4 = 1/4 av siden */ +} + +.sidebar-search { + margin-bottom: 28px; /* luft mellom søkefelt og lenkene */ +} + +.sidebar-search input { + width: 100%; + font-size: 18px; + padding: 8px 12px; + box-sizing: border-box; +} + +.sidebar-nav { + list-style: none; /* fjerner kulepunktene, som i skissen */ + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: 18px; /* avstand mellom lenkene */ +} + +.sidebar-nav a { + font-size: 28px; /* juster tallet til det ser riktig ut */ +} \ No newline at end of file diff --git a/src/components/sidebar.tsx b/src/components/sidebar.tsx index e69de29..b9ba39e 100644 --- a/src/components/sidebar.tsx +++ b/src/components/sidebar.tsx @@ -0,0 +1,44 @@ +import './sidebar.css'; + + +type SidebarProps = { + onSearch?: (query: string) => void; +}; + +//under kommer seksjonene i midtkolonnen som sidebaren skal kunne hoppe mellom +const sections = [ + { id: "populaere", label: "Populære"}, + { id: "nye-filmer", label: "Nye Filmer"}, + { id: "skuespillere", label: "Skuespillere"}, +]; + +export function Sidebar({onSearch}: SidebarProps) { + return ( + + + ); +} + diff --git a/src/hooks/useMovies.ts b/src/hooks/useMovies.ts index 3d84e80..50912a7 100644 --- a/src/hooks/useMovies.ts +++ b/src/hooks/useMovies.ts @@ -2,18 +2,17 @@ import { useQuery } from '@tanstack/react-query' import { fetchCurrentMovies, fetchPopularMovies } from '../api/tmdb' -export function usePopMovies(enabled: boolean) { +export function usePopMovies() { return useQuery({ queryKey: ['movies', 'popular'], queryFn: fetchPopularMovies, - enabled, }) } -export function useCurMovies(enabled: boolean) { +export function useCurMovies() { return useQuery({ queryKey: ['movies', 'current'], queryFn: fetchCurrentMovies, - enabled, + }) } \ No newline at end of file diff --git a/src/hooks/usePeople.ts b/src/hooks/usePeople.ts new file mode 100644 index 0000000..6bccd4b --- /dev/null +++ b/src/hooks/usePeople.ts @@ -0,0 +1,9 @@ +import { useQuery } from '@tanstack/react-query' +import { fetchPopularPeople } from '../api/tmdb' + +export function usePopularPeople() { + return useQuery({ + queryKey: ['people', 'popular'], + queryFn: fetchPopularPeople, + }) +} \ No newline at end of file diff --git a/src/index.css b/src/index.css index 5fb3313..8cb6ea6 100644 --- a/src/index.css +++ b/src/index.css @@ -51,15 +51,13 @@ } #root { - width: 1126px; - max-width: 100%; - margin: 0 auto; - text-align: center; - border-inline: 1px solid var(--border); + width: 100%; + margin: 0; min-height: 100svh; display: flex; flex-direction: column; box-sizing: border-box; + text-align: center; } body { diff --git a/src/layouts/MainLayout.tsx b/src/layouts/MainLayout.tsx deleted file mode 100644 index e69de29..0000000