var displayedTicketID = -1; filters = {}; editor = null; searchTimeout = null; loadingTickets = false; const formControls = [ { id: "newTitle", validation: function(element) { const value = element.val(); return (!element.attr("required") || value.trim() !== "") }, errorMessage: function(element) { return "This field is required." } } ]; $(document).ready(function() { // $(".email-list-item").on("click", function() { // displayTicket(this); // }); ClassicEditor .create( document.getElementById("newDesc"), {}) .then( newEditor => { editor = newEditor; }) .catch( error => { console.error(error) }); $("#searchTickets").keyup(() => { clearTimeout(searchTimeout); searchTimeout = setTimeout(() => { value = $("#searchTickets").val(); if (value === "") { delete filters["title__contains"]; return; } filters["title__contains"] = value; loadAllTickets(); }, 500); }) setupFilter("#filterSidebar .filter-department", "author__department__in"); setupFilter("#filterSidebar .filter-tag", "tags__in") setupFilter("#filterSidebar .filter-priority", "priority__in") loadFilterCounts(); loadAllTickets(); }); function setupFilter(selector, key) { $(selector).each(function () { var input = $(this).find("input[type=checkbox], input[type=radio]"); var uuid = input.val(); input.on("change", function () { if (input.is(":checkbox")) { if ($(this).is(":checked")) { filters[key] = filters[key] || []; filters[key].push(uuid); } else { // filters[key].splice(filters[key].indexOf(uuid), 1); filters[key] = filters[key].filter(id => id !== uuid); if (filters[key].length === 0) { delete filters[key]; } } } else if (input.is(":radio") && input.is(":checked")) { filters[key] = [uuid]; } console.log(JSON.stringify(filters, null, 4)); loadAllTickets(); }); }); } function validateForm() { $("#ticketModal form").find(".form-control,.form-select").removeClass("is-valid is-invalid"); $("#ticketModal form .invalid-feedback").text(""); var valid = true; formControls.forEach(function(control) { var element = $("#" + control.id); if (!control.validation(element)) { element.addClass("is-invalid"); element.siblings(".invalid-feedback").text(control.errorMessage(element)); valid = false; } else { element.addClass("is-valid"); } }); return valid; } $("#ticketModal form").on("submit", function(event) { event.preventDefault(); if (!validateForm()) { return; } $.ajax({ url: URL_NewTicket, type: "POST", dataType: "json", data: { csrfmiddlewaretoken: CSRFMiddlewareToken, title: $("#newTitle").val(), description: editor.getData(), author_id: CurrentUserID, priority_id: $("#newPriority").val(), tag_ids: $("#newTags").val() }, success: function(data) { loadAllTickets(); loadFilterCounts(); }, error: function(data) { alert(JSON.stringify(data, null, 4)) } }); }); function getOrdinalSuffix(day) { if (day >= 11 && day <= 13) { return day + 'th'; } else { switch (day % 10) { case 1: return day + 'st'; case 2: return day + 'nd'; case 3: return day + 'rd'; default: return day + 'th'; } } } function updateFilterCounts(filterType, data) { $("#filterSidebar .filter-" + filterType).each(function() { var uuid = $(this).find("input[type=checkbox],input[type=radio]").val(); var count = data[filterType + '_counts'][uuid]; $(this).find(".badge").text(count); }); } function loadFilterCounts() { $.ajax({ url: URL_FilterCounts, type: "GET", success: function(data) { console.log(JSON.stringify(data, null, 4)); updateFilterCounts('priority', data); updateFilterCounts('tag', data); updateFilterCounts('department', data); $("#filterPriorityAll .badge").text(data.ticket_count); $("#ticketCount").text(data.ticket_count) }, error: function(data) { alert(JSON.stringify(data, null, 4)) } }); } function loadAllTickets() { if (loadingTickets === true) { return; } $("#ticketsContainer").empty(); loadingTickets = true; // alert(JSON.stringify(filters, null, 4)); $.ajax({ url: URL_Tickets, type: "GET", dataType: "json", data: filters, success: function(data) { loadingTickets = false; console.log(JSON.stringify(data, null, 4)) data.forEach(function(ticket) { var timestamp = new Date(ticket.timestamp); var formattedTime; if (ticket.was_yesterday) { var day = getOrdinalSuffix(timestamp.getDate()); var month = timestamp.toLocaleString('en-GB', { month: 'short' }); var year = timestamp.toLocaleString('en-GB', { year: 'numeric' }); var time = timestamp.toLocaleString('en-GB', { hour: 'numeric', minute: 'numeric' }); // Formatting the final result var formattedTime = time + ', ' + day + ' ' + month + ' ' + year; } else { var hours = timestamp.getUTCHours(); var minutes = timestamp.getUTCMinutes(); formattedTime = hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0'); } if (ticket.is_edited) { formattedTime += " • edited"; } var item = $(`