Replace typeahead with simpler autocomplete
This commit is contained in:
parent
2500cd516b
commit
e1f1827320
21 changed files with 119 additions and 4818 deletions
47
app/javascript/shared/autocomplete.js
Normal file
47
app/javascript/shared/autocomplete.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
import $ from 'jquery';
|
||||
import autocomplete from 'autocomplete.js';
|
||||
|
||||
const sources = [
|
||||
{
|
||||
type: 'address',
|
||||
url: '/ban/search'
|
||||
},
|
||||
{
|
||||
type: 'path',
|
||||
url: '/admin/procedures/path_list'
|
||||
}
|
||||
];
|
||||
|
||||
const options = {
|
||||
autoselect: true,
|
||||
minLength: 1
|
||||
};
|
||||
|
||||
function selector(type) {
|
||||
return `[data-autocomplete=${type}]`;
|
||||
}
|
||||
|
||||
function source(url) {
|
||||
return {
|
||||
source(query, callback) {
|
||||
$.getJSON(url, { request: query }).then(callback);
|
||||
},
|
||||
templates: {
|
||||
suggestion({ label, mine }) {
|
||||
const mineClass = `path-mine-${mine ? 'true' : 'false'}`;
|
||||
const openTag = `<div class="aa-suggestion ${mineClass}">`;
|
||||
return autocomplete.escapeHighlightedString(label, openTag, '</div>');
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
addEventListener('turbolinks:load', function() {
|
||||
for (let { type, url } of sources) {
|
||||
let select = autocomplete(selector(type), options, [source(url)]);
|
||||
select.on('autocomplete:selected', ({ target }, suggestion) => {
|
||||
$(target).trigger('autocomplete:select', suggestion);
|
||||
select.autocomplete.setVal(suggestion.label);
|
||||
});
|
||||
}
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue