Koha/koha-tmpl/intranet-tmpl/prog/js/elasticsearch-mappings.js
Jonathan Druart d3101bb5dc Bug 30584: Fix ES mapping creation
We need to tell DT that we are adding/removing row, not only deal
manually with the DOM.

This patch also fixes the following bug: if you add or remove a row from
the "biblio" tab, then go to another tab and back to "biblio", all
changes were gone (bug existed prior to bug 29893).

Test plan:
Add, edit and remove mappings, switch from tabs and save.
Use the filters, save (29893 regression test)

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
2022-04-25 10:00:22 -10:00

111 lines
3.8 KiB
JavaScript

/* global __ dataTablesDefaults */
function clean_line(line) {
$(line).find('input[type="text"]').val("");
$(line).find('select').find('option:first').attr("selected", "selected");
}
function clone_line(line) {
var new_line = $(line).clone();
$(new_line).removeClass("nodrag nodrop");
$(new_line).find('td:last-child>a').removeClass("add").addClass("delete").html( __("Delete") );
$(new_line).find('[data-id]').each(function () {
$(this).attr({ name: $(this).attr('data-id') }).removeAttr('data-id');
});
$(new_line).find("select").each(function () {
var attr = $(this).attr('name');
var val = $(line).find('[data-id="' + attr + '"]').val();
$(this).find('option[value="' + val + '"]').attr("selected", "selected");
});
return new_line;
}
function tableInit( oldtabid, newtabid ) {
if ( oldtabid ){
var oldTableId = $("#" + oldtabid + "_table");
oldTableId.DataTable().destroy();
}
var newTableId = $("#" + newtabid + "_table");
newTableId.DataTable(
$.extend(true, {}, dataTablesDefaults, {
"columnDefs": [
{ "orderable": false, "searchable": false, 'targets': ['NoSort'] },
],
"paging": false,
"autoWidth": false
}));
}
$(document).ready(function () {
tableInit( "", "search_fields");
$("a[data-toggle='tab']").on("shown.bs.tab", function (e) {
var oldtabid = $(e.relatedTarget).data("tab");
var newtabid = $(e.target).data("tab");
tableInit( oldtabid, newtabid );
});
$('.delete').click(function () {
if ($(this).hasClass('mandatory') && $(".mandatory[data-field_name=" + $(this).attr('data-field_name') + "]").length < 2) {
alert( __("This field is mandatory and must have at least one mapping") );
return;
} else {
var table = $(this).closest('table');
let dt = $(table).DataTable();
dt.row( $(this).closest('tr') ).remove().draw();
}
});
$("table.mappings").tableDnD({
onDragClass: "dragClass highlighted-row",
});
$('.add').click(function () {
var table = $(this).closest('table');
let table_id = table.attr('id');
var index_name = $(table).attr('data-index_name');
var line = $(this).closest("tr");
var marc_field = $(line).find('input[data-id="mapping_marc_field"]').val();
if (marc_field.length > 0) {
var new_line = clone_line(line);
new_line.appendTo($('table[data-index_name="' + index_name + '"]>tbody'));
let dt = $('#' + table_id).DataTable();
dt.row.add(new_line).draw();
$(table).on( 'click', '.delete', function () {
var table = $(this).closest('table');
let dt = $(table).DataTable();
dt.row( $(this).closest('tr') ).remove().draw();
} );
clean_line(line);
$(table).tableDnD({
onDragClass: "dragClass highlighted-row",
});
}
});
$("#facet_biblios > table").tableDnD({
onDragClass: "dragClass highlighted-row",
});
$("#es_mappings").on("submit", function(e){
let table_ids = ['search_fields_table', 'mapping_biblios_table', 'mapping_authorities_table'];
$(table_ids).each(function(){
let table;
// Remove warning "Cannot reinitialise DataTable"
if ( $.fn.dataTable.isDataTable( '#' + this ) ) {
table = $('#' + this).DataTable();
}
else {
table = $('#' + this).DataTable( {
paging: false
} );
}
table.search('').draw();
});
return true;
});
});