function jobsDialog(oldJobs) { return new Promise(async (resolve, reject) => { let div = $(` `); // delete the div when the modal is closed div.on("hidden.bs.modal", function() { div.remove(); }); div.modal("show"); div.find(".input-job-search").val(""); const jobs = await $.post(`https://${resName}/getAllJobs`, JSON.stringify({})); let jobListDiv = div.find(".jobs-list") jobListDiv.empty(); for(const[jobName, jobData] of Object.entries(jobs)) { let jobDiv = $(`
`); for(let [grade, gradeData] of Object.entries(jobData.grades)) { // QB-Core if(gradeData.grade == undefined) { gradeData.grade = grade; gradeData.label = gradeData.name; } let rankDiv = $(`
`); jobDiv.find(".job-grades").append(rankDiv); } jobListDiv.append(jobDiv); } // Disables and uncheck grades checkbox if the entire job is selected jobListDiv.find(`[data-type="job"]`).change(function() { let isChecked = $(this).prop("checked"); if(isChecked) { $(this).parent().find(".job-grades").find("input").prop("checked", false).prop("disabled", true); } else { $(this).parent().find(".job-grades").find("input").prop("disabled", false); } }) if(oldJobs) { for(let [jobName, allowedGrades] of Object.entries(oldJobs)) { if(allowedGrades === true) { jobListDiv.find(`[data-type="job"][data-job-name="${jobName}"]`).prop("checked", true).change(); } else { for(let [grade, _] of Object.entries(allowedGrades)) { jobListDiv.find(`[data-type="job-grade"][data-job-name="${jobName}"][data-grade="${grade}"]`).prop("checked", true); } } } } // Unbinds the button and rebinds it to callback the selected jobs div.find(".input-jobs-confirm-btn").unbind().click(function() { const allJobsAllowed = div.find(".all-jobs-allowed-checkbox").prop("checked"); if(allJobsAllowed) { resolve(false); } else { let selectedJobs = {}; jobListDiv.find("input:checked").each(function() { let checkBoxType = $(this).data("type"); let jobName = $(this).data("jobName"); switch(checkBoxType) { case "job": selectedJobs[jobName] = true; break; case "job-grade": let grade = $(this).data("grade"); if(!selectedJobs[jobName]) { selectedJobs[jobName] = {}; } selectedJobs[jobName][grade] = true; break; default: console.log("Unknown checkbox type: " + checkBoxType + " in jobs dialog"); break; } }); resolve(selectedJobs); } div.modal("hide"); }); div.find(".input-job-search").on("keyup", function() { let text = $(this).val().toLowerCase(); div.find(".jobs-list .form-check").filter(function() { $(this).toggle($(this).text().toLowerCase().indexOf(text) > -1) }); }); div.find(".all-jobs-allowed-checkbox").change(function() { let isChecked = $(this).prop("checked"); if(isChecked) { div.find(".jobs-list input").prop("checked", true).prop("disabled", true); } else { div.find(".jobs-list input").prop("checked", false).prop("disabled", false); } }); // If oldJobs is false (so all jobs are allowed), check the checkbox if(oldJobs === false || oldJobs === null || oldJobs === undefined) { div.find(".all-jobs-allowed-checkbox").prop("checked", true).change(); } }); }