get-frontend/webshop_app/mvc-emne2/js/controller.js
2025-07-01 20:42:02 +02:00

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 });
}