Jonathan Druart
3ce2f6e700
The jQuery UI autocomplete is supposed to replace the text field with the 'value' attribute of the selected item. As it does not exist it's emptied. We should not replace what the user typed in. Test plan: Go to the Koha home page Select "Search patrons" in the header Type 'edn', it will return 1 result Use the down key to select the item (it is not obvious but there is a little change in the color when you select the item) => Without this patch the search field is emptied => With this patch applied the search field is not modified Signed-off-by: Owen Leonard <oleonard@myacpl.org> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
124 lines
4.6 KiB
JavaScript
124 lines
4.6 KiB
JavaScript
function patron_autocomplete(node, options) {
|
|
let link_to;
|
|
let url_params;
|
|
let on_select_callback;
|
|
if ( options ) {
|
|
if ( options['link-to'] ) {
|
|
link_to = options['link-to'];
|
|
}
|
|
if ( options['url-params'] ) {
|
|
url_params = options['url-params'];
|
|
}
|
|
if ( options['on-select-callback'] ) {
|
|
on_select_callback = options['on-select-callback'];
|
|
}
|
|
}
|
|
const search_fields = ['me.surname', 'me.firstname', 'me.cardnumber'];
|
|
return node.autocomplete({
|
|
source: function( request, response ) {
|
|
let subquery_and = [];
|
|
request.term.split(' ')
|
|
.filter(function(s){ return s.length })
|
|
.forEach(function(pattern,i){
|
|
subquery_and.push(
|
|
[
|
|
{'me.surname': {'like': '%' + pattern + '%'}},
|
|
{'me.firstname': {'like': '%' + pattern + '%'}},
|
|
{'me.cardnumber': {'like': pattern + '%'}},
|
|
]
|
|
);
|
|
});
|
|
let q = {"-and": subquery_and};
|
|
let params = {
|
|
'_page': 1,
|
|
'_per_page': 10,
|
|
'q': JSON.stringify(q),
|
|
'_order_by': '+me.surname,+me.firstname',
|
|
};
|
|
$.ajax({
|
|
data: params,
|
|
type: 'GET',
|
|
url: '/api/v1/patrons',
|
|
headers: {
|
|
"x-koha-embed": "library"
|
|
},
|
|
success: function(data) {
|
|
return response(data);
|
|
},
|
|
error: function(e) {
|
|
if ( e.state() != 'rejected' ) {
|
|
alert( _("An error occurred. Check the logs") );
|
|
}
|
|
return response();
|
|
}
|
|
});
|
|
},
|
|
minLength: 3,
|
|
select: function( event, ui ) {
|
|
if ( ui.item.link ) {
|
|
window.location.href = ui.item.link;
|
|
} else if ( on_select_callback ) {
|
|
return on_select_callback(event, ui);
|
|
}
|
|
},
|
|
focus: function( event, ui ) {
|
|
event.preventDefault(); // Don't replace the text field
|
|
},
|
|
})
|
|
.data( "ui-autocomplete" )
|
|
._renderItem = function( ul, item ) {
|
|
if ( link_to ) {
|
|
item.link = link_to == 'circ'
|
|
? "/cgi-bin/koha/circ/circulation.pl"
|
|
: link_to == 'reserve'
|
|
? "/cgi-bin/koha/reserve/request.pl"
|
|
: "/cgi-bin/koha/members/moremember.pl";
|
|
item.link += ( url_params ? '?' + url_params + '&' : "?" ) + 'borrowernumber=' + item.patron_id;
|
|
} else {
|
|
item.link = null;
|
|
}
|
|
|
|
var cardnumber = "";
|
|
if( item.cardnumber != "" ){
|
|
// Display card number in parentheses if it exists
|
|
cardnumber = " (" + item.cardnumber + ") ";
|
|
}
|
|
if( item.library_id == loggedInLibrary ){
|
|
loggedInClass = "ac-currentlibrary";
|
|
} else {
|
|
loggedInClass = "";
|
|
}
|
|
return $( "<li></li>" )
|
|
.addClass( loggedInClass )
|
|
.data( "ui-autocomplete-item", item )
|
|
.append(
|
|
""
|
|
+ ( item.link ? "<a href=\"" + item.link + "\">" : "<a>" )
|
|
+ ( item.surname ? item.surname.escapeHtml() : "" ) + ", "
|
|
+ ( item.firstname ? item.firstname.escapeHtml() : "" )
|
|
+ cardnumber.escapeHtml()
|
|
+ " <small>"
|
|
+ ( item.date_of_birth
|
|
? $date(item.date_of_birth)
|
|
+ "<span class=\"age_years\"> ("
|
|
+ $get_age(item.date_of_birth)
|
|
+ " "
|
|
+ __("years")
|
|
+ ")</span>,"
|
|
: ""
|
|
) + " "
|
|
+ ( item.address ? item.address.escapeHtml() : "" ) + " "
|
|
+ ( item.city ? item.city.escapeHtml() : "" ) + " "
|
|
+ ( item.zipcode ? item.zipcode.escapeHtml() : "" ) + " "
|
|
+ ( item.country ? item.country.escapeHtml() : "" ) + " "
|
|
+ ( !singleBranchMode
|
|
?
|
|
"<span class=\"ac-library\">"
|
|
+ item.library.name.escapeHtml()
|
|
+ "</span>"
|
|
: "" )
|
|
+ "</small>"
|
|
+ "</a>" )
|
|
.appendTo( ul );
|
|
};
|
|
}
|