-
Jonathan Foucher authored
remove "actions column from serverside datatable export. Fixes https://app.asana.com/0/1201575283693649/1201865037652593
Jonathan Foucher authoredremove "actions column from serverside datatable export. Fixes https://app.asana.com/0/1201575283693649/1201865037652593
_serverside_datatable_base.html.twig 5.80 KiB
<script src="//cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
<script src="//cdn.datatables.net/1.10.21/js/dataTables.bootstrap.min.js"></script>
<script src="//cdn.datatables.net/plug-ins/1.10.21/sorting/datetime-moment.js"></script>
<script src="//cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js"></script>
<script src="//cdn.datatables.net/buttons/1.6.2/js/buttons.colVis.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.2/js/buttons.html5.min.js"></script>
<script>
// Define our used dates formats
$.fn.dataTable.moment('DD/MM/YYYY');
$.fn.dataTable.moment('DD/MM/YYYY HH:mm');
function resetFilters() {
$('[id^=search_]').each(function() {
$(this).val('');
});
var table = $('#table').DataTable();
table.columns().search('');
}
{% set dataTableOptions = dataTableOptions|default({}) %}
$(function () {
{% set dataTableOptions = dataTableOptions|merge({
language: {
buttons: {
colvis: "Colonnes"
},
sProcessing: "Traitement en cours...",
sSearch: "Rechercher :",
sLengthMenu: "Afficher _MENU_ éléments",
sInfo: "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments",
sInfoEmpty: "Affichage de l'élément 0 à 0 sur 0 élément",
sInfoFiltered: "(filtré de _MAX_ éléments au total)",
sInfoPostFix: "",
sLoadingRecords: "Chargement en cours...",
sZeroRecords: "Aucun élément à afficher",
sEmptyTable: "Aucune donnée disponible dans le tableau",
oPaginate: {
sFirst: "Premier",
sPrevious: "Précédent",
sNext: "Suivant",
sLast: "Dernier"
},
oAria: {
sSortAscending: ": activer pour trier la colonne par ordre croissant",
sSortDescending: ": activer pour trier la colonne par ordre décroissant"
},
select: {
rows: {
_: "%d lignes séléctionnées",
0: "Aucune ligne séléctionnée",
1: "1 ligne séléctionnée"
}
},
thousands: " "
},
processing: true,
serverSide: true,
ajax: {
url: route,
type: "POST"
},
info : true,
paging: true,
lengthChange: false,
searching: true,
ordering: true,
autoWidth: false,
pageLength: app_admin_datable_default_page_length,
recordsFiltered: totalItem,
recordsTotal: totalItem,
dom: "Bfrtip",
stateSave: true,
}) %}
var options = {{ dataTableOptions|json_encode|raw }}
var fullData = [];
var strip = function ( str ) {
if ( typeof str !== 'string' ) {
return str;
}
// Always remove script tags
str = str.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
// Always remove comments
str = str.replace( /<!\-\-.*?\-\->/g, '' );
str = str.replace( /<[^>]*>/g, '' );
str = str.replace( /^\s+|\s+$/g, '' );
str = str.replace( /\n/g, ' ' );
return str;
};
function getFullData(params) {
console.log('params', params)
params.start = 0;
params.length = 1000000;
var jsonResult = $.ajax({
method:'post',
url: '{{ route }}',
data: params,
success: function (result) {},
async: false
});
var exportBody = jsonResult.responseJSON.data;
var colNames = params.columns.map(function(c) { return c. data }).filter(i => i !== 'actions')
console.log('colNames', colNames)
return exportBody.map(function (el) {
return colNames.map(function (key) {
return strip(el[key])
});
});
}
options.buttons[1].exportOptions.customizeData = function(d) {
console.log('original data', d.body);
var api = $('#table').DataTable();
var visible = api.columns().visible();
console.log('api.ajax', api.ajax.params())
var params = api.ajax.params();
params.columns = params.columns.filter(function(c, i) { return visible[i] })
var exportBody = getFullData(params);
console.log('full data', exportBody)
d.body.length = 0;
d.body.push.apply(d.body, exportBody);
}
$('#table').DataTable(options);
$('.dt-buttons').append('<button id="button-reset" class="dt-button buttons-collection buttons-colvis" tabindex="0" aria-controls="table" type="button" aria-haspopup="true" aria-expanded="false"><span>Réinitialiser les filtres</span></button>');
$('#button-reset').on('click', function() {
resetFilters();
var table = $('#table').DataTable();
table.columns().search('').draw();
})
});
$('#table').on( 'preInit.dt', function(e, settings) {
resetFilters();
});
</script>