[Koha-bugs] [Bug 32447] In items table barcode column can not be filtered
bugzilla-daemon at bugs.koha-community.org
bugzilla-daemon at bugs.koha-community.org
Thu Feb 16 03:48:49 CET 2023
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=32447
--- Comment #8 from Andreas Roussos <a.roussos at dataly.gr> ---
Apparently, there's just one more case where a DataTable (DT)
can be filtered with search <input>s and that takes place in
reports/itemslost.pl (Reports > Lost items > Results):
$ git grep --name-only table_filters.js -- ':!*.po'
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
koha-tmpl/intranet-tmpl/prog/en/modules/reports/itemslost.tt
Because the lost items results page is structured differently
compared to the bibliographic record details page (for example
the header cells don't have ids or data-colname attributes),
the patch mentioned earlier inadvertently breaks the 'Activate
filters' link with the following message logged in the console:
Uncaught Error: Syntax error, unrecognized expression: tr.columnFilter # input
I actually managed to fix that and got the link to work either
by manually adding unique ids to the <th> elements _or_ by
changing the related jQuery selector in my patch to not depend
on the cell id (the latter is probably a better idea until we
sort out the template file in question on a separate bug).
Then, clicking on 'Activate filters' worked but I run into
a different issue: the <input> elements were not being created
by the columnFilter DT plugin. To fix that, I temporarily
modified the function bound to the 'Activate filters' button's
click() event so that it always passes bRedrawFilters == true
when calling activate_filters(), effectively redrawing the DT
filters every time their visibility (not to be confused with
column visibility!) is toggled.
Now the <input>s appeared and search was working properly
save for the erratic behaviour whenever you toggled a column
(outlined in Bug 32448).
To fix that I added the necessary columnsInit() function to
koha-tmpl/intranet-tmpl/prog/en/modules/reports/itemslost.tt
and reverted the temporary change I made above so that it
would now pass bRedrawFilters == false (which had to be the
optimal solution as you should't have to redraw when you just
want to display, right?)
There was a glitch, though: unless I toggled the visibility
of at least one column *before* activating the DT filters,
the DT filters would not render when I clicked on the
'Activate filters' button. And here's why:
In my patch I take advantage of the already existing code
in koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc
that attaches an event handler function to the DataTables
column-visibility.dt event, which in turn calls columnsInit()
(should that function be defined elsewhere):
213 table.dataTable(new_parameters);
214 table.DataTable().on("column-visibility.dt", function(){
215 if( typeof columnsInit == 'function' ){
216 // This function can be created separately and used to trigger
217 // an event after the DataTable has loaded AND column
visibility
218 // has been updated according to the table's configuration
219 columnsInit();
220 }
221 }).columns( hidden_ids ).visible( false );
The only modification I made to the above code was to change
the columnsInit() call to also pass on the DT table object:
219 columnsInit(this);
To make this work I also added the following code in
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt:
1969 function columnsInit(table) {
1970 activate_filters(table.id, false, true);
1971 }
That way, whenever a table column is added to/removed from the
table via the "⚙ Columns" button, the DT filters are redrawn
and their search boxes work just fine.
There's a crucial point to be made, however, which is this:
Because the 'Lost items' results DT currently has no hidden
columns (per the admin/columns_settings.yml column settings),
the column-visibility.dt event does _not_ fire upon page load
to trigger the initial render of the table filters.
To avoid this, the simple-yet-not-optimal solution is to
simply call activate_filters() with bRedrawFilters == true
all the time!
--
You are receiving this mail because:
You are watching all bug changes.
More information about the Koha-bugs
mailing list