document.addEventListener('DOMContentLoaded', async function() { let shopping_list = await fetchShoppingList() await replenishForm(shopping_list) list_items = shopping_list.sl_items if(shopping_list.sub_type == "calculated"){ list_items = await fetchItemsFullCalculated() } await replenishLineTable(list_items) }) async function replenishForm(shopping_list){ document.getElementById('listName').innerHTML = shopping_list.name document.getElementById('listCreationDate').innerHTML = shopping_list.creation_date document.getElementById('listDescription').innerHTML = shopping_list.description } async function replenishLineTable(sl_items){ let listItemsTableBody = document.getElementById('listItemsTableBody') listItemsTableBody.innerHTML = "" console.log(sl_items) let grouped = sl_items.reduce((accumen, item) => { if (!accumen[item.item_type]) { accumen[item.item_type] = []; } accumen[item.item_type].push(item); return accumen; }, {}); console.log(grouped) for(let key in grouped){ console.log(key) let items = grouped[key] let headerRow = document.createElement('tr') let headerCell = document.createElement('td') headerCell.colSpan = 3; headerCell.textContent = key.toUpperCase(); headerCell.className = 'type-header'; headerCell.style = `font-weight: bold;background: #eee; text-align: left;` headerRow.appendChild(headerCell); listItemsTableBody.appendChild(headerRow); for(let i = 0; i < items.length; i++){ console.log(items) let tableRow = document.createElement('tr') let item = items[i] let checkboxCell = document.createElement('td') checkboxCell.innerHTML = `` checkboxCell.onclick = async function (event) { console.log(item) await updateListItemState(item.list_item_uuid, event.target.checked) } namefield = items[i].item_name if(items[i].links.hasOwnProperty('main')){ namefield = `${item.item_name}` } let nameCell = document.createElement('td') nameCell.innerHTML = namefield let qtyuomCell = document.createElement('td') qtyuomCell.innerHTML = `${item.qty} ${item.uom.fullname}` checkboxCell.checked = item.list_item_state tableRow.append(checkboxCell, nameCell, qtyuomCell) listItemsTableBody.append(tableRow) } } } async function fetchShoppingList() { const url = new URL('/shopping-lists/api/getList', window.location.origin); url.searchParams.append('list_uuid', list_uuid); const response = await fetch(url); data = await response.json(); return data.shopping_list; } async function fetchSLItem(sli_id) { const url = new URL('/shopping-lists/api/getListItem', window.location.origin); url.searchParams.append('sli_id', sli_id); const response = await fetch(url); data = await response.json(); return data.list_item; } async function fetchItemsFullCalculated() { const url = new URL('/shopping-lists/api/getSKUItemsFull', window.location.origin); const response = await fetch(url); data = await response.json(); return data.list_items; } async function updateListItemState(list_item_uuid, state){ console.log(list_item_uuid, state) const response = await fetch(`/shopping-lists/api/setListItemState`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ list_item_uuid: list_item_uuid, list_item_state: state }), }); }