Files
redmine_qbo_lineitems/assets/javascripts/autocomplete.js

67 lines
2.0 KiB
JavaScript

(function () {
window.initLineItemAutocomplete = function(context) {
let scope = context || document;
$(scope).find(".line-item-description").each(function() {
if ($(this).data("autocomplete-initialized")) return;
$(this).data("autocomplete-initialized", true);
$(this).autocomplete({
appendTo: "body",
minLength: 2,
source: function(request, response) {
$.getJSON("/items/autocomplete", { q: request.term })
.done(function(data) {
response(data.map(function(item) {
return {
label: item.text,
value: item.text,
id: item.id,
price: item.price || 0
};
}));
})
.fail(function(err){
console.error("Autocomplete error:", err);
response([]);
});
},
select: function(event, ui) {
let $input = $(this);
let row = $input.closest(".line-item");
$input.val(ui.item.value); // <-- set description
row.find(".item-id-field").val(ui.item.id);
if (ui.item.price !== undefined && row.find(".price-field").length) {
row.find(".price-field").val(ui.item.price);
}
updateLineItemTotals();
return false; // still prevent default to avoid double entry
},
change: function(event, ui) {
if (!ui.item) {
let row = $(this).closest(".line-item");
row.find(".item-id-field").val("");
}
}
});
});
};
// Clear item_id when user types manually
$(document).on("input", ".line-item-description", function(){
let row = $(this).closest(".line-item");
row.find(".item-id-field").val("");
});
function initializeAutocomplete() {
window.initLineItemAutocomplete(document);
}
$(document).ready(initializeAutocomplete);
document.addEventListener("turbo:load", initializeAutocomplete);
})();