summaryrefslogtreecommitdiffstats
path: root/dist/js/meals.js
blob: c545e69efe66903c1cfd9f2f198a9ee64c15c22d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

const API_ENDPOINT="https://lopolis-api.gimb.tk/";var meals_calendar_obj=null;var meals_data_global={};var checkouts_data_global={};function getDateString(){let date=new Date();let year_str=date.getFullYear();let month_str=date.getMonth()+1
month_str=month_str.toString().padStart(2,"0");let day_str=date.getDate();day_str=day_str.toString().padStart(2,"0");let date_string=year_str+"-"+month_str+"-"+day_str;return date_string;}
async function checkLogin(){localforage.getItem("logged_in_lopolis").then((value)=>{if(value!=true){$("#meals-container").hide();$("#meals-login-container").show();}else{$("#meals-container").show();$("#meals-login-container").hide();loadMeals();}}).catch((err)=>{console.log(err);});}
function setLoading(state){if(state){$("#loading-bar").removeClass("hidden");}else{$("#loading-bar").addClass("hidden");}}
async function getToken(callback,callbackparams=[]){setLoading(true);let promises_to_run=[localforage.getItem("lopolis_username").then((value)=>{username=value;}),localforage.getItem("lopolis_password").then((value)=>{password=value;})];await Promise.all(promises_to_run);try{var lopolisClient=new lopolisc();var response=await lopolisClient.login(username,password);}catch(e){console.log(e);UIAlert(D("authenticationError"),"getToken(): invalid response, no condition met");await localforage.setItem("logged_in_lopolis",false);return false;}
await localforage.setItem("logged_in_lopolis",true);let empty={};empty.token={};let argumentsToCallback=[empty].concat(callbackparams);callback(...argumentsToCallback);}
async function getMenus(dataauth,callback,callbackparams=[]){setLoading(true);let passtocallback={};let allmeals,allcheckouts;let tries=3;while(true){try{let lopolisClient=new lopolisc();allmeals=await lopolisClient.fetchAllMeals();allcheckouts=await lopolisClient.fetchAllCheckouts();}catch(e){console.log(e);UIAlert(D("lopolisAPIConnectionError"),"getMenus(): AJAX error");if(tries--<0){return false;}else{continue;}}
break;}
passtocallback.data=allmeals;passtocallback.checkouts=allcheckouts;passtocallback.token="tokens-not-used-anymore";let toBePassed=[passtocallback].concat(callbackparams);callback(...toBePassed);}
async function loadMeals(){getToken(getMenus,[displayMeals,[]]);}
function displayMeals(meals){meals_data_global=meals.data;checkouts_data_global=meals.checkouts;let transformed_meals=[];for(const[date,mealzz]of Object.entries(meals.data)){let bg_color="#877F02";let fg_color="#FFFFFF";if(mealzz.readonly)bg_color="#8d9288";let meal_date=new Date(date+"+00:00");let meal_object={start:meal_date.toISOString().substring(0,10),title:mealzz.meal,id:date,allDay:true,backgroundColor:bg_color,textColor:fg_color}
transformed_meals.push(meal_object);}
meals_calendar_obj.removeAllEvents();meals_calendar_obj.addEventSource(transformed_meals);setLoading(false);return;}
function clearMeals(){meals_calendar_obj.removeAllEvents();}
function refreshMeals(){clearMeals();loadMeals();}
function lopolisLogout(){localforage.setItem("logged_in_lopolis",false).then(()=>{clearMeals();checkLogin();});}
async function lopolisLogin(){setLoading(true);var usernameEl=$("#meals-username");var passwordEl=$("#meals-password");try{let l=new lopolisc();await l.login(usernameEl.val(),passwordEl.val());}catch(e){UIAlert(D("loginError"),"lopolisLogin(): ajax.error");setLoading(false);return false;}
let promises_to_run=[localforage.setItem("logged_in_lopolis",true),localforage.setItem("lopolis_username",usernameEl.val()),localforage.setItem("lopolis_password",passwordEl.val())];await Promise.all(promises_to_run);checkLogin();UIAlert("Credential match!");return true;}
function setupEventListeners(){$("#meals-login").click(()=>{lopolisLogin();});$("#meals-logout").click(()=>{lopolisLogout();});}
var mealClickHandler=(eventClickInfo)=>{let meal_date=eventClickInfo.event.id;let meal_object=meals_data_global[meal_date];$("#checkout_label").show();let can_do_checkout=true;try{let checkout_object=checkouts_data_global[meal_date];}catch(e){$("#checkout_label").hide();let can_do_checkout=false;}
if(can_do_checkout){let cc=$("#checkout_checkbox");cc.off();cc.on("change",()=>{let l=new lopolisc();checkouts_data_global[meal_date].checked=!(cc[0].checked);setLoading(true);l.setCheckouts(checkouts_data_global).then(()=>{UIAlert(D("successfulCheckingInOut"),"successfulcheckinginout");setLoading(false);}).catch(()=>{UIAlert(D("errorCheckingInOut"),"errorcheckinginout");setLoading(false);});});cc.prop("disabled",checkouts_data_global[meal_date].readonly);}
$("#meal-type").text(meal_object.meal);let meal_date_obj=new Date(meal_date);$("#meal-date").text(dateString.longFormatted(meal_date_obj));if(!(meal_object.readonly)){document.getElementById("meal-readonly").style.display="none";}else{document.getElementById("meal-readonly").style.display="block";}
document.getElementById("meal-options").innerHTML="";for(const[option_index,option_object]of Object.entries(meal_object.menu_options)){let menu_option_li_el=document.createElement("li");let menu_option_a_el=document.createElement("button");menu_option_a_el.innerText=option_object.text;let classlist="";if(option_object.selected!=null){if(option_object.selected){classlist="color: green; font-weight: bold";}}
menu_option_a_el.classList="waves-effect waves-light btn-large";menu_option_a_el.style="color: var(--color-text); background-color: rgba(0,0,0,0); line-height: 1.2; height:auto; "+classlist+" !important";menu_option_a_el.id="menu_index_"+option_index;if(!(meal_object.readonly)){menu_option_a_el.disabled=false;menu_option_a_el.onclick=()=>{setLoading(true);let l=new lopolisc();l.chooseMenu(meals_data_global[meal_date],option_index);l.setMeals(meals_data_global).then(()=>{UIAlert(D("mealSet"),"meal set!");setLoading(false);}).catch(()=>{UIAlert(D("errorSettingMeals"),"error setting meals");setLoading(false);});menu_option_a_el.className="to-be-selected-meal";let sidenav_element=document.getElementById("meal-info");let sidenav_instance=M.Sidenav.getInstance(sidenav_element);sidenav_instance.close();};}else{menu_option_a_el.disabled=true;}
menu_option_li_el.appendChild(menu_option_a_el);document.getElementById("meal-options").appendChild(menu_option_li_el);}
let sidenav_element=document.getElementById("meal-info");let sidenav_instance=M.Sidenav.getInstance(sidenav_element);sidenav_instance.open();}
document.addEventListener("DOMContentLoaded",async()=>{await find_chosen_lang();checkLogin();var calendarEl=document.getElementById("meals-calendar");meals_calendar_obj=new FullCalendar.Calendar(calendarEl,{firstDay:1,plugins:["dayGrid"],defaultDate:getDateString(),navLinks:false,editable:false,events:[],eventClick:mealClickHandler,height:"parent"});meals_calendar_obj.render();setupEventListeners();$("#refresh-icon").click(function(){setLoading(true);refreshMeals();});const menus=document.querySelectorAll('.side-menu');M.Sidenav.init(menus,{edge:'right',draggable:true});const modals=document.querySelectorAll('.side-modal');M.Sidenav.init(modals,{edge:'left',draggable:false});document.getElementsByClassName("fc-today-button")[0].style="display:none !important";var elemsx=document.querySelectorAll('select');M.FormSelect.init(elemsx);var datepickerelems=document.querySelectorAll('.datepicker');var today=new Date();M.Datepicker.init(datepickerelems,{firstDay:1,minDate:today,showDaysInNextAndPreviousMonths:true,showClearBtn:true,format:"dddd, dd. mmmm yyyy"});});