Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
efd11fc
feat: add initial product details page layout
taraa Oct 13, 2026
4403db9
feat: add ingredients, allergens and nutrition info to product details
taraa Oct 13, 2026
253228f
feat: add shopping list controls to product details
taraa Oct 13, 2026
34deeaf
wip: implement search results page for issue #37
annisaam Oct 14, 2026
a7aa632
Merge remote-tracking branch 'origin/dev' into feature/37-search-results
annisaam Oct 14, 2026
bcaf1d1
feat: add store filtering for issue #37
annisaam Oct 14, 2026
e34ab3f
feat: add hierarchical category filtering for issue #37
annisaam Oct 14, 2026
32bfd08
chore: update search results preview for issue #37
annisaam Oct 14, 2026
cc3dcaa
feat: hero-del på startsiden (#39)
ingrihka Oct 15, 2026
e99bcca
feat: aktiv handlelapp på startsiden (#39)
ingrihka Oct 15, 2026
a5c141f
feat: kategorier og bunntekst på startsiden (#39)
ingrihka Oct 15, 2026
a63b026
style: refine product details page to match Figma design
taraa Oct 15, 2026
ca4379f
fix: remove temporary product details test changes from App
taraa Oct 15, 2026
57beaf9
Fjerner strekene på siden
taraa Oct 15, 2026
475aa88
Posisjonerte skriften mer sentralt
taraa Oct 15, 2026
629b071
feat(#37): mobiltilpasning, filterknapp og kategorinavn i filterbrikker
annisaam Oct 15, 2026
d7a013c
chore(#37): fjern preview-filer
annisaam Oct 15, 2026
2261979
Merge remote-tracking branch 'origin/dev' into feature/37-search-results
annisaam Oct 15, 2026
a75bce8
Merge pull request #43 from IT2810-H26/feature/37-search-results
taraa Oct 16, 2026
2f67071
Merge pull request #42 from IT2810-H26/36-feat-implementere-produktde…
lindeav Oct 16, 2026
8342203
Merge pull request #44 from IT2810-H26/feature/39-startside
lindeav Oct 16, 2026
8a96372
refactor: move product details page into pages directory
taraa Oct 16, 2026
51f1ac7
feat: connect product details to GraphQL
taraa Oct 16, 2026
2076500
feat: animert logo (#45)
ingrihka Oct 16, 2026
07e8424
Merge pull request #46 from IT2810-H26/feature/45-animert-logo
lindeav Oct 16, 2026
2a6694a
style: support dark mode on product details page
taraa Oct 16, 2026
ad2550c
style: support dark mode on product details page small fixes
taraa Oct 16, 2026
13b3aaa
docs: oppdater README med produktdetaljside og GraphQL-integrasjon
taraa Oct 16, 2026
d5139d0
feat(#50): implement reusable responsive header and menu button
annisaam Oct 16, 2026
8a8dad6
Merge pull request #56 from IT2810-H26/feature/50-header
taraa Oct 16, 2026
da69b30
feat(#51): integrate routing, search and navigation
annisaam Oct 16, 2026
313ffd0
Merge pull request #57 from IT2810-H26/feature/51-navigation-integration
ingrihka Oct 17, 2026
9dfb05c
Merge pull request #54 from IT2810-H26/53-docs-oppdatere-readme-med-p…
ingrihka Oct 17, 2026
8286a30
Endring for tilbakemelding fått
taraa Oct 18, 2026
13b0a9d
fix: vis lesbare butikknavn på produktdetaljsiden
taraa Oct 18, 2026
ce0ffc0
Merge pull request #52 from IT2810-H26/41-task-produktinformasjon-hen…
ingrihka Oct 19, 2026
8332b90
Merge branch 'main' into dev
lindeav Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 41 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,14 @@ Hva du får opp når du filtrerer på en bestemt butikk hvis den har produktet o


### Produktside og meny
Produktsiden er utviklet med utgangspunkt i Figma-designet. Den henter produktnavn, merke, kategori, produktbilde og butikkpriser fra GraphQL-backenden basert på produktets EAN-kode.
Butikkprisene sorteres fra lavest til høyest, med tydelig markering av billigste butikk og prisforskjeller. Dersom bilde eller priser mangler, vises en alternativ melding.
Siden støtter både light mode og dark mode ved hjelp av prosjektets eksisterende temavariabler.

Ingredienser, allergener og næringsinnhold inngår i designet, men er foreløpig ikke tilgjengelige gjennom GraphQL. Handlelistekontrollene er implementert med lokal React-state, men er ennå ikke koblet til backend.
Produktsiden viser pris, kilopris, ingredienser, allergener og næringsinnhold. Her kan man endre antall og legge til et notat, for eksempel «skivet, hvis de har». Menyen gir tilgang til alle delene av appen.


### Mine handlelister og aktiv liste
Man kan ha flere aktive lister, og den man bruker nå er merket. På den aktive lista kan man endre antall, fjerne varer, sortere etter butikkavdeling og se estimert sum.

Expand Down Expand Up @@ -111,6 +117,23 @@ Backenden kjører på port 3001. Når backenden kjører lokalt, kan du åpne htt

En `Product` har feltene `ean`, `name`, `brand`, `imageUrl`, `categoryId`, `category` og `prices`. Hver pris har `storeCode`, `price`, `unitPrice` og `url`.

### GraphQL i frontend – produktdetaljer

Frontend bruker to ulike GraphQL-spørringer for produkter:

- `products(search, limit, ...)` brukes til å hente flere produkter til søk og produktoversikter.
- `product(ean)` brukes til å hente informasjon om ett bestemt produkt på produktdetaljsiden.

Dette er et bevisst valg for å skille mellom produktsøk og detaljvisning. Det gjør at detaljsiden kan hente informasjon om et bestemt produkt uten å måtte søke gjennom en produktliste.

Produktdetaljsiden bruker Apollo Clients `useQuery` og en egen spørring definert i `frontend/src/pages/productDetails/productQueries.ts`.

Spørringen henter `ean`, `name`, `brand`, `imageUrl`, `category` og `prices`, inkludert butikkode, pris og enhetspris.

Prisene sorteres i frontend for det aktuelle produktet. Apollo Client tilbyr caching, men vi har foreløpig ikke dokumentert eller målt noen reduksjon i nettverkskall mellom produktlisten og detaljsiden.

Ved lasting, feil eller manglende produkt vises egne tilstander, slik at siden ikke forsøker å vise informasjon som ikke finnes.

**Eksempel: søk etter melk**

```graphql
Expand Down Expand Up @@ -257,11 +280,28 @@ Lister med mange elementer, som søkeresultater og tidligere handlelister, retur
- Frontend med React og Apollo Client som henter og viser varer med laveste pris. Søket bruker debounce (400 ms), så det sendes ikke et kall for hvert tastetrykk.
- Backend og database på VM-en (pågår, se [Kjøre på VM-en](#kjøre-på-vm-en)).

### Produktdetaljside – implementert etter innlevering 2

- Produktdetaljside utviklet med React, TypeScript og CSS basert på Figma-designet.
- GraphQL-integrasjon for henting av produkter basert på EAN.
- Dynamisk visning av produktnavn, merke, kategori, bilde og butikkpriser.
- Prissammenligning med sortering fra billigst til dyrest.
- Håndtering av lasting, feil, manglende produkter, priser og bilder.
- Støtte for light mode og dark mode gjennom felles temavariabler.
- Testet manuelt mot backend. `npm run build` er gjennomført uten feil.

**Gjenstår:**
- Hente ingredienser, allergener og næringsinnhold fra backend.
- Koble handlelistekontrollene til backend.
- Integrere navigasjon fra søkeresultater til produktdetaljsiden.


**Kommer i innlevering 3**

- Paginering i klienten («last flere» eller sider) med totalt antall treff.
- Filtrering på pris, butikk og merking, og sortering på pris og kilopris, i databasen.
- Produktside med ingredienser, allergener og næringsinnhold.
- Utvide den eksisterende produktdetaljsiden med ingredienser,
allergener og næringsinnhold fra backend.
- Handlelister i grensesnittet: opprette, legge til varer, endre antall, handletur med avkrysning og tidligere lister.
- Tilgjengelighet og bærekraft som beskrevet i [Hvordan vi oppfyller kravene](#hvordan-vi-oppfyller-kravene).
- Prettier, Vitest og Playwright.
Expand Down
Loading