# Pregled komponent v aplikaciji Rezervacije

Ta dokument vsebuje kratek pregled vseh komponent v aplikaciji za rezervacije restavracij, njihovo lokacijo in namen uporabe.

## Osnovne komponente

### 1. NavigationBar
**Lokacija:** `/src/components/NavigationBar.tsx`  
**Namen:** Glavna navigacijska vrstica za domačo stran aplikacije z gumbi za priljubljene, profil in meni.  
**Uporaba:** Uporabite na vrhu domače strani za osnovno navigacijo po aplikaciji.

### 2. Footer
**Lokacija:** `/src/components/Footer.tsx`  
**Namen:** Spodnja navigacijska vrstica z gumbi za domov, iskanje, rezervacije in profil.  
**Uporaba:** Uporabite na dnu domače strani in strani z zgodovino rezervacij za osnovno navigacijo med glavnimi sekcijami aplikacije. Ne uporabljajte na straneh, ki imajo lastne noge (ReservationFooter, CancellationFooter) ali spodnje pripete elemente (ReservationWidget).

### 3. RestaurantCard
**Lokacija:** `/src/components/RestaurantCard.tsx`  
**Namen:** Kartica za prikaz osnovnih podatkov o restavraciji na seznamu.  
**Uporaba:** Uporabite za prikazovanje restavracij na seznamih in straneh za iskanje.

### 4. CategoryItem
**Lokacija:** `/src/components/CategoryItem.tsx`  
**Namen:** Prikaz kategorije restavracije/kuhinje z ikono in besedilom.  
**Uporaba:** Uporabite za prikaz kategorij kuhinj v horizontalnem seznamu.

### 5. QuickFilterButton
**Lokacija:** `/src/components/QuickFilterButton.tsx`  
**Namen:** Gumb za hitro filtriranje restavracij po različnih kriterijih.  
**Uporaba:** Uporabite za omogočanje hitrih filtrov na straneh s seznami restavracij.

### 6. SearchBar
**Lokacija:** `/src/components/SearchBar.tsx`  
**Namen:** Vnosno polje za iskanje restavracij, lokacij ali vrst kuhinj.  
**Uporaba:** Uporabite na domači strani ali strani za iskanje.

### 7. QuickFilterList
**Lokacija:** `/src/components/QuickFilterList.tsx`  
**Namen:** Horizontalni seznam hitrih filtrov za restavracije.  
**Uporaba:** Uporabite pod iskalno vrstico na domači strani.

### 8. MapButton
**Lokacija:** `/src/components/MapButton.tsx`  
**Namen:** Gumb za prikaz restavracij na zemljevidu.  
**Uporaba:** Uporabite na domači strani za preklapljanje na pogled zemljevida.

### 9. CategoriesList
**Lokacija:** `/src/components/CategoriesList.tsx`  
**Namen:** Horizontalni seznam kategorij kuhinj.  
**Uporaba:** Uporabite na domači strani za filtriranje po vrstah kuhinj.

### 10. RestaurantList
**Lokacija:** `/src/components/RestaurantList.tsx`  
**Namen:** Seznam restavracij z naslovom in možnostjo prikaza vseh.  
**Uporaba:** Uporabite na domači strani za prikaz priporočenih restavracij.

## Komponente za podrobnosti restavracije

### 11. RestaurantNavBar
**Lokacija:** `/src/components/RestaurantNavBar.tsx`  
**Namen:** Navigacijska vrstica za stran s podrobnostmi restavracije z gumbi za nazaj, deljenje in priljubljene.  
**Uporaba:** Uporabite na vrhu strani s podrobnostmi restavracije.

### 12. RestaurantGallery
**Lokacija:** `/src/components/RestaurantGallery.tsx`  
**Namen:** Prikaz slike restavracije z gumbi za ogled galerije in 360° pogleda.  
**Uporaba:** Uporabite na vrhu strani s podrobnostmi restavracije za prikaz glavne slike in dostop do več slik.

### 13. RestaurantInfo
**Lokacija:** `/src/components/RestaurantInfo.tsx`  
**Namen:** Prikaz osnovnih informacij o restavraciji - ime, lokacija, ocena in značilnosti.  
**Uporaba:** Uporabite pod galerijo na strani s podrobnostmi restavracije.

### 14. ActionButtons
**Lokacija:** `/src/components/ActionButtons.tsx`  
**Namen:** Trije gumbi za klic, navigacijo in obisk spletne strani restavracije.  
**Uporaba:** Uporabite pod osnovnimi informacijami na strani s podrobnostmi restavracije.

