From 8bef75e5701d9fa31bc6a5196504d8bafa5cdcf1 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Sat, 23 Mar 2024 23:33:42 +0200 Subject: [PATCH] move autocomplete controllers --- .../api/submitters_autocomplete_controller.rb | 35 ------------------- ...emplate_folders_autocomplete_controller.rb | 16 --------- .../submitters_autocomplete_controller.rb | 33 +++++++++++++++++ ...emplate_folders_autocomplete_controller.rb | 14 ++++++++ .../elements/folder_autocomplete.js | 2 +- .../elements/submitter_autocomplete.js | 2 +- config/routes.rb | 4 +-- 7 files changed, 51 insertions(+), 55 deletions(-) delete mode 100644 app/controllers/api/submitters_autocomplete_controller.rb delete mode 100644 app/controllers/api/template_folders_autocomplete_controller.rb create mode 100644 app/controllers/submitters_autocomplete_controller.rb create mode 100644 app/controllers/template_folders_autocomplete_controller.rb diff --git a/app/controllers/api/submitters_autocomplete_controller.rb b/app/controllers/api/submitters_autocomplete_controller.rb deleted file mode 100644 index e28e25c7..00000000 --- a/app/controllers/api/submitters_autocomplete_controller.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module Api - class SubmittersAutocompleteController < ApiBaseController - load_and_authorize_resource :submitter, parent: false - - SELECT_COLUMNS = %w[email phone name].freeze - LIMIT = 100 - - def index - submitters = search_submitters(@submitters) - - values = submitters.limit(LIMIT).group(SELECT_COLUMNS.join(', ')).pluck(SELECT_COLUMNS.join(', ')) - - attrs = values.map { |row| SELECT_COLUMNS.zip(row).to_h } - attrs = attrs.uniq { |e| e[params[:field]] } if params[:field].present? - - render json: attrs - end - - private - - def search_submitters(submitters) - if SELECT_COLUMNS.include?(params[:field]) - column = Submitter.arel_table[params[:field].to_sym] - - term = "#{params[:q].downcase}%" - - submitters.where(column.matches(term, false, true)) - else - Submitters.search(submitters, params[:q]) - end - end - end -end diff --git a/app/controllers/api/template_folders_autocomplete_controller.rb b/app/controllers/api/template_folders_autocomplete_controller.rb deleted file mode 100644 index 39d1a27e..00000000 --- a/app/controllers/api/template_folders_autocomplete_controller.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -module Api - class TemplateFoldersAutocompleteController < ApiBaseController - load_and_authorize_resource :template_folder, parent: false - - LIMIT = 100 - - def index - template_folders = @template_folders.joins(:templates).where(templates: { archived_at: nil }).distinct - template_folders = TemplateFolders.search(template_folders, params[:q]).limit(LIMIT) - - render json: template_folders.as_json(only: %i[name archived_at]) - end - end -end diff --git a/app/controllers/submitters_autocomplete_controller.rb b/app/controllers/submitters_autocomplete_controller.rb new file mode 100644 index 00000000..79816ee4 --- /dev/null +++ b/app/controllers/submitters_autocomplete_controller.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class SubmittersAutocompleteController < ApplicationController + load_and_authorize_resource :submitter, parent: false + + SELECT_COLUMNS = %w[email phone name].freeze + LIMIT = 100 + + def index + submitters = search_submitters(@submitters) + + values = submitters.limit(LIMIT).group(SELECT_COLUMNS.join(', ')).pluck(SELECT_COLUMNS.join(', ')) + + attrs = values.map { |row| SELECT_COLUMNS.zip(row).to_h } + attrs = attrs.uniq { |e| e[params[:field]] } if params[:field].present? + + render json: attrs + end + + private + + def search_submitters(submitters) + if SELECT_COLUMNS.include?(params[:field]) + column = Submitter.arel_table[params[:field].to_sym] + + term = "#{params[:q].downcase}%" + + submitters.where(column.matches(term, false, true)) + else + Submitters.search(submitters, params[:q]) + end + end +end diff --git a/app/controllers/template_folders_autocomplete_controller.rb b/app/controllers/template_folders_autocomplete_controller.rb new file mode 100644 index 00000000..c3b621bc --- /dev/null +++ b/app/controllers/template_folders_autocomplete_controller.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class TemplateFoldersAutocompleteController < ApplicationController + load_and_authorize_resource :template_folder, parent: false + + LIMIT = 100 + + def index + template_folders = @template_folders.joins(:templates).where(templates: { archived_at: nil }).distinct + template_folders = TemplateFolders.search(template_folders, params[:q]).limit(LIMIT) + + render json: template_folders.as_json(only: %i[name archived_at]) + end +end diff --git a/app/javascript/elements/folder_autocomplete.js b/app/javascript/elements/folder_autocomplete.js index 2c4a1fe0..2ef977c5 100644 --- a/app/javascript/elements/folder_autocomplete.js +++ b/app/javascript/elements/folder_autocomplete.js @@ -20,7 +20,7 @@ export default class extends HTMLElement { fetch = (text, resolve) => { const queryParams = new URLSearchParams({ q: text }) - fetch('/api/template_folders_autocomplete?' + queryParams).then(async (resp) => { + fetch('/template_folders_autocomplete?' + queryParams).then(async (resp) => { const items = await resp.json() resolve(items) diff --git a/app/javascript/elements/submitter_autocomplete.js b/app/javascript/elements/submitter_autocomplete.js index d13f3014..80df1dea 100644 --- a/app/javascript/elements/submitter_autocomplete.js +++ b/app/javascript/elements/submitter_autocomplete.js @@ -40,7 +40,7 @@ export default class extends HTMLElement { if (q) { const queryParams = new URLSearchParams({ q, field: this.dataset.field }) - this.currentFetch ||= fetch('/api/submitters_autocomplete?' + queryParams) + this.currentFetch ||= fetch('/submitters_autocomplete?' + queryParams) this.currentFetch.then(async (resp) => { const items = await resp.json() diff --git a/config/routes.rb b/config/routes.rb index 508ff7ba..85b36d91 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -24,8 +24,6 @@ Rails.application.routes.draw do namespace :api, defaults: { format: :json } do resources :attachments, only: %i[create] - resources :submitters_autocomplete, only: %i[index] - resources :template_folders_autocomplete, only: %i[index] resources :submitter_email_clicks, only: %i[create] resources :submitter_form_views, only: %i[create] resources :submitters, only: %i[index show update] @@ -57,6 +55,8 @@ Rails.application.routes.draw do resources :upgrade, only: %i[index], controller: 'console_redirect' resource :testing_account, only: %i[show destroy] resources :testing_api_settings, only: %i[index] + resources :submitters_autocomplete, only: %i[index] + resources :template_folders_autocomplete, only: %i[index] resource :templates_upload, only: %i[create] authenticated do resource :templates_upload, only: %i[show], path: 'new'