summaryrefslogtreecommitdiff
path: root/client/src/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/index.js')
-rw-r--r--client/src/index.js264
1 files changed, 9 insertions, 255 deletions
diff --git a/client/src/index.js b/client/src/index.js
index 0b8e676..5743b5e 100644
--- a/client/src/index.js
+++ b/client/src/index.js
@@ -1,11 +1,13 @@
import { ParkArticle } from "./templateImplementations.js";
+
import {
+ fetchAttractions,
displayNumberOfItemsInShoppingBasketWithBadge,
dutchCurrencyFormat,
dutchCurrencyFormatWithSign,
- findParent
+ findParent,
+ killChildren,
} from "./utils.js";
-import { fetchAttractions } from "./functions.js"
// ik struggle een beetje met de database connecten met de api...
@@ -14,266 +16,14 @@ import { fetchAttractions } from "./functions.js"
function displayArticles(articles) {
console.log("displaying attraction articles");
- const parkArticleFunctionality = {
- orderButtonClick: orderButtonClicked,
- displayTotal: displayTotal,
- disableButton: disableButton,
- }
for (var i = 0; i < articles.length; i++) {
var parkArticle = new ParkArticle(articles[i], document.querySelector("#parkarticle"));
- parkArticle.addToNode(document.querySelector("#center-articles"), parkArticleFunctionality);
- }
-
-}
-
-function disableButton(name, button) {
- return function receiver(payload) {
- console.log('checking if button should be disabled');
- const inputs = button.parentNode.querySelectorAll("input");
- var inputTickets = 0;
- for (let i = 0; i < inputs.length; i++) {
- if (inputs[i].value > 0) {
- inputTickets = inputTickets + Number.parseInt(inputs[i].value);
- }
- }
-
- const shoppingBasketArray = JSON.parse(localStorage.getItem("shoppingBasketArray"));
- // console.log(shoppingBasketArray);
- var shoppingBasketTickets = 0;
-
- if (shoppingBasketArray) {
- for (let i = 0; i < shoppingBasketArray.length; i++) {
- if (shoppingBasketArray[i].name === name) {
- shoppingBasketTickets = shoppingBasketTickets + shoppingBasketArray[i].numberOfKids + shoppingBasketArray[i].numberOfAdults;
- }
- }
- }
- const totalTickets = inputTickets + shoppingBasketTickets;
-
- function disablerHelper(payload) {
- var attraction;
- if (Array.isArray(payload)) {
- for (let i = 0; i < payload.length; i++) {
- if (payload[i].name === name) {
- attraction = payload[i];
- }
- }
- } else attraction = payload;
-
- var front = button.querySelector(".front");
- if (attraction.available < totalTickets || attraction.available === 0 || attraction.available === shoppingBasketTickets) {
- console.log("---> disabling " + attraction.name + " button since the available tickets are " + attraction.available + " and tickets among current order is " + totalTickets);
- front.classList.add("disabled");
- button.removeEventListener("click", orderButtonClicked);
- } else {
- console.log("---> enabling " + attraction.name + " button since the available tickets are " + attraction.available + " and tickets among current order is " + totalTickets);
- front.classList.remove("disabled");
- button.addEventListener("click", orderButtonClicked);
- }
-
- }
-
- // console.log(payload)
- if (payload && payload.name) {
- if (payload.name) {
- // console.log("prevented unnecesary fetch")
- disablerHelper(payload);
- }
- } else {
- // console.log("unnecesary fetch")
- fetchAttractions()
- .then(disablerHelper)
- .catch(error => {console.error(error)});
- }
- }
-}
-
-function orderButtonClicked(event) {
- console.log("button click");
- var button;
-
- if (event.target.classList.contains("orderbutton")) {
- button = event.target;
- } else {
- button = event.target.parentNode;
- }
-
- const order = button.parentNode;
- const parkArticle = order.parentNode;
-
- const orderClientSideInfo = {
- name: parkArticle.querySelector(".parkname").textContent,
- numberOfKids: Number(order.querySelector(".numberofkids").value),
- numberOfAdults: Number(order.querySelector(".numberofadults").value),
- }
-
- console.log("---> found this info on the client side:")
- console.log(orderClientSideInfo);
-
- if ((orderClientSideInfo.numberOfKids > 0 && orderClientSideInfo.numberOfAdults >= 0) || (orderClientSideInfo.numberOfAdults > 0 && orderClientSideInfo.numberOfKids >= 0)) {
- fetchAttractions()
- .then(checkTicketAvailability(button, orderClientSideInfo))
- .then(saveOrderInShoppingBasket(orderClientSideInfo))
- .then(disableButton(orderClientSideInfo.name, button))
- .catch((error) => {console.error(error)})
- }
-}
-
-class TicketsNotAvailableError extends Error {
- constructor(message) {
- super(message);
- this.name = "TicketsNotAvailableError";
- }
-}
-
-
-export function checkTicketAvailability(button, orderClientSideInfo) {
-
- return function serverAttractionsAccepter(serverAttractionsArray) {
- var attraction;
- for (let i = 0; i < serverAttractionsArray.length; i++) {
- if (serverAttractionsArray[i].name === orderClientSideInfo.name) {
- attraction = serverAttractionsArray[i]
- }
- }
-
- if (attraction.available < orderClientSideInfo.numberOfKids + orderClientSideInfo.numberOfAdults) {
- throw new TicketsNotAvailableError("The tickets of the order exceed the available tickets!");
- }
-
- return serverAttractionsArray;
- }
-}
-
-function saveOrderInShoppingBasket(orderClientSideInfo) {
- console.log("---> ---> saving info in shopping basket");
-
- return function serverAttractionsAccepter(serverAttractionsArray) {
- // const orderClientSideInfo = this;
-
- var price;
- var attraction;
- for (let i = 0; i < serverAttractionsArray.length; i++) {
- if (serverAttractionsArray[i].name === orderClientSideInfo.name) {
- price = calulateTotal(
- orderClientSideInfo.numberOfKids,
- orderClientSideInfo.numberOfAdults,
- serverAttractionsArray[i]
- );
- attraction = serverAttractionsArray[i];
- }
- }
-
- orderClientSideInfo.price = price;
- console.log("---> ---> price is saved in the shopping basket order");
- console.log(orderClientSideInfo);
-
- var shoppingBasketArray;
-
- if (localStorage.getItem("shoppingBasketArray") === null) {
- shoppingBasketArray = [];
- shoppingBasketArray.push(orderClientSideInfo);
- } else {
- shoppingBasketArray = JSON.parse(localStorage.getItem("shoppingBasketArray"));
- shoppingBasketArray.push(orderClientSideInfo);
- }
-
- localStorage.setItem("shoppingBasketArray", JSON.stringify(shoppingBasketArray));
- console.log("---> ---> order is saved in array in localstorage");
- console.log(localStorage);
- displayNumberOfItemsInShoppingBasketWithBadge();
- return attraction;
- }
-}
-
-function calulateTotal(numberOfKids, numberOfAdults, serverSideAttraction) {
- console.log("---> calculating total of order in shoppingbasket!");
- console.log("---> ---> fetched this attraction to calculate actual prices!");
- console.log(serverSideAttraction);
-
- const adultPrice = serverSideAttraction.adultPrice;
- const kidsPrice = serverSideAttraction.kidsPrice;
-
- const discountPercentage = serverSideAttraction.discount;
- const minNumberkids = serverSideAttraction.minimumNumberOfKids;
- const minNumberAdults = serverSideAttraction.minimumNumberOfAdults;
-
- var totalPrice = 0;
- if (numberOfKids > 0) {
- totalPrice = totalPrice + numberOfKids * kidsPrice;
- }
- if (numberOfAdults > 0) {
- totalPrice = totalPrice + numberOfAdults * adultPrice;
- }
-
- if (numberOfKids >= minNumberkids && numberOfAdults >= minNumberAdults) {
- var discount = totalPrice * discountPercentage / 100;
- totalPrice = totalPrice - discount;
+ parkArticle.addToNode(document.querySelector("#center-articles"));
}
- if (discount) {
- return {total:totalPrice, discount: discount}
- } else {
- return {total: totalPrice};
- }
}
-function displayTotal(event) {
- console.log("displaying a total price based on client side info");
- var order = findParent(parent => {return parent.classList.contains("order")})(event.target)
- console.log(order)
- var total = order.querySelector(".total");
-
- var kids = order.querySelector(".numberofkids").value;
- var adults = order.querySelector(".numberofadults").value;
- if (kids === "") kids = 0;
- if (adults === "") adults = 0;
-
- let re = /\d+/;
- var kidsPrice = order.querySelector(".kidsprice")
- .textContent
- .match(re)[0];
- var adultPrice = order.querySelector(".adultprice")
- .textContent
- .match(re)[0];
-
- var discountReq = order.querySelector(".discountrequirement")
- var minNumberkids = discountReq.querySelector(".child")
- .textContent
- .match(re)[0]
- var minNumberadults = discountReq.querySelector(".adults")
- .textContent
- .match(re)[0]
- var discountPercentage = discountReq.querySelector(".percentage")
- .textContent
- .match(re)[0];
- // console.log(discountPercentage);
-
- var value = 0;
- if (kids > 0) {
- value = value + Number.parseInt(kids) * Number.parseFloat(kidsPrice);
- }
- if (adults > 0) {
- value = value + Number.parseInt(adults) * Number.parseFloat(adultPrice);
- }
-
- var discount;
- if (Number.parseInt(kids) >= Number.parseInt(minNumberkids) && Number.parseInt(adults) >= Number.parseInt(minNumberadults)) {
- discount = value * Number.parseFloat(discountPercentage) / 100
- value = value - discount;
- console.log("---> applying the discount of " + discountPercentage + "%, resulting in " + discount + " discount")
- }
- // console.log(value);
-
- var priceString = dutchCurrencyFormat(value);
- if (!(discount === undefined)) {
- priceString = priceString + " discount: " + dutchCurrencyFormatWithSign(discount);
- }
- total.querySelector(".price").textContent = priceString;
-}
-
-
function setStickyNavBar() {
console.log("making the navbar sticky");
// Get the header
@@ -301,5 +51,9 @@ function setStickyNavBar() {
displayNumberOfItemsInShoppingBasketWithBadge();
setStickyNavBar();
+const sortmenu = document.querySelector("#sortmenu");
+
+console.log(sortmenu)
+
fetchAttractions()
.then(displayArticles);