$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('input[name="csrf-token"]').attr('content') } }); jQuery('select#call-sign').change(fillTable); jQuery(document).ready(fillTable); function fillTable() { tableData = jQuery('table#ajax-table>tbody').first(); tableData.html('<tr><td class="font-weight-bold text-center" colspan="13">Loading...</td></tr>'); sign = jQuery('select#call-sign').first().val(); jQuery.post('/special-calls/reservations', {'call-sign': sign}, function (data, status) { if (status === 'success') { if (data.data.length > 0) { tableData.empty(); for (i = 0, len = data.data.length; i < len; i++) { tr = '<tr>'; tr += '<td>' + data.data[i].id + '</td>'; if (data.data[i].approved === 1) tr += '<td class="text-center"><input type="checkbox" checked></td>'; else tr += '<td class="text-center"><input type="checkbox"></td>'; tr += '<td contenteditable="true">' + data.data[i].operatorCall + '</td>' + '<td contenteditable="true">' + data.data[i].qso + '</td>' + '<td contenteditable="true">' + data.data[i].fromTime + '</td>' + '<td contenteditable="true">' + data.data[i].toTime + '</td>' + '<td contenteditable="true">' + data.data[i].specialCall + '</td>' + '<td contenteditable="true">' + data.data[i].frequencies + '</td>' + '<td contenteditable="true">' + data.data[i].modes + '</td>' + '<td contenteditable="true">' + data.data[i].operatorName + '</td>' + '<td contenteditable="true">' + data.data[i].operatorEmail + '</td>' + '<td contenteditable="true">' + data.data[i].operatorPhone + '</td>'; tr += '<td>'; tr += "<button class=\"btn btn-primary mr-2\" onclick=\"btnAction('update', this)\">Update</button>"; tr += "<button class=\"btn btn-warning mr-2\" onclick=\"btnAction('restore', this)\">Restore</button>"; tr += "<button class=\"btn btn-danger\" onclick=\"btnAction('delete', this)\">Delete</button>"; tr += '</td>'; tr += '</tr>'; tableData.append(tr); } } else { tableData.html('<tr><td class="font-weight-bold text-center" colspan="13">No data...</td></tr>'); } } else { tableData.html('<tr><td class="font-weight-bold text-center" colspan="13">Error!</td></tr>'); } }); } function btnAction(action, btn) { trDom = btn.parentElement.parentElement; trData = trDom.children; actionData = { action: action, id: trData[0].innerText, approved: trData[1].firstElementChild.checked, operatorCall: trData[2].innerText, qso: trData[3].innerText, fromTime: trData[4].innerText, toTime: trData[5].innerText, specialCall: trData[6].innerText, frequencies: trData[7].innerText, modes: trData[8].innerText, operatorName: trData[9].innerText, operatorEmail: trData[10].innerText, operatorPhone: trData[11].innerText }; if (actionData.action == 'delete') { if (confirm("Are you sure you want to delete reservation #" + actionData.id + " made by " + actionData.operatorCall + "?") === true) trDom.remove(); else return; } jQuery.post('/api/reservations', actionData, function (response, status) { if (status === 'success') { try { // Handle various actions if (response.action == "update") { jQuery('#notice').html("Record #" + actionData.id + " updated."); } else if (response.action == "restore") { trData[1].firstElementChild.checked = response.approved == 1; trData[2].innerText = response.operatorCall; trData[3].innerText = response.qso; trData[4].innerText = response.fromTime; trData[5].innerText = response.toTime; trData[6].innerText = response.specialCall; trData[7].innerText = response.frequencies; trData[8].innerText = response.modes; trData[9].innerText = response.operatorName; trData[10].innerText = response.operatorEmail; trData[11].innerText = response.operatorPhone; jQuery('#notice').html("Record's #" + actionData.id + " data restored."); } else if (response.action == "delete") { jQuery('#notice').html("Record #" + actionData.id + " deleted."); } else { console.log("No action?"); //console.log(data); } } catch { //console.log(data); alert("Bad input data!"); } } else { console.log('AJAX error'); alert("Bad input data!"); } }); }