95 lines
No EOL
3.9 KiB
JavaScript
95 lines
No EOL
3.9 KiB
JavaScript
// Laster og viser alle produkter - brukes ved app-initialisering og navigasjon
|
|
// Henter data fra model og sender til view for rendering
|
|
function loadProducts() {
|
|
const products = getAllProducts();
|
|
updateView('products', { products });
|
|
}
|
|
|
|
// Viser detaljside for spesifikt produkt basert på ID
|
|
// Kaller updateView som håndterer både gyldige og ugyldige produkter
|
|
function showProductDetail(productId) {
|
|
const product = getProductById(productId);
|
|
updateView('product-detail', { product });
|
|
}
|
|
|
|
// Hovedfunksjon for å legge produkter i handlekurv
|
|
// Koordinerer mellom model (dataendring) og view (brukernotifikasjon + UI-oppdatering)
|
|
function handleAddToCart(productId) {
|
|
const success = addToCart(productId); // Model-operasjon som returnerer boolean
|
|
if (success) {
|
|
// Henter produktnavn for personlig notifikasjon
|
|
const product = getProductById(productId);
|
|
updateView('notification', { message: product.name + ' lagt til i handlekurv!' });
|
|
// Oppdaterer handlekurvvisning og teller umiddelbart
|
|
updateCartDisplay();
|
|
} else {
|
|
// Viser feilmelding hvis produktet ikke eksisterer
|
|
updateView('notification', { message: 'Feil ved å legge produktet i handlekurven' });
|
|
}
|
|
}
|
|
|
|
// Fjerner produkt fra handlekurv med brukerbekreftelse
|
|
// Kombinerer model-operasjon med brukernotifikasjon
|
|
function handleRemoveFromCart(productId) {
|
|
removeFromCart(productId); // Model-operasjon
|
|
updateView('notification', { message: 'Vare fjernet fra handlekurv' });
|
|
updateCartDisplay(); // Oppdaterer UI umiddelbart
|
|
}
|
|
|
|
// Endrer antall av et produkt i handlekurv (+1 eller -1)
|
|
// Inneholder defensiv sjekk selv om UI-logikk ikke burde kalle dette for ikke-eksisterende varer
|
|
function changeQuantity(productId, change) {
|
|
const cart = getCart();
|
|
const item = cart.find(item => item.productId === productId);
|
|
|
|
// Sikkerhetsjekk - kun hvis varen faktisk finnes i handlekurven
|
|
// Forhindrer feil hvis UI og model kommer ut av synk
|
|
if (item) {
|
|
const newQuantity = item.quantity + change;
|
|
updateCartQuantity(productId, newQuantity); // Model håndterer edge cases (quantity <= 0)
|
|
updateCartDisplay(); // Oppdaterer UI for å reflektere endringer
|
|
}
|
|
// Ingen else - ignorerer stille forsøk på å endre ikke-eksisterende varer
|
|
}
|
|
|
|
// Tømmer hele handlekurven med bekreftelsdialog
|
|
// Forhindrer utilsiktet tap av handlekurvinnhold
|
|
function handleClearCart() {
|
|
// Browser-standard confirm() for brukersikkerhet
|
|
if (confirm('Er du sikker på at du vil tømme handlekurven?')) {
|
|
clearCart(); // Model-operasjon
|
|
updateView('notification', { message: 'Handlekurv tømt' });
|
|
updateCartDisplay(); // Oppdaterer til tom handlekurv
|
|
}
|
|
// Ingen else - kansellering ignoreres stille
|
|
}
|
|
|
|
// Navigerer til produktoversikt - brukes fra tilbake-knapp og hovednavigasjon
|
|
// Laster ferske produktdata og rendrer siden
|
|
function navigateToProducts() {
|
|
const products = getAllProducts();
|
|
updateView('products', { products });
|
|
}
|
|
|
|
// Navigerer til handlekurvside med komplett handlekurvstatus
|
|
// Samler all nødvendig data fra model i én operasjon
|
|
function navigateToCart() {
|
|
const cart = getCart();
|
|
const total = getCartTotal();
|
|
const itemCount = getCartItemCount();
|
|
// Sender all handlekurvdata til view for komplett rendering
|
|
updateView('cart', { cartItems: cart, total, itemCount });
|
|
}
|
|
|
|
// Oppdaterer handlekurvvisning etter endringer (add, remove, quantity change)
|
|
// Koordinerer mellom handlekurvside og navigationsteller
|
|
function updateCartDisplay() {
|
|
const cart = getCart();
|
|
const total = getCartTotal();
|
|
const itemCount = getCartItemCount();
|
|
|
|
// Oppdaterer handlekurvside (hvis bruker er på den siden)
|
|
updateView('cart', { cartItems: cart, total, itemCount });
|
|
// Oppdaterer også telleren i navigasjonen (synlig på alle sider)
|
|
updateView('cart-count', { count: itemCount });
|
|
} |