You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Ombi/PlexRequests.UI/Content/issues.js

273 lines
7.3 KiB

Handlebars.registerHelper('if_eq', function (a, b, opts) {
if (a == b)
return !opts ? null : opts.fn(this);
else
return !opts ? null : opts.inverse(this);
});
var issueSource = $("#issue-template").html();
var issueTemplate = Handlebars.compile(issueSource);
var base = $('#baseUrl').text();
initLoad();
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr('href');
if (target === "#resolvedTab") {
loadResolvedIssues();
}
});
// Report Issue
$(document).on("click", ".dropdownIssue", function (e) {
var issue = $(this).attr("issue-select");
var id = e.target.id;
// Other issue so the modal is opening
if (issue == 4) {
return;
}
e.preventDefault();
var $form = $('#report' + id);
var data = $form.serialize();
data = data + "&issue=" + issue;
$.ajax({
type: $form.prop('method'),
url: $form.prop('action'),
data: data,
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! Added Issue.", "success");
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
}
});
});
// Modal click
$(".theSaveButton").click(function (e) {
var comment = $("#commentArea").val();
e.preventDefault();
var $form = $("#commentForm");
var data = $form.serialize();
data = data + "&issue=" + 4 + "&comment=" + comment;
$.ajax({
type: $form.prop("method"),
url: $form.prop("action"),
data: data,
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! Added Issue.", "success");
$("#myModal").modal("hide");
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
}
});
});
// Note Modal click
$(".theNoteSaveButton").click(function (e) {
var comment = $("#noteArea").val();
e.preventDefault();
var $form = $("#noteForm");
var data = $form.serialize();
$.ajax({
type: $form.prop("method"),
url: $form.prop("action"),
data: data,
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! Added Note.", "success");
$("#myModal").modal("hide");
$('#adminNotesArea' + e.target.value).html("<div>Note from Admin: " + comment + "</div>");
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
}
});
});
// Update the modal
$('#myModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget); // Button that triggered the modal
var id = button.data('identifier'); // Extract info from data-* attributes
var modal = $(this);
modal.find('.theSaveButton').val(id); // Add ID to the button
var requestField = modal.find('input');
requestField.val(id); // Add ID to the hidden field
});
// Update the note modal
$('#noteModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget); // Button that triggered the modal
var id = button.data('identifier'); // Extract info from data-* attributes
var modal = $(this);
modal.find('.theNoteSaveButton').val(id); // Add ID to the button
var requestField = modal.find('.noteId');
requestField.val(id); // Add ID to the hidden field
});
// Delete
$(document).on("click", ".delete", function (e) {
e.preventDefault();
var buttonId = e.target.id;
var $form = $('#delete' + buttonId);
$.ajax({
type: $form.prop('method'),
url: $form.prop('action'),
data: $form.serialize(),
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! Request Deleted.", "success");
$("#" + buttonId + "Template").slideUp();
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
}
});
});
// Clear issues
$(document).on("click", ".clear", function (e) {
e.preventDefault();
var buttonId = e.target.id;
var $form = $('#clear' + buttonId);
$.ajax({
type: $form.prop('method'),
url: $form.prop('action'),
data: $form.serialize(),
dataType: "json",
success: function (response) {
if (checkJsonResponse(response)) {
generateNotify("Success! Issues Cleared.", "info");
$('#issueArea' + buttonId).html("<div>Issue: None</div>");
}
},
error: function (e) {
console.log(e);
generateNotify("Something went wrong!", "danger");
}
});
});
function initLoad() {
loadCounts();
loadPendingIssues();
}
function loadCounts() {
var url = createBaseUrl(base, "/issues/tabCount");
$.ajax({
type: "get",
url: url,
dataType: "json",
success: function (response) {
if (response.length > 0) {
response.forEach(function (result) {
if (result.count > 0) {
if (result.name == 0) {
$('#pendingCount').addClass("badge");
$('#pendingCount').html(result.count);
} else if (result.name == 1) {
$('#inProgressCount').addClass("badge");
$('#inProgressCount').html(result.count);
} else if (result.name == 2) {
$('#resolvedCount').addClass("badge");
$('#resolvedCount').html(result.count);
}
}
});
};
}
});
}
function loadPendingIssues() {
loadIssues("pending", $('#pendingIssues'));
}
function loadResolvedIssues() {
var $element = $('#resolvedIssues');
$element.html("");
loadIssues("resolved", $element);
}
function loadIssues(type, element) {
var url = createBaseUrl(base, "/issues/" + type);
var linkUrl = createBaseUrl(base, "/issues/");
$.ajax({
type: "get",
url: url,
dataType: "json",
success: function (response) {
if (response.length > 0) {
response.forEach(function (result) {
var context = buildIssueContext(result);
var html = issueTemplate(context);
element.append(html);
$("#" + result.id + "link").attr("href", linkUrl + result.id);
});
};
},
error: function (e) {
console.log(e);
generateNotify("Could not load Pending issues", "danger");
}
});
}
// Builds the issue context.
function buildIssueContext(result) {
var context = {
id: result.id,
requestId: result.requestId,
type: result.type,
title: result.title,
issues: result.issues
};
return context;
}