Changeset View
Changeset View
Standalone View
Standalone View
swh/web/assets/src/bundles/admin/deposit.js
Show All 9 Lines | if (type === 'display') { | ||||
if (data && data.startsWith('swh')) { | if (data && data.startsWith('swh')) { | ||||
let browseUrl = Urls.browse_swh_id(data); | let browseUrl = Urls.browse_swh_id(data); | ||||
return `<a href="${browseUrl}">${data}</a>`; | return `<a href="${browseUrl}">${data}</a>`; | ||||
} | } | ||||
} | } | ||||
return data; | return data; | ||||
} | } | ||||
function filterDataWithExcludePattern(data, excludePattern) { | |||||
/** Return true if the data is to be filtered, false otherwise. */ | |||||
for (const key in data) { | |||||
let value = data[key]; | |||||
if ((typeof value === 'string' || value instanceof String) && | |||||
value.search(excludePattern) !== -1) { | |||||
return true; // exclude the data from filtering | |||||
} | |||||
} | |||||
return false; | |||||
} | |||||
export function initDepositAdmin() { | export function initDepositAdmin() { | ||||
let depositsTable; | let depositsTable; | ||||
$(document).ready(() => { | $(document).ready(() => { | ||||
$.fn.dataTable.ext.errMode = 'none'; | $.fn.dataTable.ext.errMode = 'none'; | ||||
depositsTable = $('#swh-admin-deposit-list') | depositsTable = $('#swh-admin-deposit-list') | ||||
.on('error.dt', (e, settings, techNote, message) => { | .on('error.dt', (e, settings, techNote, message) => { | ||||
$('#swh-admin-deposit-list-error').text(message); | $('#swh-admin-deposit-list-error').text(message); | ||||
}) | }) | ||||
.DataTable({ | .DataTable({ | ||||
serverSide: true, | serverSide: true, | ||||
ajax: Urls.admin_deposit_list(), | processing: true, | ||||
// let's define the order of table options display | |||||
// f: (f)ilter | |||||
// l: (l)ength changing | |||||
// r: p(r)ocessing | |||||
// t: (t)able | |||||
// i: (i)nfo | |||||
// p: (p)agination | |||||
// see https://datatables.net/examples/basic_init/dom.html | |||||
dom: '<<f<"#list-exclude">l>rt<"bottom"ip>>', | |||||
// div#list-exclude is a custom filter added next to dataTable | |||||
// initialization below through js dom manipulation, see | |||||
// https://datatables.net/examples/advanced_init/dom_toolbar.html | |||||
ajax: { | |||||
url: Urls.admin_deposit_list(), | |||||
// filtering data set depending on the exclude search input | |||||
dataFilter: function(dataResponse) { | |||||
/* Filter out data returned by the server to exclude entries | |||||
matching the exclude pattern. | |||||
Args | |||||
dataResponse (str): the json response in string | |||||
Returns: | |||||
json response altered (in string) | |||||
*/ | |||||
// | |||||
let data = jQuery.parseJSON(dataResponse); | |||||
let excludePattern = $('#swh-admin-deposit-list-exclude-filter').val(); | |||||
let recordsFiltered = 0; | |||||
let filteredData = []; | |||||
for (const row of data.data) { | |||||
if (filterDataWithExcludePattern(row, excludePattern)) { | |||||
recordsFiltered += 1; | |||||
} else { | |||||
filteredData.push(row); | |||||
} | |||||
} | |||||
// update data values | |||||
data['recordsFiltered'] = recordsFiltered; | |||||
data['data'] = filteredData; | |||||
return JSON.stringify(data); | |||||
} | |||||
}, | |||||
columns: [ | columns: [ | ||||
{ | { | ||||
data: 'id', | data: 'id', | ||||
name: 'id' | name: 'id' | ||||
}, | }, | ||||
{ | { | ||||
data: 'swh_id_context', | data: 'swh_id_context', | ||||
name: 'swh_id_context', | name: 'swh_id_context', | ||||
▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | depositsTable = $('#swh-admin-deposit-list') | ||||
visible: false | visible: false | ||||
} | } | ||||
], | ], | ||||
scrollX: true, | scrollX: true, | ||||
scrollY: '50vh', | scrollY: '50vh', | ||||
scrollCollapse: true, | scrollCollapse: true, | ||||
order: [[0, 'desc']] | order: [[0, 'desc']] | ||||
}); | }); | ||||
// Some more customization is needed on the table | |||||
$('div#list-exclude').html(`<div id="swh-admin-deposit-list-exclude-wrapper"> | |||||
<div id="swh-admin-deposit-list-exclude-div-wrapper" class="dataTables_filter"> | |||||
<label> | |||||
Exclude:<input id="swh-admin-deposit-list-exclude-filter" | |||||
type="search" | |||||
value="check-deposit" | |||||
class="form-control form-control-sm" | |||||
placeholder="exclude-pattern" aria-controls="swh-admin-deposit-list"> | |||||
</input> | |||||
</label> | |||||
</div> | |||||
</div> | |||||
`); | |||||
// Adding exclusion pattern update behavior, when typing, update search | |||||
$('#swh-admin-deposit-list-exclude-filter').keyup(function() { | |||||
depositsTable.draw(); | |||||
}); | |||||
// at last draw the table | |||||
depositsTable.draw(); | depositsTable.draw(); | ||||
}); | }); | ||||
$('a.toggle-col').on('click', function(e) { | $('a.toggle-col').on('click', function(e) { | ||||
e.preventDefault(); | e.preventDefault(); | ||||
var column = depositsTable.column($(this).attr('data-column')); | var column = depositsTable.column($(this).attr('data-column')); | ||||
column.visible(!column.visible()); | column.visible(!column.visible()); | ||||
if (column.visible()) { | if (column.visible()) { | ||||
$(this).removeClass('col-hidden'); | $(this).removeClass('col-hidden'); | ||||
} else { | } else { | ||||
$(this).addClass('col-hidden'); | $(this).addClass('col-hidden'); | ||||
} | } | ||||
}); | }); | ||||
} | } |