### 15. InfoAccordion
**Lokacija:** `/src/components/InfoAccordion.tsx`  
**Namen:** Razširljiv/skrčljiv element za prikaz informacij v sekcijah.  
**Uporaba:** Uporabite za različne sekcije podrobnosti, kot so opis, odpiralni čas in kontakt.

### 16. RestaurantDescription
**Lokacija:** `/src/components/RestaurantDescription.tsx`  
**Namen:** Prikaz opisa restavracije v razširljivem elementu.  
**Uporaba:** Uporabite v sekciji z informacijami na strani s podrobnostmi restavracije.

### 17. OpeningHours
**Lokacija:** `/src/components/OpeningHours.tsx`  
**Namen:** Prikaz odpiralnega časa restavracije v razširljivem elementu.  
**Uporaba:** Uporabite v sekciji z informacijami na strani s podrobnostmi restavracije.

### 18. ContactInfo
**Lokacija:** `/src/components/ContactInfo.tsx`  
**Namen:** Prikaz kontaktnih podatkov restavracije v razširljivem elementu.  
**Uporaba:** Uporabite v sekciji z informacijami na strani s podrobnostmi restavracije.

### 19. MenuSection
**Lokacija:** `/src/components/MenuSection.tsx`  
**Namen:** Prikaz menija restavracije po kategorijah.  
**Uporaba:** Uporabite na strani s podrobnostmi restavracije za prikaz ponudbe jedi.

### 20. Reviews
**Lokacija:** `/src/components/Reviews.tsx`  
**Namen:** Prikaz ocen in mnenj uporabnikov o restavraciji.  
**Uporaba:** Uporabite na strani s podrobnostmi restavracije za prikaz ocen in mnenj.

### 21. ReservationWidget
**Lokacija:** `/src/components/ReservationWidget.tsx`  
**Namen:** Spodnji pritrjeni element za hitro izbiro termina in števila oseb za rezervacijo.  
**Uporaba:** Uporabite na dnu strani s podrobnostmi restavracije za hiter začetek postopka rezervacije.

## Komponente za rezervacijo

### 22. ReservationNavBar
**Lokacija:** `/src/components/ReservationNavBar.tsx`  
**Namen:** Navigacijska vrstica za stran z rezervacijo z gumboma za nazaj in pomoč.  
**Uporaba:** Uporabite na vrhu strani za rezervacijo.

### 23. ReservationRestaurantInfo
**Lokacija:** `/src/components/ReservationRestaurantInfo.tsx`  
**Namen:** Prikaz osnovnih podatkov o restavraciji na strani za rezervacijo.  
**Uporaba:** Uporabite na vrhu strani za rezervacijo, da uporabnik ve, katero restavracijo rezervira.

### 24. DateSelector
**Lokacija:** `/src/components/DateSelector.tsx`  
**Namen:** Izbira datuma rezervacije z vnosnim poljem in gumbi za hitre izbire.  
**Uporaba:** Uporabite na obrazcu za rezervacijo za izbiro datuma.

### 25. TimeSelector
**Lokacija:** `/src/components/TimeSelector.tsx`  
**Namen:** Izbira ure rezervacije, razdeljena po delih dneva (kosilo, večerja).  
**Uporaba:** Uporabite na obrazcu za rezervacijo za izbiro ure.

### 26. GuestCounter
**Lokacija:** `/src/components/GuestCounter.tsx`  
**Namen:** Izbira števila oseb za rezervacijo z gumbi za povečanje in zmanjšanje.  
**Uporaba:** Uporabite na obrazcu za rezervacijo za določitev števila gostov.

### 27. SpecialRequests
**Lokacija:** `/src/components/SpecialRequests.tsx`  
**Namen:** Besedilno polje za vnos posebnih zahtev ob rezervaciji.  
**Uporaba:** Uporabite na obrazcu za rezervacijo za vnos posebnih diet, alergij ali želja.

### 28. ContactForm
**Lokacija:** `/src/components/ContactForm.tsx`  
**Namen:** Obrazec za vnos kontaktnih podatkov za rezervacijo.  
**Uporaba:** Uporabite na obrazcu za rezervacijo za vnos imena, telefona in e-pošte.

### 29. ReservationSummary
**Lokacija:** `/src/components/ReservationSummary.tsx`  
**Namen:** Povzetek podatkov o rezervaciji pred potrditvijo.  
**Uporaba:** Uporabite na obrazcu za rezervacijo za pregled izbranih nastavitev.

