scinote-web/app/assets/javascripts/reports/reports_datatable.js.erb
2021-03-25 13:21:54 +01:00

247 lines
6.7 KiB
Text

/* global I18n DataTableHelpers */
(function(global) {
'use strict';
var DATATABLE;
var CHECKED_REPORTS = [];
function tableDrowCallback() {
checkboxToggleCallback();
initToggleAllCheckboxes();
updateButtons();
}
function appendSearchResults(data) {
var items = [];
if(data.hasOwnProperty('projects')){
$.each(data.projects, function(index, el) {
items.push(
{
'value': el.path,
'text': el.name,
'disabled': false
}
)
});
}
return items;
}
function initToggleAllCheckboxes() {
$('input[name="select_all"]').change(function() {
if($(this).is(':checked')) {
$("[data-action='toggle']").prop('checked', true);
$('.report-row').addClass('selected');
addAllItems();
} else {
$("[data-action='toggle']").prop('checked', false);
$('.report-row').removeClass('selected');
removeAllItems();
}
updateButtons();
});
}
function addAllItems() {
$.each($("[data-action='toggle']"), function(i, el) {
CHECKED_REPORTS.push($(el).attr('data-report-id'));
})
}
function removeAllItems() {
CHECKED_REPORTS = [];
}
function renderCheckboxHTML(data) {
return `<div class="sci-checkbox-container">
<input type="checkbox" class="sci-checkbox" data-action='toggle' data-report-id="${data}">
<span class="sci-checkbox-label"></span>
</div>`;
}
function renderDocxFile(data) {
if (data.error) {
return `<span class="processing-error">
<i class="fas fa-exclamation-triangle"></i>
${I18n.t('projects.reports.index.error')}
</span>`;
}
if (data.processing) {
return `<span class="processing docx">
${I18n.t('projects.reports.index.generating')}
</span>`;
}
if (data.file) {
return `<a href="${data.file}">
<i class="fas fa-file-word"></i>
${I18n.t('projects.reports.index.docx')}
</a>`;
}
return `<a href="#" class="generate-docx">${I18n.t('projects.reports.index.generate')}</a>`;
}
function renderPdfFile(data) {
if (data.error) {
return `<span class="processing-error">
<i class="fas fa-exclamation-triangle"></i>
${I18n.t('projects.reports.index.error')}
</span>`;
}
if (data.processing) {
return `<span class="processing pdf">
${I18n.t('projects.reports.index.generating')}
</span>`;
}
if (data.file) {
return `<a href="${data.file}">
<i class="fas fa-file-pdf"></i>
${I18n.t('projects.reports.index.pdf')}
</a>`;
}
return '';
}
function appendEditPathToRow(row, data) {
$(row).addClass('report-row')
.attr('data-edit-path', data['edit'])
.attr('data-id', data['0']);
}
function checkboxToggleCallback() {
$("[data-action='toggle']").change(function() {
var id = $(this).attr('data-report-id');
if($(this).is(':checked')) {
$(this).closest('.report-row').addClass('selected');
CHECKED_REPORTS.push(id);
} else {
var index = CHECKED_REPORTS.indexOf(id);
$(this).closest('.report-row').removeClass('selected');
if(index != -1) {
CHECKED_REPORTS.splice(index, 1);
}
}
updateButtons();
});
}
function updateButtons() {
if (CHECKED_REPORTS.length === 0) {
$('.single-object-action, .multiple-object-action').addClass('disabled hidden');
} else if (CHECKED_REPORTS.length === 1) {
$('.single-object-action, .multiple-object-action').removeClass('disabled hidden');
let $row = $(`.report-row[data-id=${CHECKED_REPORTS[0]}]`);
let pdfProcessing = $row.has('.processing.pdf').length > 0;
let docxProcessing = $row.has('.processing.docx').length > 0;
let docxGenerate = $row.has('.generate-docx').length > 0;
if (pdfProcessing) {
$('#updatePdf').addClass('disabled');
} else {
$('#updatePdf').removeClass('disabled');
}
if (docxGenerate) {
$('#requestDocx').removeClass('hidden');
$('#updateDocx').addClass('hidden');
} else {
$('#requestDocx').addClass('hidden');
$('#updateDocx').removeClass('hidden');
if (docxProcessing) {
$('#updateDocx').addClass('disabled');
} else {
$('#updateDocx').removeClass('disabled');
}
}
} else {
$('.single-object-action').removeClass('hidden').addClass('disabled');
$('.multiple-object-action').removeClass('disabled hidden');
}
}
// INIT
function initDatatable() {
var $table = $('#reports-table')
DATATABLE = $table.dataTable({
dom: "Rt<'pagination-row hidden'<'pagination-info'li><'pagination-actions'p>>",
order: [[2, 'desc']],
sScrollX: '100%',
sScrollXInner: '100%',
processing: true,
serverSide: true,
ajax: $table.data('source'),
pagingType: 'simple_numbers',
colReorder: {
fixedColumnsLeft: 1000000 // Disable reordering
},
columnDefs: [{
targets: 0,
searchable: false,
orderable: false,
className: 'dt-body-center',
sWidth: '1%',
render: renderCheckboxHTML
},
{
targets: 3,
searchable: false,
sWidth: '60',
render: renderPdfFile
},
{
targets: 4,
searchable: false,
sWidth: '60',
render: renderDocxFile
}],
oLanguage: {
sSearch: I18n.t('general.filter')
},
fnDrawCallback: tableDrowCallback,
createdRow: appendEditPathToRow,
fnInitComplete: function() {
DataTableHelpers.initLengthApearance($table.closest('.dataTables_wrapper'));
$('.pagination-row').removeClass('hidden');
}
});
}
function initEditReport() {
$('#edit-report-btn').click(function(e) {
e.preventDefault();
animateSpinner();
if (CHECKED_REPORTS.length === 1) {
var id = CHECKED_REPORTS[0];
var row = $(".report-row[data-id='" + id + "']");
var url = row.attr('data-edit-path');
$(location).attr('href', url);
}
});
}
function initDeleteReports() {
$('#delete-reports-btn').click(function(e) {
if (CHECKED_REPORTS.length > 0) {
$('#report-ids').attr("value", "[" + CHECKED_REPORTS + "]");
$('#delete-reports-modal').modal("show");
}
});
$("#confirm-delete-reports-btn").click(function(e) {
animateLoading();
});
}
initDatatable();
initEditReport();
initDeleteReports();
})(window);