diff --git a/app/assets/javascripts/reports/reports_datatable.js b/app/assets/javascripts/reports/reports_datatable.js index 2188ee747..cbc7ba940 100644 --- a/app/assets/javascripts/reports/reports_datatable.js +++ b/app/assets/javascripts/reports/reports_datatable.js @@ -1,63 +1,21 @@ -/* global I18n DataTableHelpers animateSpinner HelperModule Promise */ +/* global I18n DataTableHelpers DataTableCheckboxes animateSpinner HelperModule Promise */ (function() { 'use strict'; const RETRY_COUNT = 25; const START_POLLING_INTERVAL = 10000; - var CHECKED_REPORTS = []; var REPORTS_TABLE; - - 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).data('report-id')); - }) - } - - function removeAllItems() { - CHECKED_REPORTS = []; - } + let CHECKBOX_SELECTOR; function renderCheckboxHTML(data) { return `
- +
`; } @@ -131,7 +89,8 @@ .attr('data-generate-docx-path', data.generate_docx) .attr('data-retry-count', 0) .attr('data-save-to-inventory-path', data.save_to_inventory) - .attr('data-id', data['0']); + .attr('data-id', data['0']) + .attr('id', data['0']); if (data.archived) { $(row).addClass('archived'); } @@ -140,30 +99,14 @@ } } - function checkboxToggleCallback() { - $("[data-action='toggle']").change(function() { - var id = $(this).data('report-id'); - if ($(this).is(':checked')) { - $(this).closest('.report-row').addClass('selected'); - CHECKED_REPORTS.push(id); - } else { - let 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) { + const rowsCount = CHECKBOX_SELECTOR.selectedRows.length; + if (rowsCount === 0) { $('.single-object-action, .multiple-object-action').addClass('disabled hidden'); - } else if (CHECKED_REPORTS.length === 1) { + } else if (rowsCount === 1) { $('.single-object-action, .multiple-object-action').removeClass('disabled hidden'); - let $row = $(`.report-row[data-id=${CHECKED_REPORTS[0]}]`); + let $row = $(`.report-row[data-id=${CHECKBOX_SELECTOR.selectedRows[0]}]`); let archived = $row.hasClass('archived'); let pdfProcessing = $row.has('.processing.pdf').length > 0; let docxProcessing = $row.has('.processing.docx').length > 0; @@ -223,6 +166,7 @@ function initDatatable() { var $table = $('#reports-table'); + CHECKBOX_SELECTOR = null; REPORTS_TABLE = $table.DataTable({ dom: "Rt<'pagination-row hidden'<'pagination-info'li><'pagination-actions'p>>", order: [[9, 'desc']], @@ -259,27 +203,33 @@ oLanguage: { sSearch: I18n.t('general.filter') }, - fnDrawCallback: tableDrowCallback, createdRow: addAttributesToRow, - fnInitComplete: function() { + initComplete: function(settings) { + const { nTableWrapper: dataTableWrapper } = settings; + CHECKBOX_SELECTOR = new DataTableCheckboxes(dataTableWrapper, { + checkboxSelector: '.report-row-selector', + selectAllSelector: '.dataTables_scrollHead input[name="select_all"]', + onChanged: () => updateButtons() + }); + DataTableHelpers.initLengthAppearance($table.closest('.dataTables_wrapper')); $('.pagination-row').removeClass('hidden'); $('.report-row.processing').each(function() { setTimeout(() => { checkProcessingStatus($(this).data('id')); }, START_POLLING_INTERVAL); }); + }, + drawCallback: function() { + if (CHECKBOX_SELECTOR) CHECKBOX_SELECTOR.checkSelectAllStatus(); + }, + rowCallback: function(row) { + if (CHECKBOX_SELECTOR) CHECKBOX_SELECTOR.checkRowStatus(row); } }); } - function reloadTable() { - REPORTS_TABLE.ajax.reload(null, false); - removeAllItems(); - updateButtons(); - } - function generateReportRequest(pathAttrName, id) { - if (CHECKED_REPORTS.length === 1 || id) { - let row = $(".report-row[data-id='" + (id || CHECKED_REPORTS[0]) + "']"); + if (CHECKBOX_SELECTOR.selectedRows.length === 1 || id) { + let row = $(".report-row[data-id='" + (id || CHECKBOX_SELECTOR.selectedRows[0]) + "']"); animateSpinner(); $.post(row.data(pathAttrName), function(response) { animateSpinner(null, false); @@ -342,8 +292,8 @@ $('#edit-report-btn').click(function(e) { e.preventDefault(); animateSpinner(); - if (CHECKED_REPORTS.length === 1) { - let id = CHECKED_REPORTS[0]; + if (CHECKBOX_SELECTOR.selectedRows.length === 1) { + let id = CHECKBOX_SELECTOR.selectedRows[0]; let row = $(".report-row[data-id='" + id + "']"); let url = row.attr('data-edit-path'); $(location).attr('href', url); @@ -356,7 +306,7 @@ ev.preventDefault(); ev.stopPropagation(); - let id = CHECKED_REPORTS[0]; + let id = CHECKBOX_SELECTOR.selectedRows[0]; let row = $(`.report-row[data-id='${id}']`); let url = row.attr('data-save-to-inventory-path'); $.get(url, function(result) { @@ -373,8 +323,8 @@ function initDeleteReports() { $('#delete-reports-btn').click(function() { - if (CHECKED_REPORTS.length > 0) { - $('#report-ids').attr('value', '[' + CHECKED_REPORTS + ']'); + if (CHECKBOX_SELECTOR.selectedRows.length > 0) { + $('#report-ids').attr('value', '[' + CHECKBOX_SELECTOR.selectedRows + ']'); $('#delete-reports-modal').modal('show'); } });