### 30. CancellationPolicy
**Lokacija:** `/src/components/CancellationPolicy.tsx`  
**Namen:** Prikaz pravil o odpovedi rezervacije.  
**Uporaba:** Uporabite na obrazcu za rezervacijo za seznanitev uporabnika s pogoji odpovedi.

### 31. TermsAgreement
**Lokacija:** `/src/components/TermsAgreement.tsx`  
**Namen:** Potrditveno polje za strinjanje s pogoji uporabe in pravili o zasebnosti.  
**Uporaba:** Uporabite na obrazcu za rezervacijo pred potrditvijo.

### 32. ReservationFooter
**Lokacija:** `/src/components/ReservationFooter.tsx`  
**Namen:** Spodnji pritrjeni element s povzetkom rezervacije in gumbom za potrditev.  
**Uporaba:** Uporabite na dnu strani za rezervacijo za dokončanje postopka.

## Komponente za potrditev rezervacije

### 37. ConfirmationNavBar
**Lokacija:** `/src/components/ConfirmationNavBar.tsx`  
**Namen:** Navigacijska vrstica za stran s potrditvijo rezervacije z gumboma za zapiranje in deljenje.  
**Uporaba:** Uporabite na vrhu strani za potrditev rezervacije.

### 38. ConfirmationSuccess
**Lokacija:** `/src/components/ConfirmationSuccess.tsx`  
**Namen:** Komponenta za prikaz sporočila o uspešni rezervaciji z ikono in besedilom.  
**Uporaba:** Uporabite na vrhu strani za potrditev rezervacije za jasen prikaz uspeha.

### 39. ReservationCard
**Lokacija:** `/src/components/ReservationCard.tsx`  
**Namen:** Kartica za prikaz podrobnosti o potrjeni rezervaciji (restavracija, datum, čas, številka rezervacije, QR koda).  
**Uporaba:** Uporabite na strani za potrditev rezervacije za celovit pregled rezervacije.

### 40. QuickActions
**Lokacija:** `/src/components/QuickActions.tsx`  
**Namen:** Gumbi za hitre akcije (dodaj v koledar, navigacija, uredi) povezane z rezervacijo.  
**Uporaba:** Uporabite na strani za potrditev rezervacije za hitro izvedbo pogostih akcij.

### 41. CancellationInfo
**Lokacija:** `/src/components/CancellationInfo.tsx`  
**Namen:** Prikaz informacij o pravilih in pogojih za odpoved rezervacije z rokom odpovedi.  
**Uporaba:** Uporabite na strani za potrditev rezervacije za informiranje uporabnika o pravilih odpovedi.

### 42. ReservationDetails
**Lokacija:** `/src/components/ReservationDetails.tsx`  
**Namen:** Podrobnejši prikaz podatkov o rezervaciji, vključno s kontaktnimi podatki restavracije in posebnimi zahtevami.  
**Uporaba:** Uporabite na strani za potrditev rezervacije za prikaz dodatnih informacij o rezervaciji.

### 43. CancellationFooter
**Lokacija:** `/src/components/CancellationFooter.tsx`  
**Namen:** Noga s gumbom za odpoved rezervacije.  
**Uporaba:** Uporabite na dnu strani za potrditev rezervacije za omogočanje odpovedi.

## Komponente za zgodovino rezervacij

### 45. ReservationsNavBar
**Lokacija:** `/src/components/ReservationsNavBar.tsx`  
**Namen:** Navigacijska vrstica za stran z zgodovino rezervacij z naslovom in gumbi za filtriranje in pomoč.  
**Uporaba:** Uporabite na vrhu strani z zgodovino rezervacij.

### 46. ReservationsTabs
**Lokacija:** `/src/components/ReservationsTabs.tsx`  
**Namen:** Zavihki za preklapljanje med prihajajočimi in preteklimi rezervacijami.  
**Uporaba:** Uporabite pod navigacijsko vrstico na strani z zgodovino rezervacij.

### 47. ReservationHistoryCard
**Lokacija:** `/src/components/ReservationHistoryCard.tsx`  
**Namen:** Kartica za prikaz podatkov o posamezni rezervaciji z možnostmi za upravljanje.  
**Uporaba:** Uporabite za prikaz posamezne rezervacije v seznamu rezervacij.

### 48. ReservationsList
**Lokacija:** `/src/components/ReservationsList.tsx`  
**Namen:** Seznam rezervacij, ki prikazuje prihajajoče ali pretekle rezervacije po skupinah.  
**Uporaba:** Uporabite na strani z zgodovino rezervacij za prikaz rezervacij.

