mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
# 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)
|
|
|
|
arel_columns = SELECT_COLUMNS.map { |col| Submitter.arel_table[col] }
|
|
values = submitters.limit(LIMIT).group(arel_columns).pluck(arel_columns)
|
|
|
|
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])
|
|
if Docuseal.fulltext_search?
|
|
Submitters.fulltext_search_field(current_user, submitters, params[:q], params[:field])
|
|
else
|
|
column = Submitter.arel_table[params[:field].to_sym]
|
|
|
|
term = "#{params[:q].downcase}%"
|
|
|
|
submitters.where(column.matches(term))
|
|
end
|
|
else
|
|
Submitters.search(current_user, submitters, params[:q])
|
|
end
|
|
end
|
|
end
|