Files
docuseal/app/controllers/submitters_autocomplete_controller.rb
T

48 lines
1.2 KiB
Ruby
Raw Normal View History

2024-03-23 23:33:42 +02:00
# 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
2026-03-01 16:14:15 +02:00
field = SELECT_COLUMNS.find { |c| c == params[:field] }
submitters = search_submitters(@submitters, field)
2024-03-23 23:33:42 +02:00
2024-12-08 01:37:20 +02:00
arel_columns = SELECT_COLUMNS.map { |col| Submitter.arel_table[col] }
2026-02-25 12:39:41 +02:00
values =
2026-03-01 16:14:15 +02:00
if field
max_ids = submitters.group(field).limit(LIMIT).select(Submitter.arel_table[:id].maximum)
2026-02-25 12:39:41 +02:00
submitters.where(id: max_ids).order(id: :desc).pluck(arel_columns)
else
submitters.limit(LIMIT).group(arel_columns).pluck(arel_columns)
end
2024-03-23 23:33:42 +02:00
attrs = values.map { |row| SELECT_COLUMNS.zip(row).to_h }
render json: attrs
end
private
2026-03-01 16:14:15 +02:00
def search_submitters(submitters, field)
if field
2025-06-21 22:52:10 +03:00
if Docuseal.fulltext_search?
2026-03-01 16:14:15 +02:00
Submitters.fulltext_search_field(current_user, submitters, params[:q], field)
2025-06-05 13:16:55 +03:00
else
2026-03-01 16:14:15 +02:00
column = Submitter.arel_table[field.to_sym]
2024-03-23 23:33:42 +02:00
2025-06-05 13:16:55 +03:00
term = "#{params[:q].downcase}%"
2024-03-23 23:33:42 +02:00
2025-06-05 13:16:55 +03:00
submitters.where(column.matches(term))
end
2024-03-23 23:33:42 +02:00
else
2025-06-05 13:16:55 +03:00
Submitters.search(current_user, submitters, params[:q])
2024-03-23 23:33:42 +02:00
end
end
end