### 49. EmptyReservations
**Lokacija:** `/src/components/EmptyReservations.tsx`  
**Namen:** Prikaz praznega stanja, ko uporabnik nima nobenih rezervacij.  
**Uporaba:** Uporabite na strani z zgodovino rezervacij, ko ni rezervacij.

## Komponente za iskanje in filtriranje

### 50. SearchNavBar
**Lokacija:** `/src/components/SearchNavBar.tsx`  
**Namen:** Navigacijska vrstica za stran z iskanjem, z naslovom in gumbi za ponastavitev filtrov in pomoč.  
**Uporaba:** Uporabite na vrhu strani za iskanje in filtriranje restavracij.

### 51. AdvancedSearchBar
**Lokacija:** `/src/components/AdvancedSearchBar.tsx`  
**Namen:** Napredno iskalno polje z možnostjo čiščenja vnosa.  
**Uporaba:** Uporabite na vrhu strani za iskanje, ko želite omogočiti iskanje po imenih restavracij ali jedi.

### 52. FilterHeader
**Lokacija:** `/src/components/FilterHeader.tsx`  
**Namen:** Glava sekcije filtrov z naslovom in gumbom za ponastavitev.  
**Uporaba:** Uporabite kot uvod v sekcijo filtrov na strani za iskanje.

### 53. LocationFilter
**Lokacija:** `/src/components/LocationFilter.tsx`  
**Namen:** Filter za izbiro lokacije z vnosnim poljem in hitro izbiro priljubljenih lokacij.  
**Uporaba:** Uporabite v sekciji filtrov za filtriranje restavracij po lokaciji.

### 54. CuisineFilterGrid
**Lokacija:** `/src/components/CuisineFilterGrid.tsx`  
**Namen:** Mreža izbirnih polj za filtriranje po vrstah kuhinje.  
**Uporaba:** Uporabite v sekciji filtrov za izbiro željenih vrst kuhinj.

### 55. PriceRangeFilter
**Lokacija:** `/src/components/PriceRangeFilter.tsx`  
**Namen:** Filter za izbiro cenovnih razredov restavracij (od € do €€€€).  
**Uporaba:** Uporabite v sekciji filtrov za filtriranje po cenovnem razredu.

### 56. RatingSlider
**Lokacija:** `/src/components/RatingSlider.tsx`  
**Namen:** Drsnik za filtriranje restavracij po minimalni oceni.  
**Uporaba:** Uporabite v sekciji filtrov za filtriranje restavracij po minimalni oceni.

### 57. AdditionalOptionsFilter
**Lokacija:** `/src/components/AdditionalOptionsFilter.tsx`  
**Namen:** Skupina potrditvenih polj za dodatne možnosti filtriranja (odprto zdaj, parkirišče, ipd.).  
**Uporaba:** Uporabite v sekciji filtrov za bolj natančno filtriranje restavracij.

### 58. SearchResultsHeader
**Lokacija:** `/src/components/SearchResultsHeader.tsx`  
**Namen:** Glava sekcije rezultatov iskanja z naslovom in izbirnikom za razvrščanje.  
**Uporaba:** Uporabite kot uvod v sekcijo rezultatov iskanja.

### 59. ActiveFiltersDisplay
**Lokacija:** `/src/components/ActiveFiltersDisplay.tsx`  
**Namen:** Prikaz aktivnih filtrov in možnost njihove odstranitve.  
**Uporaba:** Uporabite nad rezultati iskanja za prikaz in hitro odstranjevanje aplikaciranih filtrov.

### 60. SearchRestaurantCard
**Lokacija:** `/src/components/SearchRestaurantCard.tsx`  
**Namen:** Razširjena kartica restavracije s podrobnostmi za prikaz v rezultatih iskanja.  
**Uporaba:** Uporabite za prikaz posamezne restavracije v rezultatih iskanja.

### 61. LoadMoreButton
**Lokacija:** `/src/components/LoadMoreButton.tsx`  
**Namen:** Gumb za nalaganje dodatnih rezultatov iskanja.  
**Uporaba:** Uporabite na koncu seznama rezultatov iskanja za prikaz več restavracij.

## Strani aplikacije

### 33. HomePage
**Lokacija:** `/src/pages/HomePage.tsx`  
**Namen:** Glavna stran aplikacije s seznamom priporočenih restavracij, hitrimi filtri in kategorijami.  
**Uporaba:** Uporabite kot začetno stran aplikacije.

