From 6ca44a5cc3dadd93518ef29bed5649a4bcce0cbe Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 27 Feb 2024 15:20:34 +0200 Subject: [PATCH] optimize autocomplete --- app/controllers/api/submitters_autocomplete_controller.rb | 4 ++-- app/javascript/elements/submitter_autocomplete.js | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/submitters_autocomplete_controller.rb b/app/controllers/api/submitters_autocomplete_controller.rb index ff7dc2e6..e28e25c7 100644 --- a/app/controllers/api/submitters_autocomplete_controller.rb +++ b/app/controllers/api/submitters_autocomplete_controller.rb @@ -24,9 +24,9 @@ module Api if SELECT_COLUMNS.include?(params[:field]) column = Submitter.arel_table[params[:field].to_sym] - term = "%#{params[:q].downcase}%" + term = "#{params[:q].downcase}%" - submitters.where(column.lower.matches(term)) + submitters.where(column.matches(term, false, true)) else Submitters.search(submitters, params[:q]) end diff --git a/app/javascript/elements/submitter_autocomplete.js b/app/javascript/elements/submitter_autocomplete.js index e5820d8e..ce9adfc7 100644 --- a/app/javascript/elements/submitter_autocomplete.js +++ b/app/javascript/elements/submitter_autocomplete.js @@ -37,7 +37,9 @@ export default class extends HTMLElement { if (q) { const queryParams = new URLSearchParams({ q, field: this.dataset.field }) - fetch('/api/submitters_autocomplete?' + queryParams).then(async (resp) => { + this.currentFetch ||= fetch('/api/submitters_autocomplete?' + queryParams) + + this.currentFetch.then(async (resp) => { const items = await resp.json() if (q.length < 3) { @@ -47,6 +49,8 @@ export default class extends HTMLElement { } }).catch(() => { resolve([]) + }).finally(() => { + this.currentFetch = null }) } else { resolve([])