### 34. RestaurantDetailPage
**Lokacija:** `/src/pages/RestaurantDetailPage.tsx`  
**Namen:** Stran s podrobnimi informacijami o izbrani restavraciji.  
**Uporaba:** Uporabite za prikaz vseh podatkov o posamezni restavraciji in za začetek rezervacije.

### 35. ReservationPage
**Lokacija:** `/src/pages/ReservationPage.tsx`  
**Namen:** Stran za vnos vseh podatkov, potrebnih za rezervacijo.  
**Uporaba:** Uporabite za dokončanje rezervacije po izbiri restavracije.

### 36. ConfirmationPage
**Lokacija:** `/src/pages/ConfirmationPage.tsx`  
**Namen:** Stran za prikaz potrditve uspešno opravljene rezervacije s podrobnostmi in možnostmi za upravljanje.  
**Uporaba:** Prikaže se po uspešni potrditvi rezervacije in omogoča upravljanje z rezervacijo.

### 37. ReservationsHistoryPage
**Lokacija:** `/src/pages/ReservationsHistoryPage.tsx`  
**Namen:** Stran za prikaz zgodovine rezervacij s funkcijami za upravljanje z rezervacijami.  
**Uporaba:** Omogoča pregled vseh prihajajočih in preteklih rezervacij ter njihovo upravljanje.

### 50. SearchPage
**Lokacija:** `/src/pages/SearchPage.tsx`  
**Namen:** Stran za podrobno iskanje in filtriranje restavracij po različnih kriterijih.  
**Uporaba:** Omogoča uporabnikom naprednejše iskanje restavracij po imenu, lokaciji, vrsti kuhinje, cenovnem razredu, oceni in drugih lastnostih.

## Glavna aplikacija

### 44. App
**Lokacija:** `/src/App.tsx`  
**Namen:** Glavna komponenta aplikacije, ki upravlja navigacijo med stranmi.  
**Uporaba:** Služi kot vstopna točka in vsebuje navigacijski sistem celotne aplikacije.

---

## Uporaba tipov

Aplikacija uporablja tipsko varne komponente z uporabo TypeScript. Vsi tipi so definirani v datoteki `/src/types/index.ts` in vključujejo:

- `Restaurant`: Osnovni podatki o restavraciji
- `RestaurantDetail`: Razširjeni podatki o restavraciji
- `OpeningHour`: Odpiralni čas
- `Feature`: Značilnost restavracije
- `MenuSection`: Sekcija menija
- `Dish`: Jed na meniju
- `Review`: Mnenje uporabnika
- `Category`: Kategorija kuhinje
- `NavItem`: Element navigacije
- `TimeSlot`: Termin za rezervacijo

## Smernice za uporabo

1. **Konsistentnost v dizajnu:** Vse komponente so oblikovane v skladu z enotnim dizajnom, uporabite jih takšne, kot so, za ohranitev konsistentnosti.
2. **Dostopnost:** Komponente vsebujejo ustrezne ARIA atribute za boljšo dostopnost. Pri uporabi jih ohranite.
3. **Odzivnost:** Komponente so prilagojene za mobilne naprave, vendar se prikažejo v fiksni velikosti na večjih zaslonih.
4. **Material ikone:** Komponente uporabljajo Material Icons knjižnico, poskrbite, da je vključena v projekt.
5. **TailwindCSS:** Stiliziranje temelji na TailwindCSS, poskrbite, da je pravilno konfiguriran v projektu.

## Navigacija med stranmi

Aplikacija vsebuje naslednje navigacijske poti:

1. **Domov → Podrobnosti restavracije**: Ob kliku na kartico restavracije
2. **Podrobnosti restavracije → Rezervacija**: Ob kliku na gumb "Rezerviraj" v ReservationWidget komponenti
3. **Rezervacija → Potrditev rezervacije**: Po uspešno izpolnjenem rezervacijskem obrazcu
4. **Potrditev rezervacije → Domov**: Ob kliku na gumb za zapiranje
5. **Domov → Zgodovina rezervacij**: Z navigacijo preko Footer komponente
6. **Zgodovina rezervacij → Podrobnosti rezervacije**: Ob kliku na "Uredi" pri posamezni rezervaciji
7. **Podrobnosti rezervacije → Domov**: Z navigacijo preko gumba za nazaj

Koda za implementacijo navigacije je del `NavigationContext` in se uporablja preko `navigateTo` funkcije v App.tsx. Na primer:

```typescript
const { navigateTo } = useContext(NavigationContext);

const handleButtonClick = () => {
  navigateTo('pageName'); // kjer je pageName ena izmed: 'home', 'detail', 'reservation', 'confirmation', 'reservations'
};